tccpp: alternative fix for #include_next infinite loop bug
This replaces commit 3d409b0889
- revert old fix in libtcc.c
- #include_next: look up the file in the include stack to see
if it is already included.
Also:
- streamline include code
- remove 'type' from struct CachedInclude (obsolete because we check
full filename anyway)
- remove inc_type & inc_filename from struct Bufferedfile (obsolete)
- fix bug with TOK_FLAG_ENDIF not being reset
- unrelated: get rid of an 'variable potentially uninitialized' warning
This commit is contained in:
27
libtcc.c
27
libtcc.c
@ -34,10 +34,6 @@ ST_DATA struct TCCState *tcc_state;
|
||||
|
||||
/********************************************************/
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
#ifdef ONE_SOURCE
|
||||
#include "tccpp.c"
|
||||
#include "tccgen.c"
|
||||
@ -322,30 +318,7 @@ static void tcc_split_path(TCCState *s, void ***p_ary, int *p_nb_ary, const char
|
||||
}
|
||||
}
|
||||
cstr_ccat(&str, '\0');
|
||||
#ifndef _WIN32
|
||||
{
|
||||
int i, do_include;
|
||||
char tmp[PATH_MAX];
|
||||
|
||||
if (realpath(str.data, tmp)) {
|
||||
str.size = 0;
|
||||
cstr_cat(&str, tmp);
|
||||
cstr_ccat(&str, '\0');
|
||||
}
|
||||
|
||||
do_include = 1;
|
||||
for (i = 0; i < *p_nb_ary && do_include; i++) {
|
||||
do_include = do_include &&
|
||||
strcmp((char*)str.data, (char*)(*p_ary)[i]);
|
||||
}
|
||||
|
||||
if (do_include) {
|
||||
dynarray_add(p_ary, p_nb_ary, str.data);
|
||||
}
|
||||
}
|
||||
#else
|
||||
dynarray_add(p_ary, p_nb_ary, str.data);
|
||||
#endif
|
||||
in = p+1;
|
||||
} while (*p);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user