[PATCH] msvcrt:msvcrt_get_flags: Fix bug 51846 - fopen(..., "wx")
Ted Lyngmo
ted at lyncon.se
Thu Oct 7 11:52:36 CDT 2021
This fixes bug 51846: Standard library call fopen(..., "wx") not
recognized - causes destruction of data.
Signed-off-by: Ted Lyngmo <ted at lyncon.se>
---
dlls/msvcrt/file.c | 3 +++
dlls/msvcrt/tests/file.c | 27 +++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index b0eeaf2a351..355638fa783 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1586,6 +1586,9 @@ static int msvcrt_get_flags(const wchar_t* mode, int *open_flags, int* stream_fl
*open_flags |= _O_TEXT;
*open_flags &= ~_O_BINARY;
break;
+ case 'x':
+ *open_flags |= _O_EXCL;
+ break;
case 'D':
*open_flags |= _O_TEMPORARY;
break;
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index 1d74c6135b8..3b96be58126 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -110,6 +110,32 @@ static void test_filbuf( void )
unlink("filbuf.tst");
}
+static void test_fopen_exclusive( void )
+{
+ static const char * const testfile = "fileexcl.tst";
+ FILE *fp;
+
+ fp = fopen(testfile, "wx");
+ ok(fp != NULL, "creating file with mode wx failed\n");
+ if(fp) fclose(fp);
+
+ fp = fopen(testfile, "wx");
+ ok(fp == NULL, "overwrote existing file with mode wx\n");
+ if(fp) fclose(fp);
+
+ unlink(testfile);
+
+ fp = fopen(testfile, "w+x");
+ ok(fp != NULL, "creating file with mode w+x failed\n");
+ if(fp) fclose(fp);
+
+ fp = fopen(testfile, "w+x");
+ ok(fp == NULL, "overwrote existing file with mode w+x\n");
+ if(fp) fclose(fp);
+
+ unlink(testfile);
+}
+
static void test_fdopen( void )
{
static const char buffer[] = {0,1,2,3,4,5,6,7,8,9};
@@ -2841,6 +2867,7 @@ START_TEST(file)
/* testing stream I/O */
test_filbuf();
+ test_fopen_exclusive();
test_fdopen();
test_fopen_fclose_fcloseall();
test_fopen_s();
--
2.31.1
More information about the wine-devel
mailing list