X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fwcsrtombs.c;h=e995a9ce442313961595d08ddff7f7b93bb25097;hb=d66478297fa398b1358bbd8b56b1b34e7fef5415;hp=5abbac481c30cce5d247d8fdb379d5cff6e30f40;hpb=a35b7df64eb0863e3d0759691e4d041354d7030f;p=gnulib.git diff --git a/lib/wcsrtombs.c b/lib/wcsrtombs.c index 5abbac481..e995a9ce4 100644 --- a/lib/wcsrtombs.c +++ b/lib/wcsrtombs.c @@ -1,5 +1,5 @@ /* Convert wide string to string. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify @@ -66,55 +66,55 @@ wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) 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; + 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; + /* 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: