[5/6] wpp: Remove the assumption pp_internal_error calls exit()
Matteo Bruni
matteo.mystral at gmail.com
Thu Sep 10 10:41:24 CDT 2009
-------------- next part --------------
From da9c639ba4338eb5ce4c773b85ce6380f8087b7c Mon Sep 17 00:00:00 2001
From: Matteo Bruni <matteo.mystral at gmail.com>
Date: Sun, 6 Sep 2009 00:26:58 +0200
Subject: wpp: Remove the assumption pp_internal_error calls exit()
---
libs/wpp/ppl.l | 32 +++++++++++++++++++++++++++-----
libs/wpp/preproc.c | 4 ++++
2 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/libs/wpp/ppl.l b/libs/wpp/ppl.l
index d303118..c458489 100644
--- a/libs/wpp/ppl.l
+++ b/libs/wpp/ppl.l
@@ -553,10 +553,13 @@ void writestring( const char *format, ... )
<pp_macign>{ws}*\\\r?\n newline(0);
<pp_macign>{ws}+|{ws}*\\\r?|. {
macexpstackentry_t *mac = pop_macro();
- yy_pop_state();
- put_buffer(mac->ppp->ident, strlen(mac->ppp->ident));
- put_buffer(ppy_text, ppy_leng);
- free_macro(mac);
+ if(mac)
+ {
+ yy_pop_state();
+ put_buffer(mac->ppp->ident, strlen(mac->ppp->ident));
+ put_buffer(ppy_text, ppy_leng);
+ free_macro(mac);
+ }
}
/*
@@ -783,7 +786,8 @@ void writestring( const char *format, ... )
{
macexpstackentry_t *mac;
mac = pop_macro();
- expand_macro(mac);
+ if(mac)
+ expand_macro(mac);
}
ppy__delete_buffer(b);
}
@@ -990,7 +994,10 @@ static void expand_special(pp_entry_t *ppp)
sprintf(buf, "\"%s\"", pp_status.input);
}
else
+ {
pp_internal_error(__FILE__, __LINE__, "Special macro '%s' not found...\n", ppp->ident);
+ return;
+ }
if(pp_flex_debug)
fprintf(stderr, "expand_special(%d): %s:%d: '%s' -> '%s'\n",
@@ -1298,7 +1305,10 @@ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop)
if(ppy_debug)
printf("push_buffer(%d): %p %p %p %d\n", bufferstackidx, ppp, filename, incname, pop);
if(bufferstackidx >= MAXBUFFERSTACK)
+ {
pp_internal_error(__FILE__, __LINE__, "Buffer stack overflow");
+ return;
+ }
memset(&bufferstack[bufferstackidx], 0, sizeof(bufferstack[0]));
bufferstack[bufferstackidx].bufferstate = YY_CURRENT_BUFFER;
@@ -1324,14 +1334,20 @@ static void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop)
ncontinuations = 0;
}
else if(!pop)
+ {
pp_internal_error(__FILE__, __LINE__, "Pushing buffer without knowing where to go to");
+ return;
+ }
bufferstackidx++;
}
static bufferstackentry_t *pop_buffer(void)
{
if(bufferstackidx < 0)
+ {
pp_internal_error(__FILE__, __LINE__, "Bufferstack underflow?");
+ return NULL;
+ }
if(bufferstackidx == 0)
return NULL;
@@ -1400,7 +1416,10 @@ static bufferstackentry_t *pop_buffer(void)
if(yy_current_state() == pp_macexp)
macro_add_expansion();
else
+ {
pp_internal_error(__FILE__, __LINE__, "Pop buffer and state without macro expansion state");
+ return &bufferstack[bufferstackidx];
+ }
yy_pop_state();
}
@@ -1437,7 +1456,10 @@ static macexpstackentry_t *top_macro(void)
static macexpstackentry_t *pop_macro(void)
{
if(macexpstackidx <= 0)
+ {
pp_internal_error(__FILE__, __LINE__, "Macro expansion stack underflow\n");
+ return NULL;
+ }
return macexpstack[--macexpstackidx];
}
diff --git a/libs/wpp/preproc.c b/libs/wpp/preproc.c
index 1c1e582..2eb055d 100644
--- a/libs/wpp/preproc.c
+++ b/libs/wpp/preproc.c
@@ -585,7 +585,10 @@ static const char * const pp_if_state_str[] = {
void pp_push_if(pp_if_state_t s)
{
if(if_stack_idx >= MAXIFSTACK)
+ {
pp_internal_error(__FILE__, __LINE__, "#if-stack overflow; #{if,ifdef,ifndef} nested too deeply (> %d)", MAXIFSTACK);
+ return;
+ }
if(pp_flex_debug)
fprintf(stderr, "Push if %s:%d: %s(%d) -> %s(%d)\n", pp_status.input, pp_status.line_number, pp_if_state_str[pp_if_state()], if_stack_idx, pp_if_state_str[s], if_stack_idx+1);
@@ -629,6 +632,7 @@ pp_if_state_t pp_pop_if(void)
break;
default:
pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d)", (int)pp_if_state());
+ return if_error;
}
if(pp_flex_debug)
--
1.6.3.3
More information about the wine-patches
mailing list