X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3d38277706a5155d57563d1221e7233d8159470a..efe3037cf5cfba379cffb4068775c75b5b0172db:/flist.c diff --git a/flist.c b/flist.c index e102076e..cda35082 100644 --- a/flist.c +++ b/flist.c @@ -55,7 +55,7 @@ static struct file_struct null_file; static void clean_flist(struct file_list *flist, int strip_root); -struct string_area *string_area_new(int size) +static struct string_area *string_area_new(int size) { struct string_area *a; @@ -65,12 +65,12 @@ struct string_area *string_area_new(int size) a->current = a->base = malloc(size); if (!a->current) out_of_memory("string_area_new buffer"); a->end = a->base + size; - a->next = 0; + a->next = NULL; return a; } -void string_area_free(struct string_area *a) +static void string_area_free(struct string_area *a) { struct string_area *next; @@ -80,7 +80,7 @@ void string_area_free(struct string_area *a) } } -char *string_area_malloc(struct string_area **ap, int size) +static char *string_area_malloc(struct string_area **ap, int size) { char *p; struct string_area *a; @@ -100,7 +100,7 @@ char *string_area_malloc(struct string_area **ap, int size) return p; } -char *string_area_strdup(struct string_area **ap, const char *src) +static char *string_area_strdup(struct string_area **ap, const char *src) { char* dest = string_area_malloc(ap, strlen(src) + 1); return strcpy(dest, src); @@ -185,8 +185,6 @@ int link_stat(const char *Path, STRUCT_STAT *Buffer) static int match_file_name(char *fname,STRUCT_STAT *st) { if (check_exclude(fname,local_exclude_list,st)) { - if (verbose > 2) - rprintf(FINFO,"excluding file %s\n",fname); return 0; } return 1; @@ -205,7 +203,7 @@ static void set_filesystem(char *fname) static int to_wire_mode(mode_t mode) { - if (S_ISLNK(mode) && (S_IFLNK != 0120000)) { + if (S_ISLNK(mode) && (_S_IFLNK != 0120000)) { return (mode & ~(_S_IFMT)) | 0120000; } return (int)mode; @@ -213,8 +211,8 @@ static int to_wire_mode(mode_t mode) static mode_t from_wire_mode(int mode) { - if ((mode & (_S_IFMT)) == 0120000 && (S_IFLNK != 0120000)) { - return (mode & ~(_S_IFMT)) | S_IFLNK; + if ((mode & (_S_IFMT)) == 0120000 && (_S_IFLNK != 0120000)) { + return (mode & ~(_S_IFMT)) | _S_IFLNK; } return (mode_t)mode; } @@ -469,7 +467,8 @@ static int skip_filesystem(char *fname, STRUCT_STAT *st) #define MALLOC(ap, i) (ap ? string_area_malloc(ap, i) : malloc(i)) /* create a file_struct for a named file */ -struct file_struct *make_file(int f, char *fname, struct string_area **ap) +struct file_struct *make_file(int f, char *fname, struct string_area **ap, + int noexcludes) { struct file_struct *file; STRUCT_STAT st; @@ -478,6 +477,7 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap) char cleaned_name[MAXPATHLEN]; char linkbuf[MAXPATHLEN]; extern int delete_excluded; + extern int module_id; strlcpy(cleaned_name, fname, MAXPATHLEN); cleaned_name[MAXPATHLEN-1] = 0; @@ -496,6 +496,9 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap) return NULL; } + /* we use noexcludes from backup.c */ + if (noexcludes) goto skip_excludes; + if (S_ISDIR(st.st_mode) && !recurse) { rprintf(FINFO,"skipping directory %s\n",fname); return NULL; @@ -509,7 +512,13 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap) /* f is set to -1 when calculating deletion file list */ if (((f != -1) || !delete_excluded) && !match_file_name(fname,&st)) return NULL; - + + + if (lp_ignore_nonreadable(module_id) && access(fname, R_OK) != 0) + return NULL; + + skip_excludes: + if (verbose > 2) rprintf(FINFO,"make_file(%d,%s)\n",f,fname); @@ -523,7 +532,7 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap) if (lastdir && strcmp(fname, lastdir)==0) { file->dirname = lastdir; } else { - file->dirname = STRDUP(ap, fname); + file->dirname = strdup(fname); lastdir = file->dirname; } file->basename = STRDUP(ap, p+1); @@ -568,7 +577,7 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap) if (lastdir && strcmp(lastdir, flist_dir)==0) { file->basedir = lastdir; } else { - file->basedir = STRDUP(ap, flist_dir); + file->basedir = strdup(flist_dir); lastdir = file->basedir; } } else { @@ -588,7 +597,7 @@ void send_file_name(int f,struct file_list *flist,char *fname, { struct file_struct *file; - file = make_file(f,fname, &flist->string_area); + file = make_file(f,fname, &flist->string_area, 0); if (!file) return; @@ -689,6 +698,8 @@ struct file_list *send_file_list(int f,int argc,char *argv[]) if (verbose && recurse && !am_server && f != -1) { rprintf(FINFO,"building file list ... "); + if (verbose > 1) + rprintf(FINFO, "\n"); rflush(FINFO); } @@ -1004,7 +1015,7 @@ struct file_list *flist_new() #if ARENA_SIZE > 0 flist->string_area = string_area_new(0); #else - flist->string_area = 0; + flist->string_area = NULL; #endif return flist; }