X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fwcsnrtombs.c;h=0e8e419b27eb022501afb7f543282584573759b4;hb=bc835ff38e3fb6a3d0f5ed6eed0981dde8884124;hp=742b8579108a4a76c7c60135b80884377101b940;hpb=a35b7df64eb0863e3d0759691e4d041354d7030f;p=gnulib.git diff --git a/lib/wcsnrtombs.c b/lib/wcsnrtombs.c index 742b85791..0e8e419b2 100644 --- a/lib/wcsnrtombs.c +++ b/lib/wcsnrtombs.c @@ -20,9 +20,9 @@ /* Specification. */ #include -# include -# include -# include +#include +#include +#include extern mbstate_t _gl_wcsrtombs_state; @@ -42,55 +42,55 @@ wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate if (dest != NULL) { - char *destptr = dest; - - for (; srclen > 0 && len > 0; src++, srclen--) - { - 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; + char *destptr = dest; + + for (; srclen > 0 && len > 0; src++, srclen--) + { + 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 (; srclen > 0; src++, srclen--) - { - 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; + /* 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 (; srclen > 0; src++, srclen--) + { + 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: @@ -100,5 +100,3 @@ wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate return (size_t)(-1); } } - -#endif