From 6c10429aa5e7c65e725ed1989ddb856bbf7283aa Mon Sep 17 00:00:00 2001 From: grischka Date: Fri, 3 Apr 2009 20:54:34 +0200 Subject: [PATCH] check for absolute include paths Suggested by Sandor Zsolt --- tcc.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tcc.c b/tcc.c index 97c62c1..548440d 100644 --- a/tcc.c +++ b/tcc.c @@ -1078,16 +1078,19 @@ static int strstart(const char *str, const char *val, const char **ptr) } #endif +#ifdef _WIN32 +#define IS_PATHSEP(c) (c == '/' || c == '\\') +#define IS_ABSPATH(p) (IS_PATHSEP(p[0]) || (p[0] && p[1] == ':' && IS_PATHSEP(p[2]))) +#else +#define IS_PATHSEP(c) (c == '/') +#define IS_ABSPATH(p) IS_PATHSEP(p[0]) +#endif + /* extract the basename of a file */ static char *tcc_basename(const char *name) { char *p = strchr(name, 0); - while (p > name - && p[-1] != '/' -#ifdef _WIN32 - && p[-1] != '\\' -#endif - ) + while (p > name && !IS_PATHSEP(p[-1])) --p; return p; } @@ -3086,6 +3089,13 @@ static void preprocess(int is_bof) /* push current file in stack */ /* XXX: fix current line init */ *s1->include_stack_ptr++ = file; + + /* check absolute include path */ + if (IS_ABSPATH(buf)) { + f = tcc_open(s1, buf); + if (f) + goto found; + } if (c == '\"') { /* first search in current dir if "header.h" */ size = tcc_basename(file->filename) - file->filename;