fix returning arrays
[m6w6/ext-psi] / src / types / decl_extvar.c
index 24304544ec3d6c4aa47ebe56be9246ea002c9f11..24ff39a0284cce4b550af4a14865b16a30aa951d 100644 (file)
@@ -91,11 +91,11 @@ 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)
@@ -151,7 +151,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);
+       }
 }