aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Kramkowski <tk@the-tk.com>2016-11-24 21:06:47 +0000
committerTomasz Kramkowski <tk@the-tk.com>2016-11-24 21:06:47 +0000
commit8827e7bd1b8fb835435e4466db77f61b0a066880 (patch)
treea1979489e7e810d6da54a96122a6cec38584f109
parentc4c3178f2bc2b85b1d3af928f3e841bd6eb43e35 (diff)
downloadhktool-8827e7bd1b8fb835435e4466db77f61b0a066880.tar.gz
hktool-8827e7bd1b8fb835435e4466db77f61b0a066880.tar.xz
hktool-8827e7bd1b8fb835435e4466db77f61b0a066880.zip
params.c: Move params over to eprintf utils
-rw-r--r--params.c58
1 files 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 <stdlib.h>
#include <string.h>
#include <glob.h>
+#include <limits.h>
#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;
}