On 2021/09/20 10:29, Stuart Henderson wrote:
> Some of these are pretty hairy and it's a moving codebase. Since they
> are applying compiler "printf-like" attribute to functions which are
> using their own functions rather than libc printf, and we are purely
> making this change to disable the spurious warning because there is
> no abort in their %n handling, can't we just disable the annotations
> instead?

actually my patch comment is too short, maybe this instead

Don't do printf-like checks on Exim's internal printf-like functions on
OpenBSD. libc printf functions abort() on %n use, and the compiler has 
been modified to warn about this; however this does not apply to Exim's 
functions which do still support %n. 



> Index: patches/patch-src_mytypes_h
> ===================================================================
> RCS file: patches/patch-src_mytypes_h
> diff -N patches/patch-src_mytypes_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-src_mytypes_h       20 Sep 2021 09:28:21 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +
> +Don't do printf-like checks on OpenBSD, which warn about %n use.
> +
> +Index: src/mytypes.h
> +--- src/mytypes.h.orig
> ++++ src/mytypes.h
> +@@ -33,7 +33,11 @@ local_scan.h includes it and exim.h includes them both
> + 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)))
> ++# if defined(__OpenBSD__)
> ++#  define PRINTF_FUNCTION(A,B)      /**/
> ++# else
> ++#  define PRINTF_FUNCTION(A,B)      __attribute__((format(printf,A,B)))
> ++# endif
> + # define ARG_UNUSED         __attribute__((__unused__))
> + # define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
> + # define ALLOC                      __attribute__((malloc))
> 
> 
> 

Reply via email to