+
+ /* If the user wants to guarantee that everything is under one directory,
+ determine its name now and let it be created later. */
+ if (one_top_level_option)
+ {
+ int i;
+ char *base = base_name (archive_name_array[0]);
+
+ for (i = strlen (base) - 1; i > 2; i--)
+ if (!strncmp (base + i - 3, ".tar", 4) ||
+ !strncmp (base + i - 3, ".taz", 4) ||
+ !strncmp (base + i - 3, ".tbz", 4) ||
+ !strncmp (base + i - 3, ".tb2", 4) ||
+ !strncmp (base + i - 3, ".tgz", 4) ||
+ !strncmp (base + i - 3, ".tlz", 4) ||
+ !strncmp (base + i - 3, ".txz", 4)) break;
+
+ if (i <= 3)
+ {
+ one_top_level_option = false;
+ free (base);
+ return;
+ }
+
+ one_top_level = xmalloc (i - 2);
+ strncpy (one_top_level, base, i - 3);
+ one_top_level[i - 3] = '\0';
+ free (base);
+ }