Deleted Added
full compact
42c42
< __FBSDID("$FreeBSD: head/lib/libc/stdio/vfscanf.c 234587 2012-04-22 21:28:14Z das $");
---
> __FBSDID("$FreeBSD: head/lib/libc/stdio/vfscanf.c 234799 2012-04-29 16:28:39Z das $");
130c130
< int n, nread;
---
> int n;
132d131
< nread = 0;
152c151
< nread += sum;
---
> return (sum);
158c157
< nread += r;
---
> return (r);
160d158
< return (nread);
164c162
< convert_wchar(FILE *fp, wchar_t *wcp, int width)
---
> convert_wchar(FILE *fp, wchar_t *wcp, int width, locale_t locale)
167d164
< size_t nconv;
169c166
< char buf[MB_CUR_MAX];
---
> wint_t wi;
171c168
< nread = 0;
---
> mbs = initial_mbs;
173,202c170,174
< while (width != 0) {
< if (n == MB_CUR_MAX) {
< fp->_flags |= __SERR;
< return (-1);
< }
< buf[n++] = *fp->_p;
< fp->_p++;
< fp->_r--;
< mbs = initial_mbs;
< nconv = mbrtowc(wcp, buf, n, &mbs);
< if (nconv == (size_t)-1) {
< fp->_flags |= __SERR;
< return (-1);
< }
< if (nconv == 0 && wcp != SUPPRESS_PTR)
< *wcp = L'\0';
< if (nconv != (size_t)-2) {
< nread += n;
< width--;
< if (wcp != SUPPRESS_PTR)
< wcp++;
< n = 0;
< }
< if (fp->_r <= 0 && __srefill(fp)) {
< if (n != 0) {
< fp->_flags |= __SERR;
< return (-1);
< }
< break;
< }
---
> while (width-- != 0 &&
> (wi = __fgetwc_mbs(fp, &mbs, &nread, locale)) != WEOF) {
> if (wcp != SUPPRESS_PTR)
> *wcp++ = (wchar_t)wi;
> n += nread;
204c176,178
< return (nread);
---
> if (n == 0)
> return (-1);
> return (n);
247c221,222
< convert_wccl(FILE *fp, wchar_t *wcp, int width, const char *ccltab)
---
> convert_wccl(FILE *fp, wchar_t *wcp, int width, const char *ccltab,
> locale_t locale)
250,252c225,226
< wchar_t twc;
< int n, nchars, nconv;
< char buf[MB_CUR_MAX];
---
> wint_t wi;
> int n, nread;
254,255c228
< if (wcp == SUPPRESS_PTR)
< wcp = &twc;
---
> mbs = initial_mbs;
257,261c230,240
< nchars = 0;
< while (width != 0) {
< if (n == MB_CUR_MAX) {
< fp->_flags |= __SERR;
< return (-1);
---
> if (wcp == SUPPRESS_PTR) {
> while ((wi = __fgetwc_mbs(fp, &mbs, &nread, locale)) != WEOF &&
> width-- != 0 && ccltab[wctob(wi)])
> n += nread;
> if (wi != WEOF)
> __ungetwc(wi, fp, __get_locale());
> } else {
> while ((wi = __fgetwc_mbs(fp, &mbs, &nread, locale)) != WEOF &&
> width-- != 0 && ccltab[wctob(wi)]) {
> *wcp++ = (wchar_t)wi;
> n += nread;
263,294c242,246
< buf[n++] = *fp->_p;
< fp->_p++;
< fp->_r--;
< mbs = initial_mbs;
< nconv = mbrtowc(wcp, buf, n, &mbs);
< if (nconv == (size_t)-1) {
< fp->_flags |= __SERR;
< return (-1);
< }
< if (nconv == 0)
< *wcp = L'\0';
< if (nconv != (size_t)-2) {
< if (wctob(*wcp) != EOF && !ccltab[wctob(*wcp)]) {
< while (n != 0) {
< n--;
< __ungetc(buf[n], fp);
< }
< break;
< }
< width--;
< if (wcp != &twc)
< wcp++;
< nchars++;
< n = 0;
< }
< if (fp->_r <= 0 && __srefill(fp)) {
< if (n != 0) {
< fp->_flags |= __SERR;
< return (-1);
< }
< break;
< }
---
> if (wi != WEOF)
> __ungetwc(wi, fp, __get_locale());
> if (n == 0)
> return (0);
> *wcp = 0;
296,303c248
< if (n != 0) {
< fp->_flags |= __SERR;
< return (-1);
< }
< if (nchars == 0)
< return (0);
< *wcp = L'\0';
< return (nchars);
---
> return (n);
338c283
< convert_wstring(FILE *fp, wchar_t *wcp, int width)
---
> convert_wstring(FILE *fp, wchar_t *wcp, int width, locale_t locale)
341,343c286,287
< wchar_t twc;
< int n, nconv, nread;
< char buf[MB_CUR_MAX];
---
> wint_t wi;
> int n, nread;
345,351c289,301
< if (wcp == SUPPRESS_PTR)
< wcp = &twc;
< n = nread = 0;
< while (!isspace(*fp->_p) && width != 0) {
< if (n == MB_CUR_MAX) {
< fp->_flags |= __SERR;
< return (-1);
---
> mbs = initial_mbs;
> n = 0;
> if (wcp == SUPPRESS_PTR) {
> while ((wi = __fgetwc_mbs(fp, &mbs, &nread, locale)) != WEOF &&
> width-- != 0 && !iswspace(wi))
> n += nread;
> if (wi != WEOF)
> __ungetwc(wi, fp, __get_locale());
> } else {
> while ((wi = __fgetwc_mbs(fp, &mbs, &nread, locale)) != WEOF &&
> width-- != 0 && !iswspace(wi)) {
> *wcp++ = (wchar_t)wi;
> n += nread;
353,384c303,305
< buf[n++] = *fp->_p;
< fp->_p++;
< fp->_r--;
< mbs = initial_mbs;
< nconv = mbrtowc(wcp, buf, n, &mbs);
< if (nconv == (size_t)-1) {
< fp->_flags |= __SERR;
< return (-1);
< }
< if (nconv == 0)
< *wcp = L'\0';
< if (nconv != (size_t)-2) {
< if (iswspace(*wcp)) {
< while (n != 0) {
< n--;
< __ungetc(buf[n], fp);
< }
< break;
< }
< nread += n;
< width--;
< if (wcp != &twc)
< wcp++;
< n = 0;
< }
< if (fp->_r <= 0 && __srefill(fp)) {
< if (n != 0) {
< fp->_flags |= __SERR;
< return (-1);
< }
< break;
< }
---
> if (wi != WEOF)
> __ungetwc(wi, fp, __get_locale());
> *wcp = '\0';
386,387c307
< *wcp = L'\0';
< return (nread);
---
> return (n);
769c689
< width);
---
> width, locale);
783c703
< ccltab);
---
> ccltab, locale);
802c722
< width);
---
> width, locale);