diff options
author | Bruno Haible <bruno@clisp.org> | 2011-02-05 02:24:20 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-02-05 02:24:20 +0100 |
commit | 8bda5a9b0ee0e57039f8093ab0506ce5d2844daa (patch) | |
tree | 1db22747169816166188a9fc294bf2cc6ddf77a3 /lib/wcsrtombs.c | |
parent | d45a50ed17d4eb8c033f7856feb0163470318754 (diff) | |
download | gnulib-8bda5a9b0ee0e57039f8093ab0506ce5d2844daa.tar.gz |
wcsrtombs: Prepare for new module wwcsrtombs.
* lib/wcsrtombs-impl.h: New file, extracted from lib/wcsrtombs.c.
* lib/wcsrtombs.c: Include it.
* modules/wcsrtombs (Files): Add lib/wcsrtombs-impl.h.
Diffstat (limited to 'lib/wcsrtombs.c')
-rw-r--r-- | lib/wcsrtombs.c | 74 |
1 files changed, 1 insertions, 73 deletions
diff --git a/lib/wcsrtombs.c b/lib/wcsrtombs.c index be88e31c62..72423b524b 100644 --- a/lib/wcsrtombs.c +++ b/lib/wcsrtombs.c @@ -51,78 +51,6 @@ rpl_wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) # include <stdlib.h> # include <string.h> -size_t -wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) -{ - if (ps == NULL) - ps = &_gl_wcsrtombs_state; - { - const wchar_t *src = *srcp; - size_t cur_max = MB_CUR_MAX; - char buf[64]; - - if (!(cur_max <= sizeof (buf))) - abort (); - - if (dest != NULL) - { - char *destptr = dest; - - for (; len > 0; src++) - { - wchar_t wc = *src; - size_t ret = wcrtomb (len >= cur_max ? destptr : buf, wc, ps); - - if (ret == (size_t)(-1)) - goto bad_input; - if (!(ret <= cur_max)) - abort (); - if (len < ret) - break; - if (len < cur_max) - memcpy (destptr, buf, ret); - if (wc == 0) - { - src = NULL; - /* Here mbsinit (ps). */ - break; - } - destptr += ret; - len -= ret; - } - *srcp = src; - return destptr - dest; - } - else - { - /* Ignore dest and len, don't store *srcp at the end, and - don't clobber *ps. */ - mbstate_t state = *ps; - size_t totalcount = 0; - - for (;; src++) - { - wchar_t wc = *src; - size_t ret = wcrtomb (buf, wc, &state); - - if (ret == (size_t)(-1)) - goto bad_input2; - if (wc == 0) - { - /* Here mbsinit (&state). */ - break; - } - totalcount += ret; - } - return totalcount; - } - - bad_input: - *srcp = src; - bad_input2: - errno = EILSEQ; - return (size_t)(-1); - } -} +# include "wcsrtombs-impl.h" #endif |