+static char *resolve_fragment(const char *fragment, const char **search_paths) {
+ const char **p;
+ char *resolved_path;
+
+ if (is_path(fragment))
+ return strdup(fragment);
+
+ STRV_FOREACH(p, search_paths) {
+ resolved_path = join(*p, "/", fragment, NULL);
+ if (resolved_path == NULL) {
+ log_error("Out of memory");
+ return NULL;
+ }
+
+ if (access(resolved_path, F_OK) == 0)
+ return resolved_path;
+
+ free(resolved_path);
+ }
+
+ return NULL;
+}
+