msvcrt: ungetc must create a buffer, even if _IONBF has been set with setvbuf.
authorEric Pouech <eric.pouech@orange.fr>
Sun, 24 Apr 2011 09:01:59 +0000 (11:01 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 25 Apr 2011 09:39:57 +0000 (11:39 +0200)
dlls/msvcrt/file.c
dlls/msvcrt/tests/file.c

index c1a7785609527a38d177a5188ad63e72e369a0eb..e34c11f0a15c92ce598a18d38cd90bd708df384d 100644 (file)
@@ -3622,7 +3622,7 @@ int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
 {
        if (c == MSVCRT_EOF)
                return MSVCRT_EOF;
-       if(file->_bufsiz == 0 && !(file->_flag & MSVCRT__IONBF)) {
+       if(file->_bufsiz == 0) {
                msvcrt_alloc_buffer(file);
                file->_ptr++;
        }
index 5aaaaf71a7362ac2628c8e8f4fafcb121fde8fb5..0231f72ae1b84e2b58fc64ee1bae7187f039807e 100644 (file)
@@ -140,23 +140,12 @@ static void test_fileops( void )
         ok(feof(file), "feof after ungetc(EOF) did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
         ok((c = fgetc(file)) == EOF, "getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
         c = outbuffer[sizeof(outbuffer) - 1];
-        if (bufmodes[bufmode] == _IONBF) todo_wine {
         ok(ungetc(c, file) == c, "ungetc did not return its input for bufmode=%x\n", bufmodes[bufmode]);
         ok(!feof(file), "feof after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
         ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
         ok(c == outbuffer[sizeof(outbuffer) - 1],
            "getc did not return ungetc'd data for bufmode=%x\n", bufmodes[bufmode]);
         ok(!feof(file), "feof after getc returned EOF prematurely for bufmode=%x\n", bufmodes[bufmode]);
-        }
-        else
-        {
-        ok(ungetc(c, file) == c, "ungetc did not return its input for bufmode=%x\n", bufmodes[bufmode]);
-        ok(!feof(file), "feof after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
-        ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
-        ok(c == outbuffer[sizeof(outbuffer) - 1],
-           "getc did not return ungetc'd data for bufmode=%x\n", bufmodes[bufmode]);
-        ok(!feof(file), "feof after getc returned EOF prematurely for bufmode=%x\n", bufmodes[bufmode]);
-        }
         ok((c = fgetc(file)) == EOF, "getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
         ok(feof(file), "feof after getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);