From 617bf861efe269d59de172b9bb93eae187dad0f9 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 10 Jan 2013 11:42:57 +0100 Subject: [PATCH] msvcrt: Added fopen_s test with ccs option. --- dlls/msvcrt/tests/file.c | 64 ++++++++++++++++++++++++++++++++++++++++ include/msvcrt/fcntl.h | 3 ++ 2 files changed, 67 insertions(+) diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index 0078c2a21cd..3bc754ff185 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -1320,6 +1320,7 @@ static void test_fopen_s( void ) { const char name[] = "empty1"; char buff[16]; + unsigned char *ubuff = (unsigned char*)buff; FILE *file; int ret; int len; @@ -1348,6 +1349,69 @@ static void test_fopen_s( void ) ret = fclose(file); ok(ret != EOF, "File failed to close\n"); + ret = p_fopen_s(&file, name, "w, ccs=UNIcode"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + ret = fwrite("a", 1, 2, file); + ok(ret == 2, "fwrite returned %d\n", ret); + fclose(file); + + ret = p_fopen_s(&file, name, "r"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 2, file); + ok(len == 2, "len = %d\n", len); + ok(ubuff[0]==0xff && ubuff[1]==0xfe, "buff[0]=%02x, buff[1]=%02x\n", + ubuff[0], ubuff[1]); + fclose(file); + + ret = p_fopen_s(&file, name, "r,ccs=unicode"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 2, file); + ok(len == 2, "len = %d\n", len); + ok(ubuff[0]=='a' && ubuff[1]==0, "buff[0]=%02x, buff[1]=%02x\n", + ubuff[0], ubuff[1]); + fclose(file); + + ret = p_fopen_s(&file, name, "r,ccs=utf-16le"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 2, file); + ok(len == 2, "len = %d\n", len); + ok(ubuff[0]=='a' && ubuff[1]==0, "buff[0]=%02x, buff[1]=%02x\n", + ubuff[0], ubuff[1]); + fclose(file); + + ret = p_fopen_s(&file, name, "r,ccs=utf-8"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 2, file); + ok(len == 2, "len = %d\n", len); + ok(ubuff[0]=='a' && ubuff[1]==0, "buff[0]=%02x, buff[1]=%02x\n", + ubuff[0], ubuff[1]); + fclose(file); + + ret = p_fopen_s(&file, name, "w,ccs=utf-16le"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + fclose(file); + + ret = p_fopen_s(&file, name, "r"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 3, file); + ok(len == 2, "len = %d\n", len); + ok(ubuff[0]==0xff && ubuff[1]==0xfe, "buff[0]=%02x, buff[1]=%02x\n", + ubuff[0], ubuff[1]); + fclose(file); + + ret = p_fopen_s(&file, name, "w,ccs=utf-8"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + fclose(file); + + ret = p_fopen_s(&file, name, "r"); + ok(ret == 0, "fopen_s failed with %d\n", ret); + len = fread(buff, 1, 4, file); + ok(len == 3, "len = %d\n", len); + ok(ubuff[0]==0xef && ubuff[1]==0xbb && ubuff[2]==0xbf, + "buff[0]=%02x, buff[1]=%02x, buff[2]=%02x\n", + ubuff[0], ubuff[1], ubuff[2]); + fclose(file); + ok(_unlink(name) == 0, "Couldn't unlink file named '%s'\n", name); } diff --git a/include/msvcrt/fcntl.h b/include/msvcrt/fcntl.h index d0ee97b3150..267feed5e69 100644 --- a/include/msvcrt/fcntl.h +++ b/include/msvcrt/fcntl.h @@ -27,6 +27,9 @@ #define _O_BINARY 0x8000 #define _O_RAW _O_BINARY +#define _O_WTEXT 0x10000 +#define _O_U16TEXT 0x20000 +#define _O_U8TEXT 0x40000 #define O_RDONLY _O_RDONLY #define O_WRONLY _O_WRONLY