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

Makefile
dss.c
error.h
signal.c
snap.c
snap.h
string.c

index 25d6ea9..1eb37af 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,17 +2,19 @@ dss_objects := cmdline.o dss.o string.o fd.o exec.o signal.o daemon.o df.o time.
 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 @@ 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 --git a/dss.c b/dss.c
index 631b36d..745729f 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -65,7 +65,7 @@ enum hook_status snapshot_removal_status;
 
 
 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)
@@ -369,9 +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 +455,6 @@ static struct snapshot *find_redundant_snapshot(struct snapshot_list *sl)
 
                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 */
@@ -462,7 +465,6 @@ static struct snapshot *find_redundant_snapshot(struct snapshot_list *sl)
                                continue;
                        if (is_reference_snapshot(s))
                                continue;
-                       //DSS_DEBUG_LOG("checking %s\n", s->name);
                        if (s->interval > interval) {
                                prev = s;
                                continue;
@@ -478,7 +480,6 @@ static struct snapshot *find_redundant_snapshot(struct snapshot_list *sl)
                        /* 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;
@@ -946,13 +947,12 @@ static int parse_config_file(int override)
                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 +1057,14 @@ static int use_rsync_locally(char *logname)
 
 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;
@@ -1253,9 +1255,13 @@ 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);
 }
@@ -1439,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);
@@ -1456,13 +1462,12 @@ int main(int argc, char **argv)
                 * 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 --git a/error.h b/error.h
index 2b62611..14cc032 100644 (file)
--- a/error.h
+++ b/error.h
@@ -38,34 +38,33 @@ static inline char *dss_strerror(int num)
 }
 
 #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(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}
index 3bbe87d..8dc93a6 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -70,7 +70,6 @@ err_out:
 static void generic_signal_handler(int s)
 {
        write(signal_pipe[1], &s, sizeof(int));
-       //fprintf(stderr, "got sig %i\n", s);
 }
 
 /**
diff --git a/snap.c b/snap.c
index 41dc329..a9383c1 100644 (file)
--- a/snap.c
+++ b/snap.c
@@ -75,7 +75,6 @@ static int is_snapshot(const char *dirname, int64_t now, int unit_interval,
        if (num > now)
                return 0;
        s->creation_time = num;
-       //DSS_DEBUG_LOG("%s start time: %lli\n", dirname, (long long)s->creation_time);
        s->interval = (long long) ((now - s->creation_time)
                / unit_interval / 24 / 3600);
        if (!strcmp(dash + 1, "incomplete")) {
@@ -146,8 +145,8 @@ static int add_snapshot(const char *dirname, void *private)
 
 static int compare_snapshots(const void *a, const void *b)
 {
-       struct snapshot *s1 = *(struct snapshot **)a;
-       struct snapshot *s2 = *(struct snapshot **)b;
+       struct snapshot *s1 = *(struct snapshot * const *)a;
+       struct snapshot *s2 = *(struct snapshot * const *)b;
        return NUM_COMPARE(s2->creation_time, s1->creation_time);
 }
 
@@ -155,11 +154,10 @@ static int compare_snapshots(const void *a, const void *b)
 void get_snapshot_list(struct snapshot_list *sl, int unit_interval,
                int num_intervals)
 {
-       struct add_snapshot_data asd = {
-               .unit_interval = unit_interval,
-               .num_intervals = num_intervals,
-               .sl = sl
-       };
+       struct add_snapshot_data asd;
+       asd.unit_interval = unit_interval;
+       asd.num_intervals = num_intervals;
+       asd.sl = sl;
        sl->now = get_current_time();
        sl->num_snapshots = 0;
        sl->array_size = 0;
diff --git a/snap.h b/snap.h
index b9659ae..fc82850 100644 (file)
--- a/snap.h
+++ b/snap.h
        HSA_ITEM(HS_RUNNING, "in progress"), \
        HSA_ITEM(HS_SUCCESS, "process terminated successfully"), \
        HSA_ITEM(HS_NEEDS_RESTART, "restart needed"), \
-       HSA_ITEM(HS_POST_RUNNING, "post-hook running"), \
+       HSA_ITEM(HS_POST_RUNNING, "post-hook running")
 
 
 #define HSA_ITEM(x, y) x
 enum hook_status {HOOK_STATUS_ARRAY};
 #undef HSA_ITEM
-#define HSA_ITEM(x, y) [x] = y
+#define HSA_ITEM(x, y) y
 
 
 /**
@@ -37,7 +37,7 @@ enum snapshot_status_flags {
        /** The rsync process terminated successfully. */
        SS_COMPLETE = 1,
        /** The rm process is running to remove this snapshot. */
-       SS_BEING_DELETED = 2,
+       SS_BEING_DELETED = 2
 };
 
 /** Describes one snapshot. */
index 22d3905..d340811 100644 (file)
--- a/string.c
+++ b/string.c
@@ -93,8 +93,9 @@ __must_check __malloc void *dss_realloc(void *p, size_t size)
  */
 __must_check __malloc void *dss_malloc(size_t size)
 {
+       void *p;
        assert(size);
-       void *p = malloc(size);
+       p = malloc(size);
 
        if (!p) {
                DSS_EMERG_LOG("malloc failed (size = %zu),  aborting\n",