X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fdecl_extvar.c;h=24304544ec3d6c4aa47ebe56be9246ea002c9f11;hp=c6a77aa436d6db0dda922b1ce536112a0f097a28;hb=a7ac1c0a3c855321f21682c127a4b707de33a303;hpb=2559f07a178b681dc240e20153ff5abdff54cb34 diff --git a/src/types/decl_extvar.c b/src/types/decl_extvar.c index c6a77aa..2430454 100644 --- a/src/types/decl_extvar.c +++ b/src/types/decl_extvar.c @@ -27,16 +27,14 @@ #include "php_psi.h" -#include #include - #include #include "data.h" struct psi_decl_extvar *psi_decl_extvar_init(struct psi_decl_arg *arg) { - struct psi_decl_extvar *evar = calloc(1, sizeof(*evar)); + struct psi_decl_extvar *evar = pecalloc(1, sizeof(*evar), 1); evar->arg = arg; return evar; @@ -71,27 +69,14 @@ bool psi_decl_extvar_validate(struct psi_data *data, } 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); @@ -134,7 +119,7 @@ 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; @@ -157,7 +142,7 @@ struct psi_decl *psi_decl_extvar_getter(struct psi_decl_extvar *evar) 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; @@ -182,4 +167,3 @@ bool psi_decl_extvar_is_blacklisted(const char *name) } return false; } -