Module: wine Branch: master Commit: 6ee428e3a079a76aefa34615713f8f754cdb5443 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ee428e3a079a76aefa3461571...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Mar 20 19:55:31 2008 +0100
msvcrt: Add support for field width in scanf %c format.
---
dlls/msvcrt/scanf.h | 33 ++++++++++++++++----------------- 1 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index a3ca454..07c64e8 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -331,8 +331,7 @@ _FUNCTION_ { else goto widecharstring; #endif /* WIDE_SCANF */ charstring: { /* read a word into a char */ - char*str = suppress ? NULL : va_arg(ap, char*); - char*sptr = str; + char *sptr = suppress ? NULL : va_arg(ap, char*); /* skip initial whitespace */ while ((nch!=_EOF_) && _ISSPACE_(nch)) nch = _GETC_(file); @@ -348,9 +347,7 @@ _FUNCTION_ { } break; widecharstring: { /* read a word into a wchar_t* */ - MSVCRT_wchar_t*str = - suppress ? NULL : va_arg(ap, MSVCRT_wchar_t*); - MSVCRT_wchar_t*sptr = str; + MSVCRT_wchar_t *sptr = suppress ? NULL : va_arg(ap, MSVCRT_wchar_t*); /* skip initial whitespace */ while ((nch!=_EOF_) && _ISSPACE_(nch)) nch = _GETC_(file); @@ -384,24 +381,26 @@ _FUNCTION_ { else goto widecharacter; #endif /* WIDE_SCANF */ character: { /* read single character into char */ - if (nch!=_EOF_) { - if (!suppress) { - char*c = va_arg(ap, char*); - *c = _CHAR2SUPPORTED_(nch); - } - st = 1; + char *str = suppress ? NULL : va_arg(ap, char*); + if (width == -1) width = 1; + while ((width != 0) && (nch != _EOF_)) + { + if (!suppress) *str++ = _CHAR2SUPPORTED_(nch); + st++; + width--; nch = _GETC_(file); } } break; widecharacter: { /* read single character into a wchar_t */ - if (nch!=_EOF_) { - if (!suppress) { - MSVCRT_wchar_t*c = va_arg(ap, MSVCRT_wchar_t*); - *c = _WIDE2SUPPORTED_(nch); - } + MSVCRT_wchar_t *str = suppress ? NULL : va_arg(ap, MSVCRT_wchar_t*); + if (width == -1) width = 1; + while ((width != 0) && (nch != _EOF_)) + { + if (!suppress) *str++ = _WIDE2SUPPORTED_(nch); + st++; + width--; nch = _GETC_(file); - st = 1; } } break;