]> granicus.if.org Git - jq/commitdiff
Use __attribute__ __printf__ with GCC
authorNicolas Williams <nico@cryptonector.com>
Wed, 24 Dec 2014 03:52:03 +0000 (21:52 -0600)
committerNicolas Williams <nico@cryptonector.com>
Wed, 24 Dec 2014 05:22:57 +0000 (23:22 -0600)
execute.c
jv.h
main.c

index 1cab3ba0f44b6b1be801ffdac1d9dde7234ca705..2b8a05725b9daf9f12002d8352156f4ee19482df 100644 (file)
--- a/execute.c
+++ b/execute.c
@@ -802,11 +802,11 @@ jv jq_format_error(jv msg) {
 
   if (jv_get_kind(msg) != JV_KIND_INVALID) {
     if (jv_get_kind(msg) == JV_KIND_STRING)
-      return jv_string_fmt("jq: error: %s", msg);
+      return jv_string_fmt("jq: error: %s", jv_string_value(msg));
 
     msg = jv_dump_string(msg, JV_PRINT_INVALID);
     if (jv_get_kind(msg) == JV_KIND_STRING)
-      return jv_string_fmt("jq: error: %s", msg);
+      return jv_string_fmt("jq: error: %s", jv_string_value(msg));
     return jq_format_error(jv_null());  // ENOMEM
   }
 
diff --git a/jv.h b/jv.h
index 5dca65cde888fac5543afd0073861a3c8cc1dac0..67833ad1401bc9c8839e40202d04ca17b150a5c0 100644 (file)
--- a/jv.h
+++ b/jv.h
@@ -91,6 +91,13 @@ jv jv_array_indexes(jv, jv);
 #define JV_ARRAY(...) \
   JV_ARRAY_IDX(__VA_ARGS__, JV_ARRAY_7, JV_ARRAY_6, JV_ARRAY_5, JV_ARRAY_4, JV_ARRAY_3, JV_ARRAY_2, JV_ARRAY_1)(__VA_ARGS__)
 
+#ifdef __GNUC__
+#define JV_PRINTF_LIKE(fmt_arg_num, args_num) \
+  __attribute__ ((__format__( __printf__, fmt_arg_num, args_num)))
+#define JV_VPRINTF_LIKE(fmt_arg_num) \
+  __attribute__ ((__format__( __printf__, fmt_arg_num, 0)))
+#endif
+
 
 jv jv_string(const char*);
 jv jv_string_sized(const char*, int);
@@ -102,8 +109,8 @@ const char* jv_string_value(jv);
 jv jv_string_indexes(jv j, jv k);
 jv jv_string_slice(jv j, int start, int end);
 jv jv_string_concat(jv, jv);
-jv jv_string_vfmt(const char*, va_list);
-jv jv_string_fmt(const char*, ...);
+jv jv_string_vfmt(const char*, va_list) JV_VPRINTF_LIKE(1);
+jv jv_string_fmt(const char*, ...) JV_PRINTF_LIKE(1, 2);
 jv jv_string_append_codepoint(jv a, uint32_t c);
 jv jv_string_append_buf(jv a, const char* buf, int len);
 jv jv_string_append_str(jv a, const char* str);
diff --git a/main.c b/main.c
index 34cd77397e3acfbe6af4b002fb648c2fa8a49fa7..1c9b7fe295e8caac322290a0c1a700163d05f830 100644 (file)
--- a/main.c
+++ b/main.c
@@ -398,7 +398,7 @@ int main(int argc, char* argv[]) {
   if (strchr(JQ_VERSION, '-') == NULL)
     jq_set_attr(jq, jv_string("VERSION_DIR"), jv_string(JQ_VERSION));
   else
-    jq_set_attr(jq, jv_string("VERSION_DIR"), jv_string_fmt("%.*s-master", strchr(JQ_VERSION, '-') - JQ_VERSION, JQ_VERSION));
+    jq_set_attr(jq, jv_string("VERSION_DIR"), jv_string_fmt("%.*s-master", (int)(strchr(JQ_VERSION, '-') - JQ_VERSION), JQ_VERSION));
 
 #if (!defined(WIN32) && defined(HAVE_ISATTY)) || defined(HAVE__ISATTY)