1 /* 2 * PROJECT: ReactOS CRT API tests 3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) 4 * PURPOSE: Tests for crt data exports 5 * COPYRIGHT: Copyright 2021 Timo Kreuzer <timo.kreuzer@reactos.org> 6 */ 7 8 #include <apitest.h> 9 #include <apitest_guard.h> 10 11 #define WIN32_NO_STATUS 12 #include <stdio.h> 13 #include <stdlib.h> 14 #include <time.h> 15 #include <locale.h> 16 #include <mbctype.h> 17 18 static OSVERSIONINFOW s_osvi; 19 extern char __ImageBase; 20 static void* s_ImageEnd; 21 22 int IsLocalSymbol(void* Address) 23 { 24 return ((Address >= (void*)&__ImageBase) && (Address <= s_ImageEnd)); 25 } 26 27 // Dynamically imported functions (Vista+) 28 int* (__cdecl *p__daylight)(void); 29 long* (__cdecl *p__dstbias)(void); 30 errno_t (__cdecl *p_get_fmode)(int* _PMode); 31 errno_t (__cdecl *p_get_osplatform)(unsigned int *pValue); 32 int (__cdecl *p_get_pgmptr)(char** p); 33 errno_t (__cdecl *p_get_wpgmptr)(_Outptr_result_z_ wchar_t **_Value); 34 errno_t (__cdecl *p_get_winver)(_Out_ unsigned int *_Value); 35 errno_t (__cdecl *p_get_winmajor)(_Out_ unsigned int *_Value); 36 errno_t (__cdecl *p_get_winminor)(_Out_ unsigned int *_Value); 37 errno_t (__cdecl *p_get_environ)(_Out_ char***); 38 errno_t (__cdecl *p_get_wenviron)(_Out_ wchar_t***); 39 40 41 #ifndef TEST_STATIC 42 #define test_is_local_symbol(addr, is) ok_int(IsLocalSymbol(addr), (is)) 43 #else 44 #define test_is_local_symbol(addr, is) 45 #endif 46 47 void Test___argc(void) 48 { 49 void* p = &__argc; 50 test_is_local_symbol(p, FALSE); 51 52 #undef __argc 53 ok_ptr(&__argc, p); 54 #ifdef _M_IX86 55 ok_ptr(__p___argc(), p); 56 #endif 57 } 58 59 void Test___argv(void) 60 { 61 void* p = &__argv; 62 test_is_local_symbol(p, FALSE); 63 64 #undef __argv 65 ok_ptr(&__argv, p); 66 #ifdef _M_IX86 67 ok_ptr(__p___argv(), p); 68 #endif 69 } 70 71 void Test___badioinfo(void) 72 { 73 typedef struct _ioinfo ioinfo; 74 _CRTIMP extern ioinfo* __badioinfo[]; 75 ok(__badioinfo != NULL, "__badioinfo is NULL\n"); 76 ok(__badioinfo[0] != NULL, "__badioinfo is NULL\n"); 77 } 78 79 #ifndef _M_ARM 80 void Test___initenv(void) 81 { 82 _CRTIMP extern char** __initenv; 83 ok(__initenv != NULL, "__initenv is NULL\n"); 84 ok(*__initenv != NULL, "*__initenv is NULL\n"); 85 #ifdef _M_IX86 86 _CRTIMP char*** __p___initenv(void); 87 ok_ptr(__p___initenv(), &__initenv); 88 #endif 89 } 90 91 void Test___lc_codepage(void) 92 { 93 _CRTIMP extern unsigned int __lc_codepage; 94 ok_int(__lc_codepage, 0); 95 ok_int(___lc_codepage_func(), 0); 96 __lc_codepage++; 97 todo_ros ok_int(___lc_codepage_func(), 0); 98 __lc_codepage--; 99 } 100 101 void Test___lc_collate_cp(void) 102 { 103 _CRTIMP extern int __lc_collate_cp; 104 test_is_local_symbol(&__lc_collate_cp, FALSE); 105 ok_int(__lc_collate_cp, 0); 106 ok_int(___lc_collate_cp_func(), 0); 107 __lc_collate_cp++; 108 ok_int(___lc_collate_cp_func(), 0); 109 __lc_collate_cp--; 110 } 111 #endif // !_M_ARM 112 113 void Test___lc_handle(void) 114 { 115 _CRTIMP int __lc_handle; 116 ok_int(__lc_handle, 0); 117 _CRTIMP int* ___lc_handle_func(); 118 ok_int(*___lc_handle_func(), 0); 119 __lc_handle++; 120 todo_ros ok_int(*___lc_handle_func(), 0); 121 __lc_handle--; 122 } 123 124 void Test___mb_cur_max(void) 125 { 126 void* p = &__mb_cur_max; 127 test_is_local_symbol(&__mb_cur_max, FALSE); 128 ok_int(__mb_cur_max, 1); 129 130 #undef __mb_cur_max 131 _CRTIMP extern int __mb_cur_max; 132 ok_ptr(&__mb_cur_max, p); 133 134 ok_int(___mb_cur_max_func(), 1); 135 #ifdef _M_IX86 136 _CRTIMP int* __p___mb_cur_max(void); 137 ok_int(*__p___mb_cur_max(), 1); 138 #endif 139 __mb_cur_max++; 140 if (s_osvi.dwMajorVersion >= 6) 141 { 142 ok_int(___mb_cur_max_func(), 1); 143 #ifdef _M_IX86 144 ok_int(*__p___mb_cur_max(), 1); 145 #endif 146 } 147 else 148 { 149 todo_ros ok_int(___mb_cur_max_func(), 2); 150 #ifdef _M_IX86 151 todo_ros ok_ptr(__p___mb_cur_max(), p); // wine code handles it like on Vista+ 152 todo_ros ok_int(*__p___mb_cur_max(), 2); 153 #endif 154 } 155 156 __mb_cur_max--; 157 } 158 159 void Test___pioinfo(void) 160 { 161 162 } 163 164 #ifndef _M_ARM 165 void Test___setlc_active(void) 166 { 167 _CRTIMP extern unsigned int __setlc_active; 168 ok_int(__setlc_active, 0); 169 170 _CRTIMP unsigned int ___setlc_active_func(void); 171 ok_int(___setlc_active_func(), __setlc_active); 172 __setlc_active++; 173 ok_int(___setlc_active_func(), __setlc_active); 174 __setlc_active--; 175 } 176 177 void Test___unguarded_readlc_active(void) 178 { 179 _CRTIMP extern unsigned int __unguarded_readlc_active; 180 void* p = &__unguarded_readlc_active; 181 ok_int(__unguarded_readlc_active, 0); 182 183 _CRTIMP unsigned int* ___unguarded_readlc_active_add_func(void); 184 ok_ptr(___unguarded_readlc_active_add_func(), p); 185 } 186 #endif // !_M_ARM 187 188 void Test___wargv(void) 189 { 190 void* p = &__wargv; 191 test_is_local_symbol(p, FALSE); 192 193 #undef __wargv 194 _CRTIMP extern wchar_t ** __wargv; 195 ok_ptr(&__wargv, p); 196 #ifdef _M_IX86 197 ok_ptr(__p___wargv(), p); 198 #endif 199 } 200 201 #ifndef _M_ARM 202 void Test___winitenv(void) 203 { 204 _CRTIMP extern wchar_t** __winitenv; 205 todo_ros ok(__winitenv == NULL, "__winitenv is not NULL\n"); 206 #ifdef _M_IX86 207 _CRTIMP wchar_t*** __p___winitenv(void); 208 ok_ptr(__p___winitenv(), &__winitenv); 209 #endif 210 } 211 #endif 212 213 void Test__acmdln(void) 214 { 215 _CRTIMP extern char* _acmdln; 216 ok(_acmdln != NULL, "__winitenv is NULL\n"); 217 #ifdef _M_IX86 218 _CRTIMP char** __p__acmdln(void); 219 ok_ptr(__p__acmdln(), &_acmdln); 220 #endif 221 } 222 223 #ifdef _M_IX86 224 void Test__adjust_fdiv(void) 225 { 226 _CRTIMP extern int _adjust_fdiv; 227 ok_int(_adjust_fdiv, 0); 228 } 229 #endif 230 231 void Test__aexit_rtn(void) 232 { 233 typedef void (*_exit_t)(int exitcode); 234 _CRTIMP extern _exit_t _aexit_rtn; 235 ok_ptr(_aexit_rtn, _exit); 236 } 237 238 void Test__commode(void) 239 { 240 void* p = &_commode; 241 test_is_local_symbol(&_commode, FALSE); 242 ok_int(_commode, 0); 243 244 #undef _commode 245 _CRTIMP extern int _commode; 246 ok_ptr(&_commode, p); 247 #ifdef _M_IX86 248 ok_ptr(__p__commode(), &_commode); 249 #endif 250 } 251 252 void Test__ctype(void) 253 { 254 _CRTIMP extern const unsigned short _ctype[]; 255 ok_int(_ctype[0], 0); 256 ok_int(_ctype[1], _CONTROL); 257 258 #undef _pctype 259 _CRTIMP extern const unsigned short* _pctype; 260 ok(_pctype != &_ctype[0], "_pwctype should not match &_wctype[0]"); 261 if (s_osvi.dwMajorVersion >= 6) 262 { 263 ok(_pctype != &_ctype[1], "_pwctype should not match &_wctype[1]"); 264 } 265 else 266 { 267 ok(_pctype == &_ctype[1], "_pwctype should match &_wctype[1]"); 268 } 269 270 ok(__pctype_func() != _ctype, "__pctype_func() should not match _ctype\n"); 271 ok_int(__pctype_func()[0], _CONTROL); 272 ok_int(__pctype_func()[1], _CONTROL); 273 #ifdef _M_IX86 274 _CRTIMP const unsigned short** __cdecl __p__pctype(void); 275 ok_ptr(*__p__pctype(), __pctype_func()); 276 #endif 277 } 278 279 void Test__wctype(void) 280 { 281 ok_int(_wctype[0], 0); 282 ok_int(_wctype[1], _CONTROL); 283 284 #undef _pwctype 285 _CRTIMP extern const unsigned short* _pwctype; 286 ok_ptr(_pwctype, &_wctype[1]); 287 288 ok(__pwctype_func() != _wctype, "__pwctype_func() == _wctype\n"); 289 ok_int(__pctype_func()[0], _CONTROL); 290 ok_int(__pctype_func()[1], _CONTROL); 291 #ifdef _M_IX86 292 _CRTIMP const unsigned short** __cdecl __p__pwctype(void); 293 ok_ptr(*__p__pwctype(), __pwctype_func()); 294 #endif 295 } 296 297 void Test__daylight(void) 298 { 299 void* p = &_daylight; 300 test_is_local_symbol(&_daylight, FALSE); 301 302 #undef _daylight 303 _CRTIMP extern int _daylight; 304 ok_ptr(&_daylight, p); 305 306 #ifdef _M_IX86 307 _CRTIMP void* __p__daylight(void); 308 ok_ptr(__p__daylight(), &_daylight); 309 #endif 310 if (p__daylight != NULL) 311 { 312 ok_ptr(p__daylight(), &_daylight); 313 } 314 } 315 316 #ifndef _M_ARM 317 void Test__dstbias(void) 318 { 319 void* p = &_dstbias; 320 test_is_local_symbol(&_dstbias, FALSE); 321 322 #undef _dstbias 323 _CRTIMP extern long _dstbias; 324 ok_ptr(&_dstbias, p); 325 #ifdef _M_IX86 326 _CRTIMP long* __cdecl __p__dstbias(void); 327 ok_ptr(__p__dstbias(), &_dstbias); 328 #endif 329 if (p__dstbias != NULL) 330 { 331 ok_ptr(p__dstbias(), &_dstbias); 332 } 333 } 334 335 void Test__environ(void) 336 { 337 void* p = &_environ; 338 ok(_environ != NULL, "_environ == NULL\n"); 339 340 #undef _environ 341 _CRTIMP extern char** _environ; 342 ok_ptr(&_environ, p); 343 #ifdef _M_IX86 344 ok_ptr(__p__environ(), &_environ); 345 #endif 346 if (p_get_environ != NULL) 347 { 348 char** result_environ; 349 ok_int(p_get_environ(&result_environ), 0); 350 ok_ptr(result_environ, _environ); 351 } 352 } 353 354 void Test__fileinfo(void) 355 { 356 _CRTIMP extern int _fileinfo; 357 ok_int(_fileinfo, -1); 358 359 #ifdef _M_IX86 360 _CRTIMP int* __p__fileinfo(); 361 ok_ptr(__p__fileinfo(), &_fileinfo); 362 #endif 363 } 364 #endif // !_M_ARM 365 366 void Test__fmode(void) 367 { 368 void* p = &_fmode; 369 test_is_local_symbol(&_fmode, FALSE); 370 ok_int(_fmode, 0); 371 372 #undef _fmode 373 _CRTIMP extern int _fmode; 374 ok_ptr(&_fmode, p); 375 376 #ifdef _M_IX86 377 _CRTIMP int* __cdecl __p__fmode(); 378 ok_ptr(__p__fmode(), p); 379 #endif 380 381 if (p_get_fmode != NULL) 382 { 383 _fmode = 1234; 384 385 int mode; 386 ok_int(p_get_fmode(&mode), 0); 387 ok_int(mode, _fmode); 388 _fmode = 0; 389 } 390 } 391 392 void Test__iob(void) 393 { 394 void* p = &_iob; 395 test_is_local_symbol(&_iob, FALSE); 396 ok_ptr(&_iob[0], stdin); 397 ok_ptr(&_iob[1], stdout); 398 ok_ptr(&_iob[2], stderr); 399 400 #undef _iob 401 _CRTIMP extern FILE _iob[]; 402 ok_ptr(&_iob, p); 403 404 ok_ptr(__iob_func(), &_iob); 405 406 #ifdef _M_IX86 407 _CRTIMP int* __cdecl __p__iob(); 408 ok_ptr(__p__iob(), p); 409 #endif 410 } 411 412 void Test__mbcasemap(void) 413 { 414 void* p = &_mbcasemap; 415 ok_int(_mbcasemap[0], 0); 416 417 #undef _mbcasemap 418 ok_ptr(_mbcasemap, p); 419 420 #ifdef _M_IX86 421 _CRTIMP unsigned char* __cdecl __p__mbcasemap(); 422 ok_ptr(__p__mbcasemap(), &_mbcasemap); 423 #endif 424 } 425 426 void Test__mbctype(void) 427 { 428 void* p = &_mbctype; 429 ok_int(_mbctype[0], 0); 430 431 #undef _mbctype 432 ok_ptr(&_mbctype, p); 433 434 #ifdef _M_IX86 435 _CRTIMP unsigned char* __cdecl __p__mbctype(); 436 todo_ros ok_ptr(__p__mbctype(), &_mbctype); // wine implements thiss like on Vista 437 #endif 438 } 439 440 #ifndef _M_ARM 441 void Test__osplatform(void) 442 { 443 ok_int(_osplatform, s_osvi.dwPlatformId); 444 if (p_get_osplatform != NULL) 445 { 446 unsigned int result_osplatform; 447 ok_int(p_get_osplatform(&result_osplatform), 0); 448 ok_int(result_osplatform, _osplatform); 449 } 450 } 451 #endif 452 453 void Test__osver(void) 454 { 455 ok_int(_osver, s_osvi.dwBuildNumber); 456 457 #ifdef _M_IX86 458 _CRTIMP int* __cdecl __p__osver(); 459 ok_ptr(__p__osver(), &_osver); 460 #endif 461 } 462 463 void Test__pgmptr(void) 464 { 465 void* p = &_pgmptr; 466 ok(_pgmptr != NULL, "_pgmptr should not be NULL\n"); 467 468 #undef _pgmptr 469 _CRTIMP extern char* _pgmptr; 470 ok_ptr(&_pgmptr, p); 471 #ifdef _M_IX86 472 ok_ptr(__p__pgmptr(), &_pgmptr); 473 #endif 474 if (p_get_pgmptr != NULL) 475 { 476 char *result_pgmptr; 477 ok_int(p_get_pgmptr(&result_pgmptr), 0); 478 ok_ptr(result_pgmptr, _pgmptr); 479 } 480 } 481 482 void Test__sys_errlist(void) 483 { 484 void* p = &_sys_errlist; 485 ok_int(strcmp(_sys_errlist[0], strerror(0)), 0); 486 ok_int(strcmp(_sys_errlist[42], strerror(42)), 0); 487 488 #undef _sys_errlist 489 _CRTIMP extern char* _sys_errlist[]; 490 ok_ptr(&_sys_errlist, p); 491 } 492 493 void Test__sys_nerr(void) 494 { 495 void* p = &_sys_nerr; 496 ok_int(_sys_nerr, 43); 497 498 #undef _sys_nerr 499 _CRTIMP extern int _sys_nerr; 500 ok_ptr(&_sys_nerr, p); 501 } 502 503 void Test__timezone(void) 504 { 505 void* p = &_timezone; 506 test_is_local_symbol(&_timezone, FALSE); 507 508 #undef _timezone 509 _CRTIMP extern long _timezone; 510 ok_ptr(&_timezone, p); 511 512 #ifdef _M_IX86 513 _CRTIMP char** __p__timezone(); 514 ok_ptr(__p__timezone(), &_timezone); 515 #endif 516 } 517 518 void Test__tzname(void) 519 { 520 void* p = &_tzname; 521 test_is_local_symbol(&_tzname, FALSE); 522 ok(_tzname[0] != NULL, "_tzname[0] == NULL\n"); 523 ok(_tzname[0] != NULL, "_tzname[0] == NULL\n"); 524 525 #undef _tzname 526 _CRTIMP extern char * _tzname[2]; 527 ok_ptr(_tzname, p); 528 529 #ifdef _M_IX86 530 _CRTIMP char** __p__tzname(); 531 ok_ptr(__p__tzname(), &_tzname); 532 #endif 533 } 534 535 void Test__wcmdln(void) 536 { 537 _CRTIMP extern wchar_t* _wcmdln; 538 #ifdef _M_IX86 539 _CRTIMP wchar_t** __p__wcmdln(void); 540 ok_ptr(__p__wcmdln(), &_wcmdln); 541 #endif 542 } 543 544 #ifndef _M_ARM 545 void Test__wenviron(void) 546 { 547 void* p = &_wenviron; 548 todo_ros ok(_wenviron == NULL, "_wenviron is not NULL\n"); 549 550 #undef _wenviron 551 _CRTIMP extern wchar_t** _wenviron; 552 ok_ptr(&_wenviron, p); 553 #ifdef _M_IX86 554 ok_ptr(__p__wenviron(), &_wenviron); 555 #endif 556 557 #if 0 // FIXME: This returns an error / NULL on Windows 10 558 if (p_get_wenviron != NULL) 559 { 560 wchar_t** result_wenviron; 561 ok_int(p_get_wenviron(&result_wenviron), 0); 562 ok_ptr(result_wenviron, _wenviron); 563 } 564 #endif 565 } 566 #endif 567 568 void Test__winmajor(void) 569 { 570 ok_int(_winmajor, s_osvi.dwMajorVersion); 571 #ifdef _M_IX86 572 _CRTIMP unsigned int* __cdecl __p__winmajor(); 573 ok_ptr(__p__winmajor(), &_winmajor); 574 #endif 575 if (p_get_winmajor != NULL) 576 { 577 unsigned int result_winmajor; 578 ok_int(p_get_winmajor(&result_winmajor), 0); 579 ok_int(result_winmajor, _winmajor); 580 } 581 } 582 583 void Test__winminor(void) 584 { 585 ok_int(_winminor, s_osvi.dwMinorVersion); 586 #ifdef _M_IX86 587 _CRTIMP unsigned int* __cdecl __p__winminor(); 588 ok_ptr(__p__winminor(), &_winminor); 589 #endif 590 if (p_get_winminor != NULL) 591 { 592 unsigned int result_winminor; 593 ok_int(p_get_winminor(&result_winminor), 0); 594 ok_int(result_winminor, _winminor); 595 } 596 } 597 598 #ifndef _M_ARM 599 void Test__winver(void) 600 { 601 ok_int(_winver, (s_osvi.dwMajorVersion << 8) | s_osvi.dwMinorVersion); 602 #ifdef _M_IX86 603 _CRTIMP unsigned int* __cdecl __p__winver(); 604 ok_ptr(__p__winver(), &_winver); 605 #endif 606 if (p_get_winver != NULL) 607 { 608 unsigned int result_winver; 609 ok_int(p_get_winver(&result_winver), 0); 610 ok_int(result_winver, _winver); 611 } 612 } 613 #endif 614 615 void Test__wpgmptr(void) 616 { 617 void* p = _wpgmptr; 618 ok_ptr(_wpgmptr, NULL); 619 620 #undef _wpgmptr 621 ok_ptr(_wpgmptr, p); 622 623 #ifdef _M_IX86 624 _CRTIMP wchar_t ** __cdecl __p__wpgmptr(); 625 ok_ptr(__p__wpgmptr(), &_wpgmptr); 626 #endif 627 628 #if 0 // FIXME: This returns an error on Windows 10 629 if (p_get_wpgmptr != NULL) 630 { 631 wchar_t* result_wpgmptr; 632 ok_int(p_get_wpgmptr(&result_wpgmptr), 0); 633 ok_ptr(result_wpgmptr, _wpgmptr); 634 } 635 #endif 636 } 637 638 START_TEST(crtdata) 639 { 640 /* Initialize image size */ 641 PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)&__ImageBase; 642 PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)((PUCHAR)dosHeader + dosHeader->e_lfanew); 643 s_ImageEnd = (PUCHAR)dosHeader + ntHeaders->OptionalHeader.SizeOfImage; 644 645 /* initialize version info */ 646 s_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); 647 GetVersionExW(&s_osvi); 648 649 HMODULE hmsvcrt = GetModuleHandleA("msvcrt.dll"); 650 p__daylight = (void*)GetProcAddress(hmsvcrt, "__daylight"); 651 p__dstbias = (void*)GetProcAddress(hmsvcrt, "__dstbias"); 652 p_get_fmode = (void*)GetProcAddress(hmsvcrt, "_get_fmode"); 653 p_get_osplatform = (void*)GetProcAddress(hmsvcrt, "_get_osplatform"); 654 p_get_pgmptr = (void*)GetProcAddress(hmsvcrt, "_get_pgmptr"); 655 p_get_wpgmptr = (void*)GetProcAddress(hmsvcrt, "_get_wpgmptr"); 656 p_get_winver = (void*)GetProcAddress(hmsvcrt, "_get_winver"); 657 p_get_winmajor = (void*)GetProcAddress(hmsvcrt, "_get_winmajor"); 658 p_get_winminor = (void*)GetProcAddress(hmsvcrt, "_get_winminor"); 659 p_get_environ = (void*)GetProcAddress(hmsvcrt, "_get_environ"); 660 p_get_wenviron = (void*)GetProcAddress(hmsvcrt, "_get_wenviron"); 661 662 if (s_osvi.dwMajorVersion >= 6) 663 { 664 ok(p__daylight != NULL, "__daylight is NULL\n"); 665 ok(p__dstbias != NULL, "__dstbias is NULL\n"); 666 ok(p_get_fmode != NULL, "_get_fmode is NULL\n"); 667 ok(p_get_osplatform != NULL, "_get_osplatform is NULL\n"); 668 ok(p_get_pgmptr != NULL, "_get_pgmptr is NULL\n"); 669 ok(p_get_wpgmptr != NULL, "_get_wpgmptr is NULL\n"); 670 ok(p_get_winver != NULL, "_get_winver is NULL\n"); 671 ok(p_get_winmajor != NULL, "_get_winmajor is NULL\n"); 672 ok(p_get_winminor != NULL, "_get_winminor is NULL\n"); 673 ok(p_get_environ != NULL, "_get_environ is NULL\n"); 674 ok(p_get_wenviron != NULL, "_get_wenviron is NULL\n"); 675 } 676 677 Test___argc(); 678 Test___argv(); 679 Test___badioinfo(); 680 #ifndef _M_ARM 681 Test___initenv(); 682 Test___lc_codepage(); 683 Test___lc_collate_cp(); 684 #endif 685 Test___lc_handle(); 686 Test___mb_cur_max(); 687 Test___pioinfo(); 688 #ifndef _M_ARM 689 Test___setlc_active(); 690 Test___unguarded_readlc_active(); 691 #endif 692 Test___wargv(); 693 #ifndef _M_ARM 694 Test___winitenv(); 695 #endif 696 Test__acmdln(); 697 #ifdef _M_IX86 698 Test__adjust_fdiv(); 699 #endif 700 Test__aexit_rtn(); 701 Test__commode(); 702 Test__ctype(); 703 Test__daylight(); 704 #ifndef _M_ARM 705 Test__dstbias(); 706 Test__environ(); 707 Test__fileinfo(); 708 #endif 709 Test__fmode(); 710 Test__iob(); 711 Test__mbcasemap(); 712 Test__mbctype(); 713 #ifndef _M_ARM 714 Test__osplatform(); 715 #endif 716 Test__osver(); 717 Test__pgmptr(); 718 Test__sys_errlist(); 719 Test__sys_nerr(); 720 Test__timezone(); 721 Test__tzname(); 722 Test__wcmdln(); 723 Test__wctype(); 724 #ifndef _M_ARM 725 Test__wenviron(); 726 #endif 727 Test__winmajor(); 728 Test__winminor(); 729 #ifndef _M_ARM 730 Test__winver(); 731 #endif 732 Test__wpgmptr(); 733 } 734