diff -urN tar-1.13.25.old/src/common.h tar-1.13.25/src/common.h --- tar-1.13.25.old/src/common.h 2001-09-20 20:00:55.000000000 -0400 +++ tar-1.13.25/src/common.h 2002-09-13 20:20:04.000000000 -0400 @@ -547,6 +547,7 @@ void init_names PARAMS ((void)); void name_add PARAMS ((const char *)); +void name_dyn_add PARAMS ((char *)); void name_init PARAMS ((int, char *const *)); void name_term PARAMS ((void)); char *name_next PARAMS ((int)); diff -urN tar-1.13.25.old/src/names.c tar-1.13.25/src/names.c --- tar-1.13.25.old/src/names.c 2001-08-29 17:33:54.000000000 -0400 +++ tar-1.13.25/src/names.c 2002-09-13 20:20:04.000000000 -0400 @@ -183,7 +183,9 @@ static struct name *namelist; /* first name in list, if any */ static struct name **nametail = &namelist; /* end of name list */ static const char **name_array; /* store an array of names */ +static char **name_dyn_array; /* names that need to be freed */ static int allocated_names; /* how big is the array? */ +static int dyn_names; /* how many in dyn_array? */ static int names; /* how many entries does it have? */ static int name_index; /* how many of the entries have we scanned? */ @@ -193,7 +195,18 @@ { allocated_names = 10; name_array = xmalloc (sizeof (const char *) * allocated_names); + name_dyn_array=NULL; names = 0; + dyn_names=0; +} + +/* Add NAME to the list of names to be freed when name_term is called */ +void +dyn_name_add (char *name) +{ + name_dyn_array = + xrealloc(name_dyn_array, sizeof (const char *) * dyn_names+1); + name_dyn_array[dyn_names++]=name; } /* Add NAME at end of name_array, reallocating it as necessary. */ @@ -248,8 +261,12 @@ void name_term (void) { + int i; + for (i=0; i