aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--lib.h2
-rw-r--r--pre-process.c26
2 files changed, 28 insertions, 0 deletions
diff --git a/lib.h b/lib.h
index 682e54f5..5458fa71 100644
--- a/lib.h
+++ b/lib.h
@@ -123,6 +123,8 @@ enum phase {
extern void add_pre_buffer(const char *fmt, ...) FORMAT_ATTR(1);
extern void predefine(const char *name, int weak, const char *fmt, ...) FORMAT_ATTR(3);
+extern void predefine_strong(const char *name, ...) FORMAT_ATTR(1);
+extern void predefine_weak(const char *name, ...) FORMAT_ATTR(1);
extern void predefine_nostd(const char *name);
extern void predefined_macros(void);
diff --git a/pre-process.c b/pre-process.c
index 38167802..403e3507 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -1439,6 +1439,32 @@ void predefine_nostd(const char *name)
predefine(name, 1, "1");
}
+static void predefine_fmt(const char *fmt, int weak, va_list ap)
+{
+ static char buf[256];
+
+ vsnprintf(buf, sizeof(buf), fmt, ap);
+ predefine(buf, weak, "1");
+}
+
+void predefine_strong(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ predefine_fmt(fmt, 0, ap);
+ va_end(ap);
+}
+
+void predefine_weak(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ predefine_fmt(fmt, 1, ap);
+ va_end(ap);
+}
+
static int do_handle_define(struct stream *stream, struct token **line, struct token *token, int attr)
{
struct token *arglist, *expansion;