]> Dogcows Code - chaz/tar/commitdiff
Minor fixes.
authorSergey Poznyakoff <gray@gnu.org.ua>
Fri, 7 Aug 2009 19:40:06 +0000 (22:40 +0300)
committerSergey Poznyakoff <gray@gnu.org.ua>
Fri, 7 Aug 2009 20:07:01 +0000 (23:07 +0300)
* src/common.h (rebase_directory): New prototype.
* src/incremen.c (rebase_directory): Use replace_prefix.
* src/names.c (collect_and_sort_names): Abort if
hash_insert fails.

.gitignore
src/common.h
src/incremen.c
src/names.c

index 6f85d554e853ef05efac688fe32b47c0e2540199..c97869922644e8c51c0de8ceea4427df32cb4a1b 100644 (file)
@@ -16,6 +16,7 @@ Makefile
 Makefile.in
 aclocal.m4
 autom4te.cache
+build-aux
 build-aux/
 config.h
 config.h.in
index d734b640e2e66f1968504be11351bbb61b8a3c52..9905817d5cce4115e5dc5dcadd06d0490df9ac64 100644 (file)
@@ -505,7 +505,6 @@ char *dumpdir_locate (dumpdir_t dump, const char *name);
 char *dumpdir_next (dumpdir_iter_t itr);
 char *dumpdir_first (dumpdir_t dump, int all, dumpdir_iter_t *pitr);
 
-
 const char *scan_directory (char *dir_name, dev_t device, bool cmdline);
 const char *append_incremental_renames (const char *dump);
 void read_directory_file (void);
@@ -513,6 +512,9 @@ void write_directory_file (void);
 void purge_directory (char const *directory_name);
 void list_dumpdir (char *buffer, size_t size);
 void update_parent_directory (const char *name);
+void rebase_directory (const char *name, size_t old_prefix_len,
+                      const char *old_prefix,
+                      const char *new_prefix);
 
 size_t dumpdir_size (const char *p);
 bool is_dumpdir (struct tar_stat_info *stat_info);
index 564121796d7b2e8023c44580373e44c4f982fb63..f5631a142282c7639b8f76affa3e7b6972d11970 100644 (file)
@@ -399,18 +399,8 @@ rebase_directory (const char *name, size_t old_prefix_len,
 {
   struct directory *dir = find_directory (name);
   if (dir)
-    {
-      size_t len = strlen (dir->name);
-      if (len > old_prefix_len
-         && memcmp (dir->name, old_prefix, old_prefix_len) == 0)
-       {
-         char *newp = xmalloc (len - old_prefix_len + strlen (new_prefix));
-         strcpy (newp, new_prefix);
-         strcat (newp, dir->name + old_prefix_len);
-         free (dir->name);
-         dir->name = newp;
-       }
-    }
+    replace_prefix (&dir->name, old_prefix, old_prefix_len,
+                   new_prefix, strlen (new_prefix));
 }
 
 /* Return a directory entry for a given combination of device and inode
index eaa94d284aa7257c08970ff877155b1e3542e9aa..0a282b9c071f516eb6bf58e021877e063bfe6798 100644 (file)
@@ -912,9 +912,9 @@ collect_and_sort_names (void)
       read_directory_file ();
     }
   
-  for (name = namelist; name; name = next_name)
+  num_names = 0;
+  for (name = namelist; name; name = name->next, num_names++)
     {
-      next_name = name->next;
       if (name->found_count || name->dir_contents)
        continue;
       if (name->matching_flags & EXCLUDE_WILDCARDS)
@@ -934,15 +934,10 @@ collect_and_sort_names (void)
       if (S_ISDIR (statbuf.st_mode))
        {
          name->found_count++;
-         if (name->found_count == 1)
-           add_hierarchy_to_namelist (name, statbuf.st_dev, true);
+         add_hierarchy_to_namelist (name, statbuf.st_dev, true);
        }
     }
 
-  num_names = 0;
-  for (name = namelist; name; name = name->next)
-    num_names++;
-
   namelist = merge_sort (namelist, num_names, compare_names);
 
   num_names = 0;
@@ -980,7 +975,8 @@ collect_and_sort_names (void)
            }
        }
       name->found_count = 0;
-      hash_insert (nametab, name);
+      if (!hash_insert (nametab, name))
+       xalloc_die ();
       prev_name = name;
       num_names++;
     }
This page took 0.028122 seconds and 4 git commands to generate.