overhaul mbsrtowcs
authorRich Felker <dalias@aerifal.cx>
Thu, 4 Apr 2013 18:42:35 +0000 (14:42 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 4 Apr 2013 18:42:35 +0000 (14:42 -0400)
commit50d9661d9b231f503b21e9d8787d1411b864d58a
treec0eb25ff88e07439498f026c0511a81de8b1f480
parent47cf4919fc834a917185ace26dfd1c2ab760676d
overhaul mbsrtowcs

these changes fix at least two bugs:
- misaligned access to the input as uint32_t for vectorized ASCII test
- incorrect src pointer after stopping on EILSEQ

in addition, the text of the standard makes it unclear whether the
mbstate_t object is to be modified when the destination pointer is
null; previously it was cleared either way; now, it's only cleared
when the destination is non-null. this change may need revisiting, but
it should not affect most applications, since calling mbsrtowcs with
non-zero state can only happen when the head of the string was already
processed with mbrtowc.

finally, these changes shave about 20% size off the function and seem
to improve performance by 1-5%.
src/multibyte/mbsrtowcs.c