diff --git a/eeshow/file/git-hist.c b/eeshow/file/git-hist.c index 308d76c..3e3c171 100644 --- a/eeshow/file/git-hist.c +++ b/eeshow/file/git-hist.c @@ -46,10 +46,8 @@ static struct hist *new_commit(unsigned branch) static void uplink(struct hist *down, struct hist *up) { - down->newer = realloc(down->newer, - sizeof(struct hist *) * (down->n_newer + 1)); - if (!down->newer) - diag_pfatal("realloc"); + down->newer = realloc_type_n(down->newer, struct hist *, + down->n_newer + 1); down->newer[down->n_newer++] = up; } diff --git a/eeshow/gfx/cro.c b/eeshow/gfx/cro.c index 21cbda3..91e0ed4 100644 --- a/eeshow/gfx/cro.c +++ b/eeshow/gfx/cro.c @@ -404,9 +404,7 @@ static void cr_pdf_new_sheet(void *ctx) struct cro_ctx *cc = ctx; cc->n_sheets++; - cc->sheets = realloc(cc->sheets, sizeof(struct record) * cc->n_sheets); - if (!cc->sheets) - diag_pfatal("realloc"); + cc->sheets = realloc_type_n(cc->sheets, struct record, cc->n_sheets); cc->sheets[cc->n_sheets - 1] = cc->record; record_wipe(&cc->record); } diff --git a/eeshow/gfx/fig.c b/eeshow/gfx/fig.c index fa1365c..41d4933 100644 --- a/eeshow/gfx/fig.c +++ b/eeshow/gfx/fig.c @@ -262,7 +262,7 @@ static void *fig_init(int argc, char *const *argv) if (!strchr(argv[arg], '=')) usage(*argv); n_vars++; - vars = realloc(vars, sizeof(const char *) * n_vars); + vars = realloc_type_n(vars, const char *, n_vars); vars[n_vars - 1] = argv[arg]; } diff --git a/eeshow/gfx/pdftoc.c b/eeshow/gfx/pdftoc.c index 5324823..cf45859 100644 --- a/eeshow/gfx/pdftoc.c +++ b/eeshow/gfx/pdftoc.c @@ -114,8 +114,7 @@ static void add_object(struct pdftoc *ctx, int id, int gen, unsigned pos) struct object *obj; if (id > ctx->top) { - ctx->objs = realloc(ctx->objs, - (id + 1) * sizeof(struct object)); + ctx->objs = realloc_type_n(ctx->objs, struct object, id + 1); memset(ctx->objs + ctx->top + 1 , 0, (id - ctx->top) * sizeof(struct object)); ctx->top = id; diff --git a/eeshow/kicad/ext.c b/eeshow/kicad/ext.c index 961f231..15d4e75 100644 --- a/eeshow/kicad/ext.c +++ b/eeshow/kicad/ext.c @@ -13,6 +13,7 @@ #include #include +#include "misc/util.h" #include "misc/diag.h" #include "kicad/ext.h" @@ -68,10 +69,8 @@ void classify_files(struct file_names *fn, char *const *args, break; case ext_lib: fn->n_libs++; - fn->libs = realloc(fn->libs, - fn->n_libs * sizeof(const char *)); - if (!fn->libs) - diag_pfatal("realloc"); + fn->libs = realloc_type_n(fn->libs, const char *, + fn->n_libs); fn->libs[fn->n_libs - 1] = args[i]; break; case ext_pl: diff --git a/eeshow/kicad/pl-render.c b/eeshow/kicad/pl-render.c index c3cea2a..386f719 100644 --- a/eeshow/kicad/pl-render.c +++ b/eeshow/kicad/pl-render.c @@ -109,9 +109,7 @@ static char *expand(const struct pl_ctx *pl, const char *s, break; } len = strlen(x); - res = realloc(res, size + p - s + len); - if (!res) - diag_pfatal("realloc"); + res = realloc_size(res, size + p - s + len); memcpy(res + size, s, p - s); size += p - s; s = p + 2; @@ -120,9 +118,7 @@ static char *expand(const struct pl_ctx *pl, const char *s, } len = strlen(s); - res = realloc(res, size + len + 1); - if (!res) - diag_pfatal("realloc"); + res = realloc_size(res, size + len + 1); memcpy(res + size, s, len + 1); return res; } @@ -134,9 +130,7 @@ static char *increment(char *s, int inc, const char *range) unsigned len = strlen(s); int base, n; - t = realloc(s, len + 2); - if (!t) - diag_perror("realloc"); + t = realloc_size(s, len + 2); t[len + 1] = 0; base = range[1] - range[0] + 1; diff --git a/eeshow/kicad/sch-parse.c b/eeshow/kicad/sch-parse.c index 9cc3bbd..456ad13 100644 --- a/eeshow/kicad/sch-parse.c +++ b/eeshow/kicad/sch-parse.c @@ -149,9 +149,7 @@ static bool parse_field(struct sch_ctx *ctx, const char *line) if (n == 0 && comp->comp && comp->comp->units > 1) { len = strlen(txt->s); - s = realloc((void *) txt->s, len + 3); - if (!s) - diag_pfatal("realloc"); + s = realloc_size((void *) txt->s, len + 3); if (comp->unit <= 26) sprintf(s + len, "%c", 'A' + comp->unit - 1); else diff --git a/eeshow/kicad/sexpr.c b/eeshow/kicad/sexpr.c index 0727891..6f0fd2f 100644 --- a/eeshow/kicad/sexpr.c +++ b/eeshow/kicad/sexpr.c @@ -83,9 +83,7 @@ static void add_string(struct sexpr_ctx *ctx, const char *end) if (!new) return; - e->s = realloc(e->s, old + new + 1); - if (!e->s) - diag_pfatal("realloc"); + e->s = realloc_size(e->s, old + new + 1); memcpy(e->s + old, ctx->p, new); e->s[old + new] = 0; } diff --git a/eeshow/misc/util.h b/eeshow/misc/util.h index 657c6d0..e9bc4f3 100644 --- a/eeshow/misc/util.h +++ b/eeshow/misc/util.h @@ -30,6 +30,18 @@ #define alloc_type(t) ((t *) alloc_size(sizeof(t))) #define alloc_type_n(t, n) ((t *) alloc_size(sizeof(t) * (n))) + +#define realloc_size(p, s) \ + ({ void *alloc_size_tmp = realloc((p), (s)); \ + if (!alloc_size_tmp) { \ + perror("realloc"); \ + exit(1); \ + } \ + alloc_size_tmp; }) + +#define realloc_type_n(p, t, n) ((t *) realloc_size((p), sizeof(t) * (n))) + + #define stralloc(s) \ ({ char *stralloc_tmp = strdup(s); \ if (!stralloc_tmp) { \