eina: add EINA_SENTINEL to help use of variadic functions
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 14 Aug 2012 20:58:36 +0000 (20:58 +0000)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 14 Aug 2012 20:58:36 +0000 (20:58 +0000)
Certain types of variadic functions use NULL as the last argument instead of a
string format (printf-like). Functions like these are: execl and execlp.

We are in feature freeze, but I believe this is small and simple enough to slip
in with no headaches. These functions are being used in the new edbus library
and it would be good to have it supported in eina now.

SVN revision: 75271

legacy/eina/src/include/eina_types.h

index d1e84dc..49eae1d 100644 (file)
@@ -99,6 +99,9 @@
 #ifdef EINA_LIKELY
 # undef EINA_LIKELY
 #endif
+#ifdef EINA_SENTINEL
+# undef EINA_SENTINEL
+#endif
 
 #ifdef __GNUC__
 # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
 #  define EINA_NOINSTRUMENT __attribute__((__no_instrument_function__))
 #  define EINA_UNLIKELY(exp)    __builtin_expect((exp), 0)
 #  define EINA_LIKELY(exp)      __builtin_expect((exp), 1)
+#  define EINA_SENTINEL __attribute__((__sentinel__))
 # else
 #  define EINA_PRINTF(fmt, arg)
 #  define EINA_SCANF(fmt, arg)
 #  define EINA_NOINSTRUMENT
 #  define EINA_UNLIKELY(exp) exp
 #  define EINA_LIKELY(exp)   exp
+#  define EINA_SENTINEL
 # endif
 
 #elif defined(_WIN32)
 # define EINA_NOINSTRUMENT
 # define EINA_UNLIKELY(exp) exp
 # define EINA_LIKELY(exp)   exp
+# define EINA_SENTINEL
 
 #elif defined(__SUNPRO_C)
 # define EINA_WARN_UNUSED_RESULT
 # define EINA_NOINSTRUMENT
 # define EINA_UNLIKELY(exp) exp
 # define EINA_LIKELY(exp)   exp
+# define EINA_SENTINEL
 
 #else /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
 
  * @param exp The expression to be used.
  */
 # define EINA_LIKELY(exp)   exp
+/**
+ * @def EINA_SENTINEL
+ * @brief Attribute from gcc to prevent calls without the necessary NULL
+ * sentinel in certain variadic functions
+ * @since 1.7.0
+ */
+# define EINA_SENTINEL
 #endif /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
 
 /**