chiark / gitweb /
macro: introduce a nice macro for disabling -Wformat-nonliteral temporarily
authorLennart Poettering <lennart@poettering.net>
Thu, 20 Feb 2014 17:18:32 +0000 (18:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 20 Feb 2014 17:18:32 +0000 (18:18 +0100)
src/core/job.c
src/core/kmod-setup.c
src/core/unit.c
src/journal/microhttpd-util.c
src/modules-load/modules-load.c
src/shared/log.c
src/shared/macro.h
src/udev/udev-builtin-input_id.c

index 2f998f89585a053183bd3004b7842d4e28ef0059..0cd4397bf294a6e301954825fe53e2a440eaaa1a 100644 (file)
@@ -610,8 +610,6 @@ _pure_ static const char *job_get_status_message_format_try_harder(Unit *u, JobT
         return NULL;
 }
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void job_print_status_message(Unit *u, JobType t, JobResult result) {
         const char *format;
 
@@ -619,6 +617,8 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
         assert(t >= 0);
         assert(t < _JOB_TYPE_MAX);
 
+        DISABLE_WARNING_FORMAT_NONLITERAL;
+
         if (t == JOB_START) {
                 format = job_get_status_message_format(u, t, result);
                 if (!format)
@@ -681,11 +681,10 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
                 if (result == JOB_SKIPPED)
                         unit_status_printf(u, ANSI_HIGHLIGHT_ON " INFO " ANSI_HIGHLIGHT_OFF, "%s is not active.");
         }
+
+        REENABLE_WARNING;
 }
-#pragma GCC diagnostic pop
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void job_log_status_message(Unit *u, JobType t, JobResult result) {
         const char *format;
         char buf[LINE_MAX];
@@ -704,8 +703,10 @@ static void job_log_status_message(Unit *u, JobType t, JobResult result) {
         if (!format)
                 return;
 
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         snprintf(buf, sizeof(buf), format, unit_description(u));
         char_array_0(buf);
+        REENABLE_WARNING;
 
         if (t == JOB_START) {
                 sd_id128_t mid;
@@ -734,7 +735,6 @@ static void job_log_status_message(Unit *u, JobType t, JobResult result) {
                            "MESSAGE=%s", buf,
                            NULL);
 }
-#pragma GCC diagnostic pop
 
 int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
         Unit *u;
index 9709d364f8bfd7ee6bc6d2d4c624a010ed872325..0791ae8eadb6e1065b2fb4f85c2fd213299d2845 100644 (file)
@@ -30,9 +30,6 @@
 
 #include "kmod-setup.h"
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
-
 static void systemd_kmod_log(
                 void *data,
                 int priority,
@@ -42,11 +39,11 @@ static void systemd_kmod_log(
                 va_list args) {
 
         /* library logging is enabled at debug only */
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         log_metav(LOG_DEBUG, file, line, fn, format, args);
+        REENABLE_WARNING;
 }
 
-#pragma GCC diagnostic pop
-
 static bool cmdline_check_kdbus(void) {
         _cleanup_free_ char *line = NULL;
 
index 016b1e3d869d846b29806e1be9f758c8529f249d..a59556d97c52b8dd90f17845b4470132738f0e16 100644 (file)
@@ -1140,8 +1140,6 @@ _pure_ static const char *unit_get_status_message_format_try_harder(Unit *u, Job
         return NULL;
 }
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void unit_status_print_starting_stopping(Unit *u, JobType t) {
         const char *format;
 
@@ -1154,12 +1152,11 @@ static void unit_status_print_starting_stopping(Unit *u, JobType t) {
         if (!format)
                 return;
 
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         unit_status_printf(u, "", format);
+        REENABLE_WARNING;
 }
-#pragma GCC diagnostic pop
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
         const char *format;
         char buf[LINE_MAX];
@@ -1179,8 +1176,10 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
         if (!format)
                 return;
 
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         snprintf(buf, sizeof(buf), format, unit_description(u));
         char_array_0(buf);
+        REENABLE_WARNING;
 
         mid = t == JOB_START ? SD_MESSAGE_UNIT_STARTING :
               t == JOB_STOP  ? SD_MESSAGE_UNIT_STOPPING :
@@ -1192,7 +1191,6 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
                         "MESSAGE=%s", buf,
                         NULL);
 }
-#pragma GCC diagnostic pop
 
 /* Errors:
  *         -EBADR:     This unit type does not support starting.
@@ -2525,12 +2523,11 @@ int unit_coldplug(Unit *u) {
         return 0;
 }
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg_format) {
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         manager_status_printf(u->manager, false, status, unit_status_msg_format, unit_description(u));
+        REENABLE_WARNING;
 }
-#pragma GCC diagnostic pop
 
 bool unit_need_daemon_reload(Unit *u) {
         _cleanup_strv_free_ char **t = NULL;
index c45d0df722c0d708bfd8338232bd9634364182ab..3844f7a03c5e477e514883afdcde7e33a678ac98 100644 (file)
 #include "macro.h"
 #include "util.h"
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 void microhttpd_logger(void *arg, const char *fmt, va_list ap) {
-        _cleanup_free_ char *f;
+        _cleanup_free_ char *f = NULL;
+
         if (asprintf(&f, "microhttpd: %s", fmt) <= 0) {
                 log_oom();
                 return;
         }
+
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         log_metav(LOG_INFO, NULL, 0, NULL, f, ap);
+        REENABLE_WARNING;
 }
-#pragma GCC diagnostic pop
index c3aa4094467abcf37c8996015f8864dc580516b5..37d7a77068c6d81628652b71e9a349f5ceed4ec1 100644 (file)
@@ -48,13 +48,13 @@ static const char conf_file_dirs[] =
 #endif
         ;
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void systemd_kmod_log(void *data, int priority, const char *file, int line,
                              const char *fn, const char *format, va_list args) {
+
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         log_metav(priority, file, line, fn, format, args);
+        REENABLE_WARNING;
 }
-#pragma GCC diagnostic pop
 
 static int add_modules(const char *p) {
         _cleanup_strv_free_ char **k = NULL;
index 3e48b3ccc24f303e41229a3f198942bcd09aa05a..8d1067c63bf7f894589fefc1bf9adeca8f4197eb 100644 (file)
@@ -703,22 +703,21 @@ int log_meta_object(
         return r;
 }
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 static void log_assert(int level, const char *text, const char *file, int line, const char *func, const char *format) {
         static char buffer[LINE_MAX];
 
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return;
 
+        DISABLE_WARNING_FORMAT_NONLITERAL;
         snprintf(buffer, sizeof(buffer), format, text, file, line, func);
+        REENABLE_WARNING;
 
         char_array_0(buffer);
         log_abort_msg = buffer;
 
         log_dispatch(level, file, line, func, NULL, NULL, buffer);
 }
-#pragma GCC diagnostic pop
 
 noreturn void log_assert_failed(const char *text, const char *file, int line, const char *func) {
         log_assert(LOG_CRIT, text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting.");
index 959a9f7fb1533cd11d918ffee7fcc1b8ea22b19f..1941f0e6517c472536b0acacbfa30a0e37460f53 100644 (file)
         _Pragma("GCC diagnostic push");                                 \
         _Pragma("GCC diagnostic ignored \"-Wdeclaration-after-statement\"")
 
+#define DISABLE_WARNING_FORMAT_NONLITERAL                               \
+        _Pragma("GCC diagnostic push");                                 \
+        _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"")
+
 #define REENABLE_WARNING                                                \
         _Pragma("GCC diagnostic pop")
 
index 9b99d1ff9fd5311df4cb80532c8b6cbb34008baa..828b349d9c50610ffd2fc523368d33863f086a20 100644 (file)
@@ -38,8 +38,6 @@
 #define LONG(x) ((x)/BITS_PER_LONG)
 #define test_bit(bit, array)    ((array[LONG(bit)] >> OFF(bit)) & 1)
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
 /*
  * Read a capability attribute and return bitmask.
  * @param dev udev_device
@@ -84,11 +82,13 @@ static void get_cap_mask(struct udev_device *dev,
                 /* skip over leading zeros */
                 while (bitmask[val-1] == 0 && val > 0)
                         --val;
-                for (i = 0; i < val; ++i)
+                for (i = 0; i < val; ++i) {
+                        DISABLE_WARNING_FORMAT_NONLITERAL;
                         log_debug(text, i * BITS_PER_LONG, bitmask[i]);
+                        REENABLE_WARNING;
+                }
         }
 }
-#pragma GCC diagnostic pop
 
 /* pointer devices */
 static void test_pointers (struct udev_device *dev,