Macro `OOM' ("Out of memory") introduced for checking and reporting
memory allocation errors. The same macro is used in all the cases.One check was missed in original source; fixed. Signed-off-by: Van de Bugger <[email protected]> --- setxkbmap.c | 27 +++++++++------------------ 1 files changed, 9 insertions(+), 18 deletions(-) diff --git a/setxkbmap.c b/setxkbmap.c index f7dbade..7aa56f7 100644 --- a/setxkbmap.c +++ b/setxkbmap.c @@ -170,6 +170,8 @@ static int deviceSpec = XkbUseCoreKbd; #define ERR2(s,a,b) fprintf(stderr,s,a,b) #define ERR3(s,a,b,c) fprintf(stderr,s,a,b,c) +#define OOM(ptr) { if ((ptr) == NULL) { ERR("Out of memory.\n"); abort(); }; } + /***====================================================================***/ Bool addToList(list_t *list, char *newVal); @@ -215,19 +217,16 @@ addToList(list_t *list, char *newVal) list->num = 0; list->sz = 4; list->item = (char **) calloc(list->sz, sizeof(char *)); + OOM(list->item); } else if (list->num >= list->sz) { list->sz *= 2; list->item = (char **) realloc(list->item, (list->sz) * sizeof(char *)); - } - if (!list->item) - { - ERR("Internal Error! Allocation failure in add to list!\n"); - ERR(" Exiting.\n"); - exit(-1); + OOM(list->item); } list->item[list->num] = strdup(newVal); + OOM(list->item[list->num]); list->num += 1; return True; } @@ -663,8 +662,8 @@ addStringToOptions(char *opt_str, list_t *opts) char *tmp, *str, *next; Bool ok = True; - if ((str = strdup(opt_str)) == NULL) - return False; + str = strdup(opt_str); + OOM(str); for (tmp = str; (tmp && *tmp != '\0') && ok; tmp = next) { next = strchr(str, ','); @@ -700,21 +699,13 @@ stringFromOptions(char *orig, list_t *newOpts) if (orig) { orig = (char *) realloc(orig, len); - if (!orig) - { - ERR("OOM in stringFromOptions\n"); - return NULL; - } + OOM(orig); nOut = 1; } else { orig = (char *) calloc(len, 1); - if (!orig) - { - ERR("OOM in stringFromOptions\n"); - return NULL; - } + OOM(orig); nOut = 0; } for (i = 0; i < newOpts->num; i++) -- 1.7.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
