X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Futils.c;h=fa4cfdb2b3b8e5e97831407f5599327b05fa43e5;hp=515c9a08154145717082d8645aae5c5098cf6f26;hb=bdd879c997e50e6b6e14dffb746d9fe9b6a1cf6c;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa diff --git a/sbr/utils.c b/sbr/utils.c index 515c9a0..fa4cfdb 100644 --- a/sbr/utils.c +++ b/sbr/utils.c @@ -29,12 +29,14 @@ mh_xmalloc(size_t size) { void *memory; - if (size == 0) + if (size == 0) { adios(EX_SOFTWARE, NULL, "Tried to malloc 0 bytes"); + } memory = malloc(size); - if (!memory) + if (!memory) { adios(EX_OSERR, NULL, "Malloc failed"); + } return memory; } @@ -49,20 +51,40 @@ mh_xrealloc(void *ptr, size_t size) /* Some non-POSIX realloc()s don't cope with realloc(NULL,sz) */ if (!ptr) { - return mh_xmalloc(size); + return mh_xcalloc((size_t) 1, size); } - - if (size == 0) + if (size == 0) { adios(EX_SOFTWARE, NULL, "Tried to realloc 0 bytes"); + } memory = realloc(ptr, size); - if (!memory) + if (!memory) { adios(EX_OSERR, NULL, "Realloc failed"); + } return memory; } /* +** Safely call calloc +*/ +void * +mh_xcalloc(size_t nmemb, size_t size) +{ + void *memory; + + if (nmemb == 0 || size == 0) { + adios(EX_SOFTWARE, NULL, "Tried to calloc 0 bytes"); + } + + if ((memory = calloc(nmemb, size))) { + return memory; + } else { + adios(EX_OSERR, NULL, "calloc failed"); + } +} + +/* ** Return the present working directory, if the current directory does not ** exist, or is too long, make / the pwd. */ @@ -105,10 +127,12 @@ add(char *s2, char *s1) char *cp; size_t len1 = 0, len2 = 0; - if (s1) + if (s1) { len1 = strlen(s1); - if (s2) + } + if (s2) { len2 = strlen(s2); + } cp = mh_xmalloc(len1 + len2 + 1); @@ -119,8 +143,9 @@ add(char *s2, char *s1) } /* Copy s2 */ - if (s2) + if (s2) { memcpy(cp + len1, s2, len2); + } /* Now NULL terminate the string */ cp[len1 + len2] = '\0'; @@ -141,20 +166,23 @@ create_folder(char *folder, int autocreate, void (*done_callback)(int)) char *cp; if (stat(folder, &st) == -1) { - if (errno != ENOENT) + if (errno != ENOENT) { adios(EX_IOERR, folder, "error on folder"); + } if (autocreate == 0) { /* ask before creating folder */ cp = concat("Create folder \"", folder, "\"? ", NULL); - if (!getanswer(cp)) + if (!getanswer(cp)) { done_callback(EX_CANTCREAT); + } free(cp); } else if (autocreate == -1) { /* do not create, so exit */ done_callback(EX_CANTCREAT); } - if (!makedir(folder)) + if (!makedir(folder)) { adios(EX_CANTCREAT, NULL, "unable to create folder %s", folder); + } } } @@ -168,11 +196,13 @@ num_digits(int n) int ndigits = 0; /* Sanity check */ - if (n < 0) + if (n < 0) { adios(EX_SOFTWARE, NULL, "oops, num_digits called with negative value"); + } - if (n == 0) + if (n == 0) { return 1; + } while (n) { n /= 10; @@ -190,8 +220,9 @@ num_digits(int n) void app_msgarg(struct msgs_array *msgs, char *cp) { - if(msgs->size >= msgs->max) + if(msgs->size >= msgs->max) { msgs->msgs = mh_xrealloc(msgs->msgs, (msgs->max+=MAXMSGS)*sizeof(*msgs->msgs)); + } msgs->msgs[msgs->size++] = cp; }