- if (file[1] == '/' && PATH_MAX > snprintf(path, PATH_MAX, "%.*s", f_len, file + 1)) {
- return try_include(cpp, path, &parsed) && parsed;
- } else {
+ if (!(flags & PSI_CPP_INCLUDE_NEXT) || *file == '/') {
+ /* first try as is, full or relative path */
+ if ((flags & PSI_CPP_INCLUDE_ONCE) && zend_hash_str_exists(&cpp->once, file, f_len)) {
+ return true;
+ }
+ if (try_include(cpp, file, &parsed)) {
+ /* found */
+ return parsed;
+ }
+ }
+
+ /* look through search paths */
+ if (*file != '/') {
+ char path[PATH_MAX];