Просмотр исходного кода

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.
jp9000 10 лет назад
Родитель
Сommit
45a2fa0e1a
1 измененных файлов с 19 добавлено и 0 удалено
  1. 19 0
      libobs/util/cf-lexer.c

+ 19 - 0
libobs/util/cf-lexer.c

@@ -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++) {