X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fxheader.c;h=4c728d2d9fbbe9485eda5908ec96abc2ea6d92a7;hb=bfa1bba5fde6e2e17ff7eca7e57d973bbc81e9a5;hp=8f727a9a5eb1c24f7179aad6e935b9180df5eec7;hpb=1ebdd88cafa5083c11d618af5c8a0f5fe8ecb111;p=chaz%2Ftar diff --git a/src/xheader.c b/src/xheader.c index 8f727a9..4c728d2 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -235,6 +235,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) size_t len = strlen (fmt); char *q; const char *p; + char *dirp = NULL; char *dir = NULL; char *base = NULL; char pidbuf[UINTMAX_STRSIZE_BOUND]; @@ -253,8 +254,9 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) case 'd': if (st) { - dir = safer_name_suffix (dir_name (st->orig_file_name), - false, absolute_names_option); + if (!dirp) + dirp = dir_name (st->orig_file_name); + dir = safer_name_suffix (dirp, false, absolute_names_option); len += strlen (dir) - 2; } break; @@ -328,6 +330,8 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) *q++ = *p++; } + free (dirp); + /* Do not allow it to end in a slash */ while (q > buf && ISSLASH (q[-1])) q--;