OSDN Git Service

2004-01-23 Artem B. Bityuckiy <abitytsky@softminecorp.com>
[pf3gnuchains/pf3gnuchains4x.git] / newlib / libc / iconv / ces / ucs-2-internal.c
1 /*-
2  * Copyright (c) 1999,2000
3  *    Konstantin Chuguev.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  *    iconv (Charset Conversion Library) v2.0
27  */
28 #ifdef ENABLE_ICONV
29  
30 #include "../lib/deps.h"
31
32 #ifdef ICONV_CONVERTER_UCS_2_INTERNAL
33
34 #include <_ansi.h>
35 #include "../lib/local.h"
36
37 static ssize_t
38 _DEFUN(convert_from_ucs, (ces, in, outbuf, outbytesleft),
39                          struct iconv_ces *ces  _AND
40                          ucs_t in               _AND
41                          unsigned char **outbuf _AND
42                          size_t *outbytesleft)
43 {
44     if (in == UCS_CHAR_NONE)
45         return 1;    /* No state reinitialization for table charsets */
46     if (iconv_char32bit(in))
47         return -1;    /* No corresponding character in UCS-2 */
48     if (*outbytesleft < sizeof(ucs2_t))
49         return 0;    /* No space in the output buffer */
50     *((ucs2_t *)(*outbuf))++ = in;
51     (*outbytesleft) -= sizeof(ucs2_t);
52     return 1;
53 }
54
55 static ucs_t
56 _DEFUN(convert_to_ucs, (ces, inbuf, inbytesleft),
57                        struct iconv_ces *ces        _AND
58                        _CONST unsigned char **inbuf _AND
59                        size_t *inbytesleft)
60 {
61     if (*inbytesleft < sizeof(ucs2_t))
62         return UCS_CHAR_NONE;    /* Not enough bytes in the input buffer */
63     (*inbytesleft) -= sizeof(ucs2_t);
64     return *((_CONST ucs2_t *)(*inbuf))++;
65 }
66
67 ICONV_CES_STATELESS_MODULE_DECL(ucs_2_internal);
68
69 #endif /* #ifdef ICONV_CONVERTER_UCS_2_INTERNAL */
70
71 #endif /* #ifdef ENABLE_ICONV */
72