tar: incremental 'X' follows --one-top-level

* src/incremen.c (purge_directory):
Also respect --one-top-level when handling 'X'.
This commit is contained in:
Paul Eggert
2026-04-08 09:07:12 -07:00
parent 67c8dff696
commit 79d61af0e1
+11 -2
View File
@@ -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);