X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=tests%2Ficonv%2Ficonv.psi;fp=tests%2Ficonv%2Ficonv.psi;h=e414dc0ebd49b8cbfdc23b237ed0f8d554d79046;hp=0000000000000000000000000000000000000000;hb=d59f10e81c33354ee1589fb10847b4611423de2e;hpb=6bc2d7ee8421401fc11225e09e4bb1fab03594b8 diff --git a/tests/iconv/iconv.psi b/tests/iconv/iconv.psi new file mode 100644 index 0000000..e414dc0 --- /dev/null +++ b/tests/iconv/iconv.psi @@ -0,0 +1,25 @@ +extern void *iconv_open(char *tocode, char *fromcode); +function psi\iconv_open(string $to, string $from) : object { + let tocode = strval($to); + let fromcode = strval($from); + return to_object(iconv_open); +} + +extern size_t iconv (void *cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); +function psi\iconv(object $iconv, string &$inbuf, string &$outbuf) : int { + let cd = objval($iconv); + let inbuf = &strval($inbuf); + let inbytesleft = &strlen($inbuf); + let outbytesleft = &8192; + let outbuf = &calloc(1, 8192); + temp result = *outbuf; + return to_int(iconv); + set $inbuf = to_string(*inbuf, *inbytesleft); + set $outbuf = to_string(result, 8192 - *outbytesleft); +} + +extern int iconv_close(void *cd); +function psi\iconv_close(object $iconv) : int { + let cd = objval($iconv); + return to_int(iconv_close); +}