Split printf.h according to 'poison pattern'
authorMiles Rout <miles.rout@gmail.com>
Mon, 25 Nov 2019 10:27:26 +0000 (23:27 +1300)
committerMiles Rout <miles.rout@gmail.com>
Mon, 25 Nov 2019 10:27:26 +0000 (23:27 +1300)
The pattern is to have two copies of an include file, in this case
printf.h and _printf.h. The latter is #included only in the
implementation file, and provides prototypes. The former #includes the
latter, but also poisons all the identifiers.

This pattern is because otherwise it's very easy to forget to use the e*
versions of functions. Using e.g. printf instead of eprintf is an easy
mistake to make, and will result in errors being silently ignored.

as/include/_printf.h [new file with mode: 0644]
as/include/printf.h
as/src/printf.c

diff --git a/as/include/_printf.h b/as/include/_printf.h
new file mode 100644 (file)
index 0000000..973918a
--- /dev/null
@@ -0,0 +1,3 @@
+void evfprintf(FILE *file, const char *fmt, va_list args);
+void efprintf(FILE *file, const char *fmt, ...);
+void eprintf(const char *fmt, ...);
index 973918ad18e2a9b6a850323912c58a8ae1a80836..cf87aefa40e3dc2f74acd993b29e9f2458653535 100644 (file)
@@ -1,3 +1,4 @@
-void evfprintf(FILE *file, const char *fmt, va_list args);
-void efprintf(FILE *file, const char *fmt, ...);
-void eprintf(const char *fmt, ...);
+#include "_printf.h"
+#pragma GCC poison vfprintf
+#pragma GCC poison fprintf
+#pragma GCC poison printf
index 1152d0828c11821c42c687f341322a488537fc22..4d162a2b8bc9d944a0b6d3249c4d13226a4cb278 100644 (file)
@@ -1,7 +1,7 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include "abort.h"
-#include "printf.h"
+#include "_printf.h"
 
 #include <errno.h>
 #include <stdlib.h>