(__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:
Ulrich Drepper 1999-08-22 22:28:29 +00:00
parent dc32a7c4b2
commit 60c53a1219
1 changed files with 17 additions and 1 deletions

View File

@ -613,7 +613,8 @@ 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)
struct __gconv_step **handle, size_t *nsteps,
int flags)
{
__libc_once_define (static, once);
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;
}
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,
handle, nsteps);