Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
9086c59d
Commit
9086c59d
authored
Sep 28, 2009
by
Matteo Bruni
Committed by
Alexandre Julliard
Oct 06, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wpp: Handle remaining memory allocation failures.
parent
239265fd
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
84 additions
and
20 deletions
+84
-20
wpp.h
include/wine/wpp.h
+4
-3
preproc.c
libs/wpp/preproc.c
+43
-8
wpp.c
libs/wpp/wpp.c
+36
-8
wpp_private.h
libs/wpp/wpp_private.h
+1
-1
No files found.
include/wine/wpp.h
View file @
9086c59d
...
...
@@ -23,12 +23,13 @@
#include <stdio.h>
extern
void
wpp_add_define
(
const
char
*
name
,
const
char
*
value
);
/* Return value == 0 means successful execution */
extern
int
wpp_add_define
(
const
char
*
name
,
const
char
*
value
);
extern
void
wpp_del_define
(
const
char
*
name
);
extern
void
wpp_add_cmdline_define
(
const
char
*
value
);
extern
int
wpp_add_cmdline_define
(
const
char
*
value
);
extern
void
wpp_set_debug
(
int
lex_debug
,
int
parser_debug
,
int
msg_debug
);
extern
void
wpp_set_pedantic
(
int
on
);
extern
void
wpp_add_include_path
(
const
char
*
path
);
extern
int
wpp_add_include_path
(
const
char
*
path
);
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
);
...
...
libs/wpp/preproc.c
View file @
9086c59d
...
...
@@ -82,8 +82,8 @@ void *pp_xmalloc(size_t size)
res
=
malloc
(
size
);
if
(
res
==
NULL
)
{
fprintf
(
stderr
,
"Virtual memory exhausted.
\n
"
);
exit
(
2
)
;
/* Set the error flag */
pp_status
.
state
=
1
;
}
return
res
;
}
...
...
@@ -96,8 +96,8 @@ void *pp_xrealloc(void *p, size_t size)
res
=
realloc
(
p
,
size
);
if
(
res
==
NULL
)
{
fprintf
(
stderr
,
"Virtual memory exhausted.
\n
"
);
exit
(
2
)
;
/* Set the error flag */
pp_status
.
state
=
1
;
}
return
res
;
}
...
...
@@ -177,13 +177,16 @@ static void free_pp_entry( pp_entry_t *ppp, int idx )
}
/* push a new (empty) define state */
void
pp_push_define_state
(
void
)
int
pp_push_define_state
(
void
)
{
pp_def_state_t
*
state
=
pp_xmalloc
(
sizeof
(
*
state
)
);
if
(
!
state
)
return
1
;
memset
(
state
->
defines
,
0
,
sizeof
(
state
->
defines
)
);
state
->
next
=
pp_def_state
;
pp_def_state
=
state
;
return
0
;
}
/* pop the current define state */
...
...
@@ -349,10 +352,12 @@ pp_entry_t *pp_add_macro(char *id, marg_t *args[], int nargs, mtext_t *exp)
static
char
**
includepath
;
static
int
nincludepath
=
0
;
void
wpp_add_include_path
(
const
char
*
path
)
int
wpp_add_include_path
(
const
char
*
path
)
{
char
*
tok
;
char
*
cpy
=
pp_xstrdup
(
path
);
if
(
!
cpy
)
return
1
;
tok
=
strtok
(
cpy
,
INCLUDESEPARATOR
);
while
(
tok
)
...
...
@@ -360,7 +365,14 @@ void wpp_add_include_path(const char *path)
if
(
*
tok
)
{
char
*
dir
;
char
*
cptr
;
char
**
new_path
;
dir
=
pp_xstrdup
(
tok
);
if
(
!
dir
)
{
free
(
cpy
);
return
1
;
}
for
(
cptr
=
dir
;
*
cptr
;
cptr
++
)
{
/* Convert to forward slash */
...
...
@@ -372,13 +384,21 @@ void wpp_add_include_path(const char *path)
*
cptr
=
'\0'
;
/* Add to list */
new_path
=
pp_xrealloc
(
includepath
,
(
nincludepath
+
1
)
*
sizeof
(
*
includepath
));
if
(
!
new_path
)
{
free
(
dir
);
free
(
cpy
);
return
1
;
}
includepath
=
new_path
;
includepath
[
nincludepath
]
=
dir
;
nincludepath
++
;
includepath
=
pp_xrealloc
(
includepath
,
nincludepath
*
sizeof
(
*
includepath
));
includepath
[
nincludepath
-
1
]
=
dir
;
}
tok
=
strtok
(
NULL
,
INCLUDESEPARATOR
);
}
free
(
cpy
);
return
0
;
}
char
*
wpp_find_include
(
const
char
*
name
,
const
char
*
parent_name
)
...
...
@@ -390,6 +410,8 @@ char *wpp_find_include(const char *name, const char *parent_name)
int
i
,
fd
;
cpy
=
pp_xmalloc
(
strlen
(
name
)
+
1
);
if
(
!
cpy
)
return
NULL
;
cptr
=
cpy
;
for
(
ccptr
=
name
;
*
ccptr
;
ccptr
++
)
...
...
@@ -415,6 +437,11 @@ char *wpp_find_include(const char *name, const char *parent_name)
if
((
p
=
strrchr
(
parent_name
,
'/'
)))
p
++
;
else
p
=
parent_name
;
path
=
pp_xmalloc
(
(
p
-
parent_name
)
+
strlen
(
cpy
)
+
1
);
if
(
!
path
)
{
free
(
cpy
);
return
NULL
;
}
memcpy
(
path
,
parent_name
,
p
-
parent_name
);
strcpy
(
path
+
(
p
-
parent_name
),
cpy
);
fd
=
open
(
path
,
O_RDONLY
);
...
...
@@ -430,6 +457,11 @@ char *wpp_find_include(const char *name, const char *parent_name)
for
(
i
=
0
;
i
<
nincludepath
;
i
++
)
{
path
=
pp_xmalloc
(
strlen
(
includepath
[
i
])
+
strlen
(
cpy
)
+
2
);
if
(
!
path
)
{
free
(
cpy
);
return
NULL
;
}
strcpy
(
path
,
includepath
[
i
]);
strcat
(
path
,
"/"
);
strcat
(
path
,
cpy
);
...
...
@@ -630,11 +662,14 @@ static void generic_msg(const char *s, const char *t, const char *n, va_list ap)
if
(
n
)
{
cpy
=
pp_xstrdup
(
n
);
if
(
!
cpy
)
goto
end
;
for
(
p
=
cpy
;
*
p
;
p
++
)
if
(
!
isprint
(
*
p
))
*
p
=
' '
;
fprintf
(
stderr
,
" near '%s'"
,
cpy
);
free
(
cpy
);
}
}
end:
#endif
fprintf
(
stderr
,
"
\n
"
);
}
...
...
libs/wpp/wpp.c
View file @
9086c59d
...
...
@@ -62,15 +62,17 @@ static void add_special_defines(void)
pp_add_define
(
pp_xstrdup
(
"__TIME__"
),
pp_xstrdup
(
buf
)
);
ppp
=
pp_add_define
(
pp_xstrdup
(
"__FILE__"
),
pp_xstrdup
(
""
)
);
ppp
->
type
=
def_special
;
if
(
ppp
)
ppp
->
type
=
def_special
;
ppp
=
pp_add_define
(
pp_xstrdup
(
"__LINE__"
),
pp_xstrdup
(
""
)
);
ppp
->
type
=
def_special
;
if
(
ppp
)
ppp
->
type
=
def_special
;
}
/* add a define to the preprocessor list */
void
wpp_add_define
(
const
char
*
name
,
const
char
*
value
)
int
wpp_add_define
(
const
char
*
name
,
const
char
*
value
)
{
struct
define
*
def
;
...
...
@@ -80,17 +82,35 @@ void wpp_add_define( const char *name, const char *value )
{
if
(
!
strcmp
(
def
->
name
,
name
))
{
char
*
new_value
=
pp_xstrdup
(
value
);
if
(
!
new_value
)
return
1
;
free
(
def
->
value
);
def
->
value
=
pp_xstrdup
(
value
);
return
;
def
->
value
=
new_value
;
return
0
;
}
}
def
=
pp_xmalloc
(
sizeof
(
*
def
)
);
if
(
!
def
)
return
1
;
def
->
next
=
cmdline_defines
;
def
->
name
=
pp_xstrdup
(
name
);
if
(
!
def
->
name
)
{
free
(
def
);
return
1
;
}
def
->
value
=
pp_xstrdup
(
value
);
if
(
!
def
->
value
)
{
free
(
def
->
name
);
free
(
def
);
return
1
;
}
cmdline_defines
=
def
;
return
0
;
}
...
...
@@ -112,13 +132,17 @@ void wpp_del_define( const char *name )
/* add a command-line define of the form NAME=VALUE */
void
wpp_add_cmdline_define
(
const
char
*
value
)
int
wpp_add_cmdline_define
(
const
char
*
value
)
{
char
*
p
;
char
*
str
=
pp_xstrdup
(
value
);
char
*
p
=
strchr
(
str
,
'='
);
if
(
!
str
)
return
1
;
p
=
strchr
(
str
,
'='
);
if
(
p
)
*
p
++
=
0
;
wpp_add_define
(
str
,
p
);
free
(
str
);
return
0
;
}
...
...
@@ -146,7 +170,9 @@ int wpp_parse( const char *input, FILE *output )
pp_status
.
input
=
NULL
;
pp_status
.
state
=
0
;
pp_push_define_state
();
ret
=
pp_push_define_state
();
if
(
ret
)
return
ret
;
add_cmdline_defines
();
add_special_defines
();
...
...
@@ -182,6 +208,8 @@ int wpp_parse_temp( const char *input, const char *output_base, char **output_na
if
(
!
output_base
||
!
output_base
[
0
])
output_base
=
"wpptmp"
;
temp_name
=
pp_xmalloc
(
strlen
(
output_base
)
+
8
);
if
(
!
temp_name
)
return
1
;
strcpy
(
temp_name
,
output_base
);
strcat
(
temp_name
,
".XXXXXX"
);
...
...
libs/wpp/wpp_private.h
View file @
9086c59d
...
...
@@ -202,7 +202,7 @@ void *pp_xmalloc(size_t);
void
*
pp_xrealloc
(
void
*
,
size_t
);
char
*
pp_xstrdup
(
const
char
*
str
);
pp_entry_t
*
pplookup
(
const
char
*
ident
);
void
pp_push_define_state
(
void
);
int
pp_push_define_state
(
void
);
void
pp_pop_define_state
(
void
);
pp_entry_t
*
pp_add_define
(
char
*
def
,
char
*
text
);
pp_entry_t
*
pp_add_macro
(
char
*
ident
,
marg_t
*
args
[],
int
nargs
,
mtext_t
*
exp
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment