libobs/util: Make sure includes are from current file dir

When the #include directive in in the C lexer preprocessor is
encountered, the files being included need to be relative to the
directory of the file that the include was used in.
master
jp9000 2016-03-15 20:15:28 -07:00
parent 2fa7ef5807
commit 45a2fa0e1a
1 changed files with 19 additions and 0 deletions

View File

@ -602,6 +602,24 @@ static inline void cf_adderror_unexpected_eof(struct cf_preprocessor *pp,
NULL, NULL, NULL);
}
static inline void insert_path(struct cf_preprocessor *pp,
struct dstr *str_file)
{
const char *file;
const char *slash;
if (pp && pp->lex && pp->lex->file) {
file = pp->lex->file;
slash = strrchr(file, '/');
if (slash) {
struct dstr path = {0};
dstr_ncopy(&path, file, slash - file + 1);
dstr_insert_dstr(str_file, 0, &path);
dstr_free(&path);
}
}
}
static void cf_include_file(struct cf_preprocessor *pp,
const struct cf_token *file_token)
{
@ -615,6 +633,7 @@ static void cf_include_file(struct cf_preprocessor *pp,
dstr_init(&str_file);
dstr_copy_strref(&str_file, &file_token->str);
dstr_mid(&str_file, &str_file, 1, str_file.len-2);
insert_path(pp, &str_file);
/* if dependency already exists, run preprocessor on it */
for (i = 0; i < pp->dependencies.num; i++) {