X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/2acf81eb004292893a86b9e2cfa7f2ab4fcc2fb6..9ef53907149a591ec9302a929d0fa319f348b8d9:/main.c diff --git a/main.c b/main.c index 9b377386..c46de2a1 100644 --- a/main.c +++ b/main.c @@ -36,7 +36,7 @@ static void report(int f) extern int do_stats; if (am_daemon) { - log_exit(0); + log_exit(0, __FILE__, __LINE__); if (f == -1 || !am_sender) return; } @@ -171,7 +171,10 @@ static char *get_local_name(struct file_list *flist,char *name) if (verbose > 2) rprintf(FINFO,"get_local_name count=%d %s\n", - flist->count, name); + flist->count, NS(name)); + + if (!name) + return NULL; if (do_stat(name,&st) == 0) { if (S_ISDIR(st.st_mode)) { @@ -192,9 +195,6 @@ static char *get_local_name(struct file_list *flist,char *name) if (flist->count == 1) return name; - if (!name) - return NULL; - if (do_mkdir(name,0777 & ~orig_umask) != 0) { rprintf(FERROR,"mkdir %s : %s (1)\n",name,strerror(errno)); exit_cleanup(RERR_FILEIO); @@ -592,7 +592,7 @@ int main(int argc,char *argv[]) carried across */ orig_umask = (int)umask(0); - if (!parse_arguments(argc, argv)) { + if (!parse_arguments(argc, argv, 1)) { exit_cleanup(RERR_SYNTAX); } @@ -606,6 +606,12 @@ int main(int argc,char *argv[]) signal(SIGHUP,SIGNAL_CAST sig_int); signal(SIGTERM,SIGNAL_CAST sig_int); + /* Initialize push_dir here because on some old systems getcwd + (implemented by forking "pwd" and reading its output) doesn't + work when there are other child processes. Also, on all systems + that implement getcwd that way "pwd" can't be found after chroot. */ + push_dir(NULL,0); + if (am_daemon) { return daemon_main(); }