blob: 2c9090b9e13031ea6d68324e8f508a2a8e5a84cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
|
#include "func.def.in"
#define ADD_UNDERSCORE(symbol) symbol == _ ## symbol
#define ADD_UNDERSCORE_DATA(symbol) symbol DATA == _ ## symbol
#define ADD_UNDERSCORE_DATA_DLL(symbol) symbol DATA == _ ## symbol ## _dll
#define ADD_DOUBLE_UNDERSCORE(symbol) symbol == __ ## symbol
; This is list of symbol aliases from the Visual C++ 1.0 oldnames.lib library
; FIXME: some of these symbol aliases are commented, check and document why
#ifdef UCRTBASE
; access is provided as an alias for __mingw_access
#else
ADD_UNDERSCORE(access)
#endif
#ifndef CRTAPP
; ADD_UNDERSCORE(cgets)
ADD_UNDERSCORE(chdir)
#endif
ADD_UNDERSCORE(chmod)
ADD_UNDERSCORE(chsize)
ADD_UNDERSCORE(close)
#ifndef CRTAPP
; ADD_UNDERSCORE(cprintf)
; ADD_UNDERSCORE(cputs)
#endif
ADD_UNDERSCORE(creat)
#ifndef CRTAPP
; ADD_UNDERSCORE(cscanf)
ADD_UNDERSCORE(cwait)
#endif
#if defined(UCRTBASE)
; daylight variable is provided by misc/ucrt_tzset.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(daylight)
#else
ADD_UNDERSCORE_DATA(daylight)
#endif
ADD_UNDERSCORE(dup)
ADD_UNDERSCORE(dup2)
ADD_UNDERSCORE(ecvt)
#if defined(UCRTBASE)
; _environ variable is not available in ucrtbase.dll and there is no replacement for it
#elif defined(CRTDLL)
; ADD_UNDERSCORE_DATA_DLL(environ)
#else
; ADD_UNDERSCORE_DATA(environ)
#endif
ADD_UNDERSCORE(eof)
#ifndef CRTAPP
ADD_UNDERSCORE(execl)
ADD_UNDERSCORE(execle)
ADD_UNDERSCORE(execlp)
ADD_UNDERSCORE(execlpe)
ADD_UNDERSCORE(execv)
ADD_UNDERSCORE(execve)
ADD_UNDERSCORE(execvp)
ADD_UNDERSCORE(execvpe)
#endif
ADD_UNDERSCORE(fcloseall)
ADD_UNDERSCORE(fcvt)
ADD_UNDERSCORE(fdopen)
ADD_UNDERSCORE(fgetchar)
ADD_UNDERSCORE(filelength)
ADD_UNDERSCORE(fileno)
; ADD_UNDERSCORE(flushall)
ADD_UNDERSCORE(fputchar)
#ifdef FIXED_SIZE_SYMBOLS
#ifndef CRTDLL
ADD_UNDERSCORE(fstat)
#endif
#else
F32(fstat == _fstat32)
F64(fstat == _fstat64i32)
#endif
#ifdef FIXED_SIZE_SYMBOLS
ADD_UNDERSCORE(ftime)
#else
F32(ftime == _ftime32)
F64(ftime == _ftime64)
#endif
#if defined(UCRTBASE)
; HUGE alias and _HUGE variable are provided by math/_huge.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(HUGE)
#else
ADD_UNDERSCORE_DATA(HUGE)
#endif
ADD_UNDERSCORE(gcvt)
#ifndef CRTAPP
ADD_UNDERSCORE(getch)
ADD_UNDERSCORE(getche)
ADD_UNDERSCORE(getcwd)
#endif
#ifdef UCRTBASE
; ucrtbase.dll has got _getpid for all archs
ADD_UNDERSCORE(getpid)
#elif !defined(CRTAPP)
; msvcrt.dll for arm/arm64 lacks _getpid
F_X86_ANY(ADD_UNDERSCORE(getpid))
#endif
#ifndef CRTAPP
ADD_UNDERSCORE(getw)
#endif
ADD_UNDERSCORE(isatty)
ADD_UNDERSCORE(itoa)
#ifndef CRTAPP
ADD_UNDERSCORE(kbhit)
#endif
ADD_UNDERSCORE(lfind)
; ADD_UNDERSCORE(locking)
ADD_UNDERSCORE(lsearch)
ADD_UNDERSCORE(lseek)
ADD_UNDERSCORE(ltoa)
ADD_UNDERSCORE(memccpy)
ADD_UNDERSCORE(memicmp)
ADD_UNDERSCORE(mkdir)
ADD_UNDERSCORE(mktemp)
; onexit function alias is provided by misc/_onexit.c
ADD_UNDERSCORE(open)
#ifndef CRTAPP
ADD_UNDERSCORE(putch)
ADD_UNDERSCORE(putenv)
#endif
ADD_UNDERSCORE(putw)
ADD_UNDERSCORE(read)
ADD_UNDERSCORE(rmdir)
ADD_UNDERSCORE(rmtmp)
ADD_UNDERSCORE(setmode)
ADD_UNDERSCORE(sopen)
#ifndef CRTAPP
ADD_UNDERSCORE(spawnl)
ADD_UNDERSCORE(spawnle)
ADD_UNDERSCORE(spawnlp)
ADD_UNDERSCORE(spawnlpe)
ADD_UNDERSCORE(spawnv)
ADD_UNDERSCORE(spawnve)
ADD_UNDERSCORE(spawnvp)
ADD_UNDERSCORE(spawnvpe)
#endif
#ifdef UCRTBASE
F32(stat == _stat32)
F64(stat == _stat64i32)
#else
; stat for non-UCRT is provided by mingw to workaround trailing slash issue in _stat
#endif
#ifdef NO_STRCMPI_ALIAS
; Symbol _strcmpi is natively present and defined in the library def file
; So define strcmpi as an alias to _strcmpi
ADD_UNDERSCORE(strcmpi)
#else
; Symbol _strcmpi is not present in the library, it provides only _stricmp symbol
; So define strcmpi as an alias to _stricmp
strcmpi == _stricmp
#endif
ADD_UNDERSCORE(strdup)
ADD_UNDERSCORE(stricmp)
ADD_UNDERSCORE(strlwr)
ADD_UNDERSCORE(strnicmp)
ADD_UNDERSCORE(strnset)
ADD_UNDERSCORE(strrev)
ADD_UNDERSCORE(strset)
ADD_UNDERSCORE(strupr)
ADD_UNDERSCORE(swab)
#if defined(UCRTBASE)
; _sys_errlist variable is not available in ucrtbase.dll and there is no replacement for it
#else
// sys_errlist variable is without _dll suffix in crtdll.dll
; ADD_UNDERSCORE_DATA(sys_errlist)
#endif
#if defined(UCRTBASE)
; _sys_nerr variable is not available in ucrtbase.dll and there is no replacement for it
#elif defined(CRTDLL)
; ADD_UNDERSCORE_DATA_DLL(sys_nerr)
#else
; ADD_UNDERSCORE_DATA(sys_nerr)
#endif
ADD_UNDERSCORE(tell)
ADD_UNDERSCORE(tempnam)
#if defined(UCRTBASE)
; timezone variable is provided by misc/ucrt_tzset.c
#elif defined(CRTDLL)
ADD_UNDERSCORE_DATA_DLL(timezone)
#else
ADD_UNDERSCORE_DATA(timezone)
#endif
#if defined(UCRTBASE)
; tzname variable is provided by misc/ucrt_tzset.c
#else
// tzname variable is without _dll suffix in crtdll.dll
ADD_UNDERSCORE_DATA(tzname)
#endif
#if defined(UCRTBASE)
; tzset function is provided by misc/ucrt_tzset.c
#else
ADD_UNDERSCORE(tzset)
#endif
; ADD_UNDERSCORE(ultoa)
ADD_UNDERSCORE(umask)
#ifndef CRTAPP
ADD_UNDERSCORE(ungetch)
#endif
ADD_UNDERSCORE(unlink)
#ifdef FIXED_SIZE_SYMBOLS
ADD_UNDERSCORE(utime)
#else
F32(utime == _utime32)
F64(utime == _utime64)
#endif
ADD_UNDERSCORE(write)
; This is list of symbol aliases added in the Visual C++ 2.0 oldnames.lib library
; All these symbols with leading underscore are present also in pre-2.0 CRT versions: crtdll.dll and msvcrt10.dll
; ADD_UNDERSCORE(control87)
#if __SIZEOF_LONG_DOUBLE__ == __SIZEOF_DOUBLE__
ADD_UNDERSCORE(fpreset)
#else
; ADD_UNDERSCORE(fpreset) ; Alias fpreset is set in CRT_fp10.c and CRT_fp8.c
#endif
ADD_UNDERSCORE(wcsdup)
ADD_UNDERSCORE(wcsicmp)
ADD_UNDERSCORE(wcsicoll)
ADD_UNDERSCORE(wcslwr)
ADD_UNDERSCORE(wcsnicmp)
ADD_UNDERSCORE(wcsnset)
ADD_UNDERSCORE(wcsrev)
ADD_UNDERSCORE(wcsset)
ADD_UNDERSCORE(wcsupr)
; This is list of symbol aliases added in the Visual C++ 4.0 oldnames.lib library
; All these symbols with leading underscore are present also in pre-4.0 CRT versions: crtdll.dll, msvcrt10.dll and msvcrt20.dll
; ADD_UNDERSCORE(cabs)
#ifdef UCRTBASE
; hypot is natively exported from UCRT
#else
ADD_UNDERSCORE(hypot)
#endif
ADD_UNDERSCORE(j0)
ADD_UNDERSCORE(j1)
ADD_UNDERSCORE(jn)
ADD_UNDERSCORE(y0)
ADD_UNDERSCORE(y1)
ADD_UNDERSCORE(yn)
; This is list of symbol aliases for C95 functions
#ifdef WITH_GET_PUT_WCHAR_ALIASES
getwc == fgetwc
getwchar == _fgetwchar
putwc == fputwc
putwchar == _fputwchar
#endif
#ifdef USE_WCSTOK_S_FOR_WCSTOK
wcstok == wcstok_s
#endif
; This is list of symbol aliases for C99 functions
; ADD_UNDERSCORE(logb)
#ifdef WITH_NEXTAFTER_ALIAS
ADD_UNDERSCORE(nextafter)
#endif
; This is list of symbol aliases for C99 ARM long double functions
; They are defined as aliases to regular double symbols as on ARM, long double is equal to regular double
F_LD64(acosl == acos)
F_LD64(asinl == asin)
F_LD64(atan2l == atan2)
F_LD64(atanl == atan)
F_LD64(ceill == ceil)
F_LD64(cosl == cos)
F_LD64(expl == exp)
F_LD64(floorl == floor)
F_LD64(fmodl == fmod)
F_LD64(log10l == log10)
F_LD64(logl == log)
; FIXME: Why is powl alias defined only for UCRT?
#ifdef UCRTBASE
F_LD64(powl == pow)
#endif
F_LD64(sinl == sin)
F_LD64(tanl == tan)
F_LD64(_chgsignl == _chgsign)
; This is list of symbol aliases for C11 functions
#ifdef UCRTBASE
F32(timespec_get == _timespec32_get)
F64(timespec_get == _timespec64_get)
#endif
; This is list of symbol aliases for POSIX functions
ADD_DOUBLE_UNDERSCORE(isascii)
ADD_DOUBLE_UNDERSCORE(toascii)
#ifndef CRTAPP
ADD_UNDERSCORE(pclose)
ADD_UNDERSCORE(popen)
#endif
; ADD_UNDERSCORE(scalb)
; This is list of symbol aliases for Large File Specification (extension to Single UNIX Specification)
#ifndef NO_FPOS64_ALIASES
; fgetpos and fsetpos are already 64-bit
fgetpos64 == fgetpos
fsetpos64 == fsetpos
#endif
#ifdef UCRTBASE
stat32 == _stat32
stat32i64 == _stat32i64
stat64 == _stat64
stat64i32 == _stat64i32
#else
; stat for non-UCRT is provided by mingw to workaround trailing slash issue in _stat
#endif
#ifdef FIXED_SIZE_SYMBOLS
// NO_FIXED_SIZE_64_ALIAS means that DLL provides the native _fstat64 symbol
#if defined(NO_FIXED_SIZE_64_ALIAS) && !defined(NO_FSTAT64_ALIAS)
fstat64 == _fstat64
#endif
#else
fstat64 == _fstat64
#endif
; This is list of symbol aliases for GNU functions which are not part of POSIX or ISO C
strcasecmp == _stricmp
strncasecmp == _strnicmp
; This is list of various symbol aliases which are needed for compatibility
; Some symbols in some version of CRT library were added and some other symbols were removed or renamed
; This list provides some level of backward and forward compatibility
#ifndef NO_STRCMPI_ALIAS
_strcmpi == _stricmp
#endif
#ifdef WITH_IOB_FUNC_ALIAS
__iob_func == __p__iob
#endif
#ifdef WITH_TZ_ALIASES
__daylight == __p__daylight
#ifndef NO_DSTBIAS
__dstbias == __p__dstbias
#endif
__timezone == __p__timezone
__tzname == __p__tzname
#endif
#ifdef WITH_ATOLL_ALIAS
atoll == _atoi64
_wtoll == _wtoi64
#endif
#ifdef WITH_ATOLL_L_ALIAS
_atoll_l == _atoi64_l
_wtoll_l == _wtoi64_l
#endif
#ifdef WITH_LLABS_ALIAS
llabs == _abs64
imaxabs == _abs64
#elif defined(WITH_IMAXABS_ALIAS)
imaxabs == llabs
#endif
#ifdef WITH_IMAXDIV_ALIAS
imaxdiv == lldiv
#endif
#ifdef WITH_STRTO64_ALIAS
strtoll == _strtoi64
strtoull == _strtoui64
strtoimax == _strtoi64
strtoumax == _strtoui64
wcstoll == _wcstoi64
wcstoull == _wcstoui64
wcstoimax == _wcstoi64
wcstoumax == _wcstoui64
#endif
#ifdef WITH_STRTO64_L_ALIAS
_strtoll_l == _strtoi64_l
_strtoull_l == _strtoui64_l
_strtoimax_l == _strtoi64_l
_strtoumax_l == _strtoui64_l
_wcstoll_l == _wcstoi64_l
_wcstoull_l == _wcstoui64_l
_wcstoimax_l == _wcstoi64_l
_wcstoumax_l == _wcstoui64_l
#endif
; This is list of find symbol aliases, every CRT library has either find symbols with SIZE suffix or without them
#ifdef FIXED_SIZE_SYMBOLS
F32(_findfirst32 == _findfirst)
F64(_findfirst64i32 == _findfirst)
#ifndef NO_I64_FIXED_SIZE
F32(_findfirst32i64 == _findfirsti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_findfirst64 == _findfirsti64)
#endif
#endif
F32(_findnext32 == _findnext)
F64(_findnext64i32 == _findnext)
#ifndef NO_I64_FIXED_SIZE
F32(_findnext32i64 == _findnexti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_findnext64 == _findnexti64)
#endif
#endif
#ifndef NO_WIDE_FIXED_SIZE
F32(_wfindfirst32 == _wfindfirst)
F64(_wfindfirst64i32 == _wfindfirst)
#ifndef NO_I64_FIXED_SIZE
F32(_wfindfirst32i64 == _wfindfirsti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wfindfirst64 == _wfindfirsti64)
#endif
#endif
F32(_wfindnext32 == _wfindnext)
F64(_wfindnext64i32 == _wfindnext)
#ifndef NO_I64_FIXED_SIZE
F32(_wfindnext32i64 == _wfindnexti64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wfindnext64 == _wfindnexti64)
#endif
#endif
#endif
#else
F32(_findfirst == _findfirst32)
F64(_findfirst == _findfirst64i32)
F32(_findfirsti64 == _findfirst32i64)
F64(_findfirsti64 == _findfirst64)
F32(_findnext == _findnext32)
F64(_findnext == _findnext64i32)
F32(_findnexti64 == _findnext32i64)
F64(_findnexti64 == _findnext64)
F32(_wfindfirst == _wfindfirst32)
F64(_wfindfirst == _wfindfirst64i32)
F32(_wfindfirsti64 == _wfindfirst32i64)
F64(_wfindfirsti64 == _wfindfirst64)
F32(_wfindnext == _wfindnext32)
F64(_wfindnext == _wfindnext64i32)
F32(_wfindnexti64 == _wfindnext32i64)
F64(_wfindnexti64 == _wfindnext64)
#endif
; This is list of stat symbol aliases, every CRT library has either stat symbols with SIZE suffix or without them
#ifdef FIXED_SIZE_SYMBOLS
#ifndef CRTDLL
F32(_fstat32 == _fstat)
#endif
F64(_fstat64i32 == _fstat)
#ifndef NO_I64_FIXED_SIZE
F32(_fstat32i64 == _fstati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_fstat64 == _fstati64)
#endif
#endif
#ifndef CRTDLL
F32(_stat32 == _stat)
#endif
F64(_stat64i32 == _stat)
#ifndef NO_I64_FIXED_SIZE
F32(_stat32i64 == _stati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_stat64 == _stati64)
#endif
#endif
#ifndef NO_WIDE_FIXED_SIZE
F32(_wstat32 == _wstat)
F64(_wstat64i32 == _wstat)
#ifndef NO_I64_FIXED_SIZE
F32(_wstat32i64 == _wstati64)
#ifndef NO_FIXED_SIZE_64_ALIAS
F64(_wstat64 == _wstati64)
#endif
#endif
#endif
#else
F32(_fstat == _fstat32)
F64(_fstat == _fstat64i32)
F32(_fstati64 == _fstat32i64)
F64(_fstati64 == _fstat64)
F32(_stat == _stat32)
F64(_stat == _stat64i32)
F32(_stati64 == _stat32i64)
F64(_stati64 == _stat64)
F32(_wstat == _wstat32)
F64(_wstat == _wstat64i32)
F32(_wstati64 == _wstat32i64)
F64(_wstati64 == _wstat64)
#endif
; This is list of time symbol aliases, every CRT library except msvcrt.dll has either time symbols with SIZE suffix or without them
#ifndef NO_TIME_ALIAS
#ifdef FIXED_SIZE_SYMBOLS
F32(_ctime32 == ctime)
F64(_ctime64 == ctime)
F32(_difftime32 == difftime)
F64(_difftime64 == difftime)
F32(_ftime32 == _ftime)
F64(_ftime64 == _ftime)
F32(_futime32 == _futime)
F64(_futime64 == _futime)
F32(_gmtime32 == gmtime)
F64(_gmtime64 == gmtime)
F32(_localtime32 == localtime)
F64(_localtime64 == localtime)
; Skip _mkgmtime as it is present only in msvcrt.dll
F32(_mktime32 == mktime)
F64(_mktime64 == mktime)
F32(_time32 == time)
F64(_time64 == time)
F32(_utime32 == _utime)
F64(_utime64 == _utime)
#ifndef NO_WIDE_FIXED_SIZE
F32(_wctime32 == _wctime)
F64(_wctime64 == _wctime)
F32(_wutime32 == _wutime)
F64(_wutime64 == _wutime)
#endif
#else
F32(ctime == _ctime32)
F64(ctime == _ctime64)
F32(difftime == _difftime32)
F64(difftime == _difftime64)
F32(_ftime == _ftime32)
F64(_ftime == _ftime64)
F32(_futime == _futime32)
F64(_futime == _futime64)
F32(gmtime == _gmtime32)
F64(gmtime == _gmtime64)
F32(localtime == _localtime32)
F64(localtime == _localtime64)
F32(_mkgmtime == _mkgmtime32)
F64(_mkgmtime == _mkgmtime64)
F32(mktime == _mktime32)
F64(mktime == _mktime64)
F32(time == _time32)
F64(time == _time64)
F32(_utime == _utime32)
F64(_utime == _utime64)
F32(_wctime == _wctime32)
F64(_wctime == _wctime64)
F32(_wutime == _wutime32)
F64(_wutime == _wutime64)
#endif
#endif
; This is list of symbols which are present in msvcrt but not in UCRT
#ifdef UCRTBASE
__lconv_init == __initialize_lconv_for_unsigned_char
__set_app_type == _set_app_type
__p__daylight == __daylight
__p__dstbias == __dstbias
__p__timezone == __timezone
__p__tzname == __tzname
#endif
; This is list of printf/scanf symbol aliases with __ms_ prefix
#ifndef UCRTBASE
__ms_fprintf == fprintf
__ms_fscanf == fscanf
__ms_fwprintf == fwprintf
__ms_fwscanf == fwscanf
__ms_printf == printf
__ms_scanf == scanf
__ms_sprintf == sprintf
__ms_sscanf == sscanf
__ms_swscanf == swscanf
__ms_vfprintf == vfprintf
__ms_vfwprintf == vfwprintf
__ms_vprintf == vprintf
__ms_vsprintf == vsprintf
__ms_vwprintf == vwprintf
__ms_wprintf == wprintf
__ms_wscanf == wscanf
#endif
; This is list of additional symbol aliases not available in any library as neither native symbols nor aliases
; FIXME: check if these really are needed
; This is wstat and wstat64 symbol available only in mingw but for a long time
#ifdef UCRTBASE
F32(wstat == _wstat32)
F64(wstat == _wstat64i32)
wstat32 == _wstat32
wstat32i64 == _wstat32i64
wstat64 == _wstat64
wstat64i32 == _wstat64i32
#else
; wstat for non-UCRT is provided by mingw to workaround trailing slash issue in _wstat
#endif
; Origin of the symbol wcscmpi is unknown. This symbol is not present in
; crtdll.dll and neither in any msvcr* version. The only source of wcscmpi is
; wcstr.h header file from the Microsoft Visual C++ 1.0 (32-bit for NT) and
; Microsoft Windows NT 3.1 SDK where wcscmpi and _wcscmpi are defined as
; macros which expand to _wcsicmp. So the raw wcscmpi is not linkable symbol
; even in the old Visual C++ versions.
wcscmpi == _wcsicmp
; Origin of these symbols is unknown too.
ADD_UNDERSCORE(chgsign)
ADD_UNDERSCORE(fgetwchar)
ADD_UNDERSCORE(finite)
ADD_UNDERSCORE(fpclass)
ADD_UNDERSCORE(fputwchar)
#ifndef CRTAPP
ADD_UNDERSCORE(heapwalk)
#endif
ADD_DOUBLE_UNDERSCORE(iscsymf)
ADD_DOUBLE_UNDERSCORE(iscsym)
#ifndef CRTAPP
ADD_UNDERSCORE(searchenv)
#endif
ADD_UNDERSCORE(stricoll)
#ifndef UCRTBASE
ADD_UNDERSCORE(vsnprintf_s)
#endif
#ifndef CRTAPP
ADD_UNDERSCORE(wpopen)
#endif
|