1 --- lib/converter.c.orig Sun Nov 26 22:10:22 2000 2 +++ lib/converter.c Mon Mar 18 19:49:56 2002 3 @@ -92,14 +92,14 @@ 4 if (ch == UCS_CHAR_NONE) { 5 /* Incomplete character in input buffer */ 6 errno = EINVAL; 7 - return res; 8 + return (size_t)(-1); 9 } 10 if (ch == UCS_CHAR_INVALID) { 11 /* Invalid character in source buffer */ 12 *inbytesleft += *inbuf - ptr; 13 *inbuf = ptr; 14 errno = EILSEQ; 15 - return res; 16 + return (size_t)(-1); 17 } 18 size = ICONV_CES_CONVERT_FROM_UCS(&(uc->to), ch, 19 outbuf, outbytesleft); 20 @@ -116,7 +116,7 @@ 21 *inbytesleft += *inbuf - ptr; 22 *inbuf = ptr; 23 errno = E2BIG; 24 - return res; 25 + return (size_t)(-1); 26 } 27 } 28 return res; 29 @@ -156,14 +156,24 @@ 30 { 31 if (inbuf && *inbuf && inbytesleft && *inbytesleft > 0 && outbuf 32 && *outbuf && outbytesleft && *outbytesleft > 0) { 33 - size_t len = *inbytesleft < *outbytesleft ? *inbytesleft 34 - : *outbytesleft; 35 + size_t result, len; 36 + if (*inbytesleft < *outbytesleft) { 37 + result = 0; 38 + len = *inbytesleft; 39 + } else { 40 + result = (size_t)(-1); 41 + errno = E2BIG; 42 + len = *outbytesleft; 43 + } 44 bcopy(*inbuf, *outbuf, len); 45 *inbuf += len; 46 *inbytesleft -= len; 47 *outbuf += len; 48 *outbytesleft -= len; 49 + 50 + return result; 51 } 52 + 53 return 0; 54 } 55 56