]> git.tuebingen.mpg.de Git - dss.git/commitdiff
Merge branch 't/cleanups'
authorAndre Noll <maan@systemlinux.org>
Wed, 15 Aug 2012 09:32:10 +0000 (11:32 +0200)
committerAndre Noll <maan@systemlinux.org>
Wed, 15 Aug 2012 09:32:10 +0000 (11:32 +0200)
The changes in this branch are an attempt to make dss compile cleanly
with the more strict compiler flags (GCC 4.6 on Linux).

    -pedantic -fno-common -W -Wall -Wcast-align -Wformat=2
    -Wpointer-arith -Wundef -Waggregate-return -Wcast-qual
    -Wmissing-declarations -Wnested-externs -Wstrict-prototypes

This is only a first step that addresses the easier warnings. Some,
like the ones stemming from the variadic macros, have yet to be fixed.

* 9e6c2f Remove some debug messages.
* 899f88 string.c: Fix a statement-before-declaration issue.
* 83ebb4 Remove trailing commas.
* 2ed0d7 snap.h: Fix HSA_ITEM.
* 508350 Fix "comma after last element" warning.
* 97fbf4 compare_snapshots(): Add const keyword.
* b28495 Avoid per-element initializers.
* 9528cf dss.c: Fix initialization of argv[].
* 4526f9 dss.c: Remove redundant const.
* 2183c6 Makefile: Split CPPFLAGS.

Conflicts:
error.h

1  2 
Makefile
dss.c
error.h

diff --combined Makefile
index 25d6ea9ffc7b2ebc717a71518cbf6948d34779c1,c4ff4601c8b38e70ae7a400f012e99ddc4ce6752..1eb37aff313a1b5f0d9e49e6afe8aa115545af23
+++ b/Makefile
@@@ -1,18 -1,20 +1,20 @@@
 -dss_objects := cmdline.o dss.o string.o fd.o exec.o signal.o daemon.o df.o time.o snap.o
 +dss_objects := cmdline.o dss.o string.o fd.o exec.o signal.o daemon.o df.o time.o snap.o ipc.o
  all: dss
  man: dss.1
  
- DEBUG_CPPFLAGS += -Wno-sign-compare -g -Wunused -Wundef -W
- DEBUG_CPPFLAGS += -Wredundant-decls
- CPPFLAGS += -Os
- CPPFLAGS += -Wall
- CPPFLAGS += -Wuninitialized
- CPPFLAGS += -Wchar-subscripts
- CPPFLAGS += -Wformat-security
- CPPFLAGS += -Werror-implicit-function-declaration
- CPPFLAGS += -Wmissing-format-attribute
- CPPFLAGS += -Wunused-macros
- CPPFLAGS += -Wbad-function-cast
+ DEBUG_CFLAGS ?=
+ DEBUG_CFLAGS += -Wno-sign-compare -g -Wunused -Wundef -W
+ DEBUG_CFLAGS += -Wredundant-decls
+ CFLAGS ?=
+ CFLAGS += -Os
+ CFLAGS += -Wall
+ CFLAGS += -Wuninitialized
+ CFLAGS += -Wchar-subscripts
+ CFLAGS += -Wformat-security
+ CFLAGS += -Werror-implicit-function-declaration
+ CFLAGS += -Wmissing-format-attribute
+ CFLAGS += -Wunused-macros
+ CFLAGS += -Wbad-function-cast
  
  Makefile.deps: $(wildcard *.c *.h)
        gcc -MM -MG *.c > $@
@@@ -23,10 -25,10 +25,10 @@@ dss: $(dss_objects
        $(CC) -o $@ $(dss_objects)
  
  cmdline.o: cmdline.c cmdline.h
-       $(CC) -c $(CPPFLAGS) $<
+       $(CC) -c $(CFLAGS) $<
  
  %.o: %.c Makefile
-       $(CC) -c $(CPPFLAGS) $(DEBUG_CPPFLAGS) $<
+       $(CC) -c $(CFLAGS) $(DEBUG_CFLAGS) $<
  
  %.ppm: %.sk
        sk2ppm $< > $@
diff --combined dss.c
index 631b36dfe12795da7ccaef38ea343b6342a14dda,c9cfaa2d900839c98550e68d83afe30c50bef73f..745729fae629aa279a1747f5779faa92fe901866
--- 1/dss.c
--- 2/dss.c
+++ b/dss.c
@@@ -33,7 -33,6 +33,7 @@@
  #include "df.h"
  #include "time.h"
  #include "snap.h"
 +#include "ipc.h"
  
  /** Command line and config file options. */
  static struct gengetopt_args_info conf;
@@@ -65,7 -64,7 +65,7 @@@ enum hook_status snapshot_removal_statu
  
  
  DEFINE_DSS_ERRLIST;
- static const char const *hook_status_description[] = {HOOK_STATUS_ARRAY};
+ static const char *hook_status_description[] = {HOOK_STATUS_ARRAY};
  
  /* may be called with ds == NULL. */
  static int disk_space_low(struct disk_space *ds)
@@@ -171,10 -170,7 +171,10 @@@ static void dump_dss_config(const char 
        COMMAND(ls) \
        COMMAND(create) \
        COMMAND(prune) \
 -      COMMAND(run)
 +      COMMAND(run) \
 +      COMMAND(kill) \
 +      COMMAND(reload) \
 +
  #define COMMAND(x) static int com_ ##x(void);
  COMMANDS
  #undef COMMAND
@@@ -230,47 -226,6 +230,47 @@@ static __printf_1_2 void dss_msg(const 
        va_end(argp);
  }
  
 +static char *get_config_file_name(void)
 +{
 +      char *home, *config_file;
 +
 +      if (conf.config_file_given)
 +              return dss_strdup(conf.config_file_arg);
 +      home = get_homedir();
 +      config_file = make_message("%s/.dssrc", home);
 +      free(home);
 +      return config_file;
 +}
 +
 +static int send_signal(int sig)
 +{
 +      pid_t pid;
 +      char *config_file = get_config_file_name();
 +      int ret = get_dss_pid(config_file, &pid);
 +
 +      free(config_file);
 +      if (ret < 0)
 +              return ret;
 +      if (conf.dry_run_given) {
 +              dss_msg("%d\n", (int)pid);
 +              return 0;
 +      }
 +      ret = kill(pid, sig);
 +      if (ret < 0)
 +              return -ERRNO_TO_DSS_ERROR(errno);
 +      return 1;
 +}
 +
 +static int com_kill(void)
 +{
 +      return send_signal(SIGTERM);
 +}
 +
 +static int com_reload(void)
 +{
 +      return send_signal(SIGHUP);
 +}
 +
  static void dss_get_snapshot_list(struct snapshot_list *sl)
  {
        get_snapshot_list(sl, conf.unit_interval_arg, conf.num_intervals_arg);
@@@ -369,9 -324,14 +369,14 @@@ static int exec_rm(void
  {
        struct snapshot *s = snapshot_currently_being_removed;
        char *new_name = being_deleted_name(s);
-       char *argv[] = {"rm", "-rf", new_name, NULL};
+       char *argv[4];
        int ret;
  
+       argv[0] = "rm";
+       argv[1] = "-rf";
+       argv[2] = new_name;
+       argv[3] = NULL;
        assert(snapshot_removal_status == HS_PRE_SUCCESS);
        assert(remove_pid == 0);
  
@@@ -450,8 -410,6 +455,6 @@@ static struct snapshot *find_redundant_
  
                if (keep >= num)
                        missing += keep - num;
- //            DSS_DEBUG_LOG("interval %i: keep: %u, have: %u, missing: %u\n",
- //                    interval, keep, num, missing);
                if (keep + missing >= num)
                        continue;
                /* redundant snapshot in this interval, pick snapshot with lowest score */
                                continue;
                        if (is_reference_snapshot(s))
                                continue;
-                       //DSS_DEBUG_LOG("checking %s\n", s->name);
                        if (s->interval > interval) {
                                prev = s;
                                continue;
                        /* check if s is a better victim */
                        this_score = s->creation_time - prev->creation_time;
                        assert(this_score >= 0);
-                       //DSS_DEBUG_LOG("%s: score %lli\n", s->name, (long long)score);
                        if (this_score < score) {
                                score = this_score;
                                victim = s;
@@@ -928,11 -884,18 +929,11 @@@ static int check_config(void
  static int parse_config_file(int override)
  {
        int ret, config_file_exists;
 -      char *config_file;
 +      char *config_file = get_config_file_name();
        struct stat statbuf;
        char *old_logfile_arg = NULL;
        int old_daemon_given = 0;
  
 -      if (conf.config_file_given)
 -              config_file = dss_strdup(conf.config_file_arg);
 -      else {
 -              char *home = get_homedir();
 -              config_file = make_message("%s/.dssrc", home);
 -              free(home);
 -      }
        if (override) { /* SIGHUP */
                if (conf.logfile_given)
                        old_logfile_arg = dss_strdup(conf.logfile_arg);
                goto out;
        }
        if (config_file_exists) {
-               struct cmdline_parser_params params = {
-                       .override = override,
-                       .initialize = 0,
-                       .check_required = 1,
-                       .check_ambiguity = 0,
-                       .print_errors = 1
-               };
+               struct cmdline_parser_params params;
+               params.override = override;
+               params.initialize = 0;
+               params.check_required = 1;
+               params.check_ambiguity = 0;
+               params.print_errors = 1;
                if (override) { /* invalidate all rsync options */
                        int i;
  
@@@ -1057,12 -1019,14 +1057,14 @@@ static int use_rsync_locally(char *logn
  
  static int rename_resume_snap(int64_t creation_time)
  {
-       struct snapshot_list sl = {.num_snapshots = 0};
+       struct snapshot_list sl;
        struct snapshot *s = NULL;
        char *new_name = incomplete_name(creation_time);
        int ret;
        const char *why;
  
+       sl.num_snapshots = 0;
        ret = 0;
        if (conf.no_resume_given)
                goto out;
  
  static void exit_hook(int exit_code)
  {
-       char *argv[] = {conf.exit_hook_arg, dss_strerror(-exit_code), NULL};
+       char *argv[3];
        pid_t pid;
  
+       argv[0] = conf.exit_hook_arg;
+       argv[1] = dss_strerror(-exit_code);
+       argv[2] = NULL;
        DSS_NOTICE_LOG("executing %s %s\n", argv[0], argv[1]);
        dss_exec(&pid, conf.exit_hook_arg, argv);
  }
  
 +static void lock_dss_or_die(void)
 +{
 +      char *config_file = get_config_file_name();
 +      int ret = lock_dss(config_file);
 +
 +      free(config_file);
 +      if (ret < 0) {
 +              DSS_EMERG_LOG("failed to lock: %s\n", dss_strerror(-ret));
 +              exit(EXIT_FAILURE);
 +      }
 +}
 +
  static int com_run(void)
  {
        int ret;
  
 +      lock_dss_or_die();
        if (conf.dry_run_given) {
                DSS_ERROR_LOG("dry_run not supported by this command\n");
                return -E_SYNTAX;
@@@ -1299,7 -1254,6 +1305,7 @@@ static int com_prune(void
        struct disk_space ds;
        const char *why;
  
 +      lock_dss_or_die();
        ret = get_disk_space(".", &ds);
        if (ret < 0)
                return ret;
@@@ -1355,7 -1309,6 +1361,7 @@@ static int com_create(void
        int ret, status;
        char **rsync_argv;
  
 +      lock_dss_or_die();
        if (conf.dry_run_given) {
                int i;
                char *msg = NULL;
@@@ -1439,13 -1392,13 +1445,13 @@@ static int setup_signal_handling(void
  int main(int argc, char **argv)
  {
        int ret;
-       struct cmdline_parser_params params = {
-               .override = 0,
-               .initialize = 1,
-               .check_required = 0,
-               .check_ambiguity = 0,
-               .print_errors = 1
-       };
+       struct cmdline_parser_params params;
+       params.override = 0;
+       params.initialize = 1;
+       params.check_required = 0;
+       params.check_ambiguity = 0;
+       params.print_errors = 1;
  
        cmdline_parser_ext(argc, argv, &conf, &params); /* aborts on errors */
        ret = parse_config_file(0);
                 * Parse the command line options again, but this time check
                 * that all required options are given.
                 */
-               params = (struct cmdline_parser_params) {
-                       .override = 1,
-                       .initialize = 1,
-                       .check_required = 1,
-                       .check_ambiguity = 1,
-                       .print_errors = 1
-               };
+               struct cmdline_parser_params params;
+               params.override = 1;
+               params.initialize = 1;
+               params.check_required = 1;
+               params.check_ambiguity = 1;
+               params.print_errors = 1;
                cmdline_parser_ext(argc, argv, &conf, &params); /* aborts on errors */
        }
        if (conf.daemon_given)
diff --combined error.h
index 2b62611cc68937517f171148014ac2d124d9dd16,accd5fd9781fab1920d085991fc993add332fc30..14cc032fae65f621ade9c419d682f0252b7ad0ac
+++ b/error.h
@@@ -38,34 -38,32 +38,33 @@@ static inline char *dss_strerror(int nu
  }
  
  #define DSS_ERRORS \
-       DSS_ERROR(SUCCESS, "success") \
-       DSS_ERROR(SYNTAX, "syntax error") \
-       DSS_ERROR(ATOI_OVERFLOW, "value too large") \
-       DSS_ERROR(STRTOLL, "unknown strtoll error") \
-       DSS_ERROR(ATOI_NO_DIGITS, "no digits found in string") \
-       DSS_ERROR(ATOI_JUNK_AT_END, "further characters after number") \
-       DSS_ERROR(INVALID_NUMBER, "invalid number") \
-       DSS_ERROR(STRFTIME, "strftime() failed") \
-       DSS_ERROR(LOCALTIME, "localtime() failed") \
-       DSS_ERROR(NULL_OPEN, "can not open /dev/null") \
-       DSS_ERROR(DUP_PIPE, "exec error: can not create pipe") \
-       DSS_ERROR(INVOLUNTARY_EXIT, "unexpected termination cause") \
-       DSS_ERROR(BAD_EXIT_CODE, "unexpected exit code") \
-       DSS_ERROR(SIGNAL_SIG_ERR, "signal() returned SIG_ERR") \
-       DSS_ERROR(SIGNAL, "caught terminating signal") \
-       DSS_ERROR(BUG, "values of beta might cause dom!") \
-       DSS_ERROR(NOT_RUNNING, "dss not running") \
+       DSS_ERROR(SUCCESS, "success"), \
+       DSS_ERROR(SYNTAX, "syntax error"), \
+       DSS_ERROR(ATOI_OVERFLOW, "value too large"), \
+       DSS_ERROR(STRTOLL, "unknown strtoll error"), \
+       DSS_ERROR(ATOI_NO_DIGITS, "no digits found in string"), \
+       DSS_ERROR(ATOI_JUNK_AT_END, "further characters after number"), \
+       DSS_ERROR(INVALID_NUMBER, "invalid number"), \
+       DSS_ERROR(STRFTIME, "strftime() failed"), \
+       DSS_ERROR(LOCALTIME, "localtime() failed"), \
+       DSS_ERROR(NULL_OPEN, "can not open /dev/null"), \
+       DSS_ERROR(DUP_PIPE, "exec error: can not create pipe"), \
+       DSS_ERROR(INVOLUNTARY_EXIT, "unexpected termination cause"), \
+       DSS_ERROR(BAD_EXIT_CODE, "unexpected exit code"), \
+       DSS_ERROR(SIGNAL_SIG_ERR, "signal() returned SIG_ERR"), \
+       DSS_ERROR(SIGNAL, "caught terminating signal"), \
 -      DSS_ERROR(BUG, "values of beta might cause dom!")
++      DSS_ERROR(BUG, "values of beta might cause dom!"), \
++      DSS_ERROR(NOT_RUNNING, "dss not running")
  
  /**
   * This is temporarily defined to expand to its first argument (prefixed by
   * 'E_') and gets later redefined to expand to the error text only
   */
- #define DSS_ERROR(err, msg) E_ ## err,
+ #define DSS_ERROR(err, msg) E_ ## err
  
  enum dss_error_codes {
        DSS_ERRORS
  };
  #undef DSS_ERROR
- #define DSS_ERROR(err, msg) msg,
+ #define DSS_ERROR(err, msg) msg
  #define DEFINE_DSS_ERRLIST char *dss_errlist[] = {DSS_ERRORS}