X-Git-Url: http://git.tuebingen.mpg.de/?p=dss.git;a=blobdiff_plain;f=dss.c;h=3e626ab0113b1890277da115ea6c735dbdb690d7;hp=8547f24a55e6c218d76fe002f7c76baa6c81e958;hb=3e8d431fb78e95c0d595b6e7e37ff248c0fa4edd;hpb=25b4f1983a3804353f5fc879f93ecde978a90aaf diff --git a/dss.c b/dss.c index 8547f24..3e626ab 100644 --- a/dss.c +++ b/dss.c @@ -1055,9 +1055,15 @@ static int handle_sigchld(void) static int change_to_dest_dir(void) { + int ret; const char *dd = OPT_STRING_VAL(DSS, DEST_DIR); + DSS_INFO_LOG(("changing cwd to %s\n", dd)); - return dss_chdir(dd); + if (chdir(dd) >= 0) + return 1; + ret = -ERRNO_TO_DSS_ERROR(errno); + DSS_ERROR_LOG(("could not change cwd to %s\n", dd)); + return ret; } static int check_config(const struct lls_command *cmd) @@ -1341,6 +1347,7 @@ static void create_rsync_argv(char ***argv, int64_t *num) char *logname; int i = 0, j, N = OPT_GIVEN(DSS, RSYNC_OPTION); struct snapshot_list sl; + static bool seeded; dss_get_snapshot_list(&sl); assert(!name_of_reference_snapshot); @@ -1351,6 +1358,14 @@ static void create_rsync_argv(char ***argv, int64_t *num) (*argv)[i++] = dss_strdup("rsync"); (*argv)[i++] = dss_strdup("-a"); (*argv)[i++] = dss_strdup("--delete"); + if (!seeded) { + srandom((unsigned)time(NULL)); /* no need to be fancy here */ + seeded = true; + } + if (1000 * (random() / (RAND_MAX + 1.0)) < OPT_UINT32_VAL(DSS, CHECKSUM)) { + DSS_NOTICE_LOG(("adding --checksum to rsync options\n")); + (*argv)[i++] = dss_strdup("--checksum"); + } for (j = 0; j < N; j++) (*argv)[i++] = dss_strdup(lls_string_val(j, OPT_RESULT(DSS, RSYNC_OPTION)));