X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6a7cc46cb279b9dbf12977177330aeebb912aa34..64c3523a6f1f5d6c83571f5f7e921129af42d177:/flist.c diff --git a/flist.c b/flist.c index 8bc3ab37..efb9d440 100644 --- a/flist.c +++ b/flist.c @@ -58,7 +58,6 @@ extern int implied_dirs; extern int copy_links; extern int copy_unsafe_links; extern int protocol_version; -extern int io_error; extern int sanitize_paths; extern int read_batch; @@ -68,6 +67,8 @@ extern struct exclude_struct **exclude_list; extern struct exclude_struct **server_exclude_list; extern struct exclude_struct **local_exclude_list; +int io_error; + static struct file_struct null_file; static void clean_flist(struct file_list *flist, int strip_root, int no_dups); @@ -123,10 +124,10 @@ static struct string_area *string_area_new(int size) if (size <= 0) size = ARENA_SIZE; - a = malloc(sizeof(*a)); + a = new(struct string_area); if (!a) out_of_memory("string_area_new"); - a->current = a->base = malloc(size); + a->current = a->base = new_array(char, size); if (!a->current) out_of_memory("string_area_new buffer"); a->end = a->base + size; @@ -327,7 +328,6 @@ static char *flist_dir; static void flist_expand(struct file_list *flist) { if (flist->count >= flist->malloced) { - size_t new_bytes; void *new_ptr; if (flist->malloced < 1000) @@ -335,16 +335,19 @@ static void flist_expand(struct file_list *flist) else flist->malloced *= 2; - new_bytes = sizeof(flist->files[0]) * flist->malloced; - - if (flist->files) - new_ptr = realloc(flist->files, new_bytes); - else - new_ptr = malloc(new_bytes); + if (flist->files) { + new_ptr = realloc_array(flist->files, + struct file_struct *, + flist->malloced); + } else { + new_ptr = new_array(struct file_struct *, + flist->malloced); + } if (verbose >= 2) { rprintf(FINFO, "expand file_list to %.0f bytes, did%s move\n", - (double) new_bytes, + (double)sizeof(flist->files[0]) + * flist->malloced, (new_ptr == flist->files) ? " not" : ""); } @@ -502,7 +505,7 @@ static void receive_file_entry(struct file_struct **fptr, else l2 = read_byte(f); - file = (struct file_struct *) malloc(sizeof(*file)); + file = new(struct file_struct); if (!file) out_of_memory("receive_file_entry"); memset((char *) file, 0, sizeof(*file)); @@ -569,7 +572,7 @@ static void receive_file_entry(struct file_struct **fptr, rprintf(FERROR, "overflow: l=%d\n", l); overflow("receive_file_entry"); } - file->link = (char *) malloc(l + 1); + file->link = new_array(char, l + 1); if (!file->link) out_of_memory("receive_file_entry 2"); read_sbuf(f, file->link, l); @@ -590,7 +593,7 @@ static void receive_file_entry(struct file_struct **fptr, #endif if (always_checksum) { - file->sum = (char *) malloc(MD4_SUM_LENGTH); + file->sum = new_array(char, MD4_SUM_LENGTH); if (!file->sum) out_of_memory("md4 sum"); if (protocol_version < 21) { @@ -692,7 +695,7 @@ struct file_struct *make_file(char *fname, struct string_area **ap, return NULL; } } - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "readlink %s failed: %s\n", full_fname(fname), strerror(save_errno)); return NULL; @@ -723,7 +726,7 @@ struct file_struct *make_file(char *fname, struct string_area **ap, if (verbose > 2) rprintf(FINFO, "make_file(%s,*,%d)\n", fname, exclude_level); - file = (struct file_struct *) malloc(sizeof(*file)); + file = new(struct file_struct); if (!file) out_of_memory("make_file"); memset((char *) file, 0, sizeof(*file)); @@ -813,7 +816,7 @@ void send_file_name(int f, struct file_list *flist, char *fname, flist_expand(flist); - if (write_batch) /* dw */ + if (write_batch) file->flags = FLAG_DELETE; if (file->basename[0]) { @@ -842,7 +845,7 @@ static void send_directory(int f, struct file_list *flist, char *dir) d = opendir(dir); if (!d) { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "opendir %s failed: %s\n", full_fname(dir), strerror(errno)); return; @@ -852,7 +855,7 @@ static void send_directory(int f, struct file_list *flist, char *dir) l = strlen(fname); if (fname[l - 1] != '/') { if (l == MAXPATHLEN - 1) { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "skipping long-named directory: %s\n", full_fname(fname)); closedir(d); @@ -870,7 +873,7 @@ static void send_directory(int f, struct file_list *flist, char *dir) strcpy(p, ".cvsignore"); add_exclude_file(&exclude_list,fname,MISSING_OK,ADD_EXCLUDE); } else { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FINFO, "cannot cvs-exclude in long-named directory %s\n", full_fname(fname)); @@ -886,7 +889,7 @@ static void send_directory(int f, struct file_list *flist, char *dir) send_file_name(f, flist, fname, recurse, 0); } if (errno) { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "readdir(%s): (%d) %s\n", dir, errno, strerror(errno)); } @@ -961,7 +964,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) if (link_stat(fname, &st) != 0) { if (f != -1) { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "link_stat %s failed: %s\n", full_fname(fname), strerror(errno)); } @@ -1028,7 +1031,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) olddir = push_dir(dir, 1); if (!olddir) { - io_error = 1; + io_error |= IOERR_GENERAL; rprintf(FERROR, "push_dir %s failed: %s\n", full_fname(dir), strerror(errno)); continue; @@ -1078,7 +1081,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) io_end_buffering(); stats.flist_size = stats.total_written - start_write; stats.num_files = flist->count; - if (write_batch) /* dw */ + if (write_batch) write_batch_flist_info(flist->count, flist->files); } @@ -1101,15 +1104,13 @@ struct file_list *recv_file_list(int f) start_read = stats.total_read; - flist = (struct file_list *) malloc(sizeof(flist[0])); + flist = new(struct file_list); if (!flist) goto oom; flist->count = 0; flist->malloced = 1000; - flist->files = - (struct file_struct **) malloc(sizeof(flist->files[0]) * - flist->malloced); + flist->files = new_array(struct file_struct *, flist->malloced); if (!flist->files) goto oom; @@ -1251,7 +1252,7 @@ struct file_list *flist_new(void) { struct file_list *flist; - flist = (struct file_list *) malloc(sizeof(flist[0])); + flist = new(struct file_list); if (!flist) out_of_memory("send_file_list");