msvcrt: Fixed (_w)fopen_s with test.
This commit is contained in:
parent
3bbe658ef1
commit
c9bd269db1
|
@ -2742,7 +2742,7 @@ int CDECL MSVCRT_fopen_s(MSVCRT_FILE** pFile,
|
||||||
const char *filename, const char *mode)
|
const char *filename, const char *mode)
|
||||||
{
|
{
|
||||||
if (!MSVCRT_CHECK_PMT(pFile != NULL) || !MSVCRT_CHECK_PMT(filename != NULL) ||
|
if (!MSVCRT_CHECK_PMT(pFile != NULL) || !MSVCRT_CHECK_PMT(filename != NULL) ||
|
||||||
MSVCRT_CHECK_PMT(mode != NULL)) {
|
!MSVCRT_CHECK_PMT(mode != NULL)) {
|
||||||
*MSVCRT__errno() = MSVCRT_EINVAL;
|
*MSVCRT__errno() = MSVCRT_EINVAL;
|
||||||
return MSVCRT_EINVAL;
|
return MSVCRT_EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -2769,7 +2769,7 @@ int CDECL MSVCRT__wfopen_s(MSVCRT_FILE** pFile, const MSVCRT_wchar_t *filename,
|
||||||
const MSVCRT_wchar_t *mode)
|
const MSVCRT_wchar_t *mode)
|
||||||
{
|
{
|
||||||
if (!MSVCRT_CHECK_PMT(pFile != NULL) || !MSVCRT_CHECK_PMT(filename != NULL) ||
|
if (!MSVCRT_CHECK_PMT(pFile != NULL) || !MSVCRT_CHECK_PMT(filename != NULL) ||
|
||||||
MSVCRT_CHECK_PMT(mode != NULL)) {
|
!MSVCRT_CHECK_PMT(mode != NULL)) {
|
||||||
*MSVCRT__errno() = MSVCRT_EINVAL;
|
*MSVCRT__errno() = MSVCRT_EINVAL;
|
||||||
return MSVCRT_EINVAL;
|
return MSVCRT_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,17 @@
|
||||||
|
|
||||||
static HANDLE proc_handles[2];
|
static HANDLE proc_handles[2];
|
||||||
|
|
||||||
|
static int (__cdecl *p_fopen_s)(FILE**, const char*, const char*);
|
||||||
|
static int (__cdecl *p__wfopen_s)(FILE**, const wchar_t*, const wchar_t*);
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
HMODULE hmod = GetModuleHandleA("msvcrt.dll");
|
||||||
|
|
||||||
|
p_fopen_s = (void*)GetProcAddress(hmod, "fopen_s");
|
||||||
|
p__wfopen_s = (void*)GetProcAddress(hmod, "_wfopen_s");
|
||||||
|
}
|
||||||
|
|
||||||
static void test_filbuf( void )
|
static void test_filbuf( void )
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
@ -1201,6 +1212,82 @@ static void test_fopen_fclose_fcloseall( void )
|
||||||
ok(_unlink(fname3) == 0, "Couldn't unlink file named '%s'\n", fname3);
|
ok(_unlink(fname3) == 0, "Couldn't unlink file named '%s'\n", fname3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_fopen_s( void )
|
||||||
|
{
|
||||||
|
const char name[] = "empty1";
|
||||||
|
char buff[16];
|
||||||
|
FILE *file;
|
||||||
|
int ret;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
if (!p_fopen_s)
|
||||||
|
{
|
||||||
|
win_skip("Skipping fopen_s test\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* testing fopen_s */
|
||||||
|
ret = p_fopen_s(&file, name, "w");
|
||||||
|
ok(ret == 0, "fopen_s failed with %d\n", ret);
|
||||||
|
ok(file != 0, "fopen_s failed to return value\n");
|
||||||
|
fwrite(name, sizeof(name), 1, file);
|
||||||
|
|
||||||
|
ret = fclose(file);
|
||||||
|
ok(ret != EOF, "File failed to close\n");
|
||||||
|
|
||||||
|
file = fopen(name, "r");
|
||||||
|
ok(file != 0, "fopen failed\n");
|
||||||
|
len = fread(buff, 1, sizeof(name), file);
|
||||||
|
ok(len == sizeof(name), "File length supposed to be %d, not %d\n", sizeof(name), len);
|
||||||
|
buff[sizeof(name)] = '\0';
|
||||||
|
ok(strcmp(name, buff) == 0, "File content mismatch! Got %s, expected %s\n", buff, name);
|
||||||
|
|
||||||
|
ret = fclose(file);
|
||||||
|
ok(ret != EOF, "File failed to close\n");
|
||||||
|
|
||||||
|
ok(_unlink(name) == 0, "Couldn't unlink file named '%s'\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test__wfopen_s( void )
|
||||||
|
{
|
||||||
|
const char name[] = "empty1";
|
||||||
|
const WCHAR wname[] = {
|
||||||
|
'e','m','p','t','y','1',0
|
||||||
|
};
|
||||||
|
const WCHAR wmode[] = {
|
||||||
|
'w',0
|
||||||
|
};
|
||||||
|
char buff[16];
|
||||||
|
FILE *file;
|
||||||
|
int ret;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
if (!p__wfopen_s)
|
||||||
|
{
|
||||||
|
win_skip("Skipping _wfopen_s test\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* testing _wfopen_s */
|
||||||
|
ret = p__wfopen_s(&file, wname, wmode);
|
||||||
|
ok(ret == 0, "_wfopen_s failed with %d\n", ret);
|
||||||
|
ok(file != 0, "_wfopen_s failed to return value\n");
|
||||||
|
fwrite(name, sizeof(name), 1, file);
|
||||||
|
|
||||||
|
ret = fclose(file);
|
||||||
|
ok(ret != EOF, "File failed to close\n");
|
||||||
|
|
||||||
|
file = fopen(name, "r");
|
||||||
|
ok(file != 0, "fopen failed\n");
|
||||||
|
len = fread(buff, 1, sizeof(name), file);
|
||||||
|
ok(len == sizeof(name), "File length supposed to be %d, not %d\n", sizeof(name), len);
|
||||||
|
buff[sizeof(name)] = '\0';
|
||||||
|
ok(strcmp(name, buff) == 0, "File content mismatch! Got %s, expected %s\n", buff, name);
|
||||||
|
|
||||||
|
ret = fclose(file);
|
||||||
|
ok(ret != EOF, "File failed to close\n");
|
||||||
|
|
||||||
|
ok(_unlink(name) == 0, "Couldn't unlink file named '%s'\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_get_osfhandle(void)
|
static void test_get_osfhandle(void)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -1424,6 +1511,8 @@ START_TEST(file)
|
||||||
int arg_c;
|
int arg_c;
|
||||||
char** arg_v;
|
char** arg_v;
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
arg_c = winetest_get_mainargs( &arg_v );
|
arg_c = winetest_get_mainargs( &arg_v );
|
||||||
|
|
||||||
/* testing low-level I/O */
|
/* testing low-level I/O */
|
||||||
|
@ -1450,6 +1539,8 @@ START_TEST(file)
|
||||||
test_filbuf();
|
test_filbuf();
|
||||||
test_fdopen();
|
test_fdopen();
|
||||||
test_fopen_fclose_fcloseall();
|
test_fopen_fclose_fcloseall();
|
||||||
|
test_fopen_s();
|
||||||
|
test__wfopen_s();
|
||||||
test_fileops();
|
test_fileops();
|
||||||
test_asciimode();
|
test_asciimode();
|
||||||
test_asciimode2();
|
test_asciimode2();
|
||||||
|
|
Loading…
Reference in New Issue