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