X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Flibffi.c;h=897affbd56d28dded713f8029159b7ec0fa70884;hp=4963fc55268868e0b9500c5369d8520c08858bc2;hb=d60f4bbdd315ddf42dbafeff0fd3d87d2e7a51f7;hpb=9f381458672347c0f303dc3b309dc299f998f4f6 diff --git a/src/libffi.c b/src/libffi.c index 4963fc5..897affb 100644 --- a/src/libffi.c +++ b/src/libffi.c @@ -2,6 +2,13 @@ #include "php_psi.h" #include "libffi.h" +#undef PACKAGE +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION + #include #ifndef PSI_HAVE_FFI_CLOSURE_ALLOC @@ -10,6 +17,9 @@ # endif # if HAVE_SYS_MMAN_H # include +# ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +# endif # endif #endif @@ -114,7 +124,7 @@ typedef struct PSI_LibffiData { static inline PSI_LibffiData *PSI_LibffiDataAlloc(PSI_LibffiContext *context, impl *impl) { ffi_status rc; - size_t i, c = impl->decl->args->count; + size_t i, c = impl->decl->args ? impl->decl->args->count : 0; PSI_LibffiData *data = malloc(sizeof(*data) + c * sizeof(ffi_type *)); data->context = context; @@ -208,7 +218,7 @@ static void handler(ffi_cif *_sig, void *_result, void **_args, void *_data) return; } - if (data->impl->decl->args->count) { + if (data->impl->decl->args) { arg_ptr = malloc(data->impl->decl->args->count * sizeof(*arg_ptr)); arg_prm = malloc(data->impl->decl->args->count * sizeof(*arg_prm)); @@ -230,7 +240,9 @@ static void handler(ffi_cif *_sig, void *_result, void **_args, void *_data) for (i = 0; i < data->impl->stmts->set.count; ++i) { set_stmt *set = data->impl->stmts->set.list[i]; - psi_do_set(set->arg->_zv, set->val->func, set->val->vars); + if (set->arg->_zv) { + psi_do_set(set->arg->_zv, set->val->func, set->val->vars); + } } for (i = 0; i < data->impl->stmts->fre.count; ++i) {