commit bash-20110317 snapshot

This commit is contained in:
Chet Ramey
2011-12-29 13:05:29 -05:00
parent d9e1f41e7f
commit 7df0c1b2df
8 changed files with 1072 additions and 11826 deletions
+6 -1
View File
@@ -200,8 +200,11 @@ mbskipname (pat, dname, flags)
wchar_t *pat_wc, *dn_wc;
size_t pat_n, dn_n;
pat_wc = dn_wc = (wchar_t *)NULL;
pat_n = xdupmbstowcs (&pat_wc, NULL, pat);
dn_n = xdupmbstowcs (&dn_wc, NULL, dname);
if (pat_n != (size_t)-1)
dn_n = xdupmbstowcs (&dn_wc, NULL, dname);
ret = 0;
if (pat_n != (size_t)-1 && dn_n !=(size_t)-1)
@@ -221,6 +224,8 @@ mbskipname (pat, dname, flags)
(pat_wc[0] != L'\\' || pat_wc[1] != L'.'))
ret = 1;
}
else
ret = skipname (pat, dname, flags);
FREE (pat_wc);
FREE (dn_wc);
+6 -6
View File
@@ -1,6 +1,6 @@
/* xmbsrtowcs.c -- replacement function for mbsrtowcs */
/* Copyright (C) 2002-2010 Free Software Foundation, Inc.
/* Copyright (C) 2002-2011 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -148,7 +148,7 @@ xdupmbstowcs2 (destp, src)
size_t wsbuf_size; /* Size of WSBUF */
size_t wcnum; /* Number of wide characters in WSBUF */
mbstate_t state; /* Conversion State */
size_t wcslength; /* Number of wide characters produced by the conversion. */
size_t n, wcslength; /* Number of wide characters produced by the conversion. */
const char *end_or_backslash;
size_t nms; /* Number of multibyte characters to convert at one time. */
mbstate_t tmp_state;
@@ -164,17 +164,17 @@ xdupmbstowcs2 (destp, src)
do
{
end_or_backslash = strchrnul(p, '\\');
nms = (end_or_backslash - p);
nms = end_or_backslash - p;
if (*end_or_backslash == '\0')
nms++;
/* Compute the number of produced wide-characters. */
tmp_p = p;
tmp_state = state;
wcslength = mbsnrtowcs(NULL, &tmp_p, nms, 0, &tmp_state);
wcslength = mbsnrtowcs (NULL, &tmp_p, nms, 0, &tmp_state);
/* Conversion failed. */
if (wcslength == (size_t)-1)
if (wcslength == 0 || wcslength == (size_t)-1)
{
free (wsbuf);
*destp = NULL;
@@ -200,7 +200,7 @@ xdupmbstowcs2 (destp, src)
/* Perform the conversion. This is assumed to return 'wcslength'.
* It may set 'p' to NULL. */
mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state);
n = mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state);
wcnum += wcslength;