From b6abbff926e9ff9908935224c1655d94dcc09441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=EA=A6=AB=EA=A6=B6=EA=A6=8F=EA=A7=80=EA=A6=A6?= =?UTF-8?q?=EA=A6=BF=EA=A6=A7=EA=A6=AE=EA=A6=91=EA=A6=A9=EA=A6=AD=EA=A7=80?= Date: Fri, 16 Jul 2021 23:28:28 +0800 Subject: Typemap for char **[] Not tested yet. Here so this compiles up to Perl module. --- pikul.i | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pikul.i b/pikul.i index 05b45c9..69f582a 100644 --- a/pikul.i +++ b/pikul.i @@ -18,6 +18,27 @@ free($1); } +%typemap(in) char **[] { + AV *tempav = (AV *)SvRV($input); + I32 len = av_len(tempav); + $1 = (char ***)malloc((len + 2) * sizeof(char **)); + int i; + for (i = 0; i <= len; i++) { + AV *av = (AV *)av_fetch(tempav, i, 0); + I32 avlen = av_len(av); + $1[i] = (char **)malloc((avlen + 2) * sizeof(char *)); + int j; + for (j = 0; j <= avlen; j++) { + SV **tv = av_fetch(av, j, 0); + $1[i][j] = (char *)SvPV(*tv, PL_na); + } + $1[i][j] = NULL; + } +}; +%typemap(freearg) char **[] { + free($1); +} + %rename("%(strip:[pikul_])s") ""; void pikul_init(enum pikul_company company, char *provisions[]); double pikul_cost(const char *origin, const char *destination, double weight, const char *service); -- cgit v1.2.3