From 544108829843565858514f79cf62e7b9f54f9147 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 23 Sep 2007 14:35:12 +0000 Subject: [PATCH] Added the relnamecache structure and improved some variable names. --- flist.c | 40 +++++++++++++++++++++------------------- rsync.h | 7 ++++++- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/flist.c b/flist.c index 1452d6c6..a51413ab 100644 --- 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 b4147989..17b6a33a 100644 --- 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" -- 2.34.1