2014-08-08 Florian Weimer <fweimer@redhat.com>
[BZ #17187]
* iconv/gconv_open.c (__gconv_open): Remove transliteration module
loading.
* iconv/Versions (__gconv_transliterate): Export for use from
gconv modules.
* iconv/gconv.h (__GCONV_TRANSLIT): New flag.
(struct __gconv_trans_data, __gconv_trans_fct,
__gconv_trans_context_fct, __gconv_trans_query_fct,
__gconv_trans_init_fct, __gconv_trans_end_fct): Remove type
definitions.
(struct __gconv_step_data): Remove __trans member.
(__gconv_transliterate): Declaration moved from gconv_int.h. No
longer hidden. Remove unused trans_data argument.
* iconv/gconv_int.h (struct trans_struct): Remove definition.
(__gconv_translit_find): Remove declaration.
(__gconv_transliterate): Declaration moved to gconv.h. Add hidden
prototype.
* iconv/gconv_close.c (__gconv_close): Remove __trans cleanup.
* iconv/gconv_trans.c (__gconv_transliterate): Remove unused
trans_data argument. Add hidden definition.
(struct known_trans, search_tree, lock, trans_compare, open_translit,
__gconv_translit_find): Remove.
* iconv/loop.c (STANDARD_TO_LOOP_ERR_HANDLER): Call
__gconv_transliterate directly if __GCONV_TRANSLIT is set.
* iconv/skeleton.c: Remove transliteration initialization.
* libio/fileops.c (_IO_new_file_fopen): Adjust struct
__gconv_step_data initialization.
* libio/iofwide.c (__libio_translit_): Remove.
(_IO_fwide): Adjust struct __gconv_step_data initialization.
* wcsmbs/btowc.c (__btowc): Likewise.
* wcsmbs/mbrtoc16.c (mbrtoc16): Likewise.
* wcsmbs/mbrtowc.c (__mbrtowc): Likewise.
* wcsmbs/mbsnrtowcs.c (__mbsnrtowcs): Likewise.
* wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Likewise.
* wcsmbs/wcrtomb.c (__wcrtomb): Likewise.
* wcsmbs/wcsnrtombs.c (__wcsnrtombs): Likewise.
* wcsmbs/wcsrtombs.c (__wcsrtombs): Likewise.
* wcsmbs/wctob.c (wctob): Likewise.
@@ -22,7 +22,7 @@ Version 2.20
16918, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966, 16967,
16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042, 17048,
17050, 17058, 17061, 17062, 17069, 17075, 17078, 17079, 17084, 17086,
- 17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153, 17213.
+ 17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153, 17187, 17213.
* Reverted change of ABI data structures for s390 and s390x:
On s390 and s390x the size of struct ucontext and jmp_buf was increased in
@@ -97,6 +97,10 @@ Version 2.20
silently replaced with the "C" locale when running in AT_SECURE mode
(e.g., in a SUID program). This is no longer necessary because of the
additional checks.
+
+* Support for loadable gconv transliteration modules has been removed
+ because it did not work at all. Regular gconv conversion modules are
+ still supported.
Version 2.19
@@ -6,5 +6,8 @@ libc {
GLIBC_PRIVATE {
# functions shared with iconv program
__gconv_get_alias_db; __gconv_get_cache; __gconv_get_modules_db;
+
+ # function used by the gconv modules
+ __gconv_transliterate;
}
}
@@ -56,7 +56,8 @@ enum
{
__GCONV_IS_LAST = 0x0001,
__GCONV_IGNORE_ERRORS = 0x0002,
- __GCONV_SWAP = 0x0004
+ __GCONV_SWAP = 0x0004,
+ __GCONV_TRANSLIT = 0x0008
};
@@ -64,7 +65,6 @@ enum
struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
-struct __gconv_trans_data;
/* Type of a conversion function. */
@@ -80,38 +80,6 @@ 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 *,
- struct __gconv_step_data *, void *,
- const unsigned char *,
- const unsigned char **,
- const unsigned char *, unsigned char **,
- size_t *);
-
-/* Function to call to provide transliteration module with context. */
-typedef int (*__gconv_trans_context_fct) (void *, const unsigned char *,
- const unsigned char *,
- unsigned char *, unsigned char *);
-
-/* Function to query module about supported encoded character sets. */
-typedef int (*__gconv_trans_query_fct) (const char *, 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;
- struct __gconv_trans_data *__next;
-};
-
-
/* Description of a conversion step. */
struct __gconv_step
{
@@ -163,9 +131,6 @@ 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;
};
@@ -177,4 +142,13 @@ typedef struct __gconv_info
__extension__ struct __gconv_step_data __data __flexarr;
} *__gconv_t;
+/* 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,
+ size_t *irreversible);
+
#endif /* gconv.h */
@@ -37,20 +37,6 @@ __gconv_close (__gconv_t cd)
drunp = cd->__data;
do
{
- struct __gconv_trans_data *transp;
-
- transp = drunp->__trans;
- while (transp != NULL)
- {
- struct __gconv_trans_data *curp = transp;
- transp = transp->__next;
-
- if (__glibc_unlikely (curp->__trans_end_fct != NULL))
- curp->__trans_end_fct (curp->__data);
-
- free (curp);
- }
-
if (!(drunp->__flags & __GCONV_IS_LAST) && drunp->__outbuf != NULL)
free (drunp->__outbuf);
}
@@ -92,21 +92,6 @@ struct gconv_module
};
-/* Internal data structure to represent transliteration module. */
-struct trans_struct
-{
- const char *name;
- struct trans_struct *next;
-
- const char **csnames;
- size_t ncsnames;
- __gconv_trans_fct trans_fct;
- __gconv_trans_context_fct trans_context_fct;
- __gconv_trans_init_fct trans_init_fct;
- __gconv_trans_end_fct trans_end_fct;
-};
-
-
/* Flags for `gconv_open'. */
enum
{
@@ -258,20 +243,7 @@ extern void __gconv_get_builtin_trans (const char *name,
struct __gconv_step *step)
internal_function;
-/* Try to load transliteration step module. */
-extern int __gconv_translit_find (struct trans_struct *trans)
- internal_function;
-
-/* Transliteration using the locale's data. */
-extern int __gconv_transliterate (struct __gconv_step *step,
- struct __gconv_step_data *step_data,
- void *trans_data,
- const unsigned char *inbufstart,
- const unsigned char **inbufp,
- const unsigned char *inbufend,
- unsigned char **outbufstart,
- size_t *irreversible) attribute_hidden;
-
+libc_hidden_proto (__gconv_transliterate)
/* If NAME is an codeset alias expand it. */
extern int __gconv_compare_alias (const char *name1, const char *name2)
@@ -39,7 +39,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
int conv_flags = 0;
const char *errhand;
const char *ignore;
- struct trans_struct *trans = NULL;
+ bool translit = false;
/* Find out whether any error handling method is specified. */
errhand = strchr (toset, '/');
@@ -66,72 +66,10 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
while (tok != NULL)
{
if (__strcasecmp_l (tok, "TRANSLIT", _nl_C_locobj_ptr) == 0)
- {
- /* It's the builtin transliteration handling. We only
- support it for working on the internal encoding. */
- static const char *const internal_trans_names[1]
- = { "INTERNAL" };
- struct trans_struct *lastp = NULL;
- struct trans_struct *runp;
-
- for (runp = trans; runp != NULL; runp = runp->next)
- if (runp->trans_fct == __gconv_transliterate)
- break;
- else
- lastp = runp;
-
- if (runp == NULL)
- {
- struct trans_struct *newp;
-
- newp = (struct trans_struct *) alloca (sizeof (*newp));
- memset (newp, '\0', sizeof (*newp));
-
- /* We leave the `name' field zero to signal that
- this is an internal transliteration step. */
- newp->csnames = (const char **) internal_trans_names;
- newp->ncsnames = 1;
- newp->trans_fct = __gconv_transliterate;
-
- if (lastp == NULL)
- trans = newp;
- else
- lastp->next = newp;
- }
- }
+ translit = true;
else if (__strcasecmp_l (tok, "IGNORE", _nl_C_locobj_ptr) == 0)
/* Set the flag to ignore all errors. */
conv_flags |= __GCONV_IGNORE_ERRORS;
- else
- {
- /* `tok' is possibly a module name. We'll see later
- whether we can find it. But first see that we do
- not already a module of this name. */
- struct trans_struct *lastp = NULL;
- struct trans_struct *runp;
-
- for (runp = trans; runp != NULL; runp = runp->next)
- if (runp->name != NULL
- && __strcasecmp_l (tok, runp->name,
- _nl_C_locobj_ptr) == 0)
- break;
- else
- lastp = runp;
-
- if (runp == NULL)
- {
- struct trans_struct *newp;
-
- newp = (struct trans_struct *) alloca (sizeof (*newp));
- memset (newp, '\0', sizeof (*newp));
- newp->name = tok;
-
- if (lastp == NULL)
- trans = newp;
- else
- lastp->next = newp;
- }
- }
tok = __strtok_r (NULL, ",", &ptr);
}
@@ -172,25 +110,6 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
res = __gconv_find_transform (toset, fromset, &steps, &nsteps, flags);
if (res == __GCONV_OK)
{
- /* Find the modules. */
- struct trans_struct *lastp = NULL;
- struct trans_struct *runp;
-
- for (runp = trans; runp != NULL; runp = runp->next)
- {
- if (runp->name == NULL
- || __builtin_expect (__gconv_translit_find (runp), 0) == 0)
- lastp = runp;
- else
- {
- /* This means we haven't found the module. Remove it. */
- if (lastp == NULL)
- trans = runp->next;
- else
- lastp->next = runp->next;
- }
- }
-
/* Allocate room for handle. */
result = (__gconv_t) malloc (sizeof (struct __gconv_info)
+ (nsteps
@@ -199,8 +118,6 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
res = __GCONV_NOMEM;
else
{
- size_t n;
-
/* Remember the list of steps. */
result->__steps = steps;
result->__nsteps = nsteps;
@@ -228,47 +145,12 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
/* We use the `mbstate_t' member in DATA. */
result->__data[cnt].__statep = &result->__data[cnt].__state;
- /* Now see whether we can use any of the transliteration
- modules for this step. */
- for (runp = trans; runp != NULL; runp = runp->next)
- for (n = 0; n < runp->ncsnames; ++n)
- if (__strcasecmp_l (steps[cnt].__from_name,
- runp->csnames[n], _nl_C_locobj_ptr) == 0)
- {
- void *data = NULL;
-
- /* Match! Now try the initializer. */
- if (runp->trans_init_fct == NULL
- || (runp->trans_init_fct (&data,
- steps[cnt].__to_name)
- == __GCONV_OK))
- {
- /* Append at the end of the list. */
- struct __gconv_trans_data *newp;
- struct __gconv_trans_data **lastp;
-
- newp = (struct __gconv_trans_data *)
- malloc (sizeof (struct __gconv_trans_data));
- if (newp == NULL)
- {
- res = __GCONV_NOMEM;
- goto bail;
- }
-
- newp->__trans_fct = runp->trans_fct;
- newp->__trans_context_fct = runp->trans_context_fct;
- newp->__trans_end_fct = runp->trans_end_fct;
- newp->__data = data;
- newp->__next = NULL;
-
- lastp = &result->__data[cnt].__trans;
- while (*lastp != NULL)
- lastp = &(*lastp)->__next;
-
- *lastp = newp;
- }
- break;
- }
+ /* The builtin transliteration handling only
+ supports the internal encoding. */
+ if (translit
+ && __strcasecmp_l (steps[cnt].__from_name,
+ "INTERNAL", _nl_C_locobj_ptr) == 0)
+ conv_flags |= __GCONV_TRANSLIT;
/* If this is the last step we must not allocate an
output buffer. */
@@ -309,23 +191,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
if (result != NULL)
{
while (cnt-- > 0)
- {
- struct __gconv_trans_data *transp;
-
- transp = result->__data[cnt].__trans;
- while (transp != NULL)
- {
- struct __gconv_trans_data *curp = transp;
- transp = transp->__next;
-
- if (__glibc_unlikely (curp->__trans_end_fct != NULL))
- curp->__trans_end_fct (curp->__data);
-
- free (curp);
- }
-
- free (result->__data[cnt].__outbuf);
- }
+ free (result->__data[cnt].__outbuf);
free (result);
result = NULL;
@@ -32,7 +32,6 @@
int
__gconv_transliterate (struct __gconv_step *step,
struct __gconv_step_data *step_data,
- void *trans_data __attribute__ ((unused)),
const unsigned char *inbufstart,
const unsigned char **inbufp,
const unsigned char *inbufend,
@@ -237,182 +236,4 @@ __gconv_transliterate (struct __gconv_step *step,
/* Haven't found a match. */
return __GCONV_ILLEGAL_INPUT;
}
-
-
-/* Structure to represent results of found (or not) transliteration
- modules. */
-struct known_trans
-{
- /* This structure must remain the first member. */
- struct trans_struct info;
-
- char *fname;
- void *handle;
- int open_count;
-};
-
-
-/* Tree with results of previous calls to __gconv_translit_find. */
-static void *search_tree;
-
-/* We modify global data. */
-__libc_lock_define_initialized (static, lock);
-
-
-/* Compare two transliteration entries. */
-static int
-trans_compare (const void *p1, const void *p2)
-{
- const struct known_trans *s1 = (const struct known_trans *) p1;
- const struct known_trans *s2 = (const struct known_trans *) p2;
-
- return strcmp (s1->info.name, s2->info.name);
-}
-
-
-/* Open (maybe reopen) the module named in the struct. Get the function
- and data structure pointers we need. */
-static int
-open_translit (struct known_trans *trans)
-{
- __gconv_trans_query_fct queryfct;
-
- trans->handle = __libc_dlopen (trans->fname);
- if (trans->handle == NULL)
- /* Not available. */
- return 1;
-
- /* Find the required symbol. */
- queryfct = __libc_dlsym (trans->handle, "gconv_trans_context");
- if (queryfct == NULL)
- {
- /* We cannot live with that. */
- close_and_out:
- __libc_dlclose (trans->handle);
- trans->handle = NULL;
- return 1;
- }
-
- /* Get the context. */
- if (queryfct (trans->info.name, &trans->info.csnames, &trans->info.ncsnames)
- != 0)
- goto close_and_out;
-
- /* Of course we also have to have the actual function. */
- trans->info.trans_fct = __libc_dlsym (trans->handle, "gconv_trans");
- if (trans->info.trans_fct == NULL)
- goto close_and_out;
-
- /* Now the optional functions. */
- trans->info.trans_init_fct =
- __libc_dlsym (trans->handle, "gconv_trans_init");
- trans->info.trans_context_fct =
- __libc_dlsym (trans->handle, "gconv_trans_context");
- trans->info.trans_end_fct =
- __libc_dlsym (trans->handle, "gconv_trans_end");
-
- trans->open_count = 1;
-
- return 0;
-}
-
-
-int
-internal_function
-__gconv_translit_find (struct trans_struct *trans)
-{
- struct known_trans **found;
- const struct path_elem *runp;
- int res = 1;
-
- /* We have to have a name. */
- assert (trans->name != NULL);
-
- /* Acquire the lock. */
- __libc_lock_lock (lock);
-
- /* See whether we know this module already. */
- found = __tfind (trans, &search_tree, trans_compare);
- if (found != NULL)
- {
- /* Is this module available? */
- if ((*found)->handle != NULL)
- {
- /* Maybe we have to reopen the file. */
- if ((*found)->handle != (void *) -1)
- /* The object is not unloaded. */
- res = 0;
- else if (open_translit (*found) == 0)
- {
- /* Copy the data. */
- *trans = (*found)->info;
- (*found)->open_count++;
- res = 0;
- }
- }
- }
- else
- {
- size_t name_len = strlen (trans->name) + 1;
- int need_so = 0;
- struct known_trans *newp;
-
- /* We have to continue looking for the module. */
- if (__gconv_path_elem == NULL)
- __gconv_get_path ();
-
- /* See whether we have to append .so. */
- if (name_len <= 4 || memcmp (&trans->name[name_len - 4], ".so", 3) != 0)
- need_so = 1;
-
- /* Create a new entry. */
- newp = (struct known_trans *) malloc (sizeof (struct known_trans)
- + (__gconv_max_path_elem_len
- + name_len + 3)
- + name_len);
- if (newp != NULL)
- {
- char *cp;
-
- /* Clear the struct. */
- memset (newp, '\0', sizeof (struct known_trans));
-
- /* Store a copy of the module name. */
- newp->info.name = cp = (char *) (newp + 1);
- cp = __mempcpy (cp, trans->name, name_len);
-
- newp->fname = cp;
-
- /* Search in all the directories. */
- for (runp = __gconv_path_elem; runp->name != NULL; ++runp)
- {
- cp = __mempcpy (__stpcpy ((char *) newp->fname, runp->name),
- trans->name, name_len);
- if (need_so)
- memcpy (cp, ".so", sizeof (".so"));
-
- if (open_translit (newp) == 0)
- {
- /* We found a module. */
- res = 0;
- break;
- }
- }
-
- if (res)
- newp->fname = NULL;
-
- /* In any case we'll add the entry to our search tree. */
- if (__tsearch (newp, &search_tree, trans_compare) == NULL)
- {
- /* Yickes, this should not happen. Unload the object. */
- res = 1;
- /* XXX unload here. */
- }
- }
- }
-
- __libc_lock_unlock (lock);
-
- return res;
-}
+libc_hidden_def (__gconv_transliterate)
@@ -213,8 +213,6 @@
points. */
#define STANDARD_TO_LOOP_ERR_HANDLER(Incr) \
{ \
- struct __gconv_trans_data *trans; \
- \
result = __GCONV_ILLEGAL_INPUT; \
\
if (irreversible == NULL) \
@@ -227,14 +225,10 @@
UPDATE_PARAMS; \
\
/* First try the transliteration methods. */ \
- for (trans = step_data->__trans; trans != NULL; trans = trans->__next) \
- { \
- result = DL_CALL_FCT (trans->__trans_fct, \
- (step, step_data, trans->__data, *inptrp, \
- &inptr, inend, &outptr, irreversible)); \
- if (result != __GCONV_ILLEGAL_INPUT) \
- break; \
- } \
+ if ((step_data->__flags & __GCONV_TRANSLIT) != 0) \
+ result = __gconv_transliterate \
+ (step, step_data, *inptrp, \
+ &inptr, inend, &outptr, irreversible); \
\
REINIT_PARAMS; \
\
@@ -501,8 +501,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
}
else
{
- /* We preserve the initial values of the pointer variables. */
- const unsigned char *inptr = *inptrp;
+ /* We preserve the initial values of the pointer variables,
+ but only some conversion modules need it. */
+ const unsigned char *inptr __attribute__ ((__unused__)) = *inptrp;
unsigned char *outbuf = (__builtin_expect (outbufstart == NULL, 1)
? data->__outbuf : *outbufstart);
unsigned char *outend = data->__outbufend;
@@ -592,8 +593,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
while (1)
{
- struct __gconv_trans_data *trans;
-
/* Remember the start value for this round. */
inptr = *inptrp;
/* The outbuf buffer is empty. */
@@ -640,13 +639,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
return status;
}
- /* Give the transliteration module the chance to store the
- original text and the result in case it needs a context. */
- for (trans = data->__trans; trans != NULL; trans = trans->__next)
- if (trans->__trans_context_fct != NULL)
- DL_CALL_FCT (trans->__trans_context_fct,
- (trans->__data, inptr, *inptrp, outstart, outbuf));
-
/* We finished one use of the loops. */
++data->__invocation_counter;
@@ -403,21 +403,16 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
cc->__cd_in.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
- /* XXX For now no transliteration. */
- cc->__cd_in.__cd.__data[0].__trans = NULL;
-
cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
cc->__cd_out.__cd.__steps = fcts.tomb;
cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags = __GCONV_IS_LAST;
+ cc->__cd_out.__cd.__data[0].__flags
+ = __GCONV_IS_LAST | __GCONV_TRANSLIT;
cc->__cd_out.__cd.__data[0].__statep =
&result->_wide_data->_IO_state;
- /* And now the transliteration. */
- cc->__cd_out.__cd.__data[0].__trans = &__libio_translit;
-
/* From now on use the wide character callback functions. */
((struct _IO_FILE_plus *) fp)->vtable = fp->_wide_data->_wide_vtable;
@@ -81,14 +81,6 @@ const struct _IO_codecvt __libio_codecvt =
};
-#ifdef _LIBC
-const struct __gconv_trans_data __libio_translit attribute_hidden =
-{
- .__trans_fct = __gconv_transliterate
-};
-#endif
-
-
/* Return orientation of stream. If mode is nonzero try to change
the orientation first. */
#undef _IO_fwide
@@ -146,20 +138,14 @@ _IO_fwide (fp, mode)
cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
cc->__cd_in.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
- /* XXX For now no transliteration. */
- cc->__cd_in.__cd.__data[0].__trans = NULL;
-
cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
cc->__cd_out.__cd.__steps = fcts.tomb;
cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags = __GCONV_IS_LAST;
+ cc->__cd_out.__cd.__data[0].__flags
+ = __GCONV_IS_LAST | __GCONV_TRANSLIT;
cc->__cd_out.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
-
- /* And now the transliteration. */
- cc->__cd_out.__cd.__data[0].__trans
- = (struct __gconv_trans_data *) &__libio_translit;
}
#else
# ifdef _GLIBCPP_USE_WCHAR_T
@@ -75,7 +75,6 @@ __btowc (c)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = &data.__state;
- data.__trans = NULL;
/* Make sure we start in the initial state. */
memset (&data.__state, '\0', sizeof (mbstate_t));
@@ -67,7 +67,6 @@ mbrtoc16 (char16_t *pc16, const char *s, size_t n, mbstate_t *ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps;
- data.__trans = NULL;
/* A first special case is if S is NULL. This means put PS in the
initial state. */
@@ -49,7 +49,6 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps ?: &state;
- data.__trans = NULL;
/* A first special case is if S is NULL. This means put PS in the
initial state. */
@@ -58,7 +58,6 @@ __mbsnrtowcs (dst, src, nmc, len, ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps ?: &state;
- data.__trans = NULL;
if (nmc == 0)
return 0;
@@ -56,7 +56,6 @@ __mbsrtowcs_l (dst, src, len, ps, l)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps;
- data.__trans = NULL;
/* Get the conversion functions. */
fcts = get_gconv_fcts (l->__locales[LC_CTYPE]);
@@ -49,7 +49,6 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps ?: &state;
- data.__trans = NULL;
/* A first special case is if S is NULL. This means put PS in the
initial state. */
@@ -56,7 +56,6 @@ __wcsnrtombs (dst, src, nwc, len, ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps ?: &state;
- data.__trans = NULL;
if (nwc == 0)
return 0;
@@ -52,7 +52,6 @@ __wcsrtombs (dst, src, len, ps)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = ps ?: &state;
- data.__trans = NULL;
/* Get the conversion functions. */
fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
@@ -53,7 +53,6 @@ wctob (c)
data.__internal_use = 1;
data.__flags = __GCONV_IS_LAST;
data.__statep = &data.__state;
- data.__trans = NULL;
/* Make sure we start in the initial state. */
memset (&data.__state, '\0', sizeof (mbstate_t));