Add compile-time checks on expanding-string function use
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 9 Jun 2017 00:20:07 +0000 (01:20 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Tue, 13 Jun 2017 18:45:55 +0000 (19:45 +0100)
src/src/functions.h
src/src/mytypes.h

index 4be375d7792c71480a8da3f994ef67584c2f2c6d..34f6434d0c1a28fc28c544dc5a4ebf498c8fc5e3 100644 (file)
@@ -14,7 +14,7 @@ are in in fact in separate headers. */
 
 #ifdef EXIM_PERL
 extern uschar *call_perl_cat(uschar *, int *, int *, uschar **, uschar *,
-                 uschar **);
+                 uschar **) WARN_UNUSED_RESULT;
 extern void    cleanup_perl(void);
 extern uschar *init_perl(uschar *);
 #endif
@@ -439,12 +439,12 @@ extern int     stdin_getc(unsigned);
 extern int     stdin_feof(void);
 extern int     stdin_ferror(void);
 extern int     stdin_ungetc(int);
-extern uschar *string_append(uschar *, int *, int *, int, ...);
+extern uschar *string_append(uschar *, int *, int *, int, ...) WARN_UNUSED_RESULT;
 extern uschar *string_append_listele(uschar *, uschar, const uschar *);
 extern uschar *string_append_listele_n(uschar *, uschar, const uschar *, unsigned);
 extern uschar *string_base62(unsigned long int);
-extern uschar *string_cat(uschar *, int *, int *, const uschar *);
-extern uschar *string_catn(uschar *, int *, int *, const uschar *, int);
+extern uschar *string_cat(uschar *, int *, int *, const uschar *) WARN_UNUSED_RESULT;
+extern uschar *string_catn(uschar *, int *, int *, const uschar *, int) WARN_UNUSED_RESULT;
 extern int     string_compare_by_pointer(const void *, const void *);
 extern uschar *string_copy_dnsdomain(uschar *);
 extern uschar *string_copy_malloc(const uschar *);
index b288a32cbcb8e47c6cb54489a3b52a153f5c022d..a74705739496ed5781f616d24984046dd1a43b1f 100644 (file)
@@ -30,11 +30,13 @@ local_scan.h includes it and exim.h includes them both (to get this earlier). */
 the arguments of printf-like functions. This is done by a macro. */
 
 #if defined(__GNUC__) || defined(__clang__)
-# define PRINTF_FUNCTION(A,B)  __attribute__((format(printf,A,B)))
-# define ARG_UNUSED  __attribute__((__unused__))
+# define PRINTF_FUNCTION(A,B)  __attribute__((format(printf,A,B)))
+# define ARG_UNUSED            __attribute__((__unused__))
+# define WARN_UNUSED_RESULT    __attribute__((__warn_unused_result__))
 #else
 # define PRINTF_FUNCTION(A,B)
 # define ARG_UNUSED  /**/
+# define WARN_UNUSED_RESULT /**/
 #endif
 
 #ifdef WANT_DEEPER_PRINTF_CHECKS