rsync-2.5.1pre1 with -F option
Jos Backus
josb at cncdsl.com
Fri Dec 7 10:20:07 EST 2001
Here's a better patch; rsync should now no longer dump core if called with
insufficient arguments. write_batch_argvs_file() is still ugly though, not
sure how to clean this up.
Index: batch.c
===================================================================
RCS file: /cvsroot/rsync/batch.c,v
retrieving revision 1.6
diff -u -r1.6 batch.c
--- batch.c 2 Dec 2001 22:47:30 -0000 1.6
+++ batch.c 6 Dec 2001 23:11:26 -0000
@@ -128,7 +128,7 @@
}
}
-void write_batch_argvs_file(int orig_argc, int argc, char **argv)
+void write_batch_argvs_file(int argc, char *argv[])
{
int fdb;
int i;
@@ -149,13 +149,17 @@
buff[0] = '\0';
/* Write argvs info to batch file */
- for (i = argc - orig_argc; i < argc; i++) {
- /* FIXME: This apparently crashes if rsync is run with
- * just "rsync -F". I think directly manipulating
- * argv[] is probably bogus -- what if -F is part of a
- * run of several short options? */
- if (!strcmp(argv[i], "-F")) { /* safer to change it here than script */
- strncat(buff, "-f ", 3); /* chg to -f + ext to get ready for remote */
+ for (i = 0; i < argc; ++i) {
+ /*
+ * FIXME: I think directly manipulating argv[] is probably
+ * bogus -- what if -F is part of a run of several short
+ * options?
+ */
+ if (!strcmp(argv[i], "-F") ||
+ !strcmp(argv[i], "--write-batch")) {
+ /* safer to change it here than script */
+ /* chg to -f + ext to get ready for remote */
+ strncat(buff, "-f ", 3);
strncat(buff, batch_file_ext,
strlen(batch_file_ext));
} else {
Index: main.c
===================================================================
RCS file: /cvsroot/rsync/main.c,v
retrieving revision 1.134
diff -u -r1.134 main.c
--- main.c 15 Aug 2001 07:50:07 -0000 1.134
+++ main.c 6 Dec 2001 23:11:27 -0000
@@ -765,8 +765,10 @@
extern int write_batch; /* dw */
extern char *batch_ext; /* dw */
int orig_argc; /* dw */
+ char **orig_argv;
orig_argc = argc; /* dw */
+ orig_argv = argv;
signal(SIGUSR1, sigusr1_handler);
signal(SIGUSR2, sigusr2_handler);
@@ -806,7 +808,7 @@
if (write_batch) { /* dw */
create_batch_file_ext();
- write_batch_argvs_file(orig_argc, argc, argv);
+ write_batch_argvs_file(orig_argc, orig_argv);
}
if (read_batch) { /* dw */
Index: proto.h
===================================================================
RCS file: /cvsroot/rsync/proto.h,v
retrieving revision 1.133
diff -u -r1.133 proto.h
--- proto.h 26 Nov 2001 07:18:09 -0000 1.133
+++ proto.h 6 Dec 2001 23:11:27 -0000
@@ -9,7 +9,7 @@
void write_batch_flist_file(char *buff, int bytes_to_write);
void write_batch_flist_info(int flist_count, struct file_struct **fptr);
void write_char_bufs(char *buf);
-void write_batch_argvs_file(int orig_argc, int argc, char **argv);
+void write_batch_argvs_file(int argc, char *argv[]);
struct file_list *create_flist_from_batch();
int read_batch_flist_file(char *buff, int len);
unsigned char read_batch_flags();
--
Jos Backus _/ _/_/_/ Santa Clara, CA
_/ _/ _/
_/ _/_/_/
_/ _/ _/ _/
josb at cncdsl.com _/_/ _/_/_/ use Std::Disclaimer;
More information about the rsync
mailing list