- return 1;
- } else if (!strchr(ptr, '/')) {
- len = snprintf(lib, MAXPATHLEN, "lib%s.%s", ptr, PHP_PSI_SHLIB_SUFFIX);
- if (MAXPATHLEN == len) {
- data->error(data, NULL, PSI_WARNING, "Library name too long: '%s'", ptr);
+ return true;
+ }
+
+ if (PATH_MAX == psi_dlname(&lib, &len, libname)) {
+ dst->error(dst, NULL, PSI_WARNING, "Library name too long: '%s'",
+ libname);
+ return false;
+ }
+
+ if (!(*dlopened = psi_dlopen(lib))) {
+ dst->error(dst, NULL, PSI_WARNING, "Could not open library '%s': %s",
+ libname, psi_dlerror());
+ return false;
+ }
+
+ return true;
+}
+
+bool psi_decl_file_validate(struct psi_data *dst, struct psi_data *src)
+{
+ size_t i = 0;
+ char *libname;
+ void *dlopened;
+
+ while (psi_plist_get(src->file.libnames, i++, &libname)) {
+ if (!validate_lib(dst, libname, &dlopened)) {
+ return false;