From 79d61af0e118a9368425729f624a66e1065be61e Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 8 Apr 2026 09:03:14 -0700 Subject: [PATCH] tar: incremental 'X' follows --one-top-level * src/incremen.c (purge_directory): Also respect --one-top-level when handling 'X'. --- src/incremen.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/incremen.c b/src/incremen.c index 713dcd51..923c6323 100644 --- a/src/incremen.c +++ b/src/incremen.c @@ -1649,10 +1649,19 @@ purge_directory (char const *directory_name) if (*arc == 'X') { static char const TEMP_DIR_TEMPLATE[] = "tar.XXXXXX"; + idx_t topsize + = one_top_level_dir ? strlen (one_top_level_dir) + 1 : 0; char *d = safer_name_suffix (arc + 1, false, absolute_names_option); idx_t len = strlen (d); - temp_stub = xrealloc (temp_stub, len + 1 + sizeof TEMP_DIR_TEMPLATE); - char *copy_end = mempcpy (temp_stub, d, len); + temp_stub = xrealloc (temp_stub, + topsize + len + 1 + sizeof TEMP_DIR_TEMPLATE); + char *copy_end = temp_stub; + if (topsize) + { + copy_end = mempcpy (copy_end, one_top_level_dir, topsize - 1); + *copy_end++ = '/'; + } + copy_end = mempcpy (copy_end, d, len); *copy_end = '/'; memcpy (copy_end + !ISSLASH (copy_end[-1]), TEMP_DIR_TEMPLATE, sizeof TEMP_DIR_TEMPLATE); -- 2.47.3