X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fsiconv.c;h=c89de49d8140675b978e6ffe7fa2213e7d1c80b1;hb=58b2fdadbb7b8a8845ff67501520fe1660dedeee;hp=9c28d180bf6a667ac744b013292a82c82fc94e3b;hpb=33c972afb7998b7598f72ab1f4c072f92c2d6407;p=yaz-moved-to-github.git diff --git a/util/siconv.c b/util/siconv.c index 9c28d18..c89de49 100644 --- a/util/siconv.c +++ b/util/siconv.c @@ -2,7 +2,7 @@ * Copyright (c) 1997-2002, Index Data * See the file LICENSE for details. * - * $Id: siconv.c,v 1.2 2002-08-27 21:45:28 adam Exp $ + * $Id: siconv.c,v 1.6 2002-09-25 12:37:08 adam Exp $ */ /* mini iconv and wrapper for system iconv library (if present) */ @@ -188,50 +188,50 @@ static unsigned long yaz_read_UCS4LE (yaz_iconv_t cd, unsigned char *inp, static size_t yaz_write_UTF8 (yaz_iconv_t cd, unsigned long x, char **outbuf, size_t *outbytesleft) { - unsigned char *outp = *outbuf; + unsigned char *outp = (unsigned char *) *outbuf; if (x <= 0x7f && *outbytesleft >= 1) { - *outp++ = x; + *outp++ = (unsigned char) x; (*outbytesleft)--; } else if (x <= 0x7ff && *outbytesleft >= 2) { - *outp++ = (x >> 6) | 0xc0; - *outp++ = (x & 0x3f) | 0x80; + *outp++ = (unsigned char) ((x >> 6) | 0xc0); + *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 2; } else if (x <= 0xffff && *outbytesleft >= 3) { - *outp++ = (x >> 12) | 0xe0; - *outp++ = ((x >> 6) & 0x3f) | 0x80; - *outp++ = (x & 0x3f) | 0x80; + *outp++ = (unsigned char) ((x >> 12) | 0xe0); + *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); + *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 3; } else if (x <= 0x1fffff && *outbytesleft >= 4) { - *outp++ = (x >> 18) | 0xf0; - *outp++ = ((x >> 12) & 0x3f) | 0x80; - *outp++ = ((x >> 6) & 0x3f) | 0x80; - *outp++ = (x & 0x3f) | 0x80; + *outp++ = (unsigned char) ((x >> 18) | 0xf0); + *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); + *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 4; } else if (x <= 0x3ffffff && *outbytesleft >= 5) { - *outp++ = (x >> 24) | 0xf8; - *outp++ = ((x >> 18) & 0x3f) | 0x80; - *outp++ = ((x >> 12) & 0x3f) | 0x80; - *outp++ = ((x >> 6) & 0x3f) | 0x80; - *outp++ = (x & 0x3f) | 0x80; + *outp++ = (unsigned char) ((x >> 24) | 0xf8); + *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); + *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 5; } else if (*outbytesleft >= 6) { - *outp++ = (x >> 30) | 0xfc; - *outp++ = ((x >> 24) & 0x3f) | 0x80; - *outp++ = ((x >> 18) & 0x3f) | 0x80; - *outp++ = ((x >> 12) & 0x3f) | 0x80; - *outp++ = ((x >> 6) & 0x3f) | 0x80; - *outp++ = (x & 0x3f) | 0x80; + *outp++ = (unsigned char) ((x >> 30) | 0xfc); + *outp++ = (unsigned char) (((x >> 24) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80); + *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80); + *outp++ = (unsigned char) ((x & 0x3f) | 0x80); (*outbytesleft) -= 6; } else @@ -239,14 +239,14 @@ static size_t yaz_write_UTF8 (yaz_iconv_t cd, unsigned long x, cd->my_errno = YAZ_ICONV_E2BIG; /* not room for output */ return (size_t)(-1); } - *outbuf = outp; + *outbuf = (char *) outp; return 0; } static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x, char **outbuf, size_t *outbytesleft) { - unsigned char *outp = *outbuf; + unsigned char *outp = (unsigned char *) *outbuf; if (x > 255 || x < 1) { cd->my_errno = YAZ_ICONV_EILSEQ; @@ -254,7 +254,7 @@ static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x, } else if (*outbytesleft >= 1) { - *outp++ = x; + *outp++ = (unsigned char) x; (*outbytesleft)--; } else @@ -262,7 +262,7 @@ static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x, cd->my_errno = YAZ_ICONV_E2BIG; return (size_t)(-1); } - *outbuf = outp; + *outbuf = (char *) outp; return 0; } @@ -270,13 +270,13 @@ static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x, static size_t yaz_write_UCS4 (yaz_iconv_t cd, unsigned long x, char **outbuf, size_t *outbytesleft) { - unsigned char *outp = *outbuf; + unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft >= 4) { - *outp++ = x<<24; - *outp++ = x<<16; - *outp++ = x<<8; - *outp++ = x; + *outp++ = (unsigned char) (x<<24); + *outp++ = (unsigned char) (x<<16); + *outp++ = (unsigned char) (x<<8); + *outp++ = (unsigned char) x; (*outbytesleft) -= 4; } else @@ -284,20 +284,20 @@ static size_t yaz_write_UCS4 (yaz_iconv_t cd, unsigned long x, cd->my_errno = YAZ_ICONV_E2BIG; return (size_t)(-1); } - *outbuf = outp; + *outbuf = (char *) outp; return 0; } static size_t yaz_write_UCS4LE (yaz_iconv_t cd, unsigned long x, char **outbuf, size_t *outbytesleft) { - unsigned char *outp = *outbuf; + unsigned char *outp = (unsigned char *) *outbuf; if (*outbytesleft >= 4) { - *outp++ = x; - *outp++ = x<<8; - *outp++ = x<<16; - *outp++ = x<<24; + *outp++ = (unsigned char) x; + *outp++ = (unsigned char) (x<<8); + *outp++ = (unsigned char) (x<<16); + *outp++ = (unsigned char) (x<<24); (*outbytesleft) -= 4; } else @@ -305,13 +305,13 @@ static size_t yaz_write_UCS4LE (yaz_iconv_t cd, unsigned long x, cd->my_errno = YAZ_ICONV_E2BIG; return (size_t)(-1); } - *outbuf = outp; + *outbuf = (char *) outp; return 0; } yaz_iconv_t yaz_iconv_open (const char *tocode, const char *fromcode) { - yaz_iconv_t cd = xmalloc (sizeof(*cd)); + yaz_iconv_t cd = (yaz_iconv_t) xmalloc (sizeof(*cd)); cd->write_handle = 0; cd->read_handle = 0; @@ -373,7 +373,7 @@ size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, iconv(cd->iconv_cd, inbuf, inbytesleft, outbuf, outbytesleft); if (r == (size_t)(-1)) { - switch (errno) + switch (yaz_errno()) { case E2BIG: cd->my_errno = YAZ_ICONV_E2BIG; @@ -404,17 +404,13 @@ size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, if (cd->init_handle) { size_t no_read; - size_t r = (cd->init_handle)(cd, *inbuf, *inbytesleft, &no_read); + size_t r = (cd->init_handle)(cd, (unsigned char *) *inbuf, + *inbytesleft, &no_read); if (r) { if (cd->my_errno == YAZ_ICONV_EINVAL) return r; cd->init_flag = 0; - if (cd->my_errno == YAZ_ICONV_EILSEQ) - { - *inbytesleft++; - (*inbuf)++; - } return r; } *inbytesleft -= no_read; @@ -433,7 +429,8 @@ size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, break; } - x = (cd->read_handle)(cd, *inbuf, *inbytesleft, &no_read); + x = (cd->read_handle)(cd, (unsigned char *) *inbuf, *inbytesleft, + &no_read); if (no_read == 0) { r = (size_t)(-1);