diff options
-rw-r--r-- | miscutils/make.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/miscutils/make.c b/miscutils/make.c index 8c74d7113..871c434f8 100644 --- a/miscutils/make.c +++ b/miscutils/make.c | |||
@@ -462,15 +462,24 @@ newcmd(struct cmd **cphead, char *str) | |||
462 | /*(*cphead)->c_next = NULL; - xzalloc did it */ | 462 | /*(*cphead)->c_next = NULL; - xzalloc did it */ |
463 | (*cphead)->c_cmd = xstrdup(str); | 463 | (*cphead)->c_cmd = xstrdup(str); |
464 | /*(*cphead)->c_refcnt = 0; */ | 464 | /*(*cphead)->c_refcnt = 0; */ |
465 | (*cphead)->c_makefile = makefile; | 465 | if (makefile) |
466 | (*cphead)->c_makefile = xstrdup(makefile); | ||
466 | (*cphead)->c_dispno = dispno; | 467 | (*cphead)->c_dispno = dispno; |
467 | } | 468 | } |
468 | 469 | ||
469 | static void | 470 | static void |
470 | freecmds(struct cmd *cp) | 471 | freecmds(struct cmd *cp) |
471 | { | 472 | { |
472 | if (cp && --cp->c_refcnt <= 0) | 473 | struct cmd *nextcp; |
473 | llist_free((llist_t *)cp, free); | 474 | |
475 | if (cp && --cp->c_refcnt <= 0) { | ||
476 | for (; cp; cp = nextcp) { | ||
477 | nextcp = cp->c_next; | ||
478 | free(cp->c_cmd); | ||
479 | free((void *)cp->c_makefile); | ||
480 | free(cp); | ||
481 | } | ||
482 | } | ||
474 | } | 483 | } |
475 | 484 | ||
476 | static struct name * | 485 | static struct name * |