Added the relnamecache structure and improved some variable names.
authorWayne Davison <wayned@samba.org>
Sun, 23 Sep 2007 14:35:12 +0000 (14:35 +0000)
committerWayne Davison <wayned@samba.org>
Sun, 23 Sep 2007 14:35:12 +0000 (14:35 +0000)
flist.c
rsync.h

diff --git a/flist.c b/flist.c
index 1452d6c..a51413a 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -1495,8 +1495,9 @@ static void send_implied_dirs(int f, struct file_list *flist, char *fname,
                              char *start, char *limit, int flags, int is_dot_dir)
 {
        struct file_struct *file;
-       item_list *rel_list;
-       char **ep, *slash;
+       item_list *relname_list;
+       relnamecache **rnpp;
+       char *slash;
        int len, need_new_dir;
 
        flags &= ~FLAG_XFER_DIR;
@@ -1548,23 +1549,23 @@ static void send_implied_dirs(int f, struct file_list *flist, char *fname,
                return; /* dir must have vanished */
 
        len = strlen(limit+1);
-       memcpy(&rel_list, F_DIR_RELS_P(lastpath_struct), sizeof rel_list);
-       if (!rel_list) {
-               if (!(rel_list = new0(item_list)))
+       memcpy(&relname_list, F_DIR_RELNAMES_P(lastpath_struct), sizeof relname_list);
+       if (!relname_list) {
+               if (!(relname_list = new0(item_list)))
                        out_of_memory("send_implied_dirs");
-               memcpy(F_DIR_RELS_P(lastpath_struct), &rel_list, sizeof rel_list);
+               memcpy(F_DIR_RELNAMES_P(lastpath_struct), &relname_list, sizeof relname_list);
        }
-       ep = EXPAND_ITEM_LIST(rel_list, char *, 32);
-       if (!(*ep = new_array(char, 1 + len + 1)))
+       rnpp = EXPAND_ITEM_LIST(relname_list, relnamecache *, 32);
+       if (!(*rnpp = (relnamecache*)new_array(char, sizeof (relnamecache) + len)))
                out_of_memory("send_implied_dirs");
-       **ep = is_dot_dir;
-       strlcpy(*ep + 1, limit+1, len + 1);
+       (*rnpp)->is_dot_dir = is_dot_dir;
+       strlcpy((*rnpp)->fname, limit+1, len + 1);
 }
 
 static void send1extra(int f, struct file_struct *file, struct file_list *flist)
 {
        char fbuf[MAXPATHLEN];
-       item_list *rel_list;
+       item_list *relname_list;
        int len, dlen, flags = FLAG_DIVERT_DIRS | FLAG_XFER_DIR;
        size_t j;
 
@@ -1584,17 +1585,18 @@ static void send1extra(int f, struct file_struct *file, struct file_list *flist)
        if (!relative_paths)
                return;
 
-       memcpy(&rel_list, F_DIR_RELS_P(file), sizeof rel_list);
-       if (!rel_list)
+       memcpy(&relname_list, F_DIR_RELNAMES_P(file), sizeof relname_list);
+       if (!relname_list)
                return;
 
-       for (j = 0; j < rel_list->count; j++) {
-               char *slash, *ep = ((char**)rel_list->items)[j];
-               int is_dot_dir = *ep;
+       for (j = 0; j < relname_list->count; j++) {
+               char *slash;
+               relnamecache *rnp = ((relnamecache**)relname_list->items)[j];
+               int is_dot_dir = rnp->is_dot_dir;
 
                fbuf[dlen] = '/';
-               len = strlcpy(fbuf + dlen + 1, ep+1, sizeof fbuf - dlen - 1);
-               free(ep);
+               len = strlcpy(fbuf + dlen + 1, rnp->fname, sizeof fbuf - dlen - 1);
+               free(rnp);
                if (len >= (int)sizeof fbuf)
                        continue; /* Impossible... */
 
@@ -1622,7 +1624,7 @@ static void send1extra(int f, struct file_struct *file, struct file_list *flist)
                }
        }
 
-       free(rel_list);
+       free(relname_list);
 }
 
 void send_extra_file_list(int f, int at_least)
diff --git a/rsync.h b/rsync.h
index b414798..17b6a33 100644 (file)
--- a/rsync.h
+++ b/rsync.h
@@ -625,7 +625,7 @@ extern int xattrs_ndx;
 #define F_HL_PREV(f) OPT_EXTRA(f, LEN64_BUMP(f)+inc_recurse)->num /* non-dirs */
 #define F_DIR_NODE_P(f) (&OPT_EXTRA(f, LEN64_BUMP(f) \
                                + DIRNODE_EXTRA_CNT - 1)->num) /* sender dirs */
-#define F_DIR_RELS_P(f) (&OPT_EXTRA(f, LEN64_BUMP(f) + DIRNODE_EXTRA_CNT \
+#define F_DIR_RELNAMES_P(f) (&OPT_EXTRA(f, LEN64_BUMP(f) + DIRNODE_EXTRA_CNT \
                                + PTR_EXTRA_CNT - 1)->num) /* sender dirs */
 #define F_DIR_DEFACL(f) OPT_EXTRA(f, LEN64_BUMP(f))->unum /* receiver dirs */
 #define F_DIR_DEV_P(f) (&OPT_EXTRA(f, LEN64_BUMP(f) + ACL_BUMP(f) \
@@ -813,6 +813,11 @@ typedef struct {
 #define RL_DUMP_COMMENTS (1<<1)
 #define RL_CONVERT (1<<2)
 
+typedef struct {
+       char is_dot_dir;
+       char fname[1]; /* has variable size */
+} relnamecache;
+
 #include "byteorder.h"
 #include "lib/mdigest.h"
 #include "lib/wildmatch.h"