build administrativa
[m6w6/ext-psi] / src / types / decl.c
index 5872a32504eacc915137c266ba9a9eb08bd017d9..94f43368c978c306f04f7f6c0456550330e5e2bc 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *******************************************************************************/
 
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
 #include "php_psi.h"
 
 #include <dlfcn.h>
@@ -34,7 +38,7 @@
 #include "data.h"
 
 #define PSI_FUNC_REDIRS
-#include "php_psi_posix.h"
+#include "php_psi_predef.h"
 
 struct psi_decl *psi_decl_init(struct psi_decl_arg *func, struct psi_plist *args)
 {
@@ -65,36 +69,36 @@ void psi_decl_free(struct psi_decl **d_ptr)
        }
 }
 
-void psi_decl_dump(int fd, struct psi_decl *decl)
+void psi_decl_dump(struct psi_dump *dump, struct psi_decl *decl)
 {
        if (decl->abi) {
-               psi_decl_abi_dump(fd, decl->abi);
+               psi_decl_abi_dump(dump, decl->abi);
        }
-       dprintf(fd, " ");
+       PSI_DUMP(dump, " ");
        /* FIXME: functions returning arrays */
-       psi_decl_arg_dump(fd, decl->func, 0);
-       dprintf(fd, "(");
+       psi_decl_arg_dump(dump, decl->func, 0);
+       PSI_DUMP(dump, "(");
        if (decl->args) {
                size_t i;
                struct psi_decl_arg *arg;
 
                for (i = 0; psi_plist_get(decl->args, i, &arg); ++i) {
                        if (i) {
-                               dprintf(fd, ", ");
+                               PSI_DUMP(dump, ", ");
                        }
-                       psi_decl_arg_dump(fd, arg, 0);
+                       psi_decl_arg_dump(dump, arg, 0);
                }
                if (decl->varargs) {
-                       dprintf(fd, ", ...");
+                       PSI_DUMP(dump, ", ...");
                }
        }
        if (decl->func->var->array_size) {
-               dprintf(fd, ")[%u]", decl->func->var->array_size);
+               PSI_DUMP(dump, ")[%u]", decl->func->var->array_size);
        }
        if (decl->redir) {
-               dprintf(fd, ") __asm__ (\"%s\");", decl->redir->val);
+               PSI_DUMP(dump, ") __asm__ (\"%s\");", decl->redir->val);
        } else {
-               dprintf(fd, ");");
+               PSI_DUMP(dump, ");");
        }
 }
 
@@ -111,32 +115,20 @@ static inline bool psi_decl_validate_func(struct psi_data *data,
        for (redir = &psi_func_redirs[0]; redir->name; ++redir) {
                if (!strcmp(func->var->name->val, redir->name)) {
                        decl->sym = redir->func;
+                       break;
                }
        }
        if (!decl->sym) {
-               size_t i = 0;
-               void *dl;
-
-               while (!decl->sym && psi_plist_get(data->file.dlopened, i++, &dl)) {
-                       decl->sym = dlsym(dl, decl->redir ? decl->redir->val : func->var->name->val);
-               }
+               decl->sym = psi_dlsym(data->file.dlopened, func->var->name->val,
+                       decl->redir ? decl->redir->val : NULL);
        }
        if (!decl->sym) {
-#ifndef RTLD_NEXT
-# define RTLD_NEXT ((void *) -1l)
-#endif
-#ifndef RTLD_DEFAULT
-# define RTLD_DEFAULT ((void *) 0)
-#endif
-               decl->sym = dlsym(RTLD_DEFAULT, decl->redir ? decl->redir->val : func->var->name->val);
-               if (!decl->sym) {
-                       data->error(data, func->token, PSI_WARNING,
-                                       "Failed to locate symbol '%s(%s)': %s",
-                                       func->var->name->val,
-                                       decl->redir ? decl->redir->val : "",
-                                       dlerror() ?: "not found");
-                       return false;
-               }
+               data->error(data, func->token, PSI_WARNING,
+                               "Failed to locate symbol '%s(%s)': %s",
+                               func->var->name->val,
+                               decl->redir ? decl->redir->val : "",
+                               dlerror() ?: "not found");
+               return false;
        }
        return true;
 }
@@ -218,4 +210,3 @@ struct psi_decl_arg *psi_decl_get_arg(struct psi_decl *decl, struct psi_decl_var
 
        return psi_decl_arg_get_by_var(var, decl->args, decl->func);
 }
-