mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-05 09:01:07 +00:00
(__gconv_find_transform): Take extra parameter with flags. If GCONV_AVOID_NOCONV flag is set don't return copying transformation.
This commit is contained in:
parent
dc32a7c4b2
commit
60c53a1219
@ -613,7 +613,8 @@ find_derivation (const char *toset, const char *toset_expand,
|
|||||||
int
|
int
|
||||||
internal_function
|
internal_function
|
||||||
__gconv_find_transform (const char *toset, const char *fromset,
|
__gconv_find_transform (const char *toset, const char *fromset,
|
||||||
struct __gconv_step **handle, size_t *nsteps)
|
struct __gconv_step **handle, size_t *nsteps,
|
||||||
|
int flags)
|
||||||
{
|
{
|
||||||
__libc_once_define (static, once);
|
__libc_once_define (static, once);
|
||||||
const char *fromset_expand = NULL;
|
const char *fromset_expand = NULL;
|
||||||
@ -648,6 +649,21 @@ __gconv_find_transform (const char *toset, const char *fromset,
|
|||||||
toset_expand = found != NULL ? (*found)->toname : NULL;
|
toset_expand = found != NULL ? (*found)->toname : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((flags & GCONV_AVOID_NOCONV)
|
||||||
|
/* We are not supposed to create a pseudo transformation (means
|
||||||
|
copying) when the input and output character set are the same. */
|
||||||
|
&& (strcmp (toset, fromset) == 0
|
||||||
|
|| (toset_expand != NULL && strcmp (toset_expand, fromset) == 0)
|
||||||
|
|| (fromset_expand != NULL
|
||||||
|
&& (strcmp (toset, fromset_expand) == 0
|
||||||
|
|| (toset_expand != NULL
|
||||||
|
&& strcmp (toset_expand, fromset_expand) == 0)))))
|
||||||
|
{
|
||||||
|
/* Both character sets are the same. */
|
||||||
|
__libc_lock_unlock (lock);
|
||||||
|
return __GCONV_NOCONV;
|
||||||
|
}
|
||||||
|
|
||||||
result = find_derivation (toset, toset_expand, fromset, fromset_expand,
|
result = find_derivation (toset, toset_expand, fromset, fromset_expand,
|
||||||
handle, nsteps);
|
handle, nsteps);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user