X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/74db1f1498083aeb5b338f775b147ae6764f56f3..544108829843565858514f79cf62e7b9f54f9147:/flist.c diff --git a/flist.c b/flist.c index d08f1e35..a51413ab 100644 --- a/flist.c +++ b/flist.c @@ -26,7 +26,6 @@ #include "io.h" extern int verbose; -extern int list_only; extern int am_root; extern int am_server; extern int am_daemon; @@ -172,35 +171,6 @@ void show_flist_stats(void) /* Nothing yet */ } -static void list_file_entry(struct file_struct *f) -{ - char permbuf[PERMSTRING_SIZE]; - double len; - - if (!F_IS_ACTIVE(f)) { - /* this can happen if duplicate names were removed */ - return; - } - - permstring(permbuf, f->mode); - len = F_LENGTH(f); - - /* TODO: indicate '+' if the entry has an ACL. */ - -#ifdef SUPPORT_LINKS - if (preserve_links && S_ISLNK(f->mode)) { - rprintf(FINFO, "%s %11.0f %s %s -> %s\n", - permbuf, len, timestring(f->modtime), - f_name(f, NULL), F_SYMLINK(f)); - } else -#endif - { - rprintf(FINFO, "%s %11.0f %s %s\n", - permbuf, len, timestring(f->modtime), - f_name(f, NULL)); - } -} - /* Stat either a symlink or its referent, depending on the settings of * copy_links, copy_unsafe_links, etc. Returns -1 on error, 0 on success. * @@ -1525,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; @@ -1578,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; @@ -1614,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... */ @@ -1652,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) @@ -2178,12 +2150,6 @@ struct file_list *recv_file_list(int f) if (verbose > 3) output_flist(flist); - if (list_only) { - int i; - for (i = flist->low; i <= flist->high; i++) - list_file_entry(flist->files[i]); - } - if (verbose > 2) rprintf(FINFO, "recv_file_list done\n");