preparing for release of 2.0.9
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 4c2e984..cf40151 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -521,7 +521,7 @@ static void send_directory(int f,struct file_list *flist,char *dir)
                        closedir(d);
                        return;
                }
-               strcat(fname,"/");
+               strlcat(fname,"/", MAXPATHLEN-1);
                l++;
        }
        p = fname + strlen(fname);
@@ -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;
@@ -581,7 +585,7 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
 
                l = strlen(fname);
                if (l != 1 && fname[l-1] == '/') {
-                       strcat(fname,".");
+                       strlcat(fname,".",MAXPATHLEN-1);
                }
 
                if (link_stat(fname,&st) != 0) {
@@ -612,7 +616,7 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
                           thus getting their permissions right */
                        *p = 0;
                        if (strcmp(lastpath,fname)) {
-                               strcpy(lastpath, fname);
+                               strlcpy(lastpath, fname, sizeof(lastpath)-1);
                                *p = '/';
                                for (p=fname+1; (p=strchr(p,'/')); p++) {
                                        *p = 0;
@@ -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");
 
@@ -870,7 +878,7 @@ char *f_name(struct file_struct *f)
        n = (n+1)%10;
 
        if (f->dirname) {
-               sprintf(p, "%s/%s", f->dirname, f->basename);
+               slprintf(p, MAXPATHLEN-1, "%s/%s", f->dirname, f->basename);
        } else {
                strlcpy(p, f->basename, MAXPATHLEN-1);
        }