From 0d068a20676144e9fd6796cc77764c420d785394 Mon Sep 17 00:00:00 2001 From: Erik Andersen Date: Tue, 21 Mar 2000 22:32:57 +0000 Subject: * all mallocs now use xmalloc (and so are OOM error safe), and the common error handling saves a few bytes. Thanks to Bob Tinsley for the patch. -Erik --- Changelog | 3 +++ coreutils/date.c | 2 +- coreutils/dd.c | 6 +----- coreutils/tr.c | 5 ++--- date.c | 2 +- dd.c | 6 +----- dmesg.c | 2 +- fsck_minix.c | 35 ++++++++--------------------------- mkfs_minix.c | 10 +++------- mkswap.c | 6 ++---- sfdisk.c | 3 +-- tr.c | 5 ++--- umount.c | 3 +-- util-linux/dmesg.c | 2 +- util-linux/fsck_minix.c | 35 ++++++++--------------------------- util-linux/mkfs_minix.c | 10 +++------- util-linux/mkswap.c | 6 ++---- util-linux/umount.c | 3 +-- utility.c | 18 +++++------------- 19 files changed, 47 insertions(+), 115 deletions(-) diff --git a/Changelog b/Changelog index d81207c9d..c0ffd23cd 100644 --- a/Changelog +++ b/Changelog @@ -52,6 +52,9 @@ to match the terminal (defaults to width=79 when this is off). * Fixed mount'ing loop devices when the filesystem type was not specified. It used to revert to non-loop after the first try. + * all mallocs now use xmalloc (and so are OOM error safe), and + the common error handling saves a few bytes. Thanks to + Bob Tinsley for the patch. -Erik Andersen diff --git a/coreutils/date.c b/coreutils/date.c index b4c3e7153..652db8d74 100644 --- a/coreutils/date.c +++ b/coreutils/date.c @@ -276,7 +276,7 @@ int date_main(int argc, char **argv) } /* Print OUTPUT (after ALL that!) */ - t_buff = malloc(201); + t_buff = xmalloc(201); strftime(t_buff, 200, date_fmt, &tm_time); printf("%s\n", t_buff); diff --git a/coreutils/dd.c b/coreutils/dd.c index 0d5b3e8ab..f40dec712 100644 --- a/coreutils/dd.c +++ b/coreutils/dd.c @@ -114,11 +114,7 @@ extern int dd_main(int argc, char **argv) argv++; } - buf = malloc(blockSize); - if (buf == NULL) { - fprintf(stderr, "Cannot allocate buffer\n"); - exit(FALSE); - } + buf = xmalloc(blockSize); intotal = 0; outTotal = 0; diff --git a/coreutils/tr.c b/coreutils/tr.c index 8ac09e641..3bfa48080 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c 8.2 (Berkeley) 5/4/95"; #endif static const char rcsid[] = - "$Id: tr.c,v 1.1 2000/03/05 08:07:00 erik Exp $"; + "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $"; #endif /* not lint */ #endif /* #if 0 */ @@ -433,8 +433,7 @@ STR *s; "unknown class %s", s->str); - if ((cp->set = p = malloc((NCHARS + 1) * sizeof(int))) == NULL) - errx(1, "malloc"); + cp->set = p = xmalloc((NCHARS + 1) * sizeof(int)); bzero(p, (NCHARS + 1) * sizeof(int)); for (cnt = 0, func = cp->func; cnt < NCHARS; ++cnt) diff --git a/date.c b/date.c index b4c3e7153..652db8d74 100644 --- a/date.c +++ b/date.c @@ -276,7 +276,7 @@ int date_main(int argc, char **argv) } /* Print OUTPUT (after ALL that!) */ - t_buff = malloc(201); + t_buff = xmalloc(201); strftime(t_buff, 200, date_fmt, &tm_time); printf("%s\n", t_buff); diff --git a/dd.c b/dd.c index 0d5b3e8ab..f40dec712 100644 --- a/dd.c +++ b/dd.c @@ -114,11 +114,7 @@ extern int dd_main(int argc, char **argv) argv++; } - buf = malloc(blockSize); - if (buf == NULL) { - fprintf(stderr, "Cannot allocate buffer\n"); - exit(FALSE); - } + buf = xmalloc(blockSize); intotal = 0; outTotal = 0; diff --git a/dmesg.c b/dmesg.c index bbed8221a..2bbf43a12 100644 --- a/dmesg.c +++ b/dmesg.c @@ -95,7 +95,7 @@ int dmesg_main(int argc, char **argv) if (bufsize < 4096) bufsize = 4096; - buf = (char *) malloc(bufsize); + buf = (char *) xmalloc(bufsize); n = klogctl(cmd, buf, bufsize); if (n < 0) { goto klogctl_error; diff --git a/fsck_minix.c b/fsck_minix.c index cfa973ecf..47e81ce42 100644 --- a/fsck_minix.c +++ b/fsck_minix.c @@ -603,23 +603,13 @@ static void read_superblock(void) static void read_tables(void) { - inode_map = malloc(IMAPS * BLOCK_SIZE); - if (!inode_map) - die("Unable to allocate buffer for inode map"); - zone_map = malloc(ZMAPS * BLOCK_SIZE); - if (!inode_map) - die("Unable to allocate buffer for zone map"); + inode_map = xmalloc(IMAPS * BLOCK_SIZE); + zone_map = xmalloc(ZMAPS * BLOCK_SIZE); memset(inode_map, 0, sizeof(inode_map)); memset(zone_map, 0, sizeof(zone_map)); - inode_buffer = malloc(INODE_BUFFER_SIZE); - if (!inode_buffer) - die("Unable to allocate buffer for inodes"); - inode_count = malloc(INODES + 1); - if (!inode_count) - die("Unable to allocate buffer for inode count"); - zone_count = malloc(ZONES); - if (!zone_count) - die("Unable to allocate buffer for zone count"); + inode_buffer = xmalloc(INODE_BUFFER_SIZE); + inode_count = xmalloc(INODES + 1); + zone_count = xmalloc(ZONES); if (IMAPS * BLOCK_SIZE != read(IN, inode_map, IMAPS * BLOCK_SIZE)) die("Unable to read inode map"); if (ZMAPS * BLOCK_SIZE != read(IN, zone_map, ZMAPS * BLOCK_SIZE)) @@ -1247,18 +1237,9 @@ static void alloc_name_list(void) { int i; - name_list = malloc(sizeof(char *) * MAX_DEPTH); - if (!name_list) { - fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno)); - exit(1); - } - for (i = 0; i < MAX_DEPTH; i++) { - name_list[i] = malloc(sizeof(char) * PATH_MAX + 1); - if (!name_list[i]) { - fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno)); - exit(1); - } - } + name_list = xmalloc(sizeof(char *) * MAX_DEPTH); + for (i = 0; i < MAX_DEPTH; i++) + name_list[i] = xmalloc(sizeof(char) * PATH_MAX + 1); } /* execute this atexit() to deallocate name_list[] */ diff --git a/mkfs_minix.c b/mkfs_minix.c index 4435cb64a..1ee3d4cfa 100644 --- a/mkfs_minix.c +++ b/mkfs_minix.c @@ -530,19 +530,15 @@ static void setup_tables(void) die("unable to allocate buffers for maps"); } FIRSTZONE = NORM_FIRSTZONE; - inode_map = malloc(IMAPS * BLOCK_SIZE); - zone_map = malloc(ZMAPS * BLOCK_SIZE); - if (!inode_map || !zone_map) - die("unable to allocate buffers for maps"); + inode_map = xmalloc(IMAPS * BLOCK_SIZE); + zone_map = xmalloc(ZMAPS * BLOCK_SIZE); memset(inode_map, 0xff, IMAPS * BLOCK_SIZE); memset(zone_map, 0xff, ZMAPS * BLOCK_SIZE); for (i = FIRSTZONE; i < ZONES; i++) unmark_zone(i); for (i = MINIX_ROOT_INO; i <= INODES; i++) unmark_inode(i); - inode_buffer = malloc(INODE_BUFFER_SIZE); - if (!inode_buffer) - die("unable to allocate buffer for inodes"); + inode_buffer = xmalloc(INODE_BUFFER_SIZE); memset(inode_buffer, 0, INODE_BUFFER_SIZE); printf("%ld inodes\n", INODES); printf("%ld blocks\n", ZONES); diff --git a/mkswap.c b/mkswap.c index 130d24162..17866a735 100644 --- a/mkswap.c +++ b/mkswap.c @@ -116,7 +116,7 @@ static void init_signature_page() if (pagesize != PAGE_SIZE) fprintf(stderr, "Assuming pages of size %d\n", pagesize); #endif - signature_page = (int *) malloc(pagesize); + signature_page = (int *) xmalloc(pagesize); memset(signature_page, 0, pagesize); p = (struct swap_header_v1 *) signature_page; } @@ -230,9 +230,7 @@ void check_blocks(void) int do_seek = 1; char *buffer; - buffer = malloc(pagesize); - if (!buffer) - die("Out of memory"); + buffer = xmalloc(pagesize); current_page = 0; while (current_page < PAGES) { if (!check) { diff --git a/sfdisk.c b/sfdisk.c index f23eb5611..0a740ab17 100644 --- a/sfdisk.c +++ b/sfdisk.c @@ -300,8 +300,7 @@ static struct sector *get_sector(char *dev, int fd, unsigned long sno) if (!sseek(dev, fd, sno)) return 0; - if (!(s = (struct sector *) malloc(sizeof(struct sector)))) - fatalError("out of memory - giving up\n"); + s = (struct sector *) xmalloc(sizeof(struct sector)); if (read(fd, s->data, sizeof(s->data)) != sizeof(s->data)) { perror("read"); diff --git a/tr.c b/tr.c index 8ac09e641..3bfa48080 100644 --- a/tr.c +++ b/tr.c @@ -44,7 +44,7 @@ static char sccsid[] = "@(#)tr.c 8.2 (Berkeley) 5/4/95"; #endif static const char rcsid[] = - "$Id: tr.c,v 1.1 2000/03/05 08:07:00 erik Exp $"; + "$Id: tr.c,v 1.2 2000/03/21 22:32:57 erik Exp $"; #endif /* not lint */ #endif /* #if 0 */ @@ -433,8 +433,7 @@ STR *s; "unknown class %s", s->str); - if ((cp->set = p = malloc((NCHARS + 1) * sizeof(int))) == NULL) - errx(1, "malloc"); + cp->set = p = xmalloc((NCHARS + 1) * sizeof(int)); bzero(p, (NCHARS + 1) * sizeof(int)); for (cnt = 0, func = cp->func; cnt < NCHARS; ++cnt) diff --git a/umount.c b/umount.c index b0f393cca..6661db878 100644 --- a/umount.c +++ b/umount.c @@ -89,8 +89,7 @@ void mtab_read(void) return; } while ((e = getmntent(fp))) { - entry = malloc(sizeof(struct _mtab_entry_t)); - + entry = xmalloc(sizeof(struct _mtab_entry_t)); entry->device = strdup(e->mnt_fsname); entry->mountpt = strdup(e->mnt_dir); entry->next = mtab_cache; diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c index bbed8221a..2bbf43a12 100644 --- a/util-linux/dmesg.c +++ b/util-linux/dmesg.c @@ -95,7 +95,7 @@ int dmesg_main(int argc, char **argv) if (bufsize < 4096) bufsize = 4096; - buf = (char *) malloc(bufsize); + buf = (char *) xmalloc(bufsize); n = klogctl(cmd, buf, bufsize); if (n < 0) { goto klogctl_error; diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c index cfa973ecf..47e81ce42 100644 --- a/util-linux/fsck_minix.c +++ b/util-linux/fsck_minix.c @@ -603,23 +603,13 @@ static void read_superblock(void) static void read_tables(void) { - inode_map = malloc(IMAPS * BLOCK_SIZE); - if (!inode_map) - die("Unable to allocate buffer for inode map"); - zone_map = malloc(ZMAPS * BLOCK_SIZE); - if (!inode_map) - die("Unable to allocate buffer for zone map"); + inode_map = xmalloc(IMAPS * BLOCK_SIZE); + zone_map = xmalloc(ZMAPS * BLOCK_SIZE); memset(inode_map, 0, sizeof(inode_map)); memset(zone_map, 0, sizeof(zone_map)); - inode_buffer = malloc(INODE_BUFFER_SIZE); - if (!inode_buffer) - die("Unable to allocate buffer for inodes"); - inode_count = malloc(INODES + 1); - if (!inode_count) - die("Unable to allocate buffer for inode count"); - zone_count = malloc(ZONES); - if (!zone_count) - die("Unable to allocate buffer for zone count"); + inode_buffer = xmalloc(INODE_BUFFER_SIZE); + inode_count = xmalloc(INODES + 1); + zone_count = xmalloc(ZONES); if (IMAPS * BLOCK_SIZE != read(IN, inode_map, IMAPS * BLOCK_SIZE)) die("Unable to read inode map"); if (ZMAPS * BLOCK_SIZE != read(IN, zone_map, ZMAPS * BLOCK_SIZE)) @@ -1247,18 +1237,9 @@ static void alloc_name_list(void) { int i; - name_list = malloc(sizeof(char *) * MAX_DEPTH); - if (!name_list) { - fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno)); - exit(1); - } - for (i = 0; i < MAX_DEPTH; i++) { - name_list[i] = malloc(sizeof(char) * PATH_MAX + 1); - if (!name_list[i]) { - fprintf(stderr,"fsck_minix: name_list: %s\n", strerror(errno)); - exit(1); - } - } + name_list = xmalloc(sizeof(char *) * MAX_DEPTH); + for (i = 0; i < MAX_DEPTH; i++) + name_list[i] = xmalloc(sizeof(char) * PATH_MAX + 1); } /* execute this atexit() to deallocate name_list[] */ diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c index 4435cb64a..1ee3d4cfa 100644 --- a/util-linux/mkfs_minix.c +++ b/util-linux/mkfs_minix.c @@ -530,19 +530,15 @@ static void setup_tables(void) die("unable to allocate buffers for maps"); } FIRSTZONE = NORM_FIRSTZONE; - inode_map = malloc(IMAPS * BLOCK_SIZE); - zone_map = malloc(ZMAPS * BLOCK_SIZE); - if (!inode_map || !zone_map) - die("unable to allocate buffers for maps"); + inode_map = xmalloc(IMAPS * BLOCK_SIZE); + zone_map = xmalloc(ZMAPS * BLOCK_SIZE); memset(inode_map, 0xff, IMAPS * BLOCK_SIZE); memset(zone_map, 0xff, ZMAPS * BLOCK_SIZE); for (i = FIRSTZONE; i < ZONES; i++) unmark_zone(i); for (i = MINIX_ROOT_INO; i <= INODES; i++) unmark_inode(i); - inode_buffer = malloc(INODE_BUFFER_SIZE); - if (!inode_buffer) - die("unable to allocate buffer for inodes"); + inode_buffer = xmalloc(INODE_BUFFER_SIZE); memset(inode_buffer, 0, INODE_BUFFER_SIZE); printf("%ld inodes\n", INODES); printf("%ld blocks\n", ZONES); diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c index 130d24162..17866a735 100644 --- a/util-linux/mkswap.c +++ b/util-linux/mkswap.c @@ -116,7 +116,7 @@ static void init_signature_page() if (pagesize != PAGE_SIZE) fprintf(stderr, "Assuming pages of size %d\n", pagesize); #endif - signature_page = (int *) malloc(pagesize); + signature_page = (int *) xmalloc(pagesize); memset(signature_page, 0, pagesize); p = (struct swap_header_v1 *) signature_page; } @@ -230,9 +230,7 @@ void check_blocks(void) int do_seek = 1; char *buffer; - buffer = malloc(pagesize); - if (!buffer) - die("Out of memory"); + buffer = xmalloc(pagesize); current_page = 0; while (current_page < PAGES) { if (!check) { diff --git a/util-linux/umount.c b/util-linux/umount.c index b0f393cca..6661db878 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -89,8 +89,7 @@ void mtab_read(void) return; } while ((e = getmntent(fp))) { - entry = malloc(sizeof(struct _mtab_entry_t)); - + entry = xmalloc(sizeof(struct _mtab_entry_t)); entry->device = strdup(e->mnt_fsname); entry->mountpt = strdup(e->mnt_dir); entry->next = mtab_cache; diff --git a/utility.c b/utility.c index c274bfa15..29edbf1c4 100644 --- a/utility.c +++ b/utility.c @@ -172,9 +172,7 @@ void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name) i = hash_inode(statbuf->st_ino); s = name ? strlen(name) : 0; - bucket = malloc(sizeof(ino_dev_hashtable_bucket_t) + s); - if (bucket == NULL) - fatalError("Not enough memory."); + bucket = xmalloc(sizeof(ino_dev_hashtable_bucket_t) + s); bucket->ino = statbuf->st_ino; bucket->dev = statbuf->st_dev; if (name) @@ -1003,7 +1001,7 @@ extern int replace_match(char *haystack, char *needle, char *newNeedle, if (strcmp(needle, newNeedle) == 0) return FALSE; - oldhayStack = (char *) malloc((unsigned) (strlen(haystack))); + oldhayStack = (char *) xmalloc((unsigned) (strlen(haystack))); while (where != NULL) { foundOne++; strcpy(oldhayStack, haystack); @@ -1364,22 +1362,16 @@ extern pid_t findPidByName( char* pidName) #endif /* BB_FEATURE_USE_DEVPS_PATCH */ #endif /* BB_KILLALL || ( BB_FEATURE_LINUXRC && ( BB_HALT || BB_REBOOT || BB_POWEROFF )) */ -#if defined BB_GUNZIP \ - || defined BB_GZIP \ - || defined BB_PRINTF \ - || defined BB_TAIL +/* this should really be farmed out to libbusybox.a */ extern void *xmalloc(size_t size) { void *cp = malloc(size); - if (cp == NULL) { - errorMsg("out of memory"); - } + if (cp == NULL) + fatalError("out of memory"); return cp; } -#endif /* BB_GUNZIP || BB_GZIP || BB_PRINTF || BB_TAIL */ - #if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT) extern int vdprintf(int d, const char *format, va_list ap) { -- cgit v1.2.3