Amplify the man page description of --hard-links (see bug 3693), and
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index ebfadd2..4f3729e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -94,7 +94,8 @@ extern filter_rule_list daemon_filter_list;
 
 uid_t our_uid;
 gid_t our_gid;
-int am_generator = 0;
+int am_receiver = 0;  /* Only set to 1 after the receiver/generator fork. */
+int am_generator = 0; /* Only set to 1 after the receiver/generator fork. */
 int local_server = 0;
 int daemon_over_rsh = 0;
 mode_t orig_umask = 0;
@@ -395,7 +396,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                    int *f_in_p, int *f_out_p)
 {
        int i, argc = 0;
-       char *args[MAX_ARGS];
+       char *args[MAX_ARGS], *need_to_free = NULL;
        pid_t pid;
        int dash_l_set = 0;
 
@@ -406,7 +407,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        cmd = rsh_env;
                if (!cmd)
                        cmd = RSYNC_RSH;
-               cmd = strdup(cmd); /*MEMORY LEAK*/
+               cmd = need_to_free = strdup(cmd);
                if (!cmd)
                        goto oom;
 
@@ -538,6 +539,9 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                        send_protected_args(*f_out_p, args);
        }
 
+       if (need_to_free)
+               free(need_to_free);
+
        return pid;
 
   oom:
@@ -848,6 +852,7 @@ static int do_recv(int f_in, int f_out, char *local_name)
        }
 
        if (pid == 0) {
+               am_receiver = 1;
                send_msgs_to_gen = am_server;
 
                close(error_pipe[0]);