Report errors upon malformed include directives

This commit is contained in:
Pierre Pronchery 2008-06-21 22:25:39 +00:00
parent a71a1b3a45
commit e59b767073

View File

@ -625,11 +625,14 @@ static int _directive_include(Cpp * cpp, Token * token, char const * str)
if((path = _include_path(cpp, token, str)) == NULL if((path = _include_path(cpp, token, str)) == NULL
&& (path = _include_path(cpp->parent, token, str)) && (path = _include_path(cpp->parent, token, str))
== NULL) == NULL)
{
token_set_code(token, CPP_CODE_META_ERROR);
token_set_string(token, error_get());
return 0; return 0;
}
token_set_code(token, CPP_CODE_META_INCLUDE); token_set_code(token, CPP_CODE_META_INCLUDE);
if((cpp->subparser = cpp_new(path, cpp->filters)) == NULL) if((cpp->subparser = cpp_new(path, cpp->filters)) == NULL)
{ {
error_set_code(-1, "%s: %s", path, strerror(errno));
free(path); free(path);
return -1; return -1;
} }
@ -654,12 +657,21 @@ static char * _include_path(Cpp * cpp, Token * token, char const * str)
else if(str[0] == '<') else if(str[0] == '<')
d = '>'; d = '>';
else else
{
error_set("%s", "Invalid include directive");
return NULL; return NULL;
}
len = strlen(str); len = strlen(str);
if(len < 3 || str[len - 1] != d) if(len < 3 || str[len - 1] != d)
{
error_set("%s", "Invalid include directive");
return NULL; return NULL;
}
if((path = strdup(&str[1])) == NULL) if((path = strdup(&str[1])) == NULL)
{
error_set("%s", strerror(errno));
return NULL; return NULL;
}
path[len - 2] = '\0'; path[len - 2] = '\0';
p = _path_lookup(cpp, token, path, d == '>'); p = _path_lookup(cpp, token, path, d == '>');
free(path); free(path);