1 /* 2 * Copyright 2001 Jon Griffiths 3 * Copyright 2004 Dimitrie O. Paun 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 * 19 * NOTES 20 * Naming conventions 21 * - Symbols are prefixed with MSVCRT_ if they conflict 22 * with libc symbols 23 * - Internal symbols are usually prefixed by msvcrt_. 24 * - Exported symbols that are not present in the public 25 * headers are usually kept the same as the original. 26 * Other conventions 27 * - To avoid conflicts with the standard C library, 28 * no msvcrt headers are included in the implementation. 29 * - Instead, symbols are duplicated here, prefixed with 30 * MSVCRT_, as explained above. 31 * - To avoid inconsistencies, a test for each symbol is 32 * added into tests/headers.c. Please always add a 33 * corresponding test when you add a new symbol! 34 */ 35 36 #ifndef __WINE_MSVCRT_H 37 #define __WINE_MSVCRT_H 38 39 #include <stdarg.h> 40 41 #include "windef.h" 42 #include "winbase.h" 43 44 #define MSVCRT_LONG_MAX 0x7fffffffL 45 #define MSVCRT_ULONG_MAX 0xffffffffUL 46 #define MSVCRT_I64_MAX (((__int64)0x7fffffff << 32) | 0xffffffff) 47 #define MSVCRT_I64_MIN (-MSVCRT_I64_MAX-1) 48 #define MSVCRT_UI64_MAX (((unsigned __int64)0xffffffff << 32) | 0xffffffff) 49 50 #define MSVCRT__MAX_DRIVE 3 51 #define MSVCRT__MAX_DIR 256 52 #define MSVCRT__MAX_FNAME 256 53 #define MSVCRT__MAX_EXT 256 54 55 typedef unsigned short MSVCRT_wchar_t; 56 typedef unsigned short MSVCRT_wint_t; 57 typedef unsigned short MSVCRT_wctype_t; 58 typedef unsigned short MSVCRT__ino_t; 59 typedef unsigned int MSVCRT__fsize_t; 60 typedef int MSVCRT_long; 61 typedef unsigned int MSVCRT_ulong; 62 #ifdef _WIN64 63 typedef unsigned __int64 MSVCRT_size_t; 64 typedef __int64 MSVCRT_intptr_t; 65 typedef unsigned __int64 MSVCRT_uintptr_t; 66 #else 67 typedef unsigned long MSVCRT_size_t; 68 typedef long MSVCRT_intptr_t; 69 typedef unsigned long MSVCRT_uintptr_t; 70 #endif 71 typedef unsigned int MSVCRT__dev_t; 72 typedef int MSVCRT__off_t; 73 typedef int MSVCRT_clock_t; 74 typedef int MSVCRT___time32_t; 75 typedef __int64 DECLSPEC_ALIGN(8) MSVCRT___time64_t; 76 typedef __int64 DECLSPEC_ALIGN(8) MSVCRT_fpos_t; 77 typedef int MSVCRT_mbstate_t; 78 79 typedef void (__cdecl *MSVCRT_terminate_handler)(void); 80 typedef void (__cdecl *MSVCRT_terminate_function)(void); 81 typedef void (__cdecl *MSVCRT_unexpected_handler)(void); 82 typedef void (__cdecl *MSVCRT_unexpected_function)(void); 83 typedef void (__cdecl *MSVCRT__se_translator_function)(unsigned int code, struct _EXCEPTION_POINTERS *info); 84 typedef void (__cdecl *MSVCRT__beginthread_start_routine_t)(void *); 85 typedef unsigned int (__stdcall *MSVCRT__beginthreadex_start_routine_t)(void *); 86 typedef int (__cdecl *MSVCRT__onexit_t)(void); 87 typedef void (__cdecl *MSVCRT_invalid_parameter_handler)(const MSVCRT_wchar_t*, const MSVCRT_wchar_t*, const MSVCRT_wchar_t*, unsigned, MSVCRT_uintptr_t); 88 typedef void (__cdecl *MSVCRT_purecall_handler)(void); 89 typedef void (__cdecl *MSVCRT_security_error_handler)(int, void *); 90 91 typedef struct {ULONG x80[3];} MSVCRT__LDOUBLE; /* Intel 80 bit FP format has sizeof() 12 */ 92 93 struct MSVCRT_tm { 94 int tm_sec; 95 int tm_min; 96 int tm_hour; 97 int tm_mday; 98 int tm_mon; 99 int tm_year; 100 int tm_wday; 101 int tm_yday; 102 int tm_isdst; 103 }; 104 105 typedef struct MSVCRT_tagLC_ID { 106 unsigned short wLanguage; 107 unsigned short wCountry; 108 unsigned short wCodePage; 109 } MSVCRT_LC_ID, *MSVCRT_LPLC_ID; 110 111 typedef struct MSVCRT_threadlocaleinfostruct { 112 int refcount; 113 unsigned int lc_codepage; 114 unsigned int lc_collate_cp; 115 MSVCRT_ulong lc_handle[6]; 116 MSVCRT_LC_ID lc_id[6]; 117 struct { 118 char *locale; 119 wchar_t *wlocale; 120 int *refcount; 121 int *wrefcount; 122 } lc_category[6]; 123 int lc_clike; 124 int mb_cur_max; 125 int *lconv_intl_refcount; 126 int *lconv_num_refcount; 127 int *lconv_mon_refcount; 128 struct MSVCRT_lconv *lconv; 129 int *ctype1_refcount; 130 unsigned short *ctype1; 131 unsigned short *pctype; 132 unsigned char *pclmap; 133 unsigned char *pcumap; 134 struct MSVCRT___lc_time_data *lc_time_curr; 135 } MSVCRT_threadlocinfo; 136 137 typedef struct MSVCRT_threadmbcinfostruct { 138 int refcount; 139 int mbcodepage; 140 int ismbcodepage; 141 int mblcid; 142 unsigned short mbulinfo[6]; 143 unsigned char mbctype[257]; 144 unsigned char mbcasemap[256]; 145 } MSVCRT_threadmbcinfo; 146 147 typedef struct MSVCRT_threadlocaleinfostruct *MSVCRT_pthreadlocinfo; 148 typedef struct MSVCRT_threadmbcinfostruct *MSVCRT_pthreadmbcinfo; 149 150 typedef struct MSVCRT_localeinfo_struct 151 { 152 MSVCRT_pthreadlocinfo locinfo; 153 MSVCRT_pthreadmbcinfo mbcinfo; 154 } MSVCRT__locale_tstruct, *MSVCRT__locale_t; 155 156 157 /* TLS data */ 158 extern DWORD msvcrt_tls_index; 159 160 /* Keep in sync with msvcr90/tests/msvcr90.c */ 161 struct __thread_data { 162 DWORD tid; 163 HANDLE handle; 164 int thread_errno; 165 MSVCRT_ulong thread_doserrno; 166 int unk1; 167 unsigned int random_seed; /* seed for rand() */ 168 char *strtok_next; /* next ptr for strtok() */ 169 MSVCRT_wchar_t *wcstok_next; /* next ptr for wcstok() */ 170 unsigned char *mbstok_next; /* next ptr for mbstok() */ 171 char *strerror_buffer; /* buffer for strerror */ 172 MSVCRT_wchar_t *wcserror_buffer; /* buffer for wcserror */ 173 char *tmpnam_buffer; /* buffer for tmpname() */ 174 MSVCRT_wchar_t *wtmpnam_buffer; /* buffer for wtmpname() */ 175 void *unk2[2]; 176 char *asctime_buffer; /* buffer for asctime */ 177 MSVCRT_wchar_t *wasctime_buffer; /* buffer for wasctime */ 178 struct MSVCRT_tm *time_buffer; /* buffer for localtime/gmtime */ 179 char *efcvt_buffer; /* buffer for ecvt/fcvt */ 180 int unk3[2]; 181 void *unk4[4]; 182 int fpecode; 183 MSVCRT_pthreadmbcinfo mbcinfo; 184 MSVCRT_pthreadlocinfo locinfo; 185 BOOL have_locale; 186 int unk5[1]; 187 MSVCRT_terminate_function terminate_handler; 188 MSVCRT_unexpected_function unexpected_handler; 189 MSVCRT__se_translator_function se_translator; 190 void *unk6[3]; 191 int unk7; 192 EXCEPTION_RECORD *exc_record; 193 void *unk8[100]; 194 }; 195 196 typedef struct __thread_data thread_data_t; 197 198 extern thread_data_t *msvcrt_get_thread_data(void); 199 200 LCID MSVCRT_locale_to_LCID(const char *); 201 extern MSVCRT__locale_t MSVCRT_locale; 202 extern int MSVCRT___lc_codepage; 203 extern int MSVCRT___lc_collate_cp; 204 extern WORD MSVCRT__ctype [257]; 205 206 void msvcrt_set_errno(int); 207 208 void __cdecl _purecall(void); 209 void __cdecl _amsg_exit(int errnum); 210 211 extern char **MSVCRT__environ; 212 extern MSVCRT_wchar_t **MSVCRT__wenviron; 213 214 extern char ** msvcrt_SnapshotOfEnvironmentA(char **); 215 extern MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **); 216 217 MSVCRT_wchar_t *msvcrt_wstrdupa(const char *); 218 219 /* FIXME: This should be declared in new.h but it's not an extern "C" so 220 * it would not be much use anyway. Even for Winelib applications. 221 */ 222 int __cdecl MSVCRT__set_new_mode(int mode); 223 224 void* __cdecl MSVCRT_operator_new(MSVCRT_size_t); 225 void __cdecl MSVCRT_operator_delete(void*); 226 227 typedef void* (__cdecl *malloc_func_t)(MSVCRT_size_t); 228 typedef void (__cdecl *free_func_t)(void*); 229 230 extern char* __cdecl __unDName(char *,const char*,int,malloc_func_t,free_func_t,unsigned short int); 231 extern char* __cdecl __unDNameEx(char *,const char*,int,malloc_func_t,free_func_t,void *,unsigned short int); 232 233 /* Setup and teardown multi threaded locks */ 234 extern void msvcrt_init_mt_locks(void); 235 extern void msvcrt_free_mt_locks(void); 236 237 extern BOOL msvcrt_init_locale(void); 238 extern void msvcrt_init_math(void); 239 extern void msvcrt_init_io(void); 240 extern void msvcrt_free_io(void); 241 extern void msvcrt_init_console(void); 242 extern void msvcrt_free_console(void); 243 extern void msvcrt_init_args(void); 244 extern void msvcrt_free_args(void); 245 extern void msvcrt_init_signals(void); 246 extern void msvcrt_free_signals(void); 247 248 extern unsigned msvcrt_create_io_inherit_block(WORD*, BYTE**); 249 250 extern unsigned int __cdecl _control87(unsigned int, unsigned int); 251 252 /* run-time error codes */ 253 #define _RT_STACK 0 254 #define _RT_NULLPTR 1 255 #define _RT_FLOAT 2 256 #define _RT_INTDIV 3 257 #define _RT_EXECMEM 5 258 #define _RT_EXECFORM 6 259 #define _RT_EXECENV 7 260 #define _RT_SPACEARG 8 261 #define _RT_SPACEENV 9 262 #define _RT_ABORT 10 263 #define _RT_NPTR 12 264 #define _RT_FPTR 13 265 #define _RT_BREAK 14 266 #define _RT_INT 15 267 #define _RT_THREAD 16 268 #define _RT_LOCK 17 269 #define _RT_HEAP 18 270 #define _RT_OPENCON 19 271 #define _RT_QWIN 20 272 #define _RT_NOMAIN 21 273 #define _RT_NONCONT 22 274 #define _RT_INVALDISP 23 275 #define _RT_ONEXIT 24 276 #define _RT_PUREVIRT 25 277 #define _RT_STDIOINIT 26 278 #define _RT_LOWIOINIT 27 279 #define _RT_HEAPINIT 28 280 #define _RT_DOMAIN 120 281 #define _RT_SING 121 282 #define _RT_TLOSS 122 283 #define _RT_CRNL 252 284 #define _RT_BANNER 255 285 286 struct MSVCRT___timeb32 { 287 MSVCRT___time32_t time; 288 unsigned short millitm; 289 short timezone; 290 short dstflag; 291 }; 292 293 struct MSVCRT___timeb64 { 294 MSVCRT___time64_t time; 295 unsigned short millitm; 296 short timezone; 297 short dstflag; 298 }; 299 300 struct MSVCRT__iobuf { 301 char* _ptr; 302 int _cnt; 303 char* _base; 304 int _flag; 305 int _file; 306 int _charbuf; 307 int _bufsiz; 308 char* _tmpfname; 309 }; 310 311 typedef struct MSVCRT__iobuf MSVCRT_FILE; 312 313 struct MSVCRT_lconv { 314 char* decimal_point; 315 char* thousands_sep; 316 char* grouping; 317 char* int_curr_symbol; 318 char* currency_symbol; 319 char* mon_decimal_point; 320 char* mon_thousands_sep; 321 char* mon_grouping; 322 char* positive_sign; 323 char* negative_sign; 324 char int_frac_digits; 325 char frac_digits; 326 char p_cs_precedes; 327 char p_sep_by_space; 328 char n_cs_precedes; 329 char n_sep_by_space; 330 char p_sign_posn; 331 char n_sign_posn; 332 }; 333 334 struct MSVCRT__exception { 335 int type; 336 char* name; 337 double arg1; 338 double arg2; 339 double retval; 340 }; 341 342 struct MSVCRT__complex { 343 double x; /* Real part */ 344 double y; /* Imaginary part */ 345 }; 346 347 typedef struct MSVCRT__div_t { 348 int quot; /* quotient */ 349 int rem; /* remainder */ 350 } MSVCRT_div_t; 351 352 typedef struct MSVCRT__ldiv_t { 353 MSVCRT_long quot; /* quotient */ 354 MSVCRT_long rem; /* remainder */ 355 } MSVCRT_ldiv_t; 356 357 struct MSVCRT__heapinfo { 358 int* _pentry; 359 MSVCRT_size_t _size; 360 int _useflag; 361 }; 362 363 #ifdef __i386__ 364 struct MSVCRT___JUMP_BUFFER { 365 unsigned long Ebp; 366 unsigned long Ebx; 367 unsigned long Edi; 368 unsigned long Esi; 369 unsigned long Esp; 370 unsigned long Eip; 371 unsigned long Registration; 372 unsigned long TryLevel; 373 /* Start of new struct members */ 374 unsigned long Cookie; 375 unsigned long UnwindFunc; 376 unsigned long UnwindData[6]; 377 }; 378 #elif defined(__x86_64__) 379 struct MSVCRT__SETJMP_FLOAT128 380 { 381 unsigned __int64 DECLSPEC_ALIGN(16) Part[2]; 382 }; 383 struct MSVCRT___JUMP_BUFFER 384 { 385 unsigned __int64 Frame; 386 unsigned __int64 Rbx; 387 unsigned __int64 Rsp; 388 unsigned __int64 Rbp; 389 unsigned __int64 Rsi; 390 unsigned __int64 Rdi; 391 unsigned __int64 R12; 392 unsigned __int64 R13; 393 unsigned __int64 R14; 394 unsigned __int64 R15; 395 unsigned __int64 Rip; 396 unsigned __int64 Spare; 397 struct MSVCRT__SETJMP_FLOAT128 Xmm6; 398 struct MSVCRT__SETJMP_FLOAT128 Xmm7; 399 struct MSVCRT__SETJMP_FLOAT128 Xmm8; 400 struct MSVCRT__SETJMP_FLOAT128 Xmm9; 401 struct MSVCRT__SETJMP_FLOAT128 Xmm10; 402 struct MSVCRT__SETJMP_FLOAT128 Xmm11; 403 struct MSVCRT__SETJMP_FLOAT128 Xmm12; 404 struct MSVCRT__SETJMP_FLOAT128 Xmm13; 405 struct MSVCRT__SETJMP_FLOAT128 Xmm14; 406 struct MSVCRT__SETJMP_FLOAT128 Xmm15; 407 }; 408 #endif /* __i386__ */ 409 410 struct MSVCRT__diskfree_t { 411 unsigned int total_clusters; 412 unsigned int avail_clusters; 413 unsigned int sectors_per_cluster; 414 unsigned int bytes_per_sector; 415 }; 416 417 struct MSVCRT__finddata32_t { 418 unsigned int attrib; 419 MSVCRT___time32_t time_create; 420 MSVCRT___time32_t time_access; 421 MSVCRT___time32_t time_write; 422 MSVCRT__fsize_t size; 423 char name[260]; 424 }; 425 426 struct MSVCRT__finddata32i64_t { 427 unsigned int attrib; 428 MSVCRT___time32_t time_create; 429 MSVCRT___time32_t time_access; 430 MSVCRT___time32_t time_write; 431 __int64 DECLSPEC_ALIGN(8) size; 432 char name[260]; 433 }; 434 435 struct MSVCRT__finddata64i32_t { 436 unsigned int attrib; 437 MSVCRT___time64_t time_create; 438 MSVCRT___time64_t time_access; 439 MSVCRT___time64_t time_write; 440 MSVCRT__fsize_t size; 441 char name[260]; 442 }; 443 444 struct MSVCRT__finddata64_t { 445 unsigned int attrib; 446 MSVCRT___time64_t time_create; 447 MSVCRT___time64_t time_access; 448 MSVCRT___time64_t time_write; 449 __int64 DECLSPEC_ALIGN(8) size; 450 char name[260]; 451 }; 452 453 struct MSVCRT__wfinddata32_t { 454 unsigned int attrib; 455 MSVCRT___time32_t time_create; 456 MSVCRT___time32_t time_access; 457 MSVCRT___time32_t time_write; 458 MSVCRT__fsize_t size; 459 MSVCRT_wchar_t name[260]; 460 }; 461 462 struct MSVCRT__wfinddata32i64_t { 463 unsigned int attrib; 464 MSVCRT___time32_t time_create; 465 MSVCRT___time32_t time_access; 466 MSVCRT___time32_t time_write; 467 __int64 DECLSPEC_ALIGN(8) size; 468 MSVCRT_wchar_t name[260]; 469 }; 470 471 struct MSVCRT__wfinddata64i32_t { 472 unsigned int attrib; 473 MSVCRT___time64_t time_create; 474 MSVCRT___time64_t time_access; 475 MSVCRT___time64_t time_write; 476 MSVCRT__fsize_t size; 477 MSVCRT_wchar_t name[260]; 478 }; 479 480 struct MSVCRT__wfinddata64_t { 481 unsigned int attrib; 482 MSVCRT___time64_t time_create; 483 MSVCRT___time64_t time_access; 484 MSVCRT___time64_t time_write; 485 __int64 DECLSPEC_ALIGN(8) size; 486 MSVCRT_wchar_t name[260]; 487 }; 488 489 struct MSVCRT___utimbuf32 490 { 491 MSVCRT___time32_t actime; 492 MSVCRT___time32_t modtime; 493 }; 494 495 struct MSVCRT___utimbuf64 496 { 497 MSVCRT___time64_t actime; 498 MSVCRT___time64_t modtime; 499 }; 500 501 /* for FreeBSD */ 502 #undef st_atime 503 #undef st_ctime 504 #undef st_mtime 505 506 struct MSVCRT__stat32 { 507 MSVCRT__dev_t st_dev; 508 MSVCRT__ino_t st_ino; 509 unsigned short st_mode; 510 short st_nlink; 511 short st_uid; 512 short st_gid; 513 MSVCRT__dev_t st_rdev; 514 MSVCRT__off_t st_size; 515 MSVCRT___time32_t st_atime; 516 MSVCRT___time32_t st_mtime; 517 MSVCRT___time32_t st_ctime; 518 }; 519 520 struct MSVCRT__stat32i64 { 521 MSVCRT__dev_t st_dev; 522 MSVCRT__ino_t st_ino; 523 unsigned short st_mode; 524 short st_nlink; 525 short st_uid; 526 short st_gid; 527 MSVCRT__dev_t st_rdev; 528 __int64 DECLSPEC_ALIGN(8) st_size; 529 MSVCRT___time32_t st_atime; 530 MSVCRT___time32_t st_mtime; 531 MSVCRT___time32_t st_ctime; 532 }; 533 534 struct MSVCRT__stat64i32 { 535 MSVCRT__dev_t st_dev; 536 MSVCRT__ino_t st_ino; 537 unsigned short st_mode; 538 short st_nlink; 539 short st_uid; 540 short st_gid; 541 MSVCRT__dev_t st_rdev; 542 MSVCRT__off_t st_size; 543 MSVCRT___time64_t st_atime; 544 MSVCRT___time64_t st_mtime; 545 MSVCRT___time64_t st_ctime; 546 }; 547 548 struct MSVCRT__stat64 { 549 MSVCRT__dev_t st_dev; 550 MSVCRT__ino_t st_ino; 551 unsigned short st_mode; 552 short st_nlink; 553 short st_uid; 554 short st_gid; 555 MSVCRT__dev_t st_rdev; 556 __int64 DECLSPEC_ALIGN(8) st_size; 557 MSVCRT___time64_t st_atime; 558 MSVCRT___time64_t st_mtime; 559 MSVCRT___time64_t st_ctime; 560 }; 561 562 #ifdef _WIN64 563 #define MSVCRT__finddata_t MSVCRT__finddata64i32_t 564 #define MSVCRT__finddatai64_t MSVCRT__finddata64_t 565 #define MSVCRT__wfinddata_t MSVCRT__wfinddata64i32_t 566 #define MSVCRT__wfinddatai64_t MSVCRT__wfinddata64_t 567 #define MSVCRT__stat MSVCRT__stat64i32 568 #define MSVCRT__stati64 MSVCRT__stat64 569 #else 570 #define MSVCRT__finddata_t MSVCRT__finddata32_t 571 #define MSVCRT__finddatai64_t MSVCRT__finddata32i64_t 572 #define MSVCRT__wfinddata_t MSVCRT__wfinddata32_t 573 #define MSVCRT__wfinddatai64_t MSVCRT__wfinddata32i64_t 574 #define MSVCRT__stat MSVCRT__stat32 575 #define MSVCRT__stati64 MSVCRT__stat32i64 576 #endif 577 578 #define MSVCRT_WEOF (MSVCRT_wint_t)(0xFFFF) 579 #define MSVCRT_EOF (-1) 580 #define MSVCRT_TMP_MAX 0x7fff 581 #define MSVCRT_RAND_MAX 0x7fff 582 #define MSVCRT_BUFSIZ 512 583 584 #define MSVCRT_STDIN_FILENO 0 585 #define MSVCRT_STDOUT_FILENO 1 586 #define MSVCRT_STDERR_FILENO 2 587 588 /* more file._flag flags, but these conflict with Unix */ 589 #define MSVCRT__IOFBF 0x0000 590 #define MSVCRT__IONBF 0x0004 591 #define MSVCRT__IOLBF 0x0040 592 593 #define MSVCRT_FILENAME_MAX 260 594 #define MSVCRT_DRIVE_MAX 3 595 #define MSVCRT_FNAME_MAX 256 596 #define MSVCRT_DIR_MAX 256 597 #define MSVCRT_EXT_MAX 256 598 #define MSVCRT_PATH_MAX 260 599 #define MSVCRT_stdin (MSVCRT__iob+MSVCRT_STDIN_FILENO) 600 #define MSVCRT_stdout (MSVCRT__iob+MSVCRT_STDOUT_FILENO) 601 #define MSVCRT_stderr (MSVCRT__iob+MSVCRT_STDERR_FILENO) 602 603 #define MSVCRT__P_WAIT 0 604 #define MSVCRT__P_NOWAIT 1 605 #define MSVCRT__P_OVERLAY 2 606 #define MSVCRT__P_NOWAITO 3 607 #define MSVCRT__P_DETACH 4 608 609 #define MSVCRT_EPERM 1 610 #define MSVCRT_ENOENT 2 611 #define MSVCRT_ESRCH 3 612 #define MSVCRT_EINTR 4 613 #define MSVCRT_EIO 5 614 #define MSVCRT_ENXIO 6 615 #define MSVCRT_E2BIG 7 616 #define MSVCRT_ENOEXEC 8 617 #define MSVCRT_EBADF 9 618 #define MSVCRT_ECHILD 10 619 #define MSVCRT_EAGAIN 11 620 #define MSVCRT_ENOMEM 12 621 #define MSVCRT_EACCES 13 622 #define MSVCRT_EFAULT 14 623 #define MSVCRT_EBUSY 16 624 #define MSVCRT_EEXIST 17 625 #define MSVCRT_EXDEV 18 626 #define MSVCRT_ENODEV 19 627 #define MSVCRT_ENOTDIR 20 628 #define MSVCRT_EISDIR 21 629 #define MSVCRT_EINVAL 22 630 #define MSVCRT_ENFILE 23 631 #define MSVCRT_EMFILE 24 632 #define MSVCRT_ENOTTY 25 633 #define MSVCRT_EFBIG 27 634 #define MSVCRT_ENOSPC 28 635 #define MSVCRT_ESPIPE 29 636 #define MSVCRT_EROFS 30 637 #define MSVCRT_EMLINK 31 638 #define MSVCRT_EPIPE 32 639 #define MSVCRT_EDOM 33 640 #define MSVCRT_ERANGE 34 641 #define MSVCRT_EDEADLK 36 642 #define MSVCRT_EDEADLOCK MSVCRT_EDEADLK 643 #define MSVCRT_ENAMETOOLONG 38 644 #define MSVCRT_ENOLCK 39 645 #define MSVCRT_ENOSYS 40 646 #define MSVCRT_ENOTEMPTY 41 647 #define MSVCRT_EILSEQ 42 648 #define MSVCRT_STRUNCATE 80 649 650 #define MSVCRT_LC_ALL 0 651 #define MSVCRT_LC_COLLATE 1 652 #define MSVCRT_LC_CTYPE 2 653 #define MSVCRT_LC_MONETARY 3 654 #define MSVCRT_LC_NUMERIC 4 655 #define MSVCRT_LC_TIME 5 656 #define MSVCRT_LC_MIN MSVCRT_LC_ALL 657 #define MSVCRT_LC_MAX MSVCRT_LC_TIME 658 659 #define MSVCRT__HEAPEMPTY -1 660 #define MSVCRT__HEAPOK -2 661 #define MSVCRT__HEAPBADBEGIN -3 662 #define MSVCRT__HEAPBADNODE -4 663 #define MSVCRT__HEAPEND -5 664 #define MSVCRT__HEAPBADPTR -6 665 666 #define MSVCRT__FREEENTRY 0 667 #define MSVCRT__USEDENTRY 1 668 669 #define MSVCRT__OUT_TO_DEFAULT 0 670 #define MSVCRT__OUT_TO_STDERR 1 671 #define MSVCRT__OUT_TO_MSGBOX 2 672 #define MSVCRT__REPORT_ERRMODE 3 673 674 /* ASCII char classification table - binary compatible */ 675 #define MSVCRT__UPPER 0x0001 /* C1_UPPER */ 676 #define MSVCRT__LOWER 0x0002 /* C1_LOWER */ 677 #define MSVCRT__DIGIT 0x0004 /* C1_DIGIT */ 678 #define MSVCRT__SPACE 0x0008 /* C1_SPACE */ 679 #define MSVCRT__PUNCT 0x0010 /* C1_PUNCT */ 680 #define MSVCRT__CONTROL 0x0020 /* C1_CNTRL */ 681 #define MSVCRT__BLANK 0x0040 /* C1_BLANK */ 682 #define MSVCRT__HEX 0x0080 /* C1_XDIGIT */ 683 #define MSVCRT__LEADBYTE 0x8000 684 #define MSVCRT__ALPHA (0x0100|MSVCRT__UPPER|MSVCRT__LOWER) /* (C1_ALPHA|_UPPER|_LOWER) */ 685 686 #define MSVCRT__IOREAD 0x0001 687 #define MSVCRT__IOWRT 0x0002 688 #define MSVCRT__IOMYBUF 0x0008 689 #define MSVCRT__IOEOF 0x0010 690 #define MSVCRT__IOERR 0x0020 691 #define MSVCRT__IOSTRG 0x0040 692 #define MSVCRT__IORW 0x0080 693 694 #define MSVCRT__S_IEXEC 0x0040 695 #define MSVCRT__S_IWRITE 0x0080 696 #define MSVCRT__S_IREAD 0x0100 697 #define MSVCRT__S_IFIFO 0x1000 698 #define MSVCRT__S_IFCHR 0x2000 699 #define MSVCRT__S_IFDIR 0x4000 700 #define MSVCRT__S_IFREG 0x8000 701 #define MSVCRT__S_IFMT 0xF000 702 703 #define MSVCRT__LK_UNLCK 0 704 #define MSVCRT__LK_LOCK 1 705 #define MSVCRT__LK_NBLCK 2 706 #define MSVCRT__LK_RLCK 3 707 #define MSVCRT__LK_NBRLCK 4 708 709 #define MSVCRT__SH_COMPAT 0x00 /* Compatibility */ 710 #define MSVCRT__SH_DENYRW 0x10 /* Deny read/write */ 711 #define MSVCRT__SH_DENYWR 0x20 /* Deny write */ 712 #define MSVCRT__SH_DENYRD 0x30 /* Deny read */ 713 #define MSVCRT__SH_DENYNO 0x40 /* Deny nothing */ 714 715 #define MSVCRT__O_RDONLY 0 716 #define MSVCRT__O_WRONLY 1 717 #define MSVCRT__O_RDWR 2 718 #define MSVCRT__O_ACCMODE (MSVCRT__O_RDONLY|MSVCRT__O_WRONLY|MSVCRT__O_RDWR) 719 #define MSVCRT__O_APPEND 0x0008 720 #define MSVCRT__O_RANDOM 0x0010 721 #define MSVCRT__O_SEQUENTIAL 0x0020 722 #define MSVCRT__O_TEMPORARY 0x0040 723 #define MSVCRT__O_NOINHERIT 0x0080 724 #define MSVCRT__O_CREAT 0x0100 725 #define MSVCRT__O_TRUNC 0x0200 726 #define MSVCRT__O_EXCL 0x0400 727 #define MSVCRT__O_SHORT_LIVED 0x1000 728 #define MSVCRT__O_TEXT 0x4000 729 #define MSVCRT__O_BINARY 0x8000 730 #define MSVCRT__O_RAW MSVCRT__O_BINARY 731 732 /* _statusfp bit flags */ 733 #define MSVCRT__SW_INEXACT 0x00000001 /* inexact (precision) */ 734 #define MSVCRT__SW_UNDERFLOW 0x00000002 /* underflow */ 735 #define MSVCRT__SW_OVERFLOW 0x00000004 /* overflow */ 736 #define MSVCRT__SW_ZERODIVIDE 0x00000008 /* zero divide */ 737 #define MSVCRT__SW_INVALID 0x00000010 /* invalid */ 738 739 #define MSVCRT__SW_UNEMULATED 0x00000040 /* unemulated instruction */ 740 #define MSVCRT__SW_SQRTNEG 0x00000080 /* square root of a neg number */ 741 #define MSVCRT__SW_STACKOVERFLOW 0x00000200 /* FP stack overflow */ 742 #define MSVCRT__SW_STACKUNDERFLOW 0x00000400 /* FP stack underflow */ 743 744 #define MSVCRT__SW_DENORMAL 0x00080000 /* denormal status bit */ 745 746 /* fpclass constants */ 747 #define MSVCRT__FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */ 748 #define MSVCRT__FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */ 749 #define MSVCRT__FPCLASS_NINF 0x0004 /* Negative Infinity */ 750 #define MSVCRT__FPCLASS_NN 0x0008 /* Negative Normal */ 751 #define MSVCRT__FPCLASS_ND 0x0010 /* Negative Denormal */ 752 #define MSVCRT__FPCLASS_NZ 0x0020 /* Negative Zero */ 753 #define MSVCRT__FPCLASS_PZ 0x0040 /* Positive Zero */ 754 #define MSVCRT__FPCLASS_PD 0x0080 /* Positive Denormal */ 755 #define MSVCRT__FPCLASS_PN 0x0100 /* Positive Normal */ 756 #define MSVCRT__FPCLASS_PINF 0x0200 /* Positive Infinity */ 757 758 #define MSVCRT__MCW_EM 0x0008001f 759 #define MSVCRT__MCW_IC 0x00040000 760 #define MSVCRT__MCW_RC 0x00000300 761 #define MSVCRT__MCW_PC 0x00030000 762 #define MSVCRT__MCW_DN 0x03000000 763 764 #define MSVCRT__EM_INVALID 0x00000010 765 #define MSVCRT__EM_DENORMAL 0x00080000 766 #define MSVCRT__EM_ZERODIVIDE 0x00000008 767 #define MSVCRT__EM_OVERFLOW 0x00000004 768 #define MSVCRT__EM_UNDERFLOW 0x00000002 769 #define MSVCRT__EM_INEXACT 0x00000001 770 #define MSVCRT__IC_AFFINE 0x00040000 771 #define MSVCRT__IC_PROJECTIVE 0x00000000 772 #define MSVCRT__RC_CHOP 0x00000300 773 #define MSVCRT__RC_UP 0x00000200 774 #define MSVCRT__RC_DOWN 0x00000100 775 #define MSVCRT__RC_NEAR 0x00000000 776 #define MSVCRT__PC_24 0x00020000 777 #define MSVCRT__PC_53 0x00010000 778 #define MSVCRT__PC_64 0x00000000 779 #define MSVCRT__DN_SAVE 0x00000000 780 #define MSVCRT__DN_FLUSH 0x01000000 781 #define MSVCRT__DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000 782 #define MSVCRT__DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000 783 #define MSVCRT__EM_AMBIGUOUS 0x80000000 784 785 #define MSVCRT_CLOCKS_PER_SEC 1000 786 787 /* signals */ 788 #define MSVCRT_SIGINT 2 789 #define MSVCRT_SIGILL 4 790 #define MSVCRT_SIGFPE 8 791 #define MSVCRT_SIGSEGV 11 792 #define MSVCRT_SIGTERM 15 793 #define MSVCRT_SIGBREAK 21 794 #define MSVCRT_SIGABRT 22 795 #define MSVCRT_NSIG (MSVCRT_SIGABRT + 1) 796 797 typedef void (__cdecl *MSVCRT___sighandler_t)(int); 798 799 #define MSVCRT_SIG_DFL ((MSVCRT___sighandler_t)0) 800 #define MSVCRT_SIG_IGN ((MSVCRT___sighandler_t)1) 801 #define MSVCRT_SIG_ERR ((MSVCRT___sighandler_t)-1) 802 803 #define MSVCRT__FPE_INVALID 0x81 804 #define MSVCRT__FPE_DENORMAL 0x82 805 #define MSVCRT__FPE_ZERODIVIDE 0x83 806 #define MSVCRT__FPE_OVERFLOW 0x84 807 #define MSVCRT__FPE_UNDERFLOW 0x85 808 #define MSVCRT__FPE_INEXACT 0x86 809 #define MSVCRT__FPE_UNEMULATED 0x87 810 #define MSVCRT__FPE_SQRTNEG 0x88 811 #define MSVCRT__FPE_STACKOVERFLOW 0x8a 812 #define MSVCRT__FPE_STACKUNDERFLOW 0x8b 813 #define MSVCRT__FPE_EXPLICITGEN 0x8c 814 815 #define _MS 0x01 816 #define _MP 0x02 817 #define _M1 0x04 818 #define _M2 0x08 819 820 #define _SBUP 0x10 821 #define _SBLOW 0x20 822 823 #define _MBC_SINGLE 0 824 #define _MBC_LEAD 1 825 #define _MBC_TRAIL 2 826 #define _MBC_ILLEGAL -1 827 828 #define _MB_CP_SBCS 0 829 #define _MB_CP_OEM -2 830 #define _MB_CP_ANSI -3 831 #define _MB_CP_LOCALE -4 832 833 #define MSVCRT__TRUNCATE ((MSVCRT_size_t)-1) 834 835 #define _MAX__TIME64_T (((MSVCRT___time64_t)0x00000007 << 32) | 0x93406FFF) 836 837 /* _set_abort_behavior codes */ 838 #define MSVCRT__WRITE_ABORT_MSG 1 839 #define MSVCRT__CALL_REPORTFAULT 2 840 841 /* _get_output_format return code */ 842 #define MSVCRT__TWO_DIGIT_EXPONENT 0x1 843 844 void __cdecl MSVCRT_free(void*); 845 void* __cdecl MSVCRT_malloc(MSVCRT_size_t); 846 void* __cdecl MSVCRT_calloc(MSVCRT_size_t,MSVCRT_size_t); 847 void* __cdecl MSVCRT_realloc(void*,MSVCRT_size_t); 848 849 int __cdecl MSVCRT_iswalpha(MSVCRT_wint_t); 850 int __cdecl MSVCRT_iswspace(MSVCRT_wint_t); 851 int __cdecl MSVCRT_iswdigit(MSVCRT_wint_t); 852 int __cdecl MSVCRT_isleadbyte(int); 853 int __cdecl MSVCRT__isleadbyte_l(int, MSVCRT__locale_t); 854 855 void __cdecl MSVCRT__lock_file(MSVCRT_FILE*); 856 void __cdecl MSVCRT__unlock_file(MSVCRT_FILE*); 857 int __cdecl MSVCRT_fgetc(MSVCRT_FILE*); 858 int __cdecl MSVCRT_ungetc(int,MSVCRT_FILE*); 859 MSVCRT_wint_t __cdecl MSVCRT_fgetwc(MSVCRT_FILE*); 860 MSVCRT_wint_t __cdecl MSVCRT_ungetwc(MSVCRT_wint_t,MSVCRT_FILE*); 861 void __cdecl MSVCRT__exit(int); 862 void __cdecl MSVCRT_abort(void); 863 MSVCRT_ulong* __cdecl MSVCRT___doserrno(void); 864 int* __cdecl MSVCRT__errno(void); 865 char* __cdecl MSVCRT_getenv(const char*); 866 int __cdecl MSVCRT_fclose(MSVCRT_FILE*); 867 void __cdecl MSVCRT_terminate(void); 868 MSVCRT_FILE* __cdecl MSVCRT__iob_func(void); 869 MSVCRT_clock_t __cdecl MSVCRT_clock(void); 870 MSVCRT___time32_t __cdecl MSVCRT__time32(MSVCRT___time32_t*); 871 MSVCRT___time64_t __cdecl MSVCRT__time64(MSVCRT___time64_t*); 872 MSVCRT_FILE* __cdecl MSVCRT__fdopen(int, const char *); 873 MSVCRT_FILE* __cdecl MSVCRT__wfdopen(int, const MSVCRT_wchar_t *); 874 int __cdecl MSVCRT_vsnprintf(char *str, MSVCRT_size_t len, const char *format, __ms_va_list valist); 875 int __cdecl MSVCRT_vsnwprintf(MSVCRT_wchar_t *str, MSVCRT_size_t len, 876 const MSVCRT_wchar_t *format, __ms_va_list valist ); 877 int __cdecl MSVCRT__snwprintf(MSVCRT_wchar_t*, unsigned int, const MSVCRT_wchar_t*, ...); 878 int __cdecl MSVCRT_sprintf(char*,const char*,...); 879 int __cdecl MSVCRT__scprintf(const char*,...); 880 int __cdecl MSVCRT_raise(int sig); 881 882 #define MSVCRT__ENABLE_PER_THREAD_LOCALE 1 883 #define MSVCRT__DISABLE_PER_THREAD_LOCALE 2 884 885 extern MSVCRT__locale_t MSVCRT_locale; 886 MSVCRT_pthreadlocinfo get_locinfo(void); 887 MSVCRT_pthreadmbcinfo get_mbcinfo(void); 888 void __cdecl MSVCRT__free_locale(MSVCRT__locale_t); 889 void free_locinfo(MSVCRT_pthreadlocinfo); 890 void free_mbcinfo(MSVCRT_pthreadmbcinfo); 891 int _setmbcp_l(int, LCID, MSVCRT_pthreadmbcinfo); 892 893 #ifndef __WINE_MSVCRT_TEST 894 int __cdecl MSVCRT__write(int,const void*,unsigned int); 895 int __cdecl _getch(void); 896 int __cdecl _ismbblead(unsigned int); 897 int __cdecl _ismbstrail(const unsigned char* start, const unsigned char* str); 898 MSVCRT_size_t __cdecl MSVCRT_mbstowcs(MSVCRT_wchar_t*,const char*,MSVCRT_size_t); 899 MSVCRT_intptr_t __cdecl MSVCRT__spawnve(int,const char*,const char* const *,const char* const *); 900 MSVCRT_intptr_t __cdecl MSVRT__spawnvpe(int,const char*,const char* const *,const char* const *); 901 MSVCRT_intptr_t __cdecl MSVCRT__wspawnve(int,const MSVCRT_wchar_t*,const MSVCRT_wchar_t* const *,const MSVCRT_wchar_t* const *); 902 MSVCRT_intptr_t __cdecl MSVCRT__wspawnvpe(int,const MSVCRT_wchar_t*,const MSVCRT_wchar_t* const *,const MSVCRT_wchar_t* const *); 903 void __cdecl MSVCRT__searchenv(const char*,const char*,char*); 904 int __cdecl MSVCRT__getdrive(void); 905 char* __cdecl MSVCRT__strdup(const char*); 906 char* __cdecl MSVCRT__strnset(char*,int,MSVCRT_size_t); 907 char* __cdecl _strset(char*,int); 908 int __cdecl _ungetch(int); 909 int __cdecl _cputs(const char*); 910 int __cdecl _cprintf(const char*,...); 911 int __cdecl _cwprintf(const MSVCRT_wchar_t*,...); 912 char*** __cdecl MSVCRT___p__environ(void); 913 int* __cdecl __p___mb_cur_max(void); 914 unsigned int* __cdecl __p__fmode(void); 915 MSVCRT_wchar_t* __cdecl MSVCRT__wcsdup(const MSVCRT_wchar_t*); 916 MSVCRT_wchar_t*** __cdecl MSVCRT___p__wenviron(void); 917 char* __cdecl MSVCRT__strdate(char* date); 918 char* __cdecl MSVCRT__strtime(char* date); 919 int __cdecl _setmbcp(int); 920 int __cdecl MSVCRT__close(int); 921 int __cdecl MSVCRT__dup(int); 922 int __cdecl MSVCRT__dup2(int, int); 923 int __cdecl MSVCRT__pipe(int *, unsigned int, int); 924 MSVCRT_wchar_t* __cdecl MSVCRT__wgetenv(const MSVCRT_wchar_t*); 925 void __cdecl MSVCRT__wsearchenv(const MSVCRT_wchar_t*, const MSVCRT_wchar_t*, MSVCRT_wchar_t*); 926 MSVCRT_intptr_t __cdecl MSVCRT__spawnvpe(int, const char*, const char* const*, const char* const*); 927 void __cdecl MSVCRT__invalid_parameter(const MSVCRT_wchar_t *expr, const MSVCRT_wchar_t *func, 928 const MSVCRT_wchar_t *file, unsigned int line, MSVCRT_uintptr_t arg); 929 int __cdecl MSVCRT__toupper_l(int,MSVCRT__locale_t); 930 int __cdecl MSVCRT__tolower_l(int,MSVCRT__locale_t); 931 932 /* Maybe one day we'll enable the invalid parameter handlers with the full set of information (msvcrXXd) 933 * #define MSVCRT_INVALID_PMT(x) MSVCRT_call_invalid_parameter_handler(x, __FUNCTION__, __FILE__, __LINE__, 0) 934 * #define MSVCRT_CHECK_PMT(x) ((x) ? TRUE : MSVCRT_INVALID_PMT(#x),FALSE) 935 * Until this is done, just keep the same semantics for CHECK_PMT(), but without generating / sending 936 * any information 937 * NB : MSVCRT_call_invalid_parameter_handler is a wrapper around MSVCRT__invalid_parameter in order 938 * to do the Ansi to Unicode transformation 939 */ 940 #define MSVCRT_INVALID_PMT(x) MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0) 941 #define MSVCRT_CHECK_PMT(x) ((x) || (MSVCRT_INVALID_PMT(0),FALSE)) 942 #endif 943 944 #define MSVCRT__ARGMAX 100 945 typedef int (*puts_clbk_a)(void*, int, const char*); 946 typedef int (*puts_clbk_w)(void*, int, const MSVCRT_wchar_t*); 947 typedef union _printf_arg 948 { 949 void *get_ptr; 950 int get_int; 951 LONGLONG get_longlong; 952 double get_double; 953 } printf_arg; 954 typedef printf_arg (*args_clbk)(void*, int, int, __ms_va_list*); 955 int pf_printf_a(puts_clbk_a, void*, const char*, MSVCRT__locale_t, 956 BOOL, BOOL, args_clbk, void*, __ms_va_list*); 957 int pf_printf_w(puts_clbk_w, void*, const MSVCRT_wchar_t*, MSVCRT__locale_t, 958 BOOL, BOOL, args_clbk, void*, __ms_va_list*); 959 printf_arg arg_clbk_valist(void*, int, int, __ms_va_list*); 960 961 #define MSVCRT__OVERFLOW 3 962 #define MSVCRT__UNDERFLOW 4 963 964 typedef struct 965 { 966 float f; 967 } MSVCRT__CRT_FLOAT; 968 969 #endif /* __WINE_MSVCRT_H */ 970