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/local.h')
-rw-r--r--newlib/libc/iconv/lib/local.h310
1 files changed, 259 insertions, 51 deletions
diff --git a/newlib/libc/iconv/lib/local.h b/newlib/libc/iconv/lib/local.h
index 85f22634c..199fad0cd 100644
--- a/newlib/libc/iconv/lib/local.h
+++ b/newlib/libc/iconv/lib/local.h
@@ -1,65 +1,273 @@
-/*
- * Copyright (c) 2003-2004, Artem B. Bityuckiy
- *
- * 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.
- */
-#ifndef __ICONV_LIB_LOCAL_H__
-#define __ICONV_LIB_LOCAL_H__
+#ifndef __LOCAL_H__
+#define __LOCAL_H__
#include <_ansi.h>
#include <reent.h>
+#include <wchar.h>
#include <sys/types.h>
-#include <limits.h>
-/* void* type for K&R compilers compatibility */
+#ifndef NLS_ENVVAR_NAME
+# define NLS_ENVVAR_NAME "NLSPATH"
+#endif
+#ifndef NLS_DEFAULT_NLSPATH
+# define NLS_DEFAULT_NLSPATH "/usr/locale/"
+#endif
+
+/* void* type for K&R compilers compatability */
#define _VOID_PTR _PTR
-/* Encodings aliases file */
-#define ICONV_ALIASES_FNAME "encoding.aliases"
+/* Charset aliases file */
+#define ICONV_ALIASES_FNAME "charset.aliases"
/* iconv CCS data path */
-#define ICONV_SUBDIR "iconv_data"
-/* iconv data files extension */
-#define ICONV_DATA_EXT ".cct"
-
-/* This macro is used to zero mbstate_t objects */
-#define ICONV_ZERO_MB_STATE_T ((mbstate_t){0, {0}})
-
-/* Define the maximum multi-byte character length produced by iconv library */
-#if MB_LEN_MAX < 6
-# define ICONV_MB_LEN_MAX 6
-#else
-# define ICONV_MB_LEN_MAX MB_LEN_MAX
-#endif
+#define ICONV_DATA_PATH NLS_DEFAULT_NLSPATH"iconv_data/"
+/* iconv data files extention */
+#define ICONV_DATA_EXT ".cct"
+
+/* Unicode character data types and constants. */
+#define UCS_CHAR_ZERO_WIDTH_NBSP 0xFEFF
+#define UCS_CHAR_INVALID 0xFFFE
+#define UCS_CHAR_NONE 0xFFFF
+
+typedef __uint16_t ucs2_t; /* Unicode character [D5] */
+typedef __uint32_t ucs4_t; /* Unicode scalar character [D28] */
+#define ucs_t ucs4_t
+
+#define iconv_char32bit(ch) ((ch) & 0xFFFF0000)
+
+/* CCS file descriptor */
+typedef struct
+{
+ void *mem;
+ size_t len;
+} _iconv_fd_t;
+
+char *
+_EXFUN(_iconv_resolve_cs_name, (struct _reent *, _CONST char *, _CONST char *));
+
+char *
+_EXFUN(_iconv_resolve_alias, (struct _reent *, _CONST char *, _CONST char *,
+ int, _CONST char *));
+
+int
+_EXFUN(_iconv_load_file, (struct _reent *, _CONST char *, _iconv_fd_t *));
+
+int
+_EXFUN(_iconv_unload_file, (struct _reent *, _iconv_fd_t *));
+
+/* Builtin CCS and CES data. */
+typedef struct {
+ _CONST char *key;
+ _CONST _VOID_PTR value;
+} iconv_builtin_table_t;
+
+extern _CONST iconv_builtin_table_t _iconv_builtin_ccs[];
+extern _CONST iconv_builtin_table_t _iconv_builtin_ces[];
+extern _CONST char _iconv_builtin_aliases[];
+
+/* Table-driven coded character set (CCS) definitions. */
+struct iconv_ccs;
+
+/* Basic CCS functions */
+typedef ucs2_t
+_EXFUN(iconv_ccs_convert_t, (_CONST _VOID_PTR table, ucs2_t ch));
+
+typedef int
+_EXFUN(iconv_ccs_close_t, (struct _reent *rptr, struct iconv_ccs *desc));
+
+/* CCS structure */
+struct iconv_ccs {
+ _CONST _VOID_PTR from_ucs; /* FROM table pointer */
+ _CONST _VOID_PTR to_ucs; /* TO table pointer */
+ iconv_ccs_convert_t *convert_from_ucs; /* converter */
+ iconv_ccs_convert_t *convert_to_ucs; /* functions */
+ iconv_ccs_close_t *close; /* close function */
+ _VOID_PTR extra; /* optional extra data */
+ unsigned int nbits; /* number of bits */
+};
+
+/* CCS initialisation function */
+int
+_EXFUN(_iconv_ccs_init, (struct _reent *rptr, struct iconv_ccs *ccs,
+ _CONST char *name));
+
+/* CCS conversion macros */
+#define ICONV_CCS_CONVERT_FROM_UCS(ccs, ch) \
+ ((ccs)->convert_from_ucs((ccs)->from_ucs, (ch)))
+#define ICONV_CCS_CONVERT_TO_UCS(ccs, ch) \
+ ((ccs)->convert_to_ucs((ccs)->to_ucs, (ch)))
+#define ICONV_CCS_NBITS
+
+/* Module-driven character encoding scheme (CES) definitions */
+struct iconv_ces;
+
+/* Basic CES function types */
+typedef int
+_EXFUN(iconv_ces_init_t, (struct _reent *, _VOID_PTR *, /* void** */
+ _CONST char *, _CONST _VOID_PTR));
+
+typedef int
+_EXFUN(iconv_ces_close_t, (struct _reent *, _VOID_PTR));
+
+typedef _VOID
+_EXFUN(iconv_ces_reset_t, (_VOID_PTR));
+
+typedef ssize_t
+_EXFUN(iconv_ces_convert_from_ucs_t, (struct iconv_ces *data, ucs_t in,
+ unsigned char **outbuf,
+ size_t *outbytesleft));
+
+typedef ucs_t
+_EXFUN(iconv_ces_convert_to_ucs_t, (struct iconv_ces *data,
+ _CONST unsigned char **inbuf,
+ size_t *inbytesleft));
+
+/* CES descriptor structure - CES class data */
+struct iconv_ces_desc {
+ iconv_ces_init_t *init;
+ iconv_ces_close_t *close; /* class-specific close function */
+ iconv_ces_reset_t *reset;
+ iconv_ces_convert_from_ucs_t *convert_from_ucs;
+ iconv_ces_convert_to_ucs_t *convert_to_ucs;
+ _CONST _VOID_PTR data; /* optional specific CES class data */
+};
+
+/* explicit CES class for table (CCS) driven charsets */
+extern _CONST struct iconv_ces_desc _iconv_ces_table_driven;
+
+/* CES structure - CES instance data */
+struct iconv_ces {
+ _CONST struct iconv_ces_desc *desc; /* descriptor/class pointer */
+ iconv_ces_close_t *close; /* instance-specific close function */
+ _VOID_PTR data; /* optional extra data */
+ _VOID_PTR handle; /* optional handle */
+};
+
+/* Basic CES functions and macros */
+extern int
+_EXFUN(_iconv_ces_init, (struct _reent *rptr, struct iconv_ces *ces,
+ _CONST char *name));
+
+#define ICONV_CES_CLOSE(rptr, ces) ((ces)->close(rptr, ces))
+#define ICONV_CES_RESET(ces) ((ces)->desc->reset((ces)->data))
+#define ICONV_CES_CONVERT_FROM_UCS(cesd, in, outbuf, outbytes) \
+ ((cesd)->desc->convert_from_ucs((cesd), (in), (outbuf), (outbytes)))
+#define ICONV_CES_CONVERT_TO_UCS(cesd, inbuf, inbytes) \
+ ((cesd)->desc->convert_to_ucs((cesd), (inbuf), (inbytes)))
+
+/* Virtual CES initialisation function type */
+typedef int
+_EXFUN(iconv_ces_init_int_t, (struct _reent *rptr, _VOID_PTR* /* void ** */,
+ _CONST _VOID_PTR, size_t));
+
+/* CES subclass macros (for EUC and ISO-2022) */
+#define ICONV_CES_DRIVER_DECL(name) \
+ iconv_ces_init_int_t _iconv_##name##_init; \
+ iconv_ces_close_t _iconv_##name##_close; \
+ iconv_ces_reset_t _iconv_##name##_reset; \
+ iconv_ces_convert_from_ucs_t _iconv_##name##_convert_from_ucs; \
+ iconv_ces_convert_to_ucs_t _iconv_##name##_convert_to_ucs; \
+
+/* CES functions and macros for stateless encodings */
+iconv_ces_init_t _iconv_ces_init_null;
+iconv_ces_close_t _iconv_ces_close_null;
+iconv_ces_reset_t _iconv_ces_reset_null;
+
+#define ICONV_CES_STATELESS_MODULE_DECL(name) \
+ _CONST struct iconv_ces_desc _iconv_ces_module_##name = { \
+ _iconv_ces_init_null, \
+ _iconv_ces_close_null, \
+ _iconv_ces_reset_null, \
+ convert_from_ucs, \
+ convert_to_ucs, \
+ NULL \
+ }
+
+/* CES functions and macros for stateful (integer state) encodings */
+iconv_ces_init_t _iconv_ces_init_state;
+iconv_ces_close_t _iconv_ces_close_state;
+iconv_ces_reset_t _iconv_ces_reset_state;
+
+#define ICONV_CES_STATEFUL_MODULE_DECL(name) \
+ _CONST struct iconv_ces_desc _iconv_ces_module_##name = { \
+ _iconv_ces_init_state, \
+ _iconv_ces_close_state, \
+ _iconv_ces_reset_state, \
+ convert_from_ucs, \
+ convert_to_ucs, \
+ NULL \
+ }
+
+/* CES functions and macros for other encodings */
+#define ICONV_CES_MODULE_DECL(type, name) \
+ static int \
+ module_init(struct _reent *rptr, _VOID_PTR *data, /* void ** */ \
+ _CONST char *cs_name, _CONST _VOID_PTR desc_data) \
+ { \
+ return _iconv_##type##_init(rptr, data, desc_data, \
+ sizeof(ccsattr) / \
+ sizeof(iconv_ces_##type##_ccs_t)); \
+ } \
+ \
+ _CONST struct iconv_ces_desc _iconv_ces_module_##name = { \
+ module_init, \
+ _iconv_##type##_close, \
+ _iconv_##type##_reset, \
+ _iconv_##type##_convert_from_ucs, \
+ _iconv_##type##_convert_to_ucs, \
+ &ccsattr \
+ }
+
+/* EUC character encoding schemes and functions */
+typedef struct {
+ _CONST char *name;
+ _CONST char *prefix;
+ size_t prefixlen;
+} iconv_ces_euc_ccs_t;
+
+ICONV_CES_DRIVER_DECL(euc);
+#define _iconv_euc_reset _iconv_ces_reset_null
+
+/* ISO-2022 character encoding schemes and functions. */
+enum {ICONV_SHIFT_SI = 0, ICONV_SHIFT_SO, ICONV_SHIFT_SS2, ICONV_SHIFT_SS3};
+
+typedef struct {
+ _CONST char *name;
+ _CONST char *designator;
+ size_t designatorlen;
+ int shift;
+} iconv_ces_iso2022_ccs_t;
+
+ICONV_CES_DRIVER_DECL(iso2022);
+
+
+/* Converter structure and functions. */
+typedef size_t
+_EXFUN(iconv_conv_t, (struct _reent *, _VOID_PTR, _CONST unsigned char **,
+ size_t *, unsigned char **, size_t *));
+
+typedef int
+_EXFUN(iconv_close_t, (struct _reent *rptr, _VOID_PTR));
-/* 16-bit UCS-2 type */
-typedef __uint16_t ucs2_t;
+/* Generic converter structure. */
+typedef struct {
+ iconv_conv_t *convert;
+ iconv_close_t *close;
+}iconv_converter_t;
-/* 32-bit UCS-4 type */
-typedef __uint32_t ucs4_t;
+typedef struct {
+ struct iconv_ces from;
+ struct iconv_ces to;
+ ucs_t missing;
+} unicode_converter_t;
+/* Converter initialisers */
+iconv_converter_t *
+_EXFUN(_iconv_unicode_conv_init, (struct _reent *rptr, _CONST char *to,
+ _CONST char *from));
-/* The list of built-in encoding names and aliases */
-extern _CONST char *
-_iconv_aliases;
+iconv_converter_t *
+_EXFUN(_iconv_null_conv_init, (struct _reent *rptr, _CONST char *to,
+ _CONST char *from));
-#endif /* !__ICONV_LIB_LOCAL_H__ */
+#endif /* __LOCAL_H__ */