+2023-07-16 Bruno Haible <bruno@clisp.org>
+
+ mbiter: Optimize clearing an mbstate_t.
+ * lib/mbiter.h: Include <wchar.h>.
+ (mbiter_multi_next, mbiter_multi_copy, mbi_init): Use mbszero.
+ * modules/mbiter (Depends-on): Add mbszero.
+
2023-07-16 Bruno Haible <bruno@clisp.org>
c32stombs: Optimize clearing an mbstate_t.
#include <stddef.h>
#include <string.h>
#include <uchar.h>
+#include <wchar.h>
#include "mbchar.h"
#if !GNULIB_MBRTOC32_REGULAR
iter->in_shift = false;
#endif
- memset (&iter->state, '\0', sizeof (mbstate_t));
+ mbszero (&iter->state);
}
else if (iter->cur.bytes == (size_t) -2)
{
memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
else
#endif
- memset (&new_iter->state, 0, sizeof (mbstate_t));
+ mbszero (&new_iter->state);
new_iter->next_done = old_iter->next_done;
mb_copy (&new_iter->cur, &old_iter->cur);
}
#if !GNULIB_MBRTOC32_REGULAR
#define mbi_init(iter, startptr, length) \
((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \
- (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+ (iter).in_shift = false, mbszero (&(iter).state), \
(iter).next_done = false)
#else
/* Optimized: no in_shift. */
#define mbi_init(iter, startptr, length) \
((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \
- memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+ mbszero (&(iter).state), \
(iter).next_done = false)
#endif
#if !GNULIB_MBRTOC32_REGULAR