]> git.tuebingen.mpg.de Git - dss.git/blobdiff - dss.c
Kill --exclude-patterns option.
[dss.git] / dss.c
diff --git a/dss.c b/dss.c
index 9dc717da90db8338471268e5a0443c398a7cda72..744efaf0965f5a44c68d53d43163ae8dcbb6b209 100644 (file)
--- a/dss.c
+++ b/dss.c
 #include "time.h"
 #include "snap.h"
 
-
+/** Command line and config file options. */
 static struct gengetopt_args_info conf;
+/** Non-NULL if we log to a file. */
 static FILE *logfile;
+/** The read end of the signal pipe */
 static int signal_pipe;
-
 /** Process id of current rsync process. */
 static pid_t rsync_pid;
 /** Whether the rsync process is currently stopped */
@@ -46,11 +47,11 @@ static struct timeval next_snapshot_time;
 static pid_t pre_create_hook_pid;
 /** The pid of the post-create hook. */
 static pid_t post_create_hook_pid;
-/* Creation time of the snapshot currently being created. */
+/** Creation time of the snapshot currently being created. */
 static int64_t current_snapshot_creation_time;
-
+/** Needed by the post-create hook. */
 static char *path_to_last_complete_snapshot;
-
+/** \sa \ref snap.h for details. */
 static unsigned snapshot_creation_status;
 
 
@@ -76,6 +77,14 @@ static int call_command_handler(void)
 #undef COMMAND
 #undef COMMANDS
 
+/**
+ * The log function of dss.
+ *
+ * \param ll Loglevel.
+ * \param fml Usual format string.
+ *
+ * All DSS_XXX_LOG() macros use this function.
+ */
 __printf_2_3 void dss_log(int ll, const char* fmt,...)
 {
        va_list argp;
@@ -124,6 +133,9 @@ static int disk_space_low(void)
        if (conf.min_free_percent_arg)
                if (ds.percent_free < conf.min_free_percent_arg)
                        return 1;
+       if (conf.min_free_percent_inodes_arg)
+               if (ds.percent_free_inodes < conf.min_free_percent_inodes_arg)
+                       return 1;
        return 0;
 }
 
@@ -543,7 +555,6 @@ static int handle_sigchld(void)
        exit(EXIT_FAILURE);
 }
 
-
 static int check_config(void)
 {
        if (conf.unit_interval_arg <= 0) {
@@ -592,7 +603,8 @@ static void parse_config_file(int override)
                        .override = override,
                        .initialize = 0,
                        .check_required = 1,
-                       .check_ambiguity = 0
+                       .check_ambiguity = 0,
+                       .print_errors = 1
                };
                cmdline_parser_config_file(config_file, &conf, &params);
        }
@@ -617,7 +629,6 @@ static void parse_config_file(int override)
        }
        DSS_EMERG_LOG("loglevel: %d\n", conf.loglevel_arg);
 //     cmdline_parser_dump(logfile? logfile : stdout, &conf);
-       ret = dss_chdir(conf.dest_dir_arg);
 out:
        free(config_file);
        if (ret >= 0)
@@ -626,10 +637,23 @@ out:
        exit(EXIT_FAILURE);
 }
 
+static void change_to_dest_dir(void)
+{
+       int ret;
+
+       DSS_INFO_LOG("changing cwd to %s\n", conf.dest_dir_arg);
+       ret = dss_chdir(conf.dest_dir_arg);
+       if (ret >= 0)
+               return;
+       DSS_EMERG_LOG("%s\n", dss_strerror(-ret));
+       exit(EXIT_FAILURE);
+}
+
 static void handle_sighup(void)
 {
        DSS_NOTICE_LOG("SIGHUP\n");
        parse_config_file(1);
+       change_to_dest_dir();
 }
 
 static void handle_signal(void)
@@ -681,11 +705,6 @@ static void create_rsync_argv(char ***argv, int64_t *num)
                free(newest);
        } else
                DSS_INFO_LOG("no previous snapshot found\n");
-       if (conf.exclude_patterns_given) {
-               (*argv)[i++] = dss_strdup("--exclude-from");
-               (*argv)[i++] = dss_strdup(conf.exclude_patterns_arg);
-
-       }
        logname = dss_logname();
        if (conf.remote_user_given && !strcmp(conf.remote_user_arg, logname))
                (*argv)[i++] = dss_strdup(conf.source_dir_arg);
@@ -931,7 +950,12 @@ err:
        exit(EXIT_FAILURE);
 }
 
-
+/**
+ * The main function of dss.
+ *
+ * \param argc Usual argument count.
+ * \param argv Usual argument vector.
+ */
 int main(int argc, char **argv)
 {
        int ret;
@@ -939,7 +963,8 @@ int main(int argc, char **argv)
                .override = 0,
                .initialize = 1,
                .check_required = 0,
-               .check_ambiguity = 0
+               .check_ambiguity = 0,
+               .print_errors = 1
        };
 
        cmdline_parser_ext(argc, argv, &conf, &params); /* aborts on errors */
@@ -947,6 +972,7 @@ int main(int argc, char **argv)
 
        if (conf.daemon_given)
                daemon_init();
+       change_to_dest_dir();
        setup_signal_handling();
        ret = call_command_handler();
        if (ret < 0)