Message ID | 20210301004423.48693-1-luc.vanoostenryck@gmail.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | pre-proc: do some path normalization | expand |
diff --git a/pre-process.c b/pre-process.c index 7a1478f6a0f1..3fb250828fa6 100644 --- a/pre-process.c +++ b/pre-process.c @@ -884,6 +884,12 @@ static void set_stream_include_path(struct stream *stream) memcpy(m, stream->name, len); m[len] = 0; path = m; + /* normalize this path */ + while (path[0] == '.' && path[1] == '/') { + path += 2; + while (path[0] == '/') + path++; + } } stream->path = path; }
An header file like 'header.h': #pragma once #include "./header.h" doesn't work because: 1) both filenames are different, so it will be be included anyway 2) after that it will be included again under the name "././header.h" and so on until it eventually fails with ENAMETOOLONG. Prevent this by stripping leading "./"s in the paths. This is not good enough for testing file equivalence by is enough to avoid the loop. Link: https://lore.kernel.org/r/CAHk-=wjFWZMVWTbvUMVxQqGKvGMC_BNrahCtTkpEjxoC0k-T=A@mail.gmail.com Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- pre-process.c | 6 ++++++ 1 file changed, 6 insertions(+)