#include "php_psi.h"
-#include <dlfcn.h>
#include <fnmatch.h>
-
#include <Zend/zend_smart_str.h>
#include "data.h"
}
if (!evar->sym) {
- size_t i = 0;
- void *dl;
-
- while (!evar->sym && psi_plist_get(data->file.dlopened, i++, &dl)) {
- evar->sym = dlsym(dl, evar->arg->var->name->val);
- }
+ evar->sym = psi_dlsym(data->file.dlopened, evar->arg->var->name->val,
+ evar->redir ? evar->redir->val : NULL);
}
if (!evar->sym) {
-#ifndef RTLD_NEXT
-# define RTLD_NEXT ((void *) -1l)
-#endif
-#ifndef RTLD_DEFAULT
-# define RTLD_DEFAULT ((void *) 0)
-#endif
- evar->sym = dlsym(RTLD_DEFAULT, evar->arg->var->name->val);
- if (!evar->sym) {
- data->error(data, evar->arg->var->token, PSI_WARNING,
- "Failed to locate symbol '%s': %s", evar->arg->var->name->val,
- dlerror() ?: "not found");
- return false;
- }
+ data->error(data, evar->arg->var->token, PSI_WARNING,
+ "Failed to locate symbol '%s': %s", evar->arg->var->name->val,
+ dlerror() ?: "not found");
+ return false;
}
evar->getter = psi_decl_extvar_getter(evar);
return true;
}
-void psi_decl_extvar_dump(int fd, struct psi_decl_extvar *evar)
+void psi_decl_extvar_dump(struct psi_dump *dump, struct psi_decl_extvar *evar)
{
- dprintf(fd, "extern ");
- psi_decl_arg_dump(fd, evar->arg, 0);
- dprintf(fd, ";\n");
+ PSI_DUMP(dump, "extern ");
+ psi_decl_arg_dump(dump, evar->arg, 0);
+ PSI_DUMP(dump, ";\n");
}
struct psi_decl *psi_decl_extvar_setter(struct psi_decl_extvar *evar)
smart_str_append_ex(&name, func_var->name, 1);
smart_str_appendl_ex(&name, ZEND_STRL("_set"), 1);
zend_string_release(func_var->name);
- func_var->name = smart_str_extract(&name);
+ func_var->name = zend_new_interned_string(smart_str_extract(&name));
decl->extvar = 1;
smart_str_append_ex(&name, func_var->name, 1);
smart_str_appendl_ex(&name, ZEND_STRL("_get"), 1);
zend_string_release(func_var->name);
- func_var->name = smart_str_extract(&name);
+ func_var->name = zend_new_interned_string(smart_str_extract(&name));
decl->extvar = 1;
}
return false;
}
-