/* 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; }
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; }