From 8827e7bd1b8fb835435e4466db77f61b0a066880 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Thu, 24 Nov 2016 21:06:47 +0000 Subject: params.c: Move params over to eprintf utils --- params.c | 58 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/params.c b/params.c index 6e0286c..17bf91d 100644 --- a/params.c +++ b/params.c @@ -25,9 +25,11 @@ #include #include #include +#include #include "halfkay.h" -#include "log.h" +/*#include "log.h"*/ +#include "eprintf.h" #include "params.h" #include "util.h" @@ -55,12 +57,14 @@ static void addparams(struct params *p) } if (paramc >= avail - 1) { - avail = szmul(avail, 2); - paramv = xrealloc(paramv, szmul(avail, sizeof *paramv)); + avail *= 2; + if ((unsigned)avail >= INT_MAX / 2 / sizeof *paramv) + eprintf("Too many parameter files (%d)", paramc); + paramv = erealloc(paramv, avail * sizeof *paramv); } - paramv[paramc].chip = xstrdup(p->chip); - paramv[paramc].board = p->board != NULL ? xstrdup(p->board) : NULL; + paramv[paramc].chip = estrdup(p->chip); + paramv[paramc].board = p->board != NULL ? estrdup(p->board) : NULL; paramv[paramc].fp = p->fp; paramc++; } @@ -120,19 +124,19 @@ static struct params *readparams(const char *file) f = fopen(file, "r"); if (f == NULL) { - warning(errno, EMSG_OPEN, file); + weprintf("Could not open '%s':", file); NULL; } contsz = fread(cont, 1, SZMAX_PFILE, f); if (contsz >= sizeof cont) { - warning(0, "Parameter file '%s' is longer than %zu", - file, sizeof cont - 1); + weprintf("Parameter file '%s' is longer than %zu", file, + sizeof cont - 1); contsz = sizeof cont - 1; } for (size_t i = 0; i < contsz; i++) { if (cont[i] == '\0') { - warning(0, "Parameter file '%s' contains null byte", file); + weprintf("Parameter file '%s' contains null byte", file); cont[i] = ' '; } else if (isspace(cont[i]) || !isprint(cont[i])) { cont[i] = ' '; @@ -166,14 +170,14 @@ static struct params *readparams(const char *file) board = strtok(NULL, ""); - par = xmalloc(sizeof *par); - par->chip = xstrdup(chip); - par->board = board != NULL ? xstrdup(board) : NULL; + par = emalloc(sizeof *par); + par->chip = estrdup(chip); + par->board = board != NULL ? estrdup(board) : NULL; par->fp = fp; fail: if (par == NULL) - warning(0, "Parameter file '%s' is malformed", file); + weprintf("Parameter file '%s' is malformed", file); fclose(f); return par; @@ -184,12 +188,14 @@ static char **getdirs(void) { static const char *globsuffix = "/hktool/*"; char **dirs, *xddirs, *tok; - size_t len = 0, avail = 1; + int len = 0, avail = 1; xddirs = getenv("XDG_DATA_DIRS"); if (!xddirs || !*xddirs) xddirs = "/usr/local/share:/usr/share"; - xddirs = xstrdup(xddirs); + xddirs = estrdup(xddirs); + + dirs = emalloc(sizeof *dirs); for (char *s = xddirs; tok = strtok(s, ":"), tok != NULL; s = NULL) { size_t slen; @@ -198,20 +204,24 @@ static char **getdirs(void) continue; if (len >= avail - 1) { - avail = szmul(avail, 2); - dirs = xrealloc(dirs, szmul(avail, sizeof *dirs)); + avail *= 2; + if ((unsigned)avail >= INT_MAX / 2 / sizeof *dirs) + eprintf("Too many data dirs (%d)", len); + dirs = erealloc(dirs, avail * sizeof *dirs); } - slen = szadd(strlen(tok), strlen(globsuffix)); - dirs[len] = xstrmalloc(slen); - snprintf(dirs[len], slen + 1, "%s%s", tok, globsuffix); + if (SIZE_MAX - (strlen(tok) + 1) < strlen(globsuffix)) + eprintf("Data dir too long (\"%.20s\")", tok); + slen = strlen(tok) + strlen(globsuffix) + 1; + dirs[len] = emalloc(slen); + snprintf(dirs[len], slen, "%s%s", tok, globsuffix); len++; } free(xddirs); dirs[len++] = NULL; - dirs = xrealloc(dirs, szmul(len, sizeof *dirs)); + dirs = erealloc(dirs, len * sizeof *dirs); return dirs; } @@ -242,11 +252,11 @@ static void loadparams(void) ret = glob(dirs[i], i != 0 ? GLOB_APPEND : 0, NULL, &globbuf); if (ret == GLOB_NOSPACE) - error(0, EMSG_GNOMEM); + eprintf("glob ran out of memory"); if (ret == GLOB_NOMATCH) continue; if (ret == GLOB_ABORTED) { - warning(0, "A call to glob resulted in a read error"); + weprintf("A call to glob resulted in a read error"); continue; } } @@ -324,7 +334,7 @@ int getparams(struct flashparams *fp, const char *mcufile) } } - warning(0, "'%s' is not a valid MCU name", mcufile); + weprintf("'%s' is not a valid MCU name", mcufile); return -1; } -- cgit v1.2.3-54-g00ecf