diff options
| author | Tomasz Kramkowski <tk@the-tk.com> | 2016-11-24 21:06:47 +0000 | 
|---|---|---|
| committer | Tomasz Kramkowski <tk@the-tk.com> | 2016-11-24 21:06:47 +0000 | 
| commit | 8827e7bd1b8fb835435e4466db77f61b0a066880 (patch) | |
| tree | a1979489e7e810d6da54a96122a6cec38584f109 | |
| parent | c4c3178f2bc2b85b1d3af928f3e841bd6eb43e35 (diff) | |
| download | hktool-8827e7bd1b8fb835435e4466db77f61b0a066880.tar.gz hktool-8827e7bd1b8fb835435e4466db77f61b0a066880.tar.xz hktool-8827e7bd1b8fb835435e4466db77f61b0a066880.zip  | |
params.c: Move params over to eprintf utils
| -rw-r--r-- | params.c | 58 | 
1 files changed, 34 insertions, 24 deletions
@@ -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;  }  | 
