Detect and report when open or opendir succeed but read and
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 7166762..8bc3ab3 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -693,8 +693,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;
        }
 
@@ -843,7 +843,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 +853,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 +873,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 +925,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 +962,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 +1029,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 +1045,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);
                        }
                }