diff options
Diffstat (limited to 'iconv')
-rw-r--r-- | iconv/Makefile | 2 | ||||
-rw-r--r-- | iconv/gconv.h | 127 | ||||
-rw-r--r-- | iconv/gconv_builtin.c | 4 | ||||
-rw-r--r-- | iconv/gconv_close.c | 6 | ||||
-rw-r--r-- | iconv/gconv_conf.c | 4 | ||||
-rw-r--r-- | iconv/gconv_db.c | 10 | ||||
-rw-r--r-- | iconv/gconv_dl.c | 7 | ||||
-rw-r--r-- | iconv/gconv_int.h | 153 | ||||
-rw-r--r-- | iconv/gconv_open.c | 6 | ||||
-rw-r--r-- | iconv/iconv.c | 5 | ||||
-rw-r--r-- | iconv/iconv_close.c | 4 | ||||
-rw-r--r-- | iconv/iconv_open.c | 2 | ||||
-rw-r--r-- | iconv/iconv_prog.c | 2 |
13 files changed, 196 insertions, 136 deletions
diff --git a/iconv/Makefile b/iconv/Makefile index f355a26..afe48d9 100644 --- a/iconv/Makefile +++ b/iconv/Makefile @@ -25,7 +25,7 @@ headers = iconv.h gconv.h routines = iconv_open iconv iconv_close \ gconv_open gconv gconv_close gconv_db gconv_conf \ gconv_dl gconv_builtin gconv_simple -distribute = gconv_builtin.h +distribute = gconv_builtin.h gconv_int.h others = iconv_prog diff --git a/iconv/gconv.h b/iconv/gconv.h index 139ca0d..76a7197 100644 --- a/iconv/gconv.h +++ b/iconv/gconv.h @@ -1,6 +1,5 @@ /* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -17,14 +16,16 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* This header provides no interface for a user to the internals of + the gconv implementation in the libc. Therefore there is no use + for these definitions beside for writing additional gconv modules. */ + #ifndef _GCONV_H #define _GCONV_H 1 #include <features.h> -#include <sys/types.h> -#include <regex.h> - -__BEGIN_DECLS +#define __need_size_t +#include <stddef.h> /* ISO 10646 value used to signal invalid value. */ #define UNKNOWN_10646_CHAR ((wchar_t) 0xfffd) @@ -47,18 +48,6 @@ enum }; -/* Structure for alias definition. Simply to strings. */ -struct gconv_alias -{ - __const char *fromname; - __const char *toname; -}; - - -/* Default size of intermediate buffers. */ -#define GCONV_DEFAULT_BUFSIZE 8160 - - /* Forward declarations. */ struct gconv_step; struct gconv_step_data; @@ -101,6 +90,7 @@ struct gconv_step_data void *data; /* Pointer to step-local data. */ }; + /* Combine conversion step description with data. */ typedef struct gconv_info { @@ -109,107 +99,4 @@ typedef struct gconv_info struct gconv_step_data *data; } *gconv_t; - -/* Description for an available conversion module. */ -struct gconv_module -{ - __const char *from_pattern; - __const char *from_constpfx; - size_t from_constpfx_len; - __const regex_t *from_regex; - - __const char *to_string; - - int cost; - - __const char *module_name; -}; - - -/* Global variables. */ - -/* Database of alias names. */ -extern void *__gconv_alias_db; - -/* Array with available modules. */ -extern size_t __gconv_nmodules; -extern struct gconv_module **__gconv_modules_db; - - -/* Return in *HANDLE decriptor for transformation from FROMSET to TOSET. */ -extern int __gconv_open __P ((__const char *__toset, __const char *__fromset, - gconv_t *__handle)); - -/* Free resources associated with transformation descriptor CD. */ -extern int __gconv_close __P ((gconv_t cd)); - -/* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF - according to rules described by CD and place up to *OUTBYTESLEFT - bytes in buffer starting at *OUTBUF. Return number of written - characters in *CONVERTED if this pointer is not null. */ -extern int __gconv __P ((gconv_t __cd, - __const char **__inbuf, size_t *__inbytesleft, - char **__outbuf, size_t *__outbytesleft, - size_t *__converted)); - -/* Return in *HANDLE a pointer to an array with *NSTEPS elements describing - the single steps necessary for transformation from FROMSET to TOSET. */ -extern int __gconv_find_transform __P ((__const char *__toset, - __const char *__fromset, - struct gconv_step **__handle, - size_t *__nsteps)); - -/* Read all the configuration data and cache it. */ -extern void __gconv_read_conf __P ((void)); - -/* Comparison function to search alias. */ -extern int __gconv_alias_compare __P ((__const void *__p1, - __const void *__p2)); - -/* Clear reference to transformation step implementations which might - cause the code to be unloaded. */ -extern int __gconv_close_transform __P ((struct gconv_step *__steps, - size_t __nsteps)); - - -/* Find in the shared object associated with HANDLE for a function with - name NAME. Return function pointer or NULL. */ -extern void *__gconv_find_func __P ((void *__handle, __const char *__name)); - -/* Load shared object named by NAME. If already loaded increment reference - count. */ -extern void *__gconv_find_shlib __P ((__const char *__name)); - -/* Release shared object. If no further reference is available unload - the object. */ -extern int __gconv_release_shlib __P ((void *__handle)); - -/* Fill STEP with information about builtin module with NAME. */ -extern void __gconv_get_builtin_trans __P ((__const char *__name, - struct gconv_step *__step)); - - - -/* Builtin transformations. */ -#ifdef _LIBC -# define __BUILTIN_TRANS(Name) \ - extern int Name __P ((struct gconv_step *__step, \ - struct gconv_step_data *__data, __const char *__inbuf,\ - size_t *__inlen, size_t *__written, int __do_flush)) - -__BUILTIN_TRANS (__gconv_transform_dummy); -__BUILTIN_TRANS (__gconv_transform_ucs4_utf8); -__BUILTIN_TRANS (__gconv_transform_utf8_ucs4); -__BUILTIN_TRANS (__gconv_transform_ucs2_ucs4); -__BUILTIN_TRANS (__gconv_transform_ucs4_ucs2); -# undef __BUITLIN_TRANS - -extern int __gconv_transform_init_rstate __P ((struct gconv_step *__step, - struct gconv_step_data *__data)); -extern void __gconv_transform_end_rstate __P ((struct gconv_step_data *__data)); - -#endif - -__END_DECLS - #endif /* gconv.h */ diff --git a/iconv/gconv_builtin.c b/iconv/gconv_builtin.c index 786a3c1..d913579 100644 --- a/iconv/gconv_builtin.c +++ b/iconv/gconv_builtin.c @@ -18,9 +18,10 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <gconv.h> #include <string.h> +#include <gconv_int.h> + #include <assert.h> @@ -48,6 +49,7 @@ static struct builtin_map void +internal_function __gconv_get_builtin_trans (const char *name, struct gconv_step *step) { size_t cnt; diff --git a/iconv/gconv_close.c b/iconv/gconv_close.c index 912fa26..b6d5fbc 100644 --- a/iconv/gconv_close.c +++ b/iconv/gconv_close.c @@ -1,5 +1,5 @@ /* Release any resource associated with given conversion descriptor. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -18,11 +18,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <gconv.h> #include <stdlib.h> +#include <gconv_int.h> + int +internal_function __gconv_close (gconv_t cd) { struct gconv_step *srunp; diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c index 0c5ceef..c448a16 100644 --- a/iconv/gconv_conf.c +++ b/iconv/gconv_conf.c @@ -20,7 +20,6 @@ #include <ctype.h> #include <errno.h> -#include <gconv.h> #include <search.h> #include <stdio.h> #include <stdlib.h> @@ -28,6 +27,8 @@ #include <unistd.h> #include <sys/param.h> +#include <gconv_int.h> + /* This is the default path where we look for module lists. */ static const char default_gconv_path[] = GCONV_PATH; @@ -369,6 +370,7 @@ read_conf_file (const char *filename, const char *directory, size_t dir_len, /* Read all configuration files found in the user-specified and the default path. */ void +internal_function __gconv_read_conf (void) { const char *user_path = __secure_getenv ("GCONV_PATH"); diff --git a/iconv/gconv_db.c b/iconv/gconv_db.c index b1320ac..5a3932c 100644 --- a/iconv/gconv_db.c +++ b/iconv/gconv_db.c @@ -1,5 +1,5 @@ /* Provide access to the collection of available transformation modules. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -18,12 +18,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <gconv.h> #include <search.h> #include <stdlib.h> #include <string.h> #include <bits/libc-lock.h> +#include <gconv_int.h> + /* Simple data structure for alias mapping. We have two names, `from' and `to'. */ @@ -93,6 +94,7 @@ static void *known_derivations; /* Look up whether given transformation was already requested before. */ static int +internal_function derivation_lookup (const char *fromset, const char *toset, struct gconv_step **handle, size_t *nsteps) { @@ -114,6 +116,7 @@ derivation_lookup (const char *fromset, const char *toset, /* Add new derivation to list of known ones. */ static void +internal_function add_derivation (const char *fromset, const char *toset, struct gconv_step *handle, size_t nsteps) { @@ -142,6 +145,7 @@ add_derivation (const char *fromset, const char *toset, } static void +internal_function free_derivation (void *p) { struct known_derivation *deriv = (struct known_derivation *) p; @@ -479,6 +483,7 @@ find_derivation (const char *toset, const char *toset_expand, int +internal_function __gconv_find_transform (const char *toset, const char *fromset, struct gconv_step **handle, size_t *nsteps) { @@ -523,6 +528,7 @@ __gconv_find_transform (const char *toset, const char *fromset, /* Release the entries of the modules list. */ int +internal_function __gconv_close_transform (struct gconv_step *steps, size_t nsteps) { int result = GCONV_OK; diff --git a/iconv/gconv_dl.c b/iconv/gconv_dl.c index a9a6166..2a7cc92 100644 --- a/iconv/gconv_dl.c +++ b/iconv/gconv_dl.c @@ -19,7 +19,6 @@ Boston, MA 02111-1307, USA. */ #include <dlfcn.h> -#include <gconv.h> #include <inttypes.h> #include <search.h> #include <stdlib.h> @@ -28,6 +27,8 @@ #include <elf/ldsodefs.h> #include <sys/param.h> +#include <gconv_int.h> + /* This is a tuning parameter. If a transformation module is not used anymore it gets not immediately unloaded. Instead we wait a certain @@ -112,6 +113,7 @@ struct get_sym_args }; static void +internal_function get_sym (void *a) { struct get_sym_args *args = (struct get_sym_args *) a; @@ -123,6 +125,7 @@ get_sym (void *a) void * +internal_function __gconv_find_func (void *handle, const char *name) { struct get_sym_args args; @@ -139,6 +142,7 @@ __gconv_find_func (void *handle, const char *name) /* Open the gconv database if necessary. A non-negative return value means success. */ void * +internal_function __gconv_find_shlib (const char *name) { void *result = NULL; @@ -234,6 +238,7 @@ do_release_shlib (const void *nodep, VISIT value, int level) /* Notify system that a shared object is not longer needed. */ int +internal_function __gconv_release_shlib (void *handle) { /* Acquire the lock. */ diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h new file mode 100644 index 0000000..5261284 --- /dev/null +++ b/iconv/gconv_int.h @@ -0,0 +1,153 @@ +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GCONV_INT_H +#define _GCONV_INT_H 1 + +#include "gconv.h" +#include <regex.h> + +__BEGIN_DECLS + + +/* Structure for alias definition. Simply to strings. */ +struct gconv_alias +{ + __const char *fromname; + __const char *toname; +}; + + +/* Default size of intermediate buffers. */ +#define GCONV_DEFAULT_BUFSIZE 8160 + + +/* Description for an available conversion module. */ +struct gconv_module +{ + __const char *from_pattern; + __const char *from_constpfx; + size_t from_constpfx_len; + __const regex_t *from_regex; + + __const char *to_string; + + int cost; + + __const char *module_name; +}; + + +/* Global variables. */ + +/* Database of alias names. */ +extern void *__gconv_alias_db; + +/* Array with available modules. */ +extern size_t __gconv_nmodules; +extern struct gconv_module **__gconv_modules_db; + + +/* Return in *HANDLE decriptor for transformation from FROMSET to TOSET. */ +extern int __gconv_open __P ((__const char *__toset, __const char *__fromset, + gconv_t *__handle)) + internal_function; + +/* Free resources associated with transformation descriptor CD. */ +extern int __gconv_close __P ((gconv_t cd)) + internal_function; + +/* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF + according to rules described by CD and place up to *OUTBYTESLEFT + bytes in buffer starting at *OUTBUF. Return number of written + characters in *CONVERTED if this pointer is not null. */ +extern int __gconv __P ((gconv_t __cd, + __const char **__inbuf, size_t *__inbytesleft, + char **__outbuf, size_t *__outbytesleft, + size_t *__converted)) + internal_function; + +/* Return in *HANDLE a pointer to an array with *NSTEPS elements describing + the single steps necessary for transformation from FROMSET to TOSET. */ +extern int __gconv_find_transform __P ((__const char *__toset, + __const char *__fromset, + struct gconv_step **__handle, + size_t *__nsteps)) + internal_function; + +/* Read all the configuration data and cache it. */ +extern void __gconv_read_conf __P ((void)) + internal_function; + +/* Comparison function to search alias. */ +extern int __gconv_alias_compare __P ((__const void *__p1, + __const void *__p2)); + +/* Clear reference to transformation step implementations which might + cause the code to be unloaded. */ +extern int __gconv_close_transform __P ((struct gconv_step *__steps, + size_t __nsteps)) + internal_function; + + +/* Find in the shared object associated with HANDLE for a function with + name NAME. Return function pointer or NULL. */ +extern void *__gconv_find_func __P ((void *__handle, __const char *__name)) + internal_function; + +/* Load shared object named by NAME. If already loaded increment reference + count. */ +extern void *__gconv_find_shlib __P ((__const char *__name)) + internal_function; + +/* Release shared object. If no further reference is available unload + the object. */ +extern int __gconv_release_shlib __P ((void *__handle)) + internal_function; + +/* Fill STEP with information about builtin module with NAME. */ +extern void __gconv_get_builtin_trans __P ((__const char *__name, + struct gconv_step *__step)) + internal_function; + + + +/* Builtin transformations. */ +#ifdef _LIBC +# define __BUILTIN_TRANS(Name) \ + extern int Name __P ((struct gconv_step *__step, \ + struct gconv_step_data *__data, __const char *__inbuf,\ + size_t *__inlen, size_t *__written, int __do_flush)) + +__BUILTIN_TRANS (__gconv_transform_dummy); +__BUILTIN_TRANS (__gconv_transform_ucs4_utf8); +__BUILTIN_TRANS (__gconv_transform_utf8_ucs4); +__BUILTIN_TRANS (__gconv_transform_ucs2_ucs4); +__BUILTIN_TRANS (__gconv_transform_ucs4_ucs2); +# undef __BUITLIN_TRANS + +extern int __gconv_transform_init_rstate __P ((struct gconv_step *__step, + struct gconv_step_data *__data)); +extern void __gconv_transform_end_rstate __P ((struct gconv_step_data *__data)); + +#endif + +__END_DECLS + +#endif /* gconv_int.h */ diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c index 343cb70..ea7b365 100644 --- a/iconv/gconv_open.c +++ b/iconv/gconv_open.c @@ -1,5 +1,5 @@ /* Find matching transformation algorithms and initialize steps. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -19,11 +19,13 @@ Boston, MA 02111-1307, USA. */ #include <errno.h> -#include <gconv.h> #include <stdlib.h> +#include <gconv_int.h> + int +internal_function __gconv_open (const char *toset, const char *fromset, gconv_t *handle) { struct gconv_step *steps; diff --git a/iconv/iconv.c b/iconv/iconv.c index 8804e85..fc0ed41 100644 --- a/iconv/iconv.c +++ b/iconv/iconv.c @@ -1,6 +1,6 @@ /* Convert characters in input buffer using conversion descriptor to output buffer. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -21,7 +21,8 @@ #include <errno.h> #include <iconv.h> -#include <gconv.h> + +#include <gconv_int.h> #include <assert.h> diff --git a/iconv/iconv_close.c b/iconv/iconv_close.c index ccd9d5f..d3974c5 100644 --- a/iconv/iconv_close.c +++ b/iconv/iconv_close.c @@ -1,5 +1,5 @@ /* Release any resource associated with given conversion descriptor. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -21,7 +21,7 @@ #include <errno.h> #include <iconv.h> -#include <gconv.h> +#include <gconv_int.h> int diff --git a/iconv/iconv_open.c b/iconv/iconv_open.c index d178362..cad8be6 100644 --- a/iconv/iconv_open.c +++ b/iconv/iconv_open.c @@ -24,7 +24,7 @@ #include <stdlib.h> #include <string.h> -#include <gconv.h> +#include <gconv_int.h> static inline void diff --git a/iconv/iconv_prog.c b/iconv/iconv_prog.c index 6b34d34..f26b715 100644 --- a/iconv/iconv_prog.c +++ b/iconv/iconv_prog.c @@ -23,7 +23,6 @@ #include <errno.h> #include <error.h> #include <fcntl.h> -#include <gconv.h> #include <iconv.h> #include <locale.h> #include <search.h> @@ -32,6 +31,7 @@ #include <string.h> #include <unistd.h> #include <sys/mman.h> +#include <gconv_int.h> /* Get libc version number. */ #include "../version.h" |