Added RERR_VANISHED.
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 7166762..6cdc050 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -123,10 +123,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 +327,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 +334,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 +504,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 +571,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 +592,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) {
@@ -693,8 +695,8 @@ struct file_struct *make_file(char *fname, struct string_area **ap,
                        }
                }
                io_error = 1;
-               rprintf(FERROR, "readlink %s: %s\n",
-                       fname, strerror(save_errno));
+               rprintf(FERROR, "readlink %s failed: %s\n",
+                       full_fname(fname), strerror(save_errno));
                return NULL;
        }
 
@@ -723,7 +725,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));
@@ -843,7 +845,8 @@ static void send_directory(int f, struct file_list *flist, char *dir)
        d = opendir(dir);
        if (!d) {
                io_error = 1;
-               rprintf(FERROR, "opendir(%s): %s\n", dir, strerror(errno));
+               rprintf(FERROR, "opendir %s failed: %s\n",
+                       full_fname(dir), strerror(errno));
                return;
        }
 
@@ -852,9 +855,8 @@ static void send_directory(int f, struct file_list *flist, char *dir)
        if (fname[l - 1] != '/') {
                if (l == MAXPATHLEN - 1) {
                        io_error = 1;
-                       rprintf(FERROR,
-                               "skipping long-named directory %s\n",
-                               fname);
+                       rprintf(FERROR, "skipping long-named directory: %s\n",
+                               full_fname(fname));
                        closedir(d);
                        return;
                }
@@ -873,18 +875,23 @@ static void send_directory(int f, struct file_list *flist, char *dir)
                        io_error = 1;
                        rprintf(FINFO,
                                "cannot cvs-exclude in long-named directory %s\n",
-                               fname);
+                               full_fname(fname));
                }
        }
 
-       for (di = readdir(d); di; di = readdir(d)) {
+       for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
                char *dname = d_name(di);
-               if (dname[0] == '.' && (dname[1] == '\0' ||
-                   (dname[1] == '.' && dname[2] == '\0')))
+               if (dname[0] == '.' && (dname[1] == '\0'
+                   || (dname[1] == '.' && dname[2] == '\0')))
                        continue;
                strlcpy(p, dname, MAXPATHLEN - l);
                send_file_name(f, flist, fname, recurse, 0);
        }
+       if (errno) {
+               io_error = 1;
+               rprintf(FERROR, "readdir(%s): (%d) %s\n",
+                   dir, errno, strerror(errno));
+       }
 
        if (local_exclude_list)
                free_exclude_list(&local_exclude_list); /* Zeros pointer too */
@@ -920,8 +927,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                io_start_buffering(f);
                if (filesfrom_fd >= 0) {
                        if (argv[0] && !push_dir(argv[0], 0)) {
-                               rprintf(FERROR, "push_dir %s : %s\n",
-                                       argv[0], strerror(errno));
+                               rprintf(FERROR, "push_dir %s failed: %s\n",
+                                       full_fname(argv[0]), strerror(errno));
                                exit_cleanup(RERR_FILESELECT);
                        }
                        use_ff_fd = 1;
@@ -957,8 +964,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                if (link_stat(fname, &st) != 0) {
                        if (f != -1) {
                                io_error = 1;
-                               rprintf(FERROR, "link_stat %s : %s\n",
-                                       fname, strerror(errno));
+                               rprintf(FERROR, "link_stat %s failed: %s\n",
+                                       full_fname(fname), strerror(errno));
                        }
                        continue;
                }
@@ -1024,8 +1031,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
 
                        if (!olddir) {
                                io_error = 1;
-                               rprintf(FERROR, "push_dir %s : %s\n",
-                                       dir, strerror(errno));
+                               rprintf(FERROR, "push_dir %s failed: %s\n",
+                                       full_fname(dir), strerror(errno));
                                continue;
                        }
 
@@ -1040,8 +1047,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                if (olddir != NULL) {
                        flist_dir = NULL;
                        if (pop_dir(olddir) != 0) {
-                               rprintf(FERROR, "pop_dir %s : %s\n",
-                                       dir, strerror(errno));
+                               rprintf(FERROR, "pop_dir %s failed: %s\n",
+                                       full_fname(dir), strerror(errno));
                                exit_cleanup(RERR_FILESELECT);
                        }
                }
@@ -1096,15 +1103,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;
 
@@ -1246,7 +1251,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");