Robert van Herk : msvcrt: Fix file mode T (temporary file).
Alexandre Julliard
julliard at winehq.org
Wed Mar 28 12:47:06 CDT 2012
Module: wine
Branch: master
Commit: 516bb0ba64c44f8226c0863547b5866c97deb425
URL: http://source.winehq.org/git/wine.git/?a=commit;h=516bb0ba64c44f8226c0863547b5866c97deb425
Author: Robert van Herk <mijnspamboxje at hotmail.com>
Date: Tue Mar 27 14:43:55 2012 +0200
msvcrt: Fix file mode T (temporary file).
---
dlls/msvcrt/file.c | 8 +++++++-
dlls/msvcrt/tests/file.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 1c56eee..df2c7cd 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1281,10 +1281,16 @@ static int msvcrt_get_flags(const MSVCRT_wchar_t* mode, int *open_flags, int* st
*open_flags |= MSVCRT__O_BINARY;
*open_flags &= ~MSVCRT__O_TEXT;
break;
- case 'T': case 't':
+ case 't':
*open_flags |= MSVCRT__O_TEXT;
*open_flags &= ~MSVCRT__O_BINARY;
break;
+ case 'D':
+ *open_flags |= MSVCRT__O_TEMPORARY;
+ break;
+ case 'T':
+ *open_flags |= MSVCRT__O_SHORT_LIVED;
+ break;
case '+':
case ' ':
break;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 0f94083..e450b72 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -434,6 +434,37 @@ static void test_asciimode2(void)
unlink("ascii2.tst");
}
+static void test_filemodeT(void)
+{
+ char DATA [] = {26, 't', 'e', 's' ,'t'};
+ char DATA2 [100];
+ char temppath[MAX_PATH];
+ char tempfile[MAX_PATH];
+ FILE* f;
+ size_t bytesWritten;
+ size_t bytesRead;
+ WIN32_FIND_DATA findData;
+ HANDLE h;
+
+ GetTempPath (MAX_PATH, temppath);
+ GetTempFileName (temppath, "", 0, tempfile);
+
+ f = fopen(tempfile, "w+bDT");
+ bytesWritten = fwrite(DATA, 1, sizeof(DATA), f);
+ rewind(f);
+ bytesRead = fread(DATA2, 1, sizeof(DATA2), f);
+ fclose(f);
+
+ ok (bytesRead == bytesWritten && bytesRead == sizeof(DATA),
+ "fopen file mode 'T' wrongly interpreted as 't'\n" );
+
+ h = FindFirstFile(tempfile, &findData);
+
+ ok (h == INVALID_HANDLE_VALUE, "file wasn't deleted when closed.\n" );
+
+ if (h != INVALID_HANDLE_VALUE) FindClose(h);
+}
+
static WCHAR* AtoW( const char* p )
{
WCHAR* buffer;
@@ -1628,6 +1659,7 @@ START_TEST(file)
test_fileops();
test_asciimode();
test_asciimode2();
+ test_filemodeT();
test_readmode(FALSE); /* binary mode */
test_readmode(TRUE); /* ascii mode */
test_readboundary();
More information about the wine-cvs
mailing list