Skip the longdir test if the long directory can't even be created, such as
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index cbae644..93148e6 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -196,8 +196,15 @@ static void list_file_entry(struct file_struct *f)
  * Stat either a symlink or its referent, depending on the settings of
  * copy_links, copy_unsafe_links, etc.
  *
- * @return -1 on error; or 0.  If a symlink, then @p Linkbuf (of size
+ * @retval -1 on error
+ *
+ * @retval 0 for success
+ *
+ * @post If @p path is a symlink, then @p linkbuf (of size @c
  * MAXPATHLEN) contains the symlink target.
+ *
+ * @post @p buffer contains information about the link or the
+ * referrent as appropriate, if they exist.
  **/
 int readlink_stat(const char *path, STRUCT_STAT * buffer, char *linkbuf)
 {
@@ -347,6 +354,8 @@ static void send_file_entry(struct file_struct *file, int f,
                return;
        }
 
+       io_write_phase = "send_file_entry";
+
        fname = f_name(file);
 
        flags = base_flags;
@@ -442,6 +451,8 @@ static void send_file_entry(struct file_struct *file, int f,
 
        strlcpy(lastname, fname, MAXPATHLEN);
        lastname[MAXPATHLEN - 1] = 0;
+
+       io_write_phase = "unknown";
 }
 
 
@@ -527,7 +538,7 @@ static void receive_file_entry(struct file_struct **fptr,
                    (flags & SAME_GID) ? last_gid : (gid_t) read_int(f);
        if (preserve_devices && IS_DEVICE(file->mode))
                file->rdev =
-                   (flags & SAME_RDEV) ? last_rdev : (dev_t) read_int(f);
+                   (flags & SAME_RDEV) ? last_rdev : (DEV64_T) read_int(f);
 
        if (preserve_links && S_ISLNK(file->mode)) {
                int l = read_int(f);
@@ -649,8 +660,10 @@ struct file_struct *make_file(int f, char *fname, struct string_area **ap,
 
        if (readlink_stat(fname, &st, linkbuf) != 0) {
                int save_errno = errno;
-               if ((errno == ENOENT) && copy_links && !noexcludes) {
-                       /* symlink pointing nowhere, see if excluded */
+               if ((errno == ENOENT) && !noexcludes) {
+                       /* either symlink pointing nowhere or file that 
+                        * was removed during rsync run; see if excluded
+                        * before reporting an error */
                        memset((char *) &st, 0, sizeof(st));
                        if (check_exclude_file(f, fname, &st)) {
                                /* file is excluded anyway, ignore silently */
@@ -856,11 +869,11 @@ static void send_directory(int f, struct file_list *flist, char *dir)
 }
 
 
-/*
+/**
  *
- * I *think* f==-1 means that the list should just be built in memory
- * and not transmitted.  But who can tell? -- mbp
- */
+ * I <b>think</b> f==-1 means that the list should just be built in
+ * memory and not transmitted.  But who can tell? -- mbp
+ **/
 struct file_list *send_file_list(int f, int argc, char *argv[])
 {
        int i, l;
@@ -1140,7 +1153,9 @@ int flist_find(struct file_list *flist, struct file_struct *f)
 {
        int low = 0, high = flist->count - 1;
 
-       if (flist->count <= 0)
+       while (high >= 0 && !flist->files[high]->basename) high--;
+
+       if (high < 0)
                return -1;
 
        while (low != high) {
@@ -1182,7 +1197,7 @@ void free_file(struct file_struct *file)
 /*
  * allocate a new file list
  */
-struct file_list *flist_new()
+struct file_list *flist_new(void)
 {
        struct file_list *flist;