aboutsummaryrefslogtreecommitdiffstats
path: root/lib/glob/smatch.c
diff options
context:
space:
mode:
authorJari Aalto <jari.aalto@cante.net>2004-07-27 13:29:18 +0000
committerJari Aalto <jari.aalto@cante.net>2009-09-12 16:46:56 +0000
commitb80f6443b6b7b620c7272664c66ecb0b120a0998 (patch)
tree9f71c98d8fe8fa0f41d95e1eb4227f32a09d43ca /lib/glob/smatch.c
parent7117c2d221b2aed4ede8600f6a36b7c1454b4f55 (diff)
downloadandroid_external_bash-b80f6443b6b7b620c7272664c66ecb0b120a0998.tar.gz
android_external_bash-b80f6443b6b7b620c7272664c66ecb0b120a0998.tar.bz2
android_external_bash-b80f6443b6b7b620c7272664c66ecb0b120a0998.zip
Imported from ../bash-3.0.tar.gz.
Diffstat (limited to 'lib/glob/smatch.c')
-rw-r--r--lib/glob/smatch.c27
1 files changed, 4 insertions, 23 deletions
diff --git a/lib/glob/smatch.c b/lib/glob/smatch.c
index 8c54702..d0b7403 100644
--- a/lib/glob/smatch.c
+++ b/lib/glob/smatch.c
@@ -362,44 +362,25 @@ xstrmatch (pattern, string, flags)
{
#if HANDLE_MULTIBYTE
int ret;
- mbstate_t ps;
size_t n;
- char *pattern_bak;
wchar_t *wpattern, *wstring;
if (MB_CUR_MAX == 1)
return (internal_strmatch (pattern, string, flags));
- pattern_bak = (char *)xmalloc (strlen (pattern) + 1);
- strcpy (pattern_bak, pattern);
-
- memset (&ps, '\0', sizeof (mbstate_t));
- n = xmbsrtowcs (NULL, (const char **)&pattern, 0, &ps);
+ n = xdupmbstowcs (&wpattern, NULL, pattern);
if (n == (size_t)-1 || n == (size_t)-2)
- {
- free (pattern_bak);
- return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
- }
+ return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
- wpattern = (wchar_t *)xmalloc ((n + 1) * sizeof (wchar_t));
- (void) xmbsrtowcs (wpattern, (const char **)&pattern, n + 1, &ps);
-
- memset (&ps, '\0', sizeof (mbstate_t));
- n = xmbsrtowcs (NULL, (const char **)&string, 0, &ps);
+ n = xdupmbstowcs (&wstring, NULL, string);
if (n == (size_t)-1 || n == (size_t)-2)
{
free (wpattern);
- ret = internal_strmatch (pattern_bak, string, flags);
- free (pattern_bak);
- return ret;
+ return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
}
- wstring = (wchar_t *)xmalloc ((n + 1) * sizeof (wchar_t));
- (void) xmbsrtowcs (wstring, (const char **)&string, n + 1, &ps);
-
ret = internal_wstrmatch (wpattern, wstring, flags);
- free (pattern_bak);
free (wpattern);
free (wstring);