> Program received signal SIGSEGV, Segmentation fault. > write_batch_argvs_file (orig_argc=-2, argc=0, argv=0x0) at batch.c:153 > 153 if ( !strcmp(argv[i],"-F") ){ /* safer to change it here > than script*/
I'm not proud of this fix, but at least it makes -F/--write-batch work properly: 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 02:00:05 -0000 @@ -150,12 +150,17 @@ /* 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 */ + /* + * 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 02:00:05 -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, argc, orig_argv + argc + 1); } if (read_batch) { /* dw */ -- Jos Backus _/ _/_/_/ Santa Clara, CA _/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ [EMAIL PROTECTED] _/_/ _/_/_/ use Std::Disclaimer;