fix build
[m6w6/ext-psi] / src / types / decl_extvar.c
index 24304544ec3d6c4aa47ebe56be9246ea002c9f11..263a25a67f744e2c6b2d4a896881a21660da4973 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/
 
-#include "php_psi_stdinc.h"
-
-#include "php_psi.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
 
 #include <fnmatch.h>
 #include <Zend/zend_smart_str.h>
 
+#include "php_psi.h"
 #include "data.h"
+#include "dl.h"
 
 struct psi_decl_extvar *psi_decl_extvar_init(struct psi_decl_arg *arg)
 {
@@ -91,16 +95,16 @@ bool psi_decl_extvar_validate(struct psi_data *data,
        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)
 {
-       zend_string *type_str = zend_string_init_interned(ZEND_STRS("void"), 1);
+       zend_string *type_str = psi_string_init_interned(ZEND_STRS("void"), 1);
        struct psi_decl_type *func_type = psi_decl_type_init(PSI_T_VOID, type_str);
        struct psi_decl_var *func_var = psi_decl_var_copy(evar->arg->var);
        struct psi_decl_arg *func = psi_decl_arg_init(func_type, func_var);
@@ -119,7 +123,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 = zend_new_interned_string(smart_str_extract(&name));
+       func_var->name = psi_new_interned_string(smart_str_extract(&name));
 
        decl->extvar = 1;
 
@@ -142,7 +146,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 = zend_new_interned_string(smart_str_extract(&name));
+       func_var->name = psi_new_interned_string(smart_str_extract(&name));
 
        decl->extvar = 1;
 
@@ -151,7 +155,12 @@ struct psi_decl *psi_decl_extvar_getter(struct psi_decl_extvar *evar)
 
 void psi_decl_extvar_get(struct psi_decl_extvar *evar, void *ptr)
 {
-       memcpy(ptr, evar->sym, evar->size);
+       if (evar->arg->var->array_size) {
+               /* arrays are passed as pointer */
+               *(void **) ptr = evar->sym;
+       } else {
+               memcpy(ptr, evar->sym, evar->size);
+       }
 }