Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/iconv/lib/ucsconv.c')
-rw-r--r--newlib/libc/iconv/lib/ucsconv.c356
1 files changed, 0 insertions, 356 deletions
diff --git a/newlib/libc/iconv/lib/ucsconv.c b/newlib/libc/iconv/lib/ucsconv.c
deleted file mode 100644
index 4dab2e19d..000000000
--- a/newlib/libc/iconv/lib/ucsconv.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (c) 2003-2004, Artem B. Bityuckiy
- * Copyright (c) 1999,2000, Konstantin Chuguev. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <_ansi.h>
-#include <reent.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include "local.h"
-#include "conv.h"
-#include "ucsconv.h"
-
-static int fake_data;
-
-static int
-_EXFUN(find_encoding_name, (_CONST char *searchee,
- _CONST char **names));
-
-
-/*
- * UCS-based conversion interface functions implementation.
- */
-
-static _VOID_PTR
-_DEFUN(ucs_based_conversion_open, (rptr, to, from),
- struct _reent *rptr _AND
- _CONST char *to _AND
- _CONST char *from)
-{
- iconv_ucs_conversion_t *uc;
- _CONST iconv_to_ucs_ces_t *to_ucs_bices;
- _CONST iconv_from_ucs_ces_t *from_ucs_bices;
-
- uc = (iconv_ucs_conversion_t *)
- _calloc_r (rptr, 1, sizeof (iconv_ucs_conversion_t));
- if (uc == NULL)
- return NULL;
-
- /*
- * Find CES converter for "from" encoding ("from" source encoding corresponds
- * to "to_ucs" CES converter).
- */
- for (to_ucs_bices = &_iconv_to_ucs_ces[0];
- to_ucs_bices->names != NULL;
- to_ucs_bices++)
- {
- if (find_encoding_name (from, to_ucs_bices->names) == 0)
- break;
- }
-
- /*
- * Find CES converter for "to" encoding ("to" source encoding corresponds
- * to "from_ucs" CES converter).
- */
- for (from_ucs_bices = &_iconv_from_ucs_ces[0];
- from_ucs_bices->names != NULL;
- from_ucs_bices++)
- {
- if (find_encoding_name (to, from_ucs_bices->names) == 0)
- break;
- }
-
- if (to_ucs_bices->names == NULL || from_ucs_bices->names == NULL)
- goto error;
-
- uc->to_ucs.handlers = to_ucs_bices->handlers;
- uc->from_ucs.handlers = from_ucs_bices->handlers;
-
- /* Initialize "to UCS" CES converter */
- if (to_ucs_bices->handlers->init != NULL)
- {
- uc->to_ucs.data = to_ucs_bices->handlers->init (rptr, from);
- if (uc->to_ucs.data == NULL)
- goto error;
- }
- else
- uc->to_ucs.data = (_VOID_PTR)&fake_data;
-
-
- /* Initialize "from UCS" CES converter */
- if (from_ucs_bices->handlers->init != NULL)
- {
- uc->from_ucs.data = from_ucs_bices->handlers->init (rptr, to);
- if (uc->from_ucs.data == NULL)
- goto error;
- }
- else
- uc->from_ucs.data = (_VOID_PTR)&fake_data;
-
- return uc;
-
-error:
- if (uc->to_ucs.data != NULL && uc->to_ucs.handlers->close != NULL)
- uc->to_ucs.handlers->close (rptr, uc->to_ucs.data);
-
- _free_r (rptr, (_VOID_PTR)uc);
-
- return NULL;
-}
-
-
-static size_t
-_DEFUN(ucs_based_conversion_close, (rptr, data),
- struct _reent *rptr _AND
- _VOID_PTR data)
-{
- iconv_ucs_conversion_t *uc;
- size_t res = 0;
-
- uc = (iconv_ucs_conversion_t *)data;
-
- if (uc->from_ucs.handlers->close != NULL)
- res = uc->from_ucs.handlers->close (rptr, uc->from_ucs.data);
- if (uc->to_ucs.handlers->close != NULL)
- res |= uc->to_ucs.handlers->close (rptr, uc->to_ucs.data);
-
- _free_r (rptr, (_VOID_PTR)data);
-
- return res;
-}
-
-
-static size_t
-_DEFUN(ucs_based_conversion_convert,
- (rptr, data, inbuf, inbytesleft, outbuf, outbytesleft, flags),
- struct _reent *rptr _AND
- _VOID_PTR data _AND
- _CONST unsigned char **inbuf _AND
- size_t *inbytesleft _AND
- unsigned char **outbuf _AND
- size_t *outbytesleft _AND
- int flags)
-{
- unsigned char outbuf1[ICONV_MB_LEN_MAX];
- unsigned char *poutbuf1;
- size_t res = 0;
- iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
-
- while (*inbytesleft > 0)
- {
- register size_t bytes;
- register ucs4_t ch;
- _CONST unsigned char *inbuf_save = *inbuf;
- size_t inbyteslef_save = *inbytesleft;
-
- if (*outbytesleft == 0)
- {
- __errno_r (rptr) = E2BIG;
- return (size_t)-1;
- }
-
- ch = uc->to_ucs.handlers->convert_to_ucs (uc->to_ucs.data,
- inbuf, inbytesleft);
-
- if (ch == (ucs4_t)ICONV_CES_BAD_SEQUENCE)
- {
- __errno_r (rptr) = EINVAL;
- return (size_t)-1;
- }
-
- if (ch == (ucs4_t)ICONV_CES_INVALID_CHARACTER)
- {
- __errno_r (rptr) = EILSEQ;
- return (size_t)-1;
- }
-
- if (flags & ICONV_DONT_SAVE_BIT)
- {
- poutbuf1 = &outbuf1[0];
- outbuf = &poutbuf1;
- }
-
- bytes = uc->from_ucs.handlers->convert_from_ucs (uc->from_ucs.data, ch,
- outbuf, outbytesleft);
-
- if (bytes == (size_t)ICONV_CES_NOSPACE)
- {
- *inbuf = inbuf_save;
- *inbytesleft = inbyteslef_save;
- __errno_r (rptr) = E2BIG;
- return (size_t)-1;
- }
- else if (bytes == (size_t)ICONV_CES_INVALID_CHARACTER)
- {
- if (flags & ICONV_FAIL_BIT)
- {
- /* Generate error */
- __errno_r (rptr) = EILSEQ;
- return (size_t)-1;
- }
- /*
- * For this case SUSv3 stands: "if iconv() encounters a character in the
- * input buffer that is valid, but for which an identical character does
- * not exist in the target encoding, iconv() shall perform an
- * implementation-defined conversion on this character".
- * Don't generate error, just write default character.
- */
- bytes = uc->from_ucs.handlers->convert_from_ucs (
- uc->from_ucs.data,
- (ucs4_t)DEFAULT_CHARACTER,
- outbuf,
- outbytesleft);
- if ((__int32_t)bytes < 0)
- {
- __errno_r (rptr) = E2BIG;
- return (size_t)-1;
- }
-
- res += 1;
- }
- }
-
- return res;
-}
-
-
-static int
-_DEFUN(ucs_based_conversion_get_mb_cur_max, (data, direction),
- _VOID_PTR data _AND
- int direction)
-{
- iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
-
- if (direction == 0)
- return uc->to_ucs.handlers->get_mb_cur_max (uc->to_ucs.data);
- else
- return uc->from_ucs.handlers->get_mb_cur_max (uc->from_ucs.data);
-}
-
-
-static _VOID
-_DEFUN(ucs_based_conversion_get_state, (data, state, direction),
- _VOID_PTR data _AND
- mbstate_t *state _AND
- int direction)
-{
- iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
-
- if (direction == 0)
- {
- if (uc->to_ucs.handlers->get_state != NULL)
- uc->to_ucs.handlers->get_state (uc->to_ucs.data, state);
- else
- *state = ICONV_ZERO_MB_STATE_T;
- }
- else
- {
- if (uc->from_ucs.handlers->get_state != NULL)
- uc->from_ucs.handlers->get_state (uc->from_ucs.data, state);
- else
- *state = ICONV_ZERO_MB_STATE_T;
- }
-
- return;
-}
-
-
-static int
-_DEFUN(ucs_based_conversion_set_state, (data, state, direction),
- _VOID_PTR data _AND
- mbstate_t *state _AND
- int direction)
-{
- iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
-
- if (direction == 0)
- {
- if (uc->to_ucs.handlers->set_state != NULL)
- return uc->to_ucs.handlers->set_state (uc->to_ucs.data, state);
- }
- else
- {
- if (uc->from_ucs.handlers->set_state != NULL)
- return uc->from_ucs.handlers->set_state (uc->from_ucs.data, state);
- }
-
- return 0;
-}
-
-static int
-_DEFUN(ucs_based_conversion_is_stateful, (data, direction),
- _VOID_PTR data _AND
- int direction)
-{
- iconv_ucs_conversion_t *uc = (iconv_ucs_conversion_t *)data;
-
- if (direction == 0)
- {
- if (uc->to_ucs.handlers->is_stateful != NULL)
- return uc->to_ucs.handlers->is_stateful (uc->to_ucs.data);
- }
- else
- {
- if (uc->from_ucs.handlers->is_stateful != NULL)
- return uc->from_ucs.handlers->is_stateful (uc->from_ucs.data);
- }
-
- return 0;
-}
-
-
-/* UCS-based conversion definition object */
-_CONST iconv_conversion_handlers_t
-_iconv_ucs_conversion_handlers =
-{
- ucs_based_conversion_open,
- ucs_based_conversion_close,
- ucs_based_conversion_convert,
- ucs_based_conversion_get_state,
- ucs_based_conversion_set_state,
- ucs_based_conversion_get_mb_cur_max,
- ucs_based_conversion_is_stateful
-};
-
-
-/*
- * Supplementary functions.
- */
-
-static int
-_DEFUN(find_encoding_name, (searchee, names),
- _CONST char *searchee _AND
- _CONST char **names)
-{
- _CONST char *p;
-
- for (p = *names; p != NULL; p = *(names++))
- if (strcmp (p, searchee) == 0)
- return 0;
-
- return -1;
-}
-