Don't crash when using `define value for an `include argument.

When pushing the current file path we need to get past any `define
expansions that have been pushed onto the stack to find the real
file path.

This patch is partially based on a patch submitted by Steve Tell.
(cherry picked from commit b2d479eaf6)
This commit is contained in:
Cary R 2010-06-07 15:13:56 -07:00 committed by Stephen Williams
parent e11f4cf69e
commit 6d56e356b4
1 changed files with 12 additions and 4 deletions

View File

@ -1483,9 +1483,16 @@ static void do_include()
unsigned idx, start = 1; unsigned idx, start = 1;
char path[4096]; char path[4096];
char *cp; char *cp;
struct include_stack_t* isp;
/* Add the current path to the start of the include_dir list. */ /* Add the current path to the start of the include_dir list. */
strcpy(path, istack->path); isp = istack;
while(isp && (isp->path == NULL))
isp = isp->next;
assert(isp);
strcpy(path, isp->path);
cp = strrchr(path, '/'); cp = strrchr(path, '/');
/* I may need the relative path for a planned warning even when /* I may need the relative path for a planned warning even when
@ -1508,7 +1515,8 @@ static void do_include()
} }
} }
fprintf(stderr, "%s:%u: Include file %s not found\n", istack->path, istack->lineno, standby->path); emit_pathline(istack);
fprintf(stderr, "Include file %s not found\n", standby->path);
exit(1); exit(1);
code_that_switches_buffers: code_that_switches_buffers: