Просмотр исходного кода

Instead of testing for __GNUC__, use CHECK_SCANF, like CHECK_PRINTF.

This lets us have the possibility of fine-tuning the check in the tor_sscanf test cases at a later date.
dana koch 11 лет назад
Родитель
Сommit
7f67becf30
2 измененных файлов с 10 добавлено и 10 удалено
  1. 7 1
      src/common/compat.h
  2. 3 9
      src/common/util.h

+ 7 - 1
src/common/compat.h

@@ -84,13 +84,19 @@
 
 /* ===== Compiler compatibility */
 
-/* GCC can check printf types on arbitrary functions. */
+/* GCC can check printf and scanf types on arbitrary functions. */
 #ifdef __GNUC__
 #define CHECK_PRINTF(formatIdx, firstArg) \
    __attribute__ ((format(printf, formatIdx, firstArg)))
 #else
 #define CHECK_PRINTF(formatIdx, firstArg)
 #endif
+#ifdef __GNUC__
+#define CHECK_SCANF(formatIdx, firstArg) \
+   __attribute__ ((format(scanf, formatIdx, firstArg)))
+#else
+#define CHECK_SCANF(formatIdx, firstArg)
+#endif
 
 /* inline is __inline on windows. */
 #ifdef _WIN32

+ 3 - 9
src/common/util.h

@@ -233,16 +233,10 @@ const char *escaped(const char *string);
 char *tor_escape_str_for_socks_arg(const char *string);
 
 struct smartlist_t;
-int tor_vsscanf(const char *buf, const char *pattern, va_list ap)
-#ifdef __GNUC__
-  __attribute__((format(scanf, 2, 0)))
-#endif
-  ;
+int tor_vsscanf(const char *buf, const char *pattern, va_list ap) \
+  CHECK_SCANF(2, 0);
 int tor_sscanf(const char *buf, const char *pattern, ...)
-#ifdef __GNUC__
-  __attribute__((format(scanf, 2, 3)))
-#endif
-  ;
+  CHECK_SCANF(2, 3);
 
 void smartlist_add_asprintf(struct smartlist_t *sl, const char *pattern, ...)
   CHECK_PRINTF(2, 3);