diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2000-06-12 19:47:50 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2000-06-12 19:47:50 +0000 |
| commit | 55985355ade2a038b567dd9b58153a98384ae703 (patch) | |
| tree | b6252e23490e6d10d55ae926e30e32173f504190 | |
| parent | a5b97402f70a3cd43ffee9ccb71560457b4cd88c (diff) | |
| download | glibc-55985355ade2a038b567dd9b58153a98384ae703.tar.xz glibc-55985355ade2a038b567dd9b58153a98384ae703.zip | |
Update.
2000-06-12 Ulrich Drepper <drepper@redhat.com>
* Rules (%.out): Define GCONV_PATH in the environment.
* assert/Depend: New file.
* iconvdata/Depend: New file.
* intl/Depend: New file.
* timezone/Makefile (build-testdata): Add GCONV_PATH to environment.
* intl/tst-gettext.sh: Likewise.
* iconv/Makefile (routines): Add gconv_trans.
* iconv/gconv_trans.c: New file.
* iconv/gconv.h (struct __gconv_trans_data): New type.
(__gconv_fct): New parameter with starting position in output buffer.
(__gconv_trans_fct, __gconv_trans_context_fct, __gconv_trans_query_fct,
__gconv_trans_init_fct, __gconv_trans_end_fct): New types.
(struct __gconv_step): Add new member __trans.
* iconv/gconv_int.h: Pretty print prototypes.
(gconv_transliterate): New prototype.
(__BUILTIN_TRANS): Update for new conversion function interface.
* iconv/gconv.c (__gconv): Pass new parameter to conversion function.
* iconv/gconv_open.c (__gconv_open): Recognize error handling suffix
in names, find appropriate function, and install in the conversion
steps it can be used.
* iconv/skeleton.c: Add additional parameter for beginning of output
buffer. Change calls of downstream functions.
* iconv/loop.c: Change loop function interface completely. Pass in
step and step_data structure. Remove optimization for BODY with
NEED_LENGTH_TEST == 0.
* iconv/gconv_simple.c: Update interfaces of functions. Insert
appropriate error handling code to use transliteration steps. Remove
optimization for BODY with NEED_LENGTH_TEST == 0.
* iconvdata/8bit-gap.c: Likewise.
* iconvdata/8bit-generic.c: Likewise.
* iconvdata/ansi_x3.110.c: Likewise.
* iconvdata/big5.c: Likewise.
* iconvdata/big5hkscs.c: Likewise.
* iconvdata/euc-cn.c: Likewise.
* iconvdata/euc-jp.c: Likewise.
* iconvdata/euc-kr.c: Likewise.
* iconvdata/euc-tw.c: Likewise.
* iconvdata/gbgbk.c: Likewise.
* iconvdata/gbk.c: Likewise.
* iconvdata/iso-2022-cn.c: Likewise.
* iconvdata/iso-2022-jp.c: Likewise.
* iconvdata/iso-2022-kr.c: Likewise.
* iconvdata/iso646.c: Likewise.
* iconvdata/iso8859-1.c: Likewise.
* iconvdata/iso_6937-2.c: Likewise.
* iconvdata/iso_6937.c: Likewise.
* iconvdata/johab.c: Likewise.
* iconvdata/sjis.c: Likewise.
* iconvdata/t.61.c: Likewise.
* iconvdata/uhc.c: Likewise.
* iconvdata/unicode.c: Likewise.
* iconvdata/utf-16.c: Likewise.
* libio/iofwide.c: Adjust to new interface of gconv functions. Use
DL_CALL_FCT.
* wcsmbs/btowc.c: Likewise.
* wcsmbs/mbrtowc.c: Likewise.
* wcsmbs/mbsnrtowcs.c: Likewise.
* wcsmbs/mbsrtowcs.c: Likewise.
* wcsmbs/wcrtomb.c: Likewise.
* wcsmbs/wcsnrtombs.c: Likewise.
* wcsmbs/wcsrtombs.c: Likewise.
* wcsmbs/wctob.c: Likewise.
47 files changed, 1352 insertions, 571 deletions
@@ -1,3 +1,68 @@ +2000-06-12 Ulrich Drepper <drepper@redhat.com> + + * Rules (%.out): Define GCONV_PATH in the environment. + * assert/Depend: New file. + * iconvdata/Depend: New file. + * intl/Depend: New file. + * timezone/Makefile (build-testdata): Add GCONV_PATH to environment. + * intl/tst-gettext.sh: Likewise. + * iconv/Makefile (routines): Add gconv_trans. + * iconv/gconv_trans.c: New file. + * iconv/gconv.h (struct __gconv_trans_data): New type. + (__gconv_fct): New parameter with starting position in output buffer. + (__gconv_trans_fct, __gconv_trans_context_fct, __gconv_trans_query_fct, + __gconv_trans_init_fct, __gconv_trans_end_fct): New types. + (struct __gconv_step): Add new member __trans. + * iconv/gconv_int.h: Pretty print prototypes. + (gconv_transliterate): New prototype. + (__BUILTIN_TRANS): Update for new conversion function interface. + * iconv/gconv.c (__gconv): Pass new parameter to conversion function. + * iconv/gconv_open.c (__gconv_open): Recognize error handling suffix + in names, find appropriate function, and install in the conversion + steps it can be used. + * iconv/skeleton.c: Add additional parameter for beginning of output + buffer. Change calls of downstream functions. + * iconv/loop.c: Change loop function interface completely. Pass in + step and step_data structure. Remove optimization for BODY with + NEED_LENGTH_TEST == 0. + * iconv/gconv_simple.c: Update interfaces of functions. Insert + appropriate error handling code to use transliteration steps. Remove + optimization for BODY with NEED_LENGTH_TEST == 0. + * iconvdata/8bit-gap.c: Likewise. + * iconvdata/8bit-generic.c: Likewise. + * iconvdata/ansi_x3.110.c: Likewise. + * iconvdata/big5.c: Likewise. + * iconvdata/big5hkscs.c: Likewise. + * iconvdata/euc-cn.c: Likewise. + * iconvdata/euc-jp.c: Likewise. + * iconvdata/euc-kr.c: Likewise. + * iconvdata/euc-tw.c: Likewise. + * iconvdata/gbgbk.c: Likewise. + * iconvdata/gbk.c: Likewise. + * iconvdata/iso-2022-cn.c: Likewise. + * iconvdata/iso-2022-jp.c: Likewise. + * iconvdata/iso-2022-kr.c: Likewise. + * iconvdata/iso646.c: Likewise. + * iconvdata/iso8859-1.c: Likewise. + * iconvdata/iso_6937-2.c: Likewise. + * iconvdata/iso_6937.c: Likewise. + * iconvdata/johab.c: Likewise. + * iconvdata/sjis.c: Likewise. + * iconvdata/t.61.c: Likewise. + * iconvdata/uhc.c: Likewise. + * iconvdata/unicode.c: Likewise. + * iconvdata/utf-16.c: Likewise. + * libio/iofwide.c: Adjust to new interface of gconv functions. Use + DL_CALL_FCT. + * wcsmbs/btowc.c: Likewise. + * wcsmbs/mbrtowc.c: Likewise. + * wcsmbs/mbsnrtowcs.c: Likewise. + * wcsmbs/mbsrtowcs.c: Likewise. + * wcsmbs/wcrtomb.c: Likewise. + * wcsmbs/wcsnrtombs.c: Likewise. + * wcsmbs/wcsrtombs.c: Likewise. + * wcsmbs/wctob.c: Likewise. + 2000-04-11 Geoff Keating <geoffk@cygnus.com> * sysdeps/powerpc/dl-machine.c: Include dl-machine.h after the diff --git a/iconv/Makefile b/iconv/Makefile index 14076e6f6e..6af661c964 100644 --- a/iconv/Makefile +++ b/iconv/Makefile @@ -26,7 +26,7 @@ include ../Makeconfig headers = iconv.h gconv.h routines = iconv_open iconv iconv_close \ gconv_open gconv gconv_close gconv_db gconv_conf \ - gconv_builtin gconv_simple + gconv_builtin gconv_simple gconv_trans ifeq ($(elf),yes) routines += gconv_dl else diff --git a/iconv/gconv.c b/iconv/gconv.c index 06e212b2cb..19f95622a2 100644 --- a/iconv/gconv.c +++ b/iconv/gconv.c @@ -46,8 +46,8 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, if (inbuf == NULL || *inbuf == NULL) /* We just flush. */ result = DL_CALL_FCT (cd->__steps->__fct, - (cd->__steps, cd->__data, NULL, NULL, - irreversible, 1, 0)); + (cd->__steps, cd->__data, NULL, NULL, + cd->__data[0].__outbuf, irreversible, 1, 0)); else { const unsigned char *last_start; @@ -58,8 +58,8 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, { last_start = *inbuf; result = DL_CALL_FCT (cd->__steps->__fct, - (cd->__steps, cd->__data, inbuf, inbufend, - irreversible, 0, 0)); + (cd->__steps, cd->__data, inbuf, inbufend, + cd->__data[0].__outbuf, irreversible, 0, 0)); } while (result == __GCONV_EMPTY_INPUT && last_start != *inbuf && *inbuf + cd->__steps->__min_needed_from <= inbufend); diff --git a/iconv/gconv.h b/iconv/gconv.h index 1821844952..5717ddbea0 100644 --- a/iconv/gconv.h +++ b/iconv/gconv.h @@ -62,18 +62,52 @@ enum struct __gconv_step; struct __gconv_step_data; struct __gconv_loaded_object; +struct __gconv_trans_data; /* Type of a conversion function. */ typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, __const unsigned char **, __const unsigned char *, - size_t *, int, int); + unsigned char *, size_t *, int, int); /* Constructor and destructor for local data for conversion step. */ typedef int (*__gconv_init_fct) (struct __gconv_step *); typedef void (*__gconv_end_fct) (struct __gconv_step *); +/* Type of a transliteration/transscription function. */ +typedef int (*__gconv_trans_fct) (struct __gconv_step *step, + struct __gconv_step_data *step_data, + __const unsigned char *, + __const unsigned char **, + __const unsigned char *, unsigned char *, + unsigned char **, unsigned char *, size_t *); + +/* Function to call to provide transliteration module with context. */ +typedef int (*__gconv_trans_context_fct) (struct __gconv_trans_data *data, + __const unsigned char *, + __const unsigned char *, + __const unsigned char *, + unsigned char *, unsigned char *, + unsigned char *); + +/* Function to query module about supported encoded character sets. */ +typedef int (*__gconv_trans_query_fct) (__const char **, size_t *); + +/* Constructor and destructor for local data for transliteration. */ +typedef int (*__gconv_trans_init_fct) (void **, const char *); +typedef void (*__gconv_trans_end_fct) (void *); + +struct __gconv_trans_data +{ + /* Transliteration/Transscription function. */ + __gconv_trans_fct __trans_fct; + __gconv_trans_context_fct __trans_context_fct; + __gconv_trans_end_fct __trans_end_fct; + void *__data; +}; + + /* Description of a conversion step. */ struct __gconv_step { @@ -124,6 +158,9 @@ struct __gconv_step_data __mbstate_t *__statep; __mbstate_t __state; /* This element must not be used directly by any module; always use STATEP! */ + + /* Transliteration information. */ + struct __gconv_trans_data __trans; }; diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h index 01cebe72c4..87287d7b26 100644 --- a/iconv/gconv_int.h +++ b/iconv/gconv_int.h @@ -129,8 +129,8 @@ extern struct gconv_module *__gconv_modules_db; /* Return in *HANDLE decriptor for transformation from FROMSET to TOSET. */ -extern int __gconv_open (const char *__toset, const char *__fromset, - __gconv_t *__handle, int flags) +extern int __gconv_open (const char *toset, const char *fromset, + __gconv_t *handle, int flags) internal_function; /* Free resources associated with transformation descriptor CD. */ @@ -141,55 +141,65 @@ extern int __gconv_close (__gconv_t cd) according to rules described by CD and place up to *OUTBYTESLEFT bytes in buffer starting at *OUTBUF. Return number of non-identical conversions in *IRREVERSIBLE if this pointer is not null. */ -extern int __gconv (__gconv_t __cd, const unsigned char **__inbuf, - const unsigned char *inbufend, unsigned char **__outbuf, +extern int __gconv (__gconv_t cd, const unsigned char **inbuf, + const unsigned char *inbufend, unsigned char **outbuf, unsigned char *outbufend, size_t *irreversible) 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 (const char *__toset, const char *__fromset, - struct __gconv_step **__handle, - size_t *__nsteps, int flags) +extern int __gconv_find_transform (const char *toset, const char *fromset, + struct __gconv_step **handle, + size_t *nsteps, int flags) internal_function; /* Read all the configuration data and cache it. */ extern void __gconv_read_conf (void); /* Comparison function to search alias. */ -extern int __gconv_alias_compare (const void *__p1, const void *__p2); +extern int __gconv_alias_compare (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 (struct __gconv_step *__steps, - size_t __nsteps) +extern int __gconv_close_transform (struct __gconv_step *steps, + size_t nsteps) internal_function; /* Load shared object named by NAME. If already loaded increment reference count. */ -extern struct __gconv_loaded_object *__gconv_find_shlib (const char *__name) +extern struct __gconv_loaded_object *__gconv_find_shlib (const char *name) internal_function; /* Release shared object. If no further reference is available unload the object. */ -extern int __gconv_release_shlib (struct __gconv_loaded_object *__handle) +extern int __gconv_release_shlib (struct __gconv_loaded_object *handle) internal_function; /* Fill STEP with information about builtin module with NAME. */ -extern void __gconv_get_builtin_trans (const char *__name, - struct __gconv_step *__step) +extern void __gconv_get_builtin_trans (const char *name, + struct __gconv_step *step) internal_function; +/* Transliteration using the locale's data. */ +extern int gconv_transliterate (struct __gconv_step *step, + struct __gconv_step_data *step_data, + __const unsigned char *inbufstart, + __const unsigned char **inbufp, + __const unsigned char *inbufend, + unsigned char *outbufstart, + unsigned char **outbufp, + unsigned char *outbufend, + size_t *irreversible); /* Builtin transformations. */ #ifdef _LIBC # define __BUILTIN_TRANS(Name) \ - extern int Name (struct __gconv_step *__step, \ - struct __gconv_step_data *__data, \ - const unsigned char **__inbuf, \ - const unsigned char *__inbufend, size_t *__written, \ - int __do_flush, int __consume_incomplete) + extern int Name (struct __gconv_step *step, \ + struct __gconv_step_data *data, \ + const unsigned char **inbuf, \ + const unsigned char *inbufend, unsigned char *outbufstart, \ + size_t *irreversible, int do_flush, int consume_incomplete) __BUILTIN_TRANS (__gconv_transform_ascii_internal); __BUILTIN_TRANS (__gconv_transform_internal_ascii); diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c index da00b1abbd..984ca9dc5d 100644 --- a/iconv/gconv_open.c +++ b/iconv/gconv_open.c @@ -36,25 +36,65 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, size_t cnt = 0; int res; int conv_flags = 0; - const char *runp; + const char *errhand; - /* Find out whether "IGNORE" is part of the options in the `toset' - name. If yes, remove the |
