mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-15 03:48:11 +08:00
2007-10-08 Carlos O'Donell <carlos@codesourcery.com>
* resrc.c (read_rc_file): Rename e to edit, and c to dir. Pass dir to windres_add_include_dir. Add comments. (close_input_stream): Check pclose error, and call fatal if the preprocessor failed. * windres.c (windres_add_include_dir): Assert that p is non-NULL, and not an empty string.
This commit is contained in:
@ -441,30 +441,37 @@ read_rc_file (const char *filename, const char *preprocessor,
|
|||||||
/* Setup the default resource import path taken from input file. */
|
/* Setup the default resource import path taken from input file. */
|
||||||
else if (strchr (filename, '/') != NULL || strchr (filename, '\\') != NULL)
|
else if (strchr (filename, '/') != NULL || strchr (filename, '\\') != NULL)
|
||||||
{
|
{
|
||||||
char *e, *c;
|
char *edit, *dir;
|
||||||
|
|
||||||
if (filename[0] == '/'
|
if (filename[0] == '/'
|
||||||
|| filename[0] == '\\'
|
|| filename[0] == '\\'
|
||||||
|| filename[1] == ':')
|
|| filename[1] == ':')
|
||||||
e = c = xstrdup (filename);
|
/* Absolute path. */
|
||||||
|
edit = dir = xstrdup (filename);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
e = c = xmalloc (strlen (filename) + 3);
|
/* Relative path. */
|
||||||
sprintf (c, "./%s", filename);
|
edit = dir = xmalloc (strlen (filename) + 3);
|
||||||
|
sprintf (dir, "./%s", filename);
|
||||||
}
|
}
|
||||||
e += strlen (c);
|
|
||||||
while (e > c && (e[-1] != '\\' && e[-1] != '/'))
|
|
||||||
{
|
|
||||||
--e;
|
|
||||||
e[0] = 0;
|
|
||||||
}
|
|
||||||
/* Cut off trailing slash. */
|
|
||||||
--e;
|
|
||||||
e[0] = 0;
|
|
||||||
while ((e = strchr (c, '\\')) != NULL)
|
|
||||||
*e = '/';
|
|
||||||
|
|
||||||
windres_add_include_dir (e);
|
/* Walk dir backwards stopping at the first directory separator. */
|
||||||
|
edit += strlen (dir);
|
||||||
|
while (edit > dir && (edit[-1] != '\\' && edit[-1] != '/'))
|
||||||
|
{
|
||||||
|
--edit;
|
||||||
|
edit[0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cut off trailing slash. */
|
||||||
|
--edit;
|
||||||
|
edit[0] = 0;
|
||||||
|
|
||||||
|
/* Convert all back slashes to forward slashes. */
|
||||||
|
while ((edit = strchr (dir, '\\')) != NULL)
|
||||||
|
*edit = '/';
|
||||||
|
|
||||||
|
windres_add_include_dir (dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
istream_type = (use_temp_file) ? ISTREAM_FILE : ISTREAM_PIPE;
|
istream_type = (use_temp_file) ? ISTREAM_FILE : ISTREAM_PIPE;
|
||||||
@ -588,7 +595,19 @@ close_input_stream (void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cpp_pipe != NULL)
|
if (cpp_pipe != NULL)
|
||||||
pclose (cpp_pipe);
|
{
|
||||||
|
int err;
|
||||||
|
err = pclose (cpp_pipe);
|
||||||
|
/* We are reading from a pipe, therefore we don't
|
||||||
|
know if cpp failed or succeeded until pclose. */
|
||||||
|
if (err != 0 || errno == ECHILD)
|
||||||
|
{
|
||||||
|
/* Since this is also run via xatexit, safeguard. */
|
||||||
|
cpp_pipe = NULL;
|
||||||
|
cpp_temp_file = NULL;
|
||||||
|
fatal (_("preprocessing failed."));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Since this is also run via xatexit, safeguard. */
|
/* Since this is also run via xatexit, safeguard. */
|
||||||
|
@ -765,6 +765,12 @@ windres_add_include_dir (const char *p)
|
|||||||
{
|
{
|
||||||
struct include_dir *n, **pp;
|
struct include_dir *n, **pp;
|
||||||
|
|
||||||
|
/* Computing paths is often complicated and error prone.
|
||||||
|
The easiest way to check for mistakes is at the time
|
||||||
|
we add them to include_dirs. */
|
||||||
|
assert (p != NULL);
|
||||||
|
assert (*p != '\0');
|
||||||
|
|
||||||
n = xmalloc (sizeof *n);
|
n = xmalloc (sizeof *n);
|
||||||
n->next = NULL;
|
n->next = NULL;
|
||||||
n->dir = (char * ) p;
|
n->dir = (char * ) p;
|
||||||
|
Reference in New Issue
Block a user