travis: update
[m6w6/ext-psi] / tests / iconv / iconv.psi
1 #include <stddef.h>
2
3 extern void *iconv_open(char *tocode, char *fromcode);
4 function psi\iconv_open(string $to, string $from) : object {
5 let tocode = strval($to);
6 let fromcode = strval($from);
7 return to_object(iconv_open);
8 }
9
10 extern size_t iconv (void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
11 function psi\iconv(object $iconv, string &$inbuf, string &$outbuf) : int {
12 let cd = objval($iconv);
13 let inbuf = &strval($inbuf);
14 let inbytesleft = &strlen($inbuf);
15 let outbytesleft = &8192;
16 let outbuf = &calloc(1, 8192);
17 temp result = *outbuf;
18 return iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft) as to_int(iconv);
19 set $inbuf = to_string(*inbuf, *inbytesleft);
20 set $outbuf = to_string(result, 8192 - *outbytesleft);
21 }
22
23 extern int iconv_close(void *cd);
24 function psi\iconv_close(object $iconv) : int {
25 let cd = objval($iconv);
26 return to_int(iconv_close);
27 }