allow the specification of multiple filenames (with or without
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 15c56c8..d7da6e8 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -573,6 +573,10 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
                                                     flist->malloced);
        if (!flist->files) out_of_memory("send_file_list");
 
+       if (f != -1) {
+               io_start_buffering(f);
+       }
+
        for (i=0;i<argc;i++) {
                char fname2[MAXPATHLEN];
                char *fname = fname2;
@@ -658,7 +662,6 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
 
        if (f != -1) {
                send_file_entry(NULL,f,0);
-               write_flush(f);
        }
 
        if (verbose && recurse && !am_server && f != -1)
@@ -677,6 +680,11 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
                write_int(f, io_error);
        }
 
+       if (f != -1) {
+               io_end_buffering(f);
+               write_flush(f);
+       }
+
        if (verbose > 2)
                rprintf(FINFO,"send_file_list done\n");
 
@@ -872,7 +880,7 @@ char *f_name(struct file_struct *f)
        if (f->dirname) {
                sprintf(p, "%s/%s", f->dirname, f->basename);
        } else {
-               strcpy(p, f->basename);
+               strlcpy(p, f->basename, MAXPATHLEN-1);
        }
 
        return p;