From 3d409b08893873b917ccb8c34398bc41a4e84d7c Mon Sep 17 00:00:00 2001 From: Sergey Vinokurov Date: Thu, 20 Sep 2012 21:58:13 +0300 Subject: [PATCH] fix #include_next infinite loop bug, see http://savannah.nongnu.org/bugs/?31357 --- libtcc.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libtcc.c b/libtcc.c index b0a9b1a4..6c04caa0 100644 --- a/libtcc.c +++ b/libtcc.c @@ -34,6 +34,10 @@ ST_DATA struct TCCState *tcc_state; /********************************************************/ +#ifndef _WIN32 +#include +#endif + #ifdef ONE_SOURCE #include "tccpp.c" #include "tccgen.c" @@ -318,7 +322,30 @@ 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); } -- 2.11.4.GIT