[3/4] wpp: Add error management callbacks.
Matteo Bruni
matteo.mystral at gmail.com
Mon Oct 5 11:33:54 CDT 2009
-------------- next part --------------
From 958874d3256e35ff835b51f11292235f75f8eeb5 Mon Sep 17 00:00:00 2001
From: Matteo Bruni <matteo.mystral at gmail.com>
Date: Tue, 29 Sep 2009 12:34:17 +0200
Subject: wpp: Add error management callbacks.
---
include/wine/wpp.h | 8 ++++++++
libs/wpp/preproc.c | 24 +++++++++++++++++++++---
libs/wpp/wpp.c | 7 +++++++
libs/wpp/wpp_private.h | 3 +++
4 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/include/wine/wpp.h b/include/wine/wpp.h
index 86575b1..8575fdd 100644
--- a/include/wine/wpp.h
+++ b/include/wine/wpp.h
@@ -34,4 +34,12 @@ extern char *wpp_find_include( const char *name, const char *parent_name );
extern int wpp_parse( const char *input, FILE *output );
extern int wpp_parse_temp( const char *input, const char *output_base, char **output_name );
+struct wpp_callbacks {
+ /* Error callbacks */
+ void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+ void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+};
+
+void wpp_set_callbacks( struct wpp_callbacks *callbacks );
+
#endif /* __WINE_WPP_H */
diff --git a/libs/wpp/preproc.c b/libs/wpp/preproc.c
index cd46fc2..f108b8a 100644
--- a/libs/wpp/preproc.c
+++ b/libs/wpp/preproc.c
@@ -674,13 +674,31 @@ end:
fprintf(stderr, "\n");
}
+void wpp_default_error(const char *file, int line, int col, const char *near, const char *msg, va_list ap)
+{
+ generic_msg(msg, "Error", near, ap);
+ exit(1);
+}
+
+void wpp_default_warning(const char *file, int line, int col, const char *near, const char *msg, va_list ap)
+{
+ generic_msg(msg, "Warning", near, ap);
+}
+
+struct wpp_callbacks default_callbacks = {
+ wpp_default_error,
+ wpp_default_warning,
+};
+
+struct wpp_callbacks *wpp_callbacks = &default_callbacks;
+
int ppy_error(const char *s, ...)
{
va_list ap;
va_start(ap, s);
- generic_msg(s, "Error", ppy_text, ap);
+ wpp_callbacks->error(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap);
va_end(ap);
- exit(1);
+ pp_status.state = 1;
return 1;
}
@@ -688,7 +706,7 @@ int ppy_warning(const char *s, ...)
{
va_list ap;
va_start(ap, s);
- generic_msg(s, "Warning", ppy_text, ap);
+ wpp_callbacks->warning(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap);
va_end(ap);
return 0;
}
diff --git a/libs/wpp/wpp.c b/libs/wpp/wpp.c
index e3541fe..ba9f29c 100644
--- a/libs/wpp/wpp.c
+++ b/libs/wpp/wpp.c
@@ -230,3 +230,10 @@ int wpp_parse_temp( const char *input, const char *output_base, char **output_na
fclose( output );
return ret;
}
+
+void wpp_set_callbacks(struct wpp_callbacks *callbacks)
+{
+ if(callbacks)
+ wpp_callbacks = callbacks;
+ else wpp_callbacks = &default_callbacks;
+}
diff --git a/libs/wpp/wpp_private.h b/libs/wpp/wpp_private.h
index c0b95a4..d7f9e2a 100644
--- a/libs/wpp/wpp_private.h
+++ b/libs/wpp/wpp_private.h
@@ -218,6 +218,9 @@ int pp_get_if_depth(void);
#define __attribute__(x) /*nothing*/
#endif
+extern struct wpp_callbacks *wpp_callbacks;
+extern struct wpp_callbacks default_callbacks;
+
int ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
int ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
void pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));
--
1.6.3.3
More information about the wine-patches
mailing list