Exemple #1
0
/* cpp_new */
Cpp * cpp_new(CppPrefs * prefs)
{
	Cpp * cpp;
	String * p;
	int r = 0;

	if((cpp = object_new(sizeof(*cpp))) == NULL)
		return NULL;
	memset(cpp, 0, sizeof(*cpp));
	cpp->options = prefs->options;
	cpp->parser = cppparser_new(cpp, NULL, prefs->filename,
			prefs->filters);
	if((p = string_new(prefs->filename)) != NULL)
	{
		r |= cpp_path_add(cpp, dirname(p)); /* FIXME inclusion order */
		string_delete(p);
	}
	if((p = getcwd(NULL, 0)) != NULL)
	{
		r |= cpp_path_add(cpp, p);
		free(p);
	}
	else
		error_set("%s%s", "getcwd: ", strerror(errno));
	if(r != 0 || cpp->parser == NULL || cpp->paths_cnt != 2)
	{
		cpp_delete(cpp);
		return NULL;
	}
	return cpp;
}
Exemple #2
0
int cppparser_include(CppParser * cp, char const * include)
{
	char * path;

	if((path = _include_path(cp, include)) == NULL)
		return -1;
	for(; cp->subparser != NULL; cp = cp->subparser);
	cp->subparser = cppparser_new(cp->cpp, cp, path, cp->filters);
	free(path);
	return (cp->subparser != NULL) ? 0 : -1;
}