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