From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- dlls/msvcrt/tests/file.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index 2f3e6e00d0b..106c1554518 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -1172,6 +1172,7 @@ static void test_freopen( void ) char filename1[8] = "AXXXXXX"; char filename2[8] = "BXXXXXX"; FILE *file; + FILE *new; int ret; int fd; char ch; @@ -1230,6 +1231,36 @@ static void test_freopen( void ) ok(ret == -1, "read() returned %d\n", ret); ok(errno == EBADF, "errno is %d\n", errno);
+ file = fopen(filename1, "rb"); + ok(file != NULL, "couldn't open %s\n", filename1); + close(file->_file); + file->_file = -1; + + new = freopen(filename2, "rb", file); + todo_wine + ok(new == file, "freopen() didn't return same FILE*\n"); + if (new) { /* temporary as it crashes on wine */ + + fd = fileno(new); + todo_wine + ok(fd > 0, "fileno() returned %d\n", fd); + + errno = 0xdeadbeef; + ch = '#'; + ret = fread(&ch, 1, 1, new); + todo_wine + ok(ret == 1, "fread() returned %d\n", ret); + todo_wine + ok(errno == 0xdeadbeef, "errno = %d\n", errno); + ok(ch == '2', "Unexpected char\n"); + + /* invalid file name */ + new = freopen("_:", "rb", file); + ok(new == NULL, "Shouldn't be able to reopen FILE\n"); + + /* don't close file, it's invalid by now */ + } + unlink(filename1); unlink(filename2); }