32#include <sys/locking.h>
71#define ALL_S_IREAD (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6))
72#define ALL_S_IWRITE (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
73#define ALL_S_IEXEC (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6))
76#define MSVCRT_W_OK 0x02
77#define MSVCRT_R_OK 0x04
84#define WX_DONTINHERIT 0x10
92#define MSVCRT_INTERNAL_BUFSIZ 4096
103#define MSVCRT_MAX_FILES 8192
104#define MSVCRT_FD_BLOCK_SIZE 64
110 unsigned char wxflag;
113 unsigned int unicode : 1;
114 unsigned int utf8translations : 1;
115 unsigned int dbcsBufferUsed : 1;
125#define MSVCRT_MAX_FILES 2048
126#define MSVCRT_FD_BLOCK_SIZE 32
139 BOOL utf8translations;
171 return info->exflag & 1;
182 return info->textmode;
192 info->unicode = !!unicode;
198#define EF_CRIT_INIT 0x04
199#define EF_UNK_UNICODE 0x08
241 info->exflag &= ~EF_UNK_UNICODE;
288#define TOUL(x) (ULONGLONG)(x)
303 0, 0, { (
DWORD_PTR)(__FILE__
": MSVCRT_file_cs") }
306#define LOCK_FILES() do { EnterCriticalSection(&MSVCRT_file_cs); } while (0)
307#define UNLOCK_FILES() do { LeaveCriticalSection(&MSVCRT_file_cs); } while (0)
387 static const __int64 secs_1601_to_1970 = ((369 * 365 + 89) * (
__int64)86400);
389 __int64 ticks = (
time + secs_1601_to_1970) * 10000000;
441 WARN(
":out of memory!\n");
509 WARN(
":files exhausted!\n");
534 ERR(
"out of memory\n");
603 TRACE(
":handle (%p) allocating fd (%d)\n", hand,
fd);
629 if (
file->_flag == 0)
637 cs->DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": file_crit.crit");
651 TRACE(
":fd (%d) allocating FILE*\n",
fd);
654 WARN(
":invalid fd %d\n",
fd);
662 file->_flag = stream_flags;
694 wxflag_ptr = (
char*)*
block +
sizeof(
unsigned);
695 handle_ptr = (
HANDLE*)(wxflag_ptr + last_fd);
697 *(
unsigned*)*
block = last_fd;
698 for (
fd = 0;
fd < last_fd;
fd++)
704 *wxflag_ptr = fdinfo->
wxflag;
705 *handle_ptr = fdinfo->
handle;
712 wxflag_ptr++; handle_ptr++;
749 wxflag_ptr++; handle_ptr++;
814 for (
i = 0;
i < 3;
i++)
828 cs->DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": file_crit.crit");
846 file->_flag &= ~_IOWRT;
883 file->_base = (
char*)(&
file->_charbuf);
915 file->_flag &= ~MSVCRT__USERBUF;
934 *
p = (
num & 31) +
'0';
936 *
p += (
'a' -
'0' - 10);
959 *
p = (
num & 31) +
'0';
961 *
p += (
'a' -
'0' - 10);
1054 wchar_t *pathW =
NULL;
1087 wchar_t *pathW =
NULL;
1117 TRACE(
":fd (%d) handle (%p)\n",
fd,
info->handle);
1150 int i, num_flushed = 0;
1167 TRACE(
":flushed (%d) handles\n",num_flushed);
1224 TRACE(
":fd (%d) handle (%p)\n",
fd,
info->handle);
1260 ioinfo *info_od, *info_nd;
1263 TRACE(
"(od=%d, nd=%d)\n", od, nd);
1288 int wxflag = info_od->
wxflag & ~WX_DONTINHERIT;
1336 DWORD curpos,endpos;
1337 LONG hcurpos,hendpos;
1339 TRACE(
":fd (%d) handle (%p)\n",
fd,
info->handle);
1354 hcurpos = hendpos = 0;
1358 if (curpos == endpos && hcurpos == hendpos)
1375 int num_closed = 0,
i;
1387 TRACE(
":closed (%d) handles\n",num_closed);
1420 cs->DebugInfo->Spare[0] = 0;
1437 TRACE(
":fd (%d) handle (%p)\n",
fd,
info->handle);
1446 if (whence < 0 || whence > 2)
1453 TRACE(
":fd (%d) to %#I64x pos %s\n",
1455 (whence ==
SEEK_CUR) ?
"SEEK_CUR" :
1456 (whence ==
SEEK_END) ?
"SEEK_END" :
"UNKNOWN");
1464 info->wxflag &= ~WX_ATEOF;
1519 TRACE(
":fd (%d) handle (%p)\n",
fd,
info->handle);
1526 if (mode < 0 || mode > 4)
1533 TRACE(
":fd (%d) by %#lx mode %s\n",
1544 FIXME(
"Seek failed\n");
1565 return ret ? 0 : -1;
1601 file->_flag &= ~_IOEOF;
1696#if defined(__i386__)
1702 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
1705 __ASM_CFI(
".cfi_adjust_cfa_offset -4\n\t")
1756 *open_flags &= ~_O_TEXT;
1760 *open_flags &= ~_O_BINARY;
1779 *stream_flags &= ~MSVCRT__IOCOMMIT;
1798 ERR(
"incorrect mode flag: %c\n",
mode[-1]);
1850 wchar_t *modeW =
NULL;
1865 int open_flags, stream_flags;
1895 if (endPos != curPos)
1914 if (endPos != curPos)
1949 WARN(
":failed-NULL buf\n");
1986 buf->st_mode |= 0222;
1991 buf->st_mtime =
buf->st_ctime =
dw;
1993 TRACE(
":dwFileAttributes = %#lx, mode set to %#x\n",
2120 TRACE(
":fd (%d) handle (%p)\n",
fd,hand);
2147 for(xno=1; xno<=6; xno++)
2152 for(xno=1; xno<6; xno++) {
2159 for(pathW[wlen-6]=
'a'; pathW[wlen-6]<=
'z'; pathW[wlen-6]++) {
2188 numX = (*
pattern++ ==
'X')? numX + 1 : 0;
2196 int tempNum =
id / 10;
2197 *
pattern-- =
id - (tempNum * 10) +
'0';
2203 p = pathW +
wcslen(pathW) - 6;
2213 }
while(letter <=
'z');
2237 for(xno=1; xno<=6; xno++)
2242 for(xno=1; xno<6; xno++) {
2265 wchar_t letter =
'a';
2271 numX = (*
pattern++ ==
'X')? numX + 1 : 0;
2279 int tempNum =
id / 10;
2280 *
pattern-- =
id - (tempNum * 10) +
'0';
2289 }
while(letter !=
'|');
2315 ERR(
":unsupported oflags %#x\n",unsupp);
2327 HANDLE readHandle, writeHandle;
2337 sa.lpSecurityDescriptor =
NULL;
2406 TRACE(
"path: (%s) oflags: %#x shflags: %#x pmode: %#x fd*: %p secure: %d\n",
2456 ERR(
"Unhandled shflags %#x\n", shflags );
2480 sa.lpSecurityDescriptor =
NULL;
2516 DWORD written = 0, tmp;
2522 WARN(
"error writing BOM\n");
2530 DWORD written = 0, tmp;
2537 WARN(
"error writing BOM\n");
2567 TRACE(
":fd (%d) handle (%p)\n", *
fd, hand);
2609 wchar_t *pathW =
NULL;
2750 int num_removed = 0,
i;
2757 if (
file->_tmpfname)
2766 TRACE(
":removed (%d) temp files\n",num_removed);
2772 if((
ch&0xf8) == 0xf0)
2774 else if((
ch&0xf0) == 0xe0)
2776 else if((
ch&0xe0) == 0xc0)
2787 char min_buf[4], *readbuf, lookahead;
2788 DWORD readbuf_size,
pos=0, num_read=1, char_len,
i,
j;
2794 if(readbuf_size<=4 || !(readbuf =
malloc(readbuf_size))) {
2828 }
else if(!num_read) {
2841 if(readbuf[0] ==
'\n')
2844 fdinfo->
wxflag &= ~WX_READNL;
2846 if(readbuf[0] == 0x1a) {
2851 if(readbuf[0] ==
'\r') {
2852 if(!
ReadFile(hand, &lookahead, 1, &num_read,
NULL) || num_read!=1)
2854 else if(lookahead ==
'\n')
2879 if (readbuf != min_buf)
free(readbuf);
2885 if (readbuf != min_buf)
free(readbuf);
2888 }
else if(!
pos && !num_read) {
2890 if (readbuf != min_buf)
free(readbuf);
2895 if(readbuf[0] ==
'\n')
2898 fdinfo->
wxflag &= ~WX_READNL;
2902 if((readbuf[
i]&0xc0) != 0x80)
2905 if(char_len+
i <=
pos)
2921 if(readbuf[
i] == 0x1a) {
2927 if(readbuf[
i] ==
'\r' &&
i+1==
pos) {
2929 readbuf[
j++] =
'\r';
2930 }
else if(lookahead ==
'\n' &&
j==0) {
2931 readbuf[
j++] =
'\n';
2933 if(lookahead !=
'\n')
2934 readbuf[
j++] =
'\r';
2941 }
else if(readbuf[
i]!=
'\r' || readbuf[
i+1]!=
'\n') {
2942 readbuf[
j++] = readbuf[
i];
2949 if (readbuf != min_buf)
free(readbuf);
2953 if (readbuf != min_buf)
free(readbuf);
2966 DWORD num_read, utf16;
2967 char *bufstart =
buf;
2973 TRACE(
"already at EOF, returning 0\n");
3009 num_read += 1+utf16;
3014 if(utf16 && (num_read&1))
3018 ERR(
"got odd number of bytes in UTF16 mode\n");
3022 if (
count != 0 && num_read == 0)
3031 if (bufstart[0]==
'\n' && (!utf16 || bufstart[1]==0))
3034 fdinfo->
wxflag &= ~WX_READNL;
3036 for (
i=0,
j=0;
i<num_read;
i+=1+utf16)
3039 if (bufstart[
i]==0x1a && (!utf16 || bufstart[
i+1]==0))
3047 if (bufstart[
i]==
'\r' && (!utf16 || bufstart[
i+1]==0) &&
i+1+utf16==num_read)
3052 lookahead[1] =
'\n';
3055 if(lookahead[0]==
'\n' && (!utf16 || lookahead[1]==0) &&
j==0)
3057 bufstart[
j++] =
'\n';
3058 if(utf16) bufstart[
j++] = 0;
3062 if(lookahead[0]!=
'\n' || (utf16 && lookahead[1]!=0))
3064 bufstart[
j++] =
'\r';
3065 if(utf16) bufstart[
j++] = 0;
3070 if (lookahead[0]==
'\n' && (!utf16 || !lookahead[1]))
3072 bufstart[
j++] =
'\n';
3073 if (utf16) bufstart[
j++] = 0;
3087 bufstart[
j++] =
'\r';
3088 if(utf16) bufstart[
j++] = 0;
3091 else if((bufstart[
i]!=
'\r' || (utf16 && bufstart[
i+1]!=0))
3092 || (bufstart[
i+1+utf16]!=
'\n' || (utf16 && bufstart[
i+3]!=0)))
3094 bufstart[
j++] = bufstart[
i];
3095 if(utf16) bufstart[
j++] = bufstart[
i+1];
3105 TRACE(
":end-of-pipe\n");
3167 info->wxflag &= ~WX_TEXT;
3190 wchar_t *pathW =
NULL;
3286 while (plen &&
path[plen-1]==
' ')
3289 if (plen==2 &&
path[1]==
':')
3296 if (plen>=2 &&
path[plen-2]!=
':' && (
path[plen-1]==
'\\' ||
path[plen-1]==
'/'))
3325 if (plen > 6 &&
path[plen-4] ==
'.')
3343 buf->st_mtime =
buf->st_ctime =
dw;
3344 TRACE(
"%d %d %#I64x %I64d %I64d %I64d\n",
buf->st_mode,
buf->st_nlink,
3345 buf->st_size,
buf->st_atime,
buf->st_mtime,
buf->st_ctime);
3443 wchar_t *dirW =
NULL, *prefixW =
NULL, *retW;
3467 const wchar_t *tmp_dir =
_wgetenv(
L"TMP");
3469 if (tmp_dir)
dir = tmp_dir;
3589 || num_written !=
count)
3591 TRACE(
"WriteFile (fd %d, hand %p) failed-last error (%ld)\n",
fd,
3606 const char *
s =
buf;
3612 char conv[
sizeof(lfbuf)];
3616 if (
info->dbcsBufferUsed)
3618 conv[
j++] =
info->dbcsBuffer[0];
3625 for (;
i <
count &&
j <
sizeof(conv)-1 &&
3635 info->dbcsBuffer[0] = conv[
j-1];
3645 else if (
s[
i] ==
'\n')
3664 for (
j = 0;
i <
count &&
j <
sizeof(lfbuf)-1;
i++,
j++)
3673 for (
j = 0;
i <
count &&
j <
sizeof(lfbuf)-3;
i++,
j++)
3675 if (
s[
i] ==
'\n' && !
s[
i+1])
3680 lfbuf[
j++] =
s[
i++];
3686 char conv[
sizeof(lfbuf)/4];
3688 for (
j = 0;
i <
count &&
j <
sizeof(conv)-3;
i++,
j++)
3690 if (
s[
i] ==
'\n' && !
s[
i+1])
3719 if (num_written !=
j)
3721 TRACE(
"WriteFile/WriteConsoleW (fd %d, hand %p) failed-last error (%ld)\n",
fd,
3744 if (
len ==
sizeof(
val)) {
3855 c = *(
unsigned char *)
file->_base;
3884 i = (
unsigned char *)
file->_ptr++;
3906 char * buf_start =
s;
3908 TRACE(
":file(%p) fd (%d) str (%p) len (%d)\n",
3918 if ((
cc ==
EOF) && (
s == buf_start))
3920 TRACE(
":nothing read\n");
4002 for (
j=0;
j<
sizeof(
int);
j++) {
4046 wchar_t * buf_start =
s;
4048 TRACE(
":file(%p) fd (%d) str (%p) len (%d)\n",
4058 if ((
cc ==
WEOF) && (
s == buf_start))
4060 TRACE(
":nothing read\n");
4103 if(
file->_cnt <= 0) {
4145 size_t wrcnt=
size * nmemb;
4151 if(
file->_cnt < 0) {
4152 WARN(
"negative file->_cnt value in %p\n",
file);
4155 }
else if(
file->_cnt) {
4156 int pcnt=(
file->_cnt>wrcnt)? wrcnt:
file->_cnt;
4162 ptr = (
const char*)
ptr + pcnt;
4174 bufsiz =
file->_bufsiz;
4176 pcnt = (wrcnt / bufsiz) * bufsiz;
4187 ptr = (
const char*)
ptr + pcnt;
4193 ptr = (
const char*)
ptr + 1;
4197 return written /
size;
4257 int open_flags, stream_flags,
fd;
4290 wchar_t *pathW =
NULL, *modeW =
NULL;
4344 const wchar_t *
mode)
4422 size_t rcnt=
size * nmemb;
4431 int pcnt= (rcnt>
file->_cnt)?
file->_cnt:rcnt;
4457 if (
i > rcnt)
i = rcnt;
4460 if (
i > 0 && i < file->_cnt) {
4462 file->_flag &= ~_IOEOF;
4511 if(!elem_size || !
count)
return 0;
4526 size_t bytes_left, buf_pos;
4535 if(!elem_size || !
count)
return 0;
4539 bytes_left = elem_size*
count;
4564 ((
char*)
buf)[buf_pos++] =
c;
4569 return buf_pos/elem_size;
4580 int open_flags, stream_flags,
fd;
4627 wchar_t *pathW =
NULL, *modeW =
NULL;
4704 }
else if(!
file->_cnt) {
4711 if(
file->_ptr[
i] ==
'\n')
4831 char *buf_start =
buf;
4857 if ((
cc ==
EOF) && (buf_start ==
buf))
4859 TRACE(
":nothing read\n");
4864 TRACE(
"got '%s'\n", buf_start);
4895 TRACE(
":nothing read\n");
4975 wchar_t *oldpathW =
NULL, *newpathW =
NULL;
4978 if (oldpath && !(oldpathW =
wstrdupa_utf8(oldpath)))
return -1;
5113 if(!
data->tmpnam_buffer)
5116 s =
data->tmpnam_buffer;
5187 if(!
data->wtmpnam_buffer)
5190 s =
data->wtmpnam_buffer;
5275 memset(args_ctx, 0,
sizeof(args_ctx));
5282 options &= ~MSVCRT_PRINTF_POSITIONAL_PARAMS;
5307 memset(args_ctx, 0,
sizeof(args_ctx));
5314 options &= ~MSVCRT_PRINTF_POSITIONAL_PARAMS;
5378#if _MSVCR_VER >= 140
5764 if(*
file->_ptr !=
c) {
5809 unsigned char * pp = (
unsigned char *)&mwc;
5812 for(
i=
sizeof(
wchar_t)-1;
i>=0;
i--) {
5872 TRACE(
"%d\n", newmax);
5881#if _MSVCR_VER >= 140
static struct sockaddr_in sa
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
#define _setmode(fd, mode)
#define ERROR_INVALID_PARAMETER
#define INVALID_SET_FILE_POINTER
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
static __inline const char * debugstr_an(const char *s, int n)
#define GetCurrentProcess()
#define ERROR_INVALID_HANDLE
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
static const WCHAR *const ext[]
BOOL WINAPI DECLSPEC_HOTPATCH VerifyConsoleIoHandle(HANDLE hIoHandle)
BOOL WINAPI DECLSPEC_HOTPATCH SetStdHandle(DWORD nStdHandle, HANDLE hHandle)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
VOID WINAPI GetStartupInfoA(IN LPSTARTUPINFOA lpStartupInfo)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameW(LPCWSTR path, LPCWSTR prefix, UINT unique, LPWSTR buffer)
BOOL WINAPI DECLSPEC_HOTPATCH WriteFile(HANDLE file, LPCVOID buffer, DWORD count, LPDWORD result, LPOVERLAPPED overlapped)
BOOL WINAPI DECLSPEC_HOTPATCH UnlockFile(HANDLE file, DWORD offset_low, DWORD offset_high, DWORD count_low, DWORD count_high)
BOOL WINAPI DECLSPEC_HOTPATCH FlushFileBuffers(HANDLE file)
DWORD WINAPI DECLSPEC_HOTPATCH GetFileType(HANDLE file)
BOOL WINAPI DECLSPEC_HOTPATCH DeleteFileW(LPCWSTR path)
DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesA(LPCSTR name)
BOOL WINAPI DECLSPEC_HOTPATCH SetFileAttributesW(LPCWSTR name, DWORD attributes)
BOOL WINAPI DECLSPEC_HOTPATCH GetFileAttributesExW(LPCWSTR name, GET_FILEEX_INFO_LEVELS level, void *ptr)
BOOL WINAPI DECLSPEC_HOTPATCH LockFile(HANDLE file, DWORD offset_low, DWORD offset_high, DWORD count_low, DWORD count_high)
BOOL WINAPI DECLSPEC_HOTPATCH SetEndOfFile(HANDLE file)
BOOL WINAPI DECLSPEC_HOTPATCH SetFileTime(HANDLE file, const FILETIME *ctime, const FILETIME *atime, const FILETIME *mtime)
DWORD WINAPI DECLSPEC_HOTPATCH GetFileAttributesW(LPCWSTR name)
BOOL WINAPI MoveFileExW(const WCHAR *source, const WCHAR *dest, DWORD flag)
wchar_t * msvcrt_wstrdupa(const char *str)
unsigned int MSVCRT__commode
int CDECL _get_fmode(int *mode)
int CDECL _getdrive(void)
wchar_t *CDECL _wgetenv(const wchar_t *name)
void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, unsigned int line, uintptr_t arg)
__msvcrt_ulong *CDECL __doserrno(void)
__msvcrt_long CDECL ftell(FILE *file)
int CDECL _wutime32(const wchar_t *path, struct __utimbuf32 *t)
int CDECL vprintf(const char *format, va_list valist)
int CDECL clearerr_s(FILE *file)
int CDECL vfwprintf(FILE *file, const wchar_t *format, va_list valist)
wint_t CDECL _fgetwc_nolock(FILE *file)
FILE *CDECL _wfsopen(const wchar_t *path, const wchar_t *mode, int share)
int CDECL _dup2(int od, int nd)
int CDECL _vfprintf_s_l(FILE *file, const char *format, _locale_t locale, va_list valist)
static FILE * msvcrt_alloc_fp(void)
void CDECL clearerr(FILE *file)
wchar_t *CDECL _getws(wchar_t *buf)
int CDECL _fgetchar(void)
char *CDECL _tempnam(const char *dir, const char *prefix)
int WINAPIV _fprintf_s_l(FILE *file, const char *format, _locale_t locale,...)
static int puts_clbk_file_w(void *file, int len, const wchar_t *str)
static void msvcrt_stat64_to_stat(const struct _stat64 *buf64, struct _stat *buf)
wint_t CDECL ungetwc(wint_t wc, FILE *file)
int CDECL _wutime64(const wchar_t *path, struct __utimbuf64 *t)
int CDECL _fflush_nolock(FILE *file)
static void remove_std_buffer(FILE *file)
static ioinfo * get_ioinfo_alloc_fd(int fd)
static int puts_clbk_file_a(void *file, int len, const char *str)
int CDECL _read(int fd, void *buf, unsigned int count)
int CDECL _wcreat(const wchar_t *path, int pmode)
int CDECL _vfwprintf_s_l(FILE *file, const wchar_t *format, _locale_t locale, va_list valist)
static int read_utf8(ioinfo *fdinfo, wchar_t *buf, unsigned int count)
int CDECL puts(const char *s)
FILE *CDECL _wfreopen(const wchar_t *path, const wchar_t *mode, FILE *file)
ioinfo MSVCRT___badioinfo
static const ULONGLONG WCCMD
int WINAPIV _wopen(const wchar_t *path, int flags,...)
static int vfwprintf_helper(DWORD options, FILE *file, const wchar_t *format, _locale_t locale, va_list valist)
void msvcrt_init_io(void)
int CDECL _setmaxstdio(int newmax)
int WINAPIV _fwprintf_p(FILE *file, const wchar_t *format,...)
static file_crit * MSVCRT_fstream[MSVCRT_MAX_FILES/MSVCRT_FD_BLOCK_SIZE]
int CDECL putc(int c, FILE *file)
int CDECL _pipe(int *pfds, unsigned int psize, int textmode)
int WINAPIV _fprintf_l(FILE *file, const char *format, _locale_t locale,...)
static CRITICAL_SECTION MSVCRT_file_cs
int CDECL fclose(FILE *file)
static CRITICAL_SECTION_DEBUG MSVCRT_file_cs_debug
wint_t CDECL _fputwc_nolock(wint_t wc, FILE *file)
int CDECL _chmod(const char *path, int flags)
int CDECL _access_s(const char *filename, int mode)
int CDECL _wchmod(const wchar_t *path, int flags)
int CDECL ungetc(int c, FILE *file)
static int msvcrt_get_flags(const wchar_t *mode, int *open_flags, int *stream_flags)
FILE *CDECL _fsopen(const char *path, const char *mode, int share)
int CDECL fseek(FILE *file, __msvcrt_long offset, int whence)
ioinfo * MSVCRT___pioinfo[MSVCRT_MAX_FILES/MSVCRT_FD_BLOCK_SIZE]
static LONG tmpnam_unique
int CDECL _locking(int fd, int mode, __msvcrt_long nbytes)
void CDECL _lock_file(FILE *file)
static int wtmpnam_helper(wchar_t *s, size_t size, LONG *tmpnam_unique, int tmp_max)
int WINAPIV fprintf(FILE *file, const char *format,...)
wchar_t *CDECL _wtmpnam(wchar_t *s)
__int64 CDECL _ftelli64(FILE *file)
int CDECL _wsopen_s(int *fd, const wchar_t *path, int oflags, int shflags, int pmode)
int CDECL _vfwprintf_p(FILE *file, const wchar_t *format, va_list valist)
static void ioinfo_set_crit_init(ioinfo *info)
int CDECL _sopen_s(int *fd, const char *path, int oflags, int shflags, int pmode)
int CDECL vwprintf_s(const wchar_t *format, va_list valist)
int CDECL _wsopen_dispatch(const wchar_t *path, int oflags, int shflags, int pmode, int *fd, int secure)
static void msvcrt_set_fd(ioinfo *fdinfo, HANDLE hand, int flag)
int CDECL _fclose_nolock(FILE *file)
wchar_t *CDECL fgetws(wchar_t *s, int size, FILE *file)
int CDECL _commit(int fd)
wint_t CDECL fputwc(wint_t wc, FILE *file)
static void init_ioinfo_cs(ioinfo *info)
wint_t CDECL getwchar(void)
static int MSVCRT_max_streams
static unsigned split_oflags(unsigned oflags)
static int check_bom(HANDLE h, int oflags, BOOL seek)
int CDECL _sopen_dispatch(const char *path, int oflags, int shflags, int pmode, int *fd, int secure)
int WINAPIV _fwprintf_s_l(FILE *file, const wchar_t *format, _locale_t locale,...)
FILE *CDECL freopen(const char *path, const char *mode, FILE *file)
size_t CDECL fread(void *ptr, size_t size, size_t nmemb, FILE *file)
static int msvcrt_flush_buffer(FILE *file)
char *CDECL tmpnam(char *s)
int CDECL _putw(int val, FILE *file)
int WINAPIV printf_s(const char *format,...)
__int64 CDECL _lseeki64(int fd, __int64 offset, int whence)
static LONG tmpnam_s_unique
int CDECL vfprintf_s(FILE *file, const char *format, va_list valist)
static BOOL msvcrt_alloc_buffer(FILE *file)
static void ioinfo_set_textmode(ioinfo *info, enum textmode mode)
static int tmpnam_helper(char *s, size_t size, LONG *tmpnam_unique, int tmp_max)
char *CDECL gets(char *buf)
int CDECL _write(int fd, const void *buf, unsigned int count)
BOOL msvcrt_create_io_inherit_block(WORD *size, BYTE **block)
int WINAPIV _wsopen(const wchar_t *path, int oflags, int shflags,...)
wchar_t *CDECL _wtempnam(const wchar_t *dir, const wchar_t *prefix)
wint_t CDECL _fputwchar(wint_t wc)
wint_t CDECL fgetwc(FILE *file)
int CDECL _umask(int umask)
static BOOL ioinfo_is_crit_init(ioinfo *info)
static enum textmode ioinfo_get_textmode(ioinfo *info)
int CDECL vfprintf(FILE *file, const char *format, va_list valist)
int CDECL _unlink(const char *path)
int CDECL _fputchar(int c)
static void msvcrt_stat64_to_stat64i32(const struct _stat64 *buf64, struct _stat64i32 *buf)
int CDECL getc(FILE *file)
int CDECL _open_osfhandle(intptr_t handle, int oflags)
int CDECL _wunlink(const wchar_t *path)
int WINAPIV _fprintf_p_l(FILE *file, const char *format, _locale_t locale,...)
int CDECL _wrename(const wchar_t *oldpath, const wchar_t *newpath)
char *CDECL fgets(char *s, int size, FILE *file)
int CDECL feof(FILE *file)
static FILE * iob_get_file(int i)
static void msvcrt_free_fd(int fd)
int CDECL _futime32(int fd, struct __utimbuf32 *t)
int WINAPIV _sopen(const char *path, int oflags, int shflags,...)
int WINAPIV _fwprintf_l(FILE *file, const wchar_t *format, _locale_t locale,...)
errno_t CDECL freopen_s(FILE **pFile, const char *path, const char *mode, FILE *file)
int WINAPIV _fwprintf_p_l(FILE *file, const wchar_t *format, _locale_t locale,...)
FILE *CDECL _fdopen(int fd, const char *mode)
char *CDECL gets_s(char *buf, size_t len)
intptr_t CDECL _get_osfhandle(int fd)
int CDECL rename(const char *oldpath, const char *newpath)
int CDECL _fcloseall(void)
int WINAPIV _fprintf_p(FILE *file, const char *format,...)
int CDECL _waccess_s(const wchar_t *filename, int mode)
void msvcrt_free_io(void)
int CDECL _waccess(const wchar_t *filename, int mode)
static int msvcrt_alloc_fd(HANDLE hand, int flag)
int CDECL _mktemp_s(char *pattern, size_t size)
__int64 CDECL _ftelli64_nolock(FILE *file)
int CDECL _chsize_s(int fd, __int64 size)
FILE *CDECL _wfopen(const wchar_t *path, const wchar_t *mode)
static void time_to_filetime(__time64_t time, FILETIME *ft)
int CDECL fsetpos(FILE *file, fpos_t *pos)
size_t CDECL _fwrite_nolock(const void *ptr, size_t size, size_t nmemb, FILE *file)
int CDECL _vfprintf_p(FILE *file, const char *format, va_list valist)
__msvcrt_long CDECL _tell(int fd)
int CDECL vwprintf(const wchar_t *format, va_list valist)
int WINAPIV fwprintf_s(FILE *file, const wchar_t *format,...)
int CDECL _chsize(int fd, __msvcrt_long size)
int CDECL _getmaxstdio(void)
int CDECL _fseek_nolock(FILE *file, __msvcrt_long offset, int whence)
static int read_i(int fd, ioinfo *fdinfo, void *buf, unsigned int count)
int CDECL fputs(const char *s, FILE *file)
size_t CDECL _fread_nolock(void *ptr, size_t size, size_t nmemb, FILE *file)
static ioinfo * get_ioinfo_nolock(int fd)
int CDECL tmpnam_s(char *s, size_t size)
int WINAPIV fwprintf(FILE *file, const wchar_t *format,...)
static ioinfo * get_ioinfo(int fd)
FILE *CDECL fopen(const char *path, const char *mode)
int CDECL _vfprintf_l(FILE *file, const char *format, _locale_t locale, va_list valist)
void CDECL rewind(FILE *file)
int CDECL fputws(const wchar_t *s, FILE *file)
wint_t CDECL _ungetwc_nolock(wint_t wc, FILE *file)
int CDECL _fseeki64_nolock(FILE *file, __int64 offset, int whence)
__int64 CDECL _telli64(int fd)
int CDECL _utime64(const char *path, struct __utimbuf64 *t)
int CDECL _access(const char *filename, int mode)
int WINAPIV wprintf_s(const wchar_t *format,...)
int CDECL _getw(FILE *file)
FILE *CDECL __iob_func(void)
int CDECL tmpfile_s(FILE **file)
int CDECL fgetc(FILE *file)
int CDECL _ungetc_nolock(int c, FILE *file)
static int msvcrt_flush_all_buffers(int mask)
void CDECL setbuf(FILE *file, char *buf)
int WINAPIV fprintf_s(FILE *file, const char *format,...)
int CDECL _vfwprintf_l(FILE *file, const wchar_t *format, _locale_t locale, va_list valist)
FILE *CDECL tmpfile(void)
int CDECL fflush(FILE *file)
void CDECL _unlock_file(FILE *file)
__msvcrt_long CDECL _filelength(int fd)
static void msvcrt_stat64_to_stat32i64(const struct _stat64 *buf64, struct _stat32i64 *buf)
int CDECL _wfreopen_s(FILE **pFile, const wchar_t *path, const wchar_t *mode, FILE *file)
FILE MSVCRT__iob[_IOB_ENTRIES]
int CDECL _utime32(const char *path, struct __utimbuf32 *t)
static FILE * msvcrt_get_file(int i)
static void release_ioinfo(ioinfo *info)
int CDECL _wremove(const wchar_t *path)
static BOOL add_std_buffer(FILE *file)
__int64 CDECL _filelengthi64(int fd)
static CRITICAL_SECTION * file_get_cs(FILE *f)
int CDECL _fstat32(int fd, struct _stat32 *buf)
int CDECL fgetpos(FILE *file, fpos_t *pos)
int CDECL _creat(const char *path, int pmode)
static const ULONGLONG WCBAT
int CDECL vfwprintf_s(FILE *file, const wchar_t *format, va_list valist)
__msvcrt_long CDECL _lseek(int fd, __msvcrt_long offset, int whence)
static const ULONGLONG WCCOM
int CDECL _fstat32i64(int fd, struct _stat32i64 *buf)
static int get_utf8_char_len(char ch)
int WINAPIV _open(const char *path, int flags,...)
int CDECL _fileno(FILE *file)
static int msvcrt_int_to_base32(int num, char *str)
int CDECL _futime64(int fd, struct __utimbuf64 *t)
#define MSVCRT_INTERNAL_BUFSIZ
int CDECL _fseeki64(FILE *file, __int64 offset, int whence)
static void ioinfo_set_unicode(ioinfo *info, BOOL unicode)
wint_t CDECL _fgetwchar(void)
static void msvcrt_stat64_to_stat32(const struct _stat64 *buf64, struct _stat32 *buf)
static int msvcrt_init_fp(FILE *file, int fd, unsigned stream_flags)
int CDECL ferror(FILE *file)
static int msvcrt_int_to_base32_w(int num, wchar_t *str)
int CDECL vprintf_s(const char *format, va_list valist)
int CDECL _vfwprintf_p_l(FILE *file, const wchar_t *format, _locale_t locale, va_list valist)
int CDECL _isatty(int fd)
int CDECL fputc(int c, FILE *file)
static const ULONGLONG WCEXE
FILE *CDECL _wfdopen(int fd, const wchar_t *mode)
int CDECL _wtmpnam_s(wchar_t *s, size_t size)
int CDECL fopen_s(FILE **pFile, const char *filename, const char *mode)
int CDECL _flushall(void)
char *CDECL _mktemp(char *pattern)
int CDECL _putws(const wchar_t *s)
static ioinfo * get_ioinfo_alloc(int *fd)
#define MSVCRT_FD_BLOCK_SIZE
int CDECL setvbuf(FILE *file, char *buf, int mode, size_t size)
static BOOL alloc_pioinfo_block(int fd)
int CDECL _wmktemp_s(wchar_t *pattern, size_t size)
int CDECL _vfprintf_p_l(FILE *file, const char *format, _locale_t locale, va_list valist)
int CDECL _filbuf(FILE *file)
int CDECL _wfopen_s(FILE **pFile, const wchar_t *filename, const wchar_t *mode)
size_t CDECL fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
static int MSVCRT_stream_idx
static int vfprintf_helper(DWORD options, FILE *file, const char *format, _locale_t locale, va_list valist)
static void msvcrt_stat64_to_stati64(const struct _stat64 *buf64, struct _stati64 *buf)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *) __WINE_DEALLOC(free) __WINE_MALLOC
_ACRTIMP size_t __cdecl _fread_nolock_s(void *, size_t, size_t, size_t, FILE *)
_ACRTIMP size_t __cdecl fread_s(void *, size_t, size_t, size_t, FILE *)
_ACRTIMP __msvcrt_long __cdecl _ftell_nolock(FILE *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl _wstat32i64(const wchar_t *, struct _stat32i64 *)
_ACRTIMP int __cdecl _wstat32(const wchar_t *, struct _stat32 *)
_ACRTIMP __time64_t __cdecl _time64(__time64_t *)
void CDECL _lock(int locknum)
void CDECL _unlock(int locknum)
thread_data_t *CDECL msvcrt_get_thread_data(void)
static wchar_t * wstrdupa_utf8(const char *str)
static char * astrdupw_utf8(const wchar_t *wstr)
#define UCRTBASE_PRINTF_MASK
int create_positional_ctx_w(void *, const wchar_t *, va_list)
int pf_printf_a(puts_clbk_a, void *, const char *, _locale_t, DWORD, args_clbk, void *, va_list *)
#define MSVCRT_NO_CONSOLE_FD
#define MSVCRT_PRINTF_POSITIONAL_PARAMS
#define MSVCRT_INVALID_PMT(x, err)
int create_positional_ctx_a(void *, const char *, va_list)
#define MSVCRT_PRINTF_INVOKE_INVALID_PARAM_HANDLER
int pf_printf_w(puts_clbk_w, void *, const wchar_t *, _locale_t, DWORD, args_clbk, void *, va_list *)
printf_arg arg_clbk_valist(void *, int, int, va_list *)
#define __acrt_iob_func(idx)
printf_arg arg_clbk_positional(void *, int, int, va_list *)
#define MSVCRT_NO_CONSOLE
#define MSVCRT_CHECK_PMT(x)
#define MSVCRT_CHECK_PMT_ERR(x, err)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define MOVEFILE_COPY_ALLOWED
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLint GLboolean GLint GLenum access
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time, PULONG ElapsedSeconds)
REFIID LPVOID DWORD_PTR dw
#define InterlockedCompareExchangePointer
#define InterlockedCompareExchange
static const int digits[]
#define memcpy(s1, s2, n)
#define TRUNCATE_EXISTING
#define FILE_FLAG_RANDOM_ACCESS
#define FILE_FLAG_DELETE_ON_CLOSE
#define FILE_FLAG_SEQUENTIAL_SCAN
#define ERROR_FILE_NOT_FOUND
static const WCHAR filenameW[]
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
static unsigned(__cdecl *hash_bstr)(bstr_t s)
int CDECL _get_stream_buffer_pointers(FILE *, char ***, char ***, int **)
ssize_t pread(int fd, void *buf, size_t count, off_t offset)
#define __ASM_GLOBAL_FUNC(name, code)
BOOL WINAPI CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize)
#define FILE_ATTRIBUTE_READONLY
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
#define FILE_SHARE_DELETE
#define FILE_ATTRIBUTE_DIRECTORY
#define FILE_ATTRIBUTE_TEMPORARY
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
_Must_inspect_result_ _Out_ LPSIZE psize
int __cdecl __stdio_common_vfwprintf_s(unsigned __int64 const options, FILE *const stream, wchar_t const *const format, _locale_t const locale, va_list const arglist)
int __cdecl __stdio_common_vfwprintf_p(unsigned __int64 const options, FILE *const stream, wchar_t const *const format, _locale_t const locale, va_list const arglist)
int __cdecl __stdio_common_vfwprintf(unsigned __int64 const options, FILE *const stream, wchar_t const *const format, _locale_t const locale, va_list const arglist)
int __cdecl __stdio_common_vfprintf_p(unsigned __int64 const options, FILE *const stream, char const *const format, _locale_t const locale, va_list const arglist)
int __cdecl __stdio_common_vfprintf_s(unsigned __int64 const options, FILE *const stream, char const *const format, _locale_t const locale, va_list const arglist)
#define _fgetc_nolock(_stream)
#define _fputc_nolock(_c, _stream)
int seek(void *fd, ulong off, int mode)
#define FileStandardInformation
LIST_ENTRY ProcessLocksList
FILETIME ftLastAccessTime
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Character const *const prefix
struct _LARGE_INTEGER::@2493 u
#define INVALID_FILE_ATTRIBUTES
#define STD_OUTPUT_HANDLE
DWORD WINAPI GetLastError(void)
BOOL WINAPI TryEnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define FILE_TYPE_UNKNOWN
DWORD WINAPI GetCurrentProcessId(void)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define ERROR_BROKEN_PIPE
void int int ULONGLONG int va_list * ap
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
#define DUPLICATE_SAME_ACCESS
static unsigned int block