diff options
Diffstat (limited to 'sys/libkern/iconv_xlat.c')
-rw-r--r-- | sys/libkern/iconv_xlat.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/libkern/iconv_xlat.c b/sys/libkern/iconv_xlat.c index 7532cb3..8ab4d6c 100644 --- a/sys/libkern/iconv_xlat.c +++ b/sys/libkern/iconv_xlat.c @@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$"); */ #ifdef MODULE_DEPEND -MODULE_DEPEND(iconv_xlat, libiconv, 1, 1, 1); +MODULE_DEPEND(iconv_xlat, libiconv, 2, 2, 2); #endif /* @@ -84,7 +84,8 @@ iconv_xlat_close(void *data) static int iconv_xlat_conv(void *d2p, const char **inbuf, - size_t *inbytesleft, char **outbuf, size_t *outbytesleft) + size_t *inbytesleft, char **outbuf, size_t *outbytesleft, + int convchar, int casetype) { struct iconv_xlat *dp = (struct iconv_xlat*)d2p; const char *src; @@ -93,14 +94,19 @@ iconv_xlat_conv(void *d2p, const char **inbuf, if (inbuf == NULL || *inbuf == NULL || outbuf == NULL || *outbuf == NULL) return 0; - r = n = min(*inbytesleft, *outbytesleft); + if (casetype != 0) + return -1; + if (convchar == 1) + r = n = 1; + else + r = n = min(*inbytesleft, *outbytesleft); src = *inbuf; dst = *outbuf; while(r--) *dst++ = dp->d_table[(u_char)*src++]; *inbuf += n; *outbuf += n; - *inbytesleft += n; + *inbytesleft -= n; *outbytesleft -= n; return 0; } |