static void test__memicmp_l(void) { static const char *s1 = "abc"; static const char *s2 = "aBd"; int ret; ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); ret = p__memicmp_l(NULL, NULL, 0, NULL); ok(!ret, "got %d\n", ret); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(NULL, NULL, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(s1, NULL, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p__memicmp_l(NULL, s2, 1, NULL); ok(ret == _NLSCMPERROR, "got %d\n", ret); ok(errno == 0xdeadbeef, "Unexpected errno = %d\n", errno); CHECK_CALLED(invalid_parameter_handler); ret = p__memicmp_l(s1, s2, 2, NULL); ok(!ret, "got %d\n", ret); ret = p__memicmp_l(s1, s2, 3, NULL); ok(ret == -1, "got %d\n", ret); ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); }
static BOOL init(void) { HMODULE msvcr = LoadLibraryA("msvcr90.dll"); HMODULE msvcp = LoadLibraryA("msvcp90.dll"); if(!msvcr || !msvcp) { win_skip("msvcp90.dll or msvcrt90.dll not installed\n"); return FALSE; } p_set_invalid_parameter_handler = (void*)GetProcAddress(msvcr, "_set_invalid_parameter_handler"); if(!p_set_invalid_parameter_handler) { win_skip("Error setting tests environment\n"); return FALSE; } p_set_invalid_parameter_handler(test_invalid_parameter_handler); if(sizeof(void*) == 8) { /* 64-bit initialization */ p_char_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@D@std@@SAXAEADAEBD@Z"); p_wchar_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@_W@std@@SAXAEA_WAEB_W@Z"); p_short_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@G@std@@SAXAEAGAEBG@Z"); p_char_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@D@std@@SA_NAEBD0@Z"); p_wchar_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@_W@std@@SA_NAEB_W0@Z"); p_short_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@G@std@@SA_NAEBG0@Z"); p_Copy_s = (void*)GetProcAddress(msvcp, "?_Copy_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z"); } else { p_char_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@D@std@@SAXAADABD@Z"); p_wchar_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@_W@std@@SAXAA_WAB_W@Z"); p_short_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@G@std@@SAXAAGABG@Z"); p_char_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@D@std@@SA_NABD0@Z"); p_wchar_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@_W@std@@SA_NAB_W0@Z"); p_short_eq = (void*)GetProcAddress(msvcp, "?eq@?$char_traits@G@std@@SA_NABG0@Z"); p_Copy_s = (void*)GetProcAddress(msvcp, "?_Copy_s@?$char_traits@D@std@@SAPADPADIPBDI@Z"); } return TRUE; }
static void test_wmemmove_s(void) { static wchar_t dest[8]; static const wchar_t tiny[] = {'T',0,'I','N','Y',0}; static const wchar_t big[] = {'a','t','o','o','l','o','n','g','s','t','r','i','n','g',0}; const wchar_t XX = 0x5858; /* two 'X' bytes */ int ret; ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); /* Normal */ memset(dest, 'X', sizeof(dest)); ret = p_wmemmove_s(dest, NUMELMS(dest), tiny, NUMELMS(tiny)); ok(ret == 0, "Moving a buffer into a big enough destination returned %d, expected 0\n", ret); okwchars(dest, tiny[0], tiny[1], tiny[2], tiny[3], tiny[4], tiny[5], XX, XX); /* Overlapping */ memcpy(dest, big, sizeof(dest)); ret = p_wmemmove_s(dest+1, NUMELMS(dest)-1, dest, NUMELMS(dest)-1); ok(ret == 0, "Moving a buffer up one char returned %d, expected 0\n", ret); okwchars(dest, big[0], big[0], big[1], big[2], big[3], big[4], big[5], big[6]); /* Vary source size */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); memset(dest, 'X', sizeof(dest)); ret = p_wmemmove_s(dest, NUMELMS(dest), big, NUMELMS(big)); ok(errno == ERANGE, "Moving a big buffer to a small destination errno %d, expected ERANGE\n", errno); ok(ret == ERANGE, "Moving a big buffer to a small destination returned %d, expected ERANGE\n", ret); okwchars(dest, XX, XX, XX, XX, XX, XX, XX, XX); CHECK_CALLED(invalid_parameter_handler); /* Replace source with NULL */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); memset(dest, 'X', sizeof(dest)); ret = p_wmemmove_s(dest, NUMELMS(dest), NULL, NUMELMS(tiny)); ok(errno == EINVAL, "Moving a NULL source buffer errno %d, expected EINVAL\n", errno); ok(ret == EINVAL, "Moving a NULL source buffer returned %d, expected EINVAL\n", ret); okwchars(dest, XX, XX, XX, XX, XX, XX, XX, XX); CHECK_CALLED(invalid_parameter_handler); /* Vary dest size */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); memset(dest, 'X', sizeof(dest)); ret = p_wmemmove_s(dest, 0, tiny, NUMELMS(tiny)); ok(errno == ERANGE, "Moving into a destination of size 0 errno %d, expected ERANGE\n", errno); ok(ret == ERANGE, "Moving into a destination of size 0 returned %d, expected ERANGE\n", ret); okwchars(dest, XX, XX, XX, XX, XX, XX, XX, XX); CHECK_CALLED(invalid_parameter_handler); /* Replace dest with NULL */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = p_wmemmove_s(NULL, NUMELMS(dest), tiny, NUMELMS(tiny)); ok(errno == EINVAL, "Moving a tiny buffer to a big NULL destination errno %d, expected EINVAL\n", errno); ok(ret == EINVAL, "Moving a tiny buffer to a big NULL destination returned %d, expected EINVAL\n", ret); CHECK_CALLED(invalid_parameter_handler); /* Combinations */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); memset(dest, 'X', sizeof(dest)); ret = p_wmemmove_s(dest, 0, NULL, NUMELMS(tiny)); ok(errno == EINVAL, "Moving a NULL buffer into a destination of size 0 errno %d, expected EINVAL\n", errno); ok(ret == EINVAL, "Moving a NULL buffer into a destination of size 0 returned %d, expected EINVAL\n", ret); okwchars(dest, XX, XX, XX, XX, XX, XX, XX, XX); CHECK_CALLED(invalid_parameter_handler); ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); }
static void test_fread_s(void) { static const char test_file[] = "fread_s.tst"; int ret; char buf[10]; FILE *f = fopen(test_file, "w"); if(!f) { skip("Error creating test file\n"); return; } fwrite("test", 1, 4, f); fclose(f); ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(buf, sizeof(buf), 1, 1, NULL); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == EINVAL, "errno = %d, expected EINVAL\n", errno); CHECK_CALLED(invalid_parameter_handler); f = p_fopen(test_file, "r"); errno = 0xdeadbeef; ret = p_fread_s(NULL, sizeof(buf), 0, 1, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == 0xdeadbeef, "errno = %d, expected 0xdeadbeef\n", errno); ret = p_fread_s(NULL, sizeof(buf), 1, 0, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == 0xdeadbeef, "errno = %d, expected 0xdeadbeef\n", errno); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(NULL, sizeof(buf), 1, 1, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == EINVAL, "errno = %d, expected EINVAL\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; buf[1] = 'a'; ret = p_fread_s(buf, 3, 1, 10, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(buf[0] == 0, "buf[0] = '%c', expected 0\n", buf[0]); ok(buf[1] == 0, "buf[1] = '%c', expected 0\n", buf[1]); ok(errno == ERANGE, "errno = %d, expected ERANGE\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(buf, 2, 1, 10, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(buf[0] == 0, "buf[0] = '%c', expected 0\n", buf[0]); ok(errno == ERANGE, "errno = %d, expected ERANGE\n", errno); CHECK_CALLED(invalid_parameter_handler); memset(buf, 'a', sizeof(buf)); ret = p_fread_s(buf, sizeof(buf), 3, 10, f); ok(ret==1, "fread_s returned %d, expected 1\n", ret); ok(buf[0] == 'e', "buf[0] = '%c', expected 'e'\n", buf[0]); ok(buf[1] == 's', "buf[1] = '%c', expected 's'\n", buf[1]); ok(buf[2] == 't', "buf[2] = '%c', expected 't'\n", buf[2]); ok(buf[3] == 'a', "buf[3] = '%c', expected 'a'\n", buf[3]); p_fclose(f); ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); unlink(test_file); }
static void test_fwprintf(void) { static const char file_name[] = "fprintf.tst"; static const WCHAR simple[] = {'s','i','m','p','l','e',' ','t','e','s','t','\n',0}; static const WCHAR cont_fmt[] = {'c','o','n','t','a','i','n','s','%','c','n','u','l','l','\n',0}; static const WCHAR cont[] = {'c','o','n','t','a','i','n','s','\0','n','u','l','l','\n',0}; FILE *fp = p_fopen(file_name, "wb"); wchar_t bufw[1024]; char bufa[1024]; int ret; ret = vfwprintf_wrapper(fp, simple); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 24, "ftell returned %d\n", ret); ret = vfwprintf_wrapper(fp, cont_fmt, '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 52, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgetws(bufw, sizeof(bufw)/sizeof(bufw[0]), fp); ret = p_ftell(fp); ok(ret == 24, "ftell returned %d\n", ret); ok(!wcscmp(bufw, simple), "buf = %s\n", wine_dbgstr_w(bufw)); p_fgetws(bufw, sizeof(bufw)/sizeof(bufw[0]), fp); ret = p_ftell(fp); ok(ret == 52, "ret = %d\n", ret); ok(!memcmp(bufw, cont, 28), "buf = %s\n", wine_dbgstr_w(bufw)); p_fclose(fp); fp = p_fopen(file_name, "wt"); ret = vfwprintf_wrapper(fp, simple); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ret = vfwprintf_wrapper(fp, cont_fmt, '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 28, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgets(bufa, sizeof(bufa), fp); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ok(!strcmp(bufa, "simple test\r\n"), "buf = %s\n", bufa); p_fgets(bufa, sizeof(bufa), fp); ret = p_ftell(fp); ok(ret == 28, "ret = %d\n", ret); ok(!memcmp(bufa, "contains\0null\r\n", 15), "buf = %s\n", bufa); p_fclose(fp); unlink(file_name); ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); /* NULL format */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = vfwprintf_wrapper(fp, NULL); ok(errno == EINVAL, "expected errno EINVAL, got %d\n", errno); ok(ret == -1, "expected ret -1, got %d\n", ret); CHECK_CALLED(invalid_parameter_handler); /* NULL file */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = vfwprintf_wrapper(NULL, simple); ok(errno == EINVAL, "expected errno EINVAL, got %d\n", errno); ok(ret == -1, "expected ret -1, got %d\n", ret); CHECK_CALLED(invalid_parameter_handler); /* format using % with NULL arglist*/ /* crashes on Windows */ /* ret = p_vfwprintf(0, fp, cont_fmt, NULL, NULL); */ ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); }