summaryrefslogtreecommitdiff
path: root/lib/wcsrtombs.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-02-05 02:24:20 +0100
committerBruno Haible <bruno@clisp.org>2011-02-05 02:24:20 +0100
commit8bda5a9b0ee0e57039f8093ab0506ce5d2844daa (patch)
tree1db22747169816166188a9fc294bf2cc6ddf77a3 /lib/wcsrtombs.c
parentd45a50ed17d4eb8c033f7856feb0163470318754 (diff)
downloadgnulib-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.c74
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