diff options
Diffstat (limited to 'src/prc1/tmp.c')
| -rw-r--r-- | src/prc1/tmp.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/prc1/tmp.c b/src/prc1/tmp.c index 96b2208..c990216 100644 --- a/src/prc1/tmp.c +++ b/src/prc1/tmp.c @@ -1,6 +1,7 @@ #include "tmp.h" #include "dbg.h" #include "type.h" +#include "prv.h" #include <stddef.h> #include <stdio.h> #include <stdlib.h> @@ -11,7 +12,7 @@ const struct stentry *tmp_create(struct fn *fn, const struct type *t) static const char fmt[] = "__tmp%zu", path[] = "(temporary)"; int r = snprintf(NULL, 0, fmt, fn->ntmps); char *s = NULL, *tname = NULL, *pathdup = NULL; - struct tmp *tmp; + struct tmp *tmp = NULL; if (!(tname = type_name(t))) goto failure; @@ -21,20 +22,15 @@ const struct stentry *tmp_create(struct fn *fn, const struct type *t) goto failure; } else if (!(s = malloc(r + 1)) - || !(pathdup = malloc(strlen(path) + 1))) + || !(tmp = malloc(sizeof *tmp))) { perror("malloc(3)"); goto failure; } + else if (!(pathdup = sdup(path + 1))) + goto failure; snprintf(s, r + 1, fmt, fn->ntmps++); - strcpy(pathdup, path); - - if (!(tmp = malloc(sizeof *tmp))) - { - perror("realloc(3)"); - goto failure; - } *tmp = (struct tmp) { @@ -68,6 +64,7 @@ const struct stentry *tmp_create(struct fn *fn, const struct type *t) failure: free(s); + free(tmp); free(tname); free(pathdup); return NULL; |
