aboutsummaryrefslogtreecommitdiffstats
path: root/lib/glob/xmbsrtowcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/glob/xmbsrtowcs.c')
-rw-r--r--lib/glob/xmbsrtowcs.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/glob/xmbsrtowcs.c b/lib/glob/xmbsrtowcs.c
index 4d8c043..c410e05 100644
--- a/lib/glob/xmbsrtowcs.c
+++ b/lib/glob/xmbsrtowcs.c
@@ -216,12 +216,24 @@ xdupmbstowcs2 (destp, src)
It may set 'p' to NULL. */
n = mbsnrtowcs(wsbuf+wcnum, &p, nms, wsbuf_size-wcnum, &state);
+ if (n == 0 && p == 0)
+ {
+ wsbuf[wcnum] = L'\0';
+ break;
+ }
+
/* Compensate for taking single byte on wcs conversion failure above. */
if (wcslength == 1 && (n == 0 || n == (size_t)-1))
{
state = tmp_state;
p = tmp_p;
- wsbuf[wcnum++] = *p++;
+ wsbuf[wcnum] = *p;
+ if (*p == 0)
+ break;
+ else
+ {
+ wcnum++; p++;
+ }
}
else
wcnum += wcslength;