summaryrefslogtreecommitdiff
path: root/Lib/php
diff options
context:
space:
mode:
authorErez Geva <erez.geva.ext@siemens.com>2022-05-06 20:36:57 +0200
committerErez Geva <erez.geva.ext@siemens.com>2022-05-06 23:15:06 +0200
commit464d548d7173d964b028941400b7e6a740fb7f94 (patch)
tree3cec3c560c5a24875a12eb7b9e0ac6fa018cd762 /Lib/php
parenta3b49ef75ef1bbb9881ab593d34c00f174dcaeda (diff)
downloadswig-464d548d7173d964b028941400b7e6a740fb7f94.tar.gz
Add argcargv.i to more languages: Perl 5, Tcl, PHP
Signed-off-by: Erez Geva <ErezGeva2@gmail.com>
Diffstat (limited to 'Lib/php')
-rw-r--r--Lib/php/argcargv.i40
1 files changed, 40 insertions, 0 deletions
diff --git a/Lib/php/argcargv.i b/Lib/php/argcargv.i
new file mode 100644
index 000000000..14b0cf2c9
--- /dev/null
+++ b/Lib/php/argcargv.i
@@ -0,0 +1,40 @@
+/* ------------------------------------------------------------
+ * --- Argc & Argv ---
+ * ------------------------------------------------------------ */
+
+%typemap(default) (int ARGC, char **ARGV) {
+ $1 = 0; $2 = NULL;
+}
+
+%typemap(in) (int ARGC, char **ARGV) {
+ int len, i;
+ zval *val;
+ zend_array *ar;
+ if (Z_TYPE($input) != IS_ARRAY) {
+ SWIG_PHP_Error(E_ERROR, "Type error in '$symname'. Expected array");
+ goto fail;
+ }
+ ar = Z_ARR($input);
+ len = zend_array_count(ar);
+ $1 = ($1_ltype) len;
+ $2 = (char **) malloc((len+1)*sizeof(char *));
+ i = 0;
+ ZEND_HASH_FOREACH_VAL(ar, val) {
+ if (Z_TYPE(*val) != IS_STRING) {
+ SWIG_PHP_Error(E_ERROR, "Array must use strings only, in '$symname'.");
+ goto fail;
+ }
+ if (i == len) {
+ SWIG_PHP_Error(E_ERROR, "Array is bigger than zend report in '$symname'.");
+ goto fail;
+ }
+ $2[i++] = Z_STRVAL(*val);
+ } ZEND_HASH_FOREACH_END();
+ $2[i] = NULL;
+}
+
+%typemap(freearg) (int ARGC, char **ARGV) {
+ if ($2 != NULL) {
+ free((void *)$2);
+ }
+}