diff --git a/lsyncd.c b/lsyncd.c index 2eee39b..23d83ca 100644 --- a/lsyncd.c +++ b/lsyncd.c @@ -354,11 +354,30 @@ bool rsync(char const * src, const char * dest, bool recursive) pid_t pid; int status; char const * opts = recursive ? "-ltr" : "-ltd"; + const int MAX_ARGS = 100; + char * argv[MAX_ARGS]; + int argc=0; + int i; + argv[argc++] = s_strdup(rsync_binary); + argv[argc++] = s_strdup("--delete"); + argv[argc++] = s_strdup(opts); if (exclude_file) { - printlogf(LOG_DEBUG, "exec %s(%s,%s,%s,%s,%s,%s)", rsync_binary, "--delete", opts, "--exclude-from", exclude_file, src, dest); - } else { - printlogf(LOG_DEBUG, "exec %s(%s,%s,%s,%s)", rsync_binary, "--delete", opts, src, dest); + argv[argc++] = s_strdup("--exclude-from"); + argv[argc++] = s_strdup(exclude_file); + } + argv[argc++] = s_strdup(src); + argv[argc++] = s_strdup(dest); + argv[argc++] = NULL; + + if (argc > MAX_ARGS) { /* check for error condition */ + printlogf(LOG_ERROR, "Internal error: too many (%i) options passed", argc); + return false; + } + + /* debug dump of command-line options */ + for (i=0; i