Remove xcalloc() and convert its callers to xzalloc(). About half of them were using "1" as one of the arguments anyway, and as for the rest a multiply and a push isn't noticeably bigger than pushing two arguments on the stack.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -135,7 +135,7 @@ static void cut_line_by_chars(const char *line) | |
| { | |
| int c, l; | |
| /* set up a list so we can keep track of what's been printed */ | |
| - | char *printed = xcalloc(strlen(line), sizeof(char)); |
| + | char *printed = xzalloc(strlen(line)); |
| /* print the chars specified in each cut list */ | |
| for (c = 0; c < nlists; c++) { | |
| @@ -172,7 +172,7 @@ static void cut_line_by_fields(char *line) | |
| } | |
| /* set up a list so we can keep track of what's been printed */ | |
| - | printed = xcalloc(strlen(line), sizeof(char)); |
| + | printed = xzalloc(strlen(line)); |
| /* process each list on this line, for as long as we've got a line to process */ | |
| for (c = 0; c < nlists && line; c++) { | |
| @@ -300,7 +300,7 @@ static struct dnode **dnalloc(int num) | |
| if (num < 1) | |
| return (NULL); | |
| - | p = (struct dnode **) xcalloc((size_t) num, (size_t) (sizeof(struct dnode *))); |
| + | p = (struct dnode **) xzalloc(num * sizeof(struct dnode *)); |
| return (p); | |
| } | |
| @@ -120,7 +120,7 @@ static struct sort_key *add_key(void) | |
| { | |
| struct sort_key **pkey=&key_list; | |
| while(*pkey) pkey=&((*pkey)->next_key); | |
| - | return *pkey=xcalloc(1,sizeof(struct sort_key)); |
| + | return *pkey = xzalloc(sizeof(struct sort_key)); |
| } | |
| #define GET_LINE(fp) (global_flags&FLAG_z) ? bb_get_chunk_from_file(fp,NULL) \ | |
| @@ -877,8 +877,8 @@ static void compile_fs_type(char *fs_type, struct fs_type_compile *cmp) | |
| } | |
| } | |
| - | cmp->list = xcalloc(num, sizeof(char *)); |
| - | cmp->type = xcalloc(num, sizeof(int)); |
| + | cmp->list = xzalloc(num * sizeof(char *)); |
| + | cmp->type = xzalloc(num * sizeof(int)); |
| cmp->negate = 0; | |
| if (!fs_type) | |
| @@ -401,7 +401,7 @@ static errcode_t zero_blocks(ext2_filsys fs, blk_t blk, int num, | |
| } | |
| /* Allocate the zeroizing buffer if necessary */ | |
| if (!buf) { | |
| - | buf = xcalloc(fs->blocksize, STRIDE_LENGTH); |
| + | buf = xzalloc(fs->blocksize * STRIDE_LENGTH); |
| } | |
| /* OK, do the write loop */ | |
| next_update = 0; | |
| @@ -321,7 +321,7 @@ int grep_main(int argc, char **argv) | |
| lines_before = 0; | |
| lines_after = 0; | |
| } else if(lines_before > 0) | |
| - | before_buf = (char **)xcalloc(lines_before, sizeof(char *)); |
| + | before_buf = (char **)xzalloc(lines_before * sizeof(char *)); |
| } | |
| #else | |
| /* with auto sanity checks */ | |
| @@ -503,7 +503,7 @@ int xargs_main(int argc, char **argv) | |
| /* allocating pointers for execvp: | |
| a*arg, n*arg from stdin, NULL */ | |
| - | args = xcalloc(n + a + 1, sizeof(char *)); |
| + | args = xzalloc((n + a + 1) * sizeof(char *)); |
| /* Store the command to be executed | |
| (taken from the command line) */ | |
| @@ -230,7 +230,6 @@ void run_applet_by_name(const char *name, int argc, char **argv); | |
| extern void *xmalloc(size_t size); | |
| extern void *xrealloc(void *old, size_t size); | |
| extern void *xzalloc(size_t size); | |
| - | extern void *xcalloc(size_t nmemb, size_t size); |
| extern char *xstrdup (const char *s); | |
| extern char *xstrndup (const char *s, int n); | |
| @@ -41,15 +41,6 @@ void *xzalloc(size_t size) | |
| } | |
| #endif | |
| - | #ifdef L_xcalloc |
| - | void *xcalloc(size_t nmemb, size_t size) |
| - | { |
| - | void *ptr = calloc(nmemb, size); |
| - | if (ptr == NULL && nmemb != 0 && size != 0) |
| - | bb_error_msg_and_die(bb_msg_memory_exhausted); |
| - | return ptr; |
| - | } |
| - | #endif |
| #endif /* DMALLOC */ | |
| #ifdef L_xstrdup | |
| @@ -3490,7 +3490,7 @@ static struct obj_file *obj_load(FILE * fp, int loadprogbits) | |
| /* Allocate space for a table of local symbols. */ | |
| j = f->local_symtab_size = sec->header.sh_info; | |
| - | f->local_symtab = xcalloc(j, sizeof(struct obj_symbol *)); |
| + | f->local_symtab = xzalloc(j * sizeof(struct obj_symbol *)); |
| /* Insert all symbols into the hash table. */ | |
| for (j = 1, ++sym; j < nsym; ++j, ++sym) { | |
| @@ -294,10 +294,10 @@ static void include_conf ( struct dep_t **first, struct dep_t **current, char *b | |
| if ( parse_tag_value ( buffer + 6, &alias, &mod )) { | |
| /* handle alias as a module dependent on the aliased module */ | |
| if ( !*current ) { | |
| - | (*first) = (*current) = (struct dep_t *) xcalloc ( 1, sizeof ( struct dep_t )); |
| + | (*first) = (*current) = (struct dep_t *) xzalloc (sizeof ( struct dep_t )); |
| } | |
| else { | |
| - | (*current)-> m_next = (struct dep_t *) xcalloc ( 1, sizeof ( struct dep_t )); |
| + | (*current)-> m_next = (struct dep_t *) xzalloc (sizeof ( struct dep_t )); |
| (*current) = (*current)-> m_next; | |
| } | |
| (*current)-> m_name = xstrdup ( alias ); | |
| @@ -1929,7 +1929,7 @@ int httpd_main(int argc, char *argv[]) | |
| USE_FEATURE_HTTPD_AUTH_MD5(const char *pass;) | |
| - | config = xcalloc(1, sizeof(*config)); |
| + | config = xzalloc(sizeof(*config)); |
| #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH | |
| config->realm = "Web Server Authentication"; | |
| #endif | |
| @@ -375,7 +375,7 @@ ifaddrlist(struct IFADDRLIST **ipaddrp) | |
| ifend = (struct ifreq *)((char *)ibuf + ifc.ifc_len); | |
| nipaddr = 1 + (ifc.ifc_len / sizeof(struct ifreq)); | |
| - | st_ifaddrlist = xcalloc(nipaddr, sizeof(struct IFADDRLIST)); |
| + | st_ifaddrlist = xzalloc(nipaddr * sizeof(struct IFADDRLIST)); |
| al = st_ifaddrlist; | |
| nipaddr = 0; | |
| @@ -872,12 +872,12 @@ gethostinfo(const char *host) | |
| char **p; | |
| u_int32_t addr, *ap; | |
| - | hi = xcalloc(1, sizeof(*hi)); |
| + | hi = xzalloc(sizeof(*hi)); |
| addr = inet_addr(host); | |
| if ((int32_t)addr != -1) { | |
| hi->name = xstrdup(host); | |
| hi->n = 1; | |
| - | hi->addrs = xcalloc(1, sizeof(hi->addrs[0])); |
| + | hi->addrs = xzalloc(sizeof(hi->addrs[0])); |
| hi->addrs[0] = addr; | |
| return hi; | |
| } | |
| @@ -889,7 +889,7 @@ gethostinfo(const char *host) | |
| for (n = 0, p = hp->h_addr_list; *p != NULL; ++n, ++p) | |
| continue; | |
| hi->n = n; | |
| - | hi->addrs = xcalloc(n, sizeof(hi->addrs[0])); |
| + | hi->addrs = xzalloc(n * sizeof(hi->addrs[0])); |
| for (ap = hi->addrs, p = hp->h_addr_list; *p != NULL; ++ap, ++p) | |
| memcpy(ap, *p, sizeof(*ap)); | |
| return hi; | |
| @@ -1161,7 +1161,7 @@ traceroute_main(int argc, char *argv[]) | |
| xsetgid(getgid()); | |
| xsetuid(getuid()); | |
| - | outip = (struct ip *)xcalloc(1, (unsigned)packlen); |
| + | outip = (struct ip *)xzalloc(packlen); |
| outip->ip_v = IPVERSION; | |
| if (tos_str) | |
| @@ -311,7 +311,7 @@ static void parse_prompt(const char *prmt_ptr) | |
| int prmt_len = 0; | |
| size_t cur_prmt_len = 0; | |
| char flg_not_length = '['; | |
| - | char *prmt_mem_ptr = xcalloc(1, 1); |
| + | char *prmt_mem_ptr = xzalloc(1); |
| char *pwd_buf = xgetcwd(0); | |
| char buf2[PATH_MAX + 1]; | |
| char buf[2]; | |
| @@ -344,7 +344,7 @@ static void parse_prompt(const char *prmt_ptr) | |
| case 'h': | |
| pbuf = hostname_buf; | |
| if (pbuf == 0) { | |
| - | pbuf = xcalloc(256, 1); |
| + | pbuf = xzalloc(256); |
| if (gethostname(pbuf, 255) < 0) { | |
| strcpy(pbuf, "?"); | |
| } else { | |
| @@ -5162,7 +5162,7 @@ add_partition(int n, int sys) | |
| ext_index = n; | |
| pen->ext_pointer = p; | |
| pe4->offset = extended_offset = start; | |
| - | pe4->sectorbuffer = xcalloc(1, sector_size); |
| + | pe4->sectorbuffer = xzalloc(sector_size); |
| pe4->part_table = pt_offset(pe4->sectorbuffer, 0); | |
| pe4->ext_pointer = pe4->part_table + 1; | |
| pe4->changed = 1; | |
| @@ -5176,7 +5176,7 @@ add_logical(void) | |
| if (partitions > 5 || ptes[4].part_table->sys_ind) { | |
| struct pte *pe = &ptes[partitions]; | |
| - | pe->sectorbuffer = xcalloc(1, sector_size); |
| + | pe->sectorbuffer = xzalloc(sector_size); |
| pe->part_table = pt_offset(pe->sectorbuffer, 0); | |
| pe->ext_pointer = pe->part_table + 1; | |
| pe->offset = 0; | |