mirror of
https://github.com/reactos/wine.git
synced 2024-11-24 20:30:01 +00:00
Include the msvcrt headers, remove duplicate definitions.
Fixed the signature of a few functions. Don't use wcs* functions, use *W (from unicode.h) instead.
This commit is contained in:
parent
7a2da179b9
commit
e7f75c5dfb
@ -1,3 +1,4 @@
|
||||
EXTRADEFS = -DUSE_MSVCRT_PREFIX
|
||||
TOPSRCDIR = @top_srcdir@
|
||||
TOPOBJDIR = ../..
|
||||
SRCDIR = @srcdir@
|
||||
|
@ -9,8 +9,14 @@
|
||||
#include "msvcrt.h"
|
||||
#include "wincon.h"
|
||||
|
||||
#include "msvcrt/conio.h"
|
||||
#include "msvcrt/stdio.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
|
||||
/* MT */
|
||||
extern CRITICAL_SECTION MSVCRT_console_cs;
|
||||
#define LOCK_CONSOLE EnterCriticalSection(&MSVCRT_console_cs)
|
||||
@ -333,8 +339,6 @@ int _kbhit(void)
|
||||
}
|
||||
|
||||
|
||||
extern int snprintf(char *, int, const char *, ...);
|
||||
|
||||
/*********************************************************************
|
||||
* _cprintf (MSVCRT.@)
|
||||
*/
|
||||
@ -350,7 +354,7 @@ int _cprintf(const char* format, ...)
|
||||
* Return the number of bytes that would have been written
|
||||
* The code below handles both cases
|
||||
*/
|
||||
while ((written = snprintf( mem, resize, format, valist )) == -1 ||
|
||||
while ((written = _snprintf( mem, resize, format, valist )) == -1 ||
|
||||
written > resize)
|
||||
{
|
||||
resize = (written == -1 ? resize * 2 : written + 1);
|
||||
|
@ -5,6 +5,9 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
|
@ -5,20 +5,11 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/ctype.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* ASCII char classification table - binary compatible */
|
||||
#define _UPPER C1_UPPER
|
||||
#define _LOWER C1_LOWER
|
||||
#define _DIGIT C1_DIGIT
|
||||
#define _SPACE C1_SPACE
|
||||
#define _PUNCT C1_PUNCT
|
||||
#define _CONTROL C1_CNTRL
|
||||
#define _BLANK C1_BLANK
|
||||
#define _HEX C1_XDIGIT
|
||||
#define _LEADBYTE 0x8000
|
||||
#define _ALPHA (C1_ALPHA|_UPPER|_LOWER)
|
||||
|
||||
/* Some abbreviations to make the following table readable */
|
||||
#define _C_ _CONTROL
|
||||
#define _S_ _SPACE
|
||||
#define _P_ _PUNCT
|
||||
|
@ -6,6 +6,10 @@
|
||||
#include <math.h>
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/string.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
unsigned int MSVCRT___argc;
|
||||
@ -22,7 +26,8 @@ unsigned int MSVCRT_osversion; /* FIXME: */
|
||||
unsigned int MSVCRT__winmajor;
|
||||
unsigned int MSVCRT__winminor;
|
||||
unsigned int MSVCRT__winver;
|
||||
unsigned int MSVCRT__sys_nerr;
|
||||
unsigned int MSVCRT__sys_nerr; /* FIXME: not accessible from Winelib apps */
|
||||
char** MSVCRT__sys_errlist; /* FIXME: not accessible from Winelib apps */
|
||||
unsigned int MSVCRT___setlc_active;
|
||||
unsigned int MSVCRT___unguarded_readlc_active;
|
||||
double MSVCRT__HUGE;
|
||||
@ -30,8 +35,8 @@ char **MSVCRT___argv;
|
||||
WCHAR **MSVCRT___wargv;
|
||||
char *MSVCRT__acmdln;
|
||||
WCHAR *MSVCRT__wcmdln;
|
||||
char *MSVCRT__environ;
|
||||
WCHAR *MSVCRT__wenviron;
|
||||
char **MSVCRT__environ;
|
||||
WCHAR **MSVCRT__wenviron;
|
||||
char **MSVCRT___initenv;
|
||||
WCHAR **MSVCRT___winitenv;
|
||||
int MSVCRT_timezone;
|
||||
@ -42,7 +47,7 @@ typedef void (*_INITTERMFUN)(void);
|
||||
/***********************************************************************
|
||||
* __p___argc (MSVCRT.@)
|
||||
*/
|
||||
unsigned int* __p___argc(void) { return &MSVCRT___argc; }
|
||||
int* __p___argc(void) { return &MSVCRT___argc; }
|
||||
|
||||
/***********************************************************************
|
||||
* __p__commode (MSVCRT.@)
|
||||
@ -97,12 +102,12 @@ WCHAR*** __p___wargv(void) { return &MSVCRT___wargv; }
|
||||
/*********************************************************************
|
||||
* __p__environ (MSVCRT.@)
|
||||
*/
|
||||
char** __p__environ(void) { return &MSVCRT__environ; }
|
||||
char*** __p__environ(void) { return &MSVCRT__environ; }
|
||||
|
||||
/*********************************************************************
|
||||
* __p__wenviron (MSVCRT.@)
|
||||
*/
|
||||
WCHAR** __p__wenviron(void) { return &MSVCRT__wenviron; }
|
||||
WCHAR*** __p__wenviron(void) { return &MSVCRT__wenviron; }
|
||||
|
||||
/*********************************************************************
|
||||
* __p___initenv (MSVCRT.@)
|
||||
@ -216,10 +221,16 @@ void msvcrt_init_args(void)
|
||||
MSVCRT_free( cmdline );
|
||||
|
||||
TRACE("found %d arguments\n",MSVCRT___argc);
|
||||
/* FIXME: This is plain wrong, we must convert from a '\0' separated
|
||||
* memory block to an array of pointers to string format.
|
||||
*/
|
||||
MSVCRT__environ = GetEnvironmentStringsA();
|
||||
MSVCRT___initenv = &MSVCRT__environ;
|
||||
MSVCRT___initenv = MSVCRT__environ;
|
||||
/* FIXME: This is plain wrong, we must convert from a '\0' separated
|
||||
* memory block to an array of pointers to string format.
|
||||
*/
|
||||
MSVCRT__wenviron = GetEnvironmentStringsW();
|
||||
MSVCRT___winitenv = &MSVCRT__wenviron;
|
||||
MSVCRT___winitenv = MSVCRT__wenviron;
|
||||
}
|
||||
|
||||
|
||||
@ -232,26 +243,26 @@ void msvcrt_free_args(void)
|
||||
/*********************************************************************
|
||||
* __getmainargs (MSVCRT.@)
|
||||
*/
|
||||
void __getmainargs(int *argc, char ***argv, char **environ,
|
||||
void __getmainargs(int *argc, char** *argv, char** *envp,
|
||||
int expand_wildcards, int *new_mode)
|
||||
{
|
||||
TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, environ, expand_wildcards, new_mode);
|
||||
TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, envp, expand_wildcards, new_mode);
|
||||
*argc = MSVCRT___argc;
|
||||
*argv = MSVCRT___argv;
|
||||
*environ = MSVCRT__environ;
|
||||
*envp = MSVCRT__environ;
|
||||
MSVCRT__set_new_mode( *new_mode );
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* __wgetmainargs (MSVCRT.@)
|
||||
*/
|
||||
void __wgetmainargs(int *argc, WCHAR ***wargv, WCHAR **wenviron,
|
||||
void __wgetmainargs(int *argc, WCHAR** *wargv, WCHAR** *wenvp,
|
||||
int expand_wildcards, int *new_mode)
|
||||
{
|
||||
TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenviron, expand_wildcards, new_mode);
|
||||
TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenvp, expand_wildcards, new_mode);
|
||||
*argc = MSVCRT___argc;
|
||||
*wargv = MSVCRT___wargv;
|
||||
*wenviron = MSVCRT__wenviron;
|
||||
*wenvp = MSVCRT__wenviron;
|
||||
MSVCRT__set_new_mode( *new_mode );
|
||||
}
|
||||
|
||||
|
@ -13,37 +13,17 @@
|
||||
#include "msvcrt.h"
|
||||
#include "ms_errno.h"
|
||||
|
||||
#include "wine/unicode.h"
|
||||
#include "msvcrt/direct.h"
|
||||
#include "msvcrt/dos.h"
|
||||
#include "msvcrt/io.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/string.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
typedef struct MSVCRT_finddata_t
|
||||
{
|
||||
unsigned attrib;
|
||||
time_t time_create; /* -1 when N/A */
|
||||
time_t time_access; /* -1 when N/A */
|
||||
time_t time_write;
|
||||
unsigned long size; /* FIXME: 64 bit ??*/
|
||||
char name[MAX_PATH];
|
||||
} MSVCRT_finddata_t;
|
||||
|
||||
typedef struct MSVCRT_wfinddata_t
|
||||
{
|
||||
unsigned attrib;
|
||||
time_t time_create; /* -1 when N/A */
|
||||
time_t time_access; /* -1 when N/A */
|
||||
time_t time_write;
|
||||
unsigned long size; /* FIXME: 64 bit ??*/
|
||||
WCHAR name[MAX_PATH];
|
||||
} MSVCRT_wfinddata_t;
|
||||
|
||||
typedef struct msvcrt_diskfree_t {
|
||||
unsigned num_clusters;
|
||||
unsigned available;
|
||||
unsigned cluster_sectors;
|
||||
unsigned sector_bytes;
|
||||
} MSVCRT_diskfree_t;
|
||||
|
||||
/* INTERNAL: Translate finddata_t to PWIN32_FIND_DATAA */
|
||||
static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, MSVCRT_finddata_t* ft)
|
||||
static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, struct _finddata_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
@ -63,7 +43,7 @@ static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, MSVCRT_finddata_t* ft)
|
||||
}
|
||||
|
||||
/* INTERNAL: Translate wfinddata_t to PWIN32_FIND_DATAA */
|
||||
static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, MSVCRT_wfinddata_t* ft)
|
||||
static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, struct _wfinddata_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
@ -82,17 +62,6 @@ static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, MSVCRT_wfinddata_t* ft)
|
||||
strcpyW(ft->name, fd->cFileName);
|
||||
}
|
||||
|
||||
char* msvcrt_strndup(const char*, unsigned int);
|
||||
LPWSTR _wcsdup( LPCWSTR );
|
||||
LPWSTR msvcrt_wstrndup( LPCWSTR , unsigned int );
|
||||
char * MSVCRT_getenv(const char *);
|
||||
WCHAR *wcscpy(WCHAR *,const WCHAR *);
|
||||
WCHAR *wcsncpy(WCHAR *,const WCHAR *,unsigned int);
|
||||
WCHAR *wcscat(WCHAR *,const WCHAR *);
|
||||
WCHAR *wcschr(WCHAR *,WCHAR);
|
||||
WCHAR *wcsrchr(WCHAR *,WCHAR);
|
||||
void _splitpath(const char *,char *, char *,char *,char *);
|
||||
|
||||
/*********************************************************************
|
||||
* _chdir (MSVCRT.@)
|
||||
*/
|
||||
@ -139,7 +108,7 @@ int _chdrive(int newdrive)
|
||||
/*********************************************************************
|
||||
* _findclose (MSVCRT.@)
|
||||
*/
|
||||
int _findclose(DWORD hand)
|
||||
int _findclose(long hand)
|
||||
{
|
||||
TRACE(":handle %ld\n",hand);
|
||||
if (!FindClose((HANDLE)hand))
|
||||
@ -153,7 +122,7 @@ int _findclose(DWORD hand)
|
||||
/*********************************************************************
|
||||
* _findfirst (MSVCRT.@)
|
||||
*/
|
||||
DWORD _findfirst(const char * fspec, MSVCRT_finddata_t* ft)
|
||||
long _findfirst(const char * fspec, struct _finddata_t* ft)
|
||||
{
|
||||
WIN32_FIND_DATAA find_data;
|
||||
HANDLE hfind;
|
||||
@ -172,7 +141,7 @@ DWORD _findfirst(const char * fspec, MSVCRT_finddata_t* ft)
|
||||
/*********************************************************************
|
||||
* _wfindfirst (MSVCRT.@)
|
||||
*/
|
||||
DWORD _wfindfirst(const WCHAR * fspec, MSVCRT_wfinddata_t* ft)
|
||||
long _wfindfirst(const WCHAR * fspec, struct _wfinddata_t* ft)
|
||||
{
|
||||
WIN32_FIND_DATAW find_data;
|
||||
HANDLE hfind;
|
||||
@ -191,7 +160,7 @@ DWORD _wfindfirst(const WCHAR * fspec, MSVCRT_wfinddata_t* ft)
|
||||
/*********************************************************************
|
||||
* _findnext (MSVCRT.@)
|
||||
*/
|
||||
int _findnext(DWORD hand, MSVCRT_finddata_t * ft)
|
||||
int _findnext(long hand, struct _finddata_t * ft)
|
||||
{
|
||||
WIN32_FIND_DATAA find_data;
|
||||
|
||||
@ -208,7 +177,7 @@ int _findnext(DWORD hand, MSVCRT_finddata_t * ft)
|
||||
/*********************************************************************
|
||||
* _wfindnext (MSVCRT.@)
|
||||
*/
|
||||
int _wfindnext(DWORD hand, MSVCRT_wfinddata_t * ft)
|
||||
int _wfindnext(long hand, struct _wfinddata_t * ft)
|
||||
{
|
||||
WIN32_FIND_DATAW find_data;
|
||||
|
||||
@ -367,7 +336,7 @@ WCHAR* _wgetdcwd(int drive, WCHAR * buf, int size)
|
||||
/*********************************************************************
|
||||
* _getdiskfree (MSVCRT.@)
|
||||
*/
|
||||
unsigned int _getdiskfree(unsigned int disk, MSVCRT_diskfree_t* d)
|
||||
unsigned int _getdiskfree(unsigned int disk, struct _diskfree_t* d)
|
||||
{
|
||||
char drivespec[4] = {'@', ':', '\\', 0};
|
||||
DWORD ret[4];
|
||||
@ -380,10 +349,10 @@ unsigned int _getdiskfree(unsigned int disk, MSVCRT_diskfree_t* d)
|
||||
|
||||
if (GetDiskFreeSpaceA(disk==0?NULL:drivespec,ret,ret+1,ret+2,ret+3))
|
||||
{
|
||||
d->cluster_sectors = (unsigned)ret[0];
|
||||
d->sector_bytes = (unsigned)ret[1];
|
||||
d->available = (unsigned)ret[2];
|
||||
d->num_clusters = (unsigned)ret[3];
|
||||
d->sectors_per_cluster = (unsigned)ret[0];
|
||||
d->bytes_per_sector = (unsigned)ret[1];
|
||||
d->avail_clusters = (unsigned)ret[2];
|
||||
d->total_clusters = (unsigned)ret[3];
|
||||
return 0;
|
||||
}
|
||||
err = GetLastError();
|
||||
@ -446,7 +415,8 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
WCHAR pathbuff[MAX_PATH],*path=pathbuff;
|
||||
|
||||
TRACE(":splitting path '%s'\n",debugstr_w(path));
|
||||
wcscpy(pathbuff, inpath);
|
||||
/* FIXME: Should be an strncpyW or something */
|
||||
strcpyW(pathbuff, inpath);
|
||||
|
||||
/* convert slashes to backslashes for searching */
|
||||
for (ptr = (WCHAR*)path; *ptr; ++ptr)
|
||||
@ -454,12 +424,12 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
*ptr = (WCHAR)L'\\';
|
||||
|
||||
/* look for drive spec */
|
||||
if ((ptr = wcschr(path, (WCHAR)L':')) != (WCHAR)L'\0')
|
||||
if ((ptr = strchrW(path, (WCHAR)L':')) != (WCHAR)L'\0')
|
||||
{
|
||||
++ptr;
|
||||
if (drv)
|
||||
{
|
||||
wcsncpy(drv, path, ptr - path);
|
||||
strncpyW(drv, path, ptr - path);
|
||||
drv[ptr - path] = (WCHAR)L'\0';
|
||||
}
|
||||
path = ptr;
|
||||
@ -468,8 +438,8 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
*drv = (WCHAR)L'\0';
|
||||
|
||||
/* find rightmost backslash or leftmost colon */
|
||||
if ((ptr = wcsrchr(path, (WCHAR)L'\\')) == NULL)
|
||||
ptr = (wcschr(path, (WCHAR)L':'));
|
||||
if ((ptr = strrchrW(path, (WCHAR)L'\\')) == NULL)
|
||||
ptr = (strchrW(path, (WCHAR)L':'));
|
||||
|
||||
if (!ptr)
|
||||
{
|
||||
@ -484,15 +454,15 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
{
|
||||
ch = *ptr;
|
||||
*ptr = (WCHAR)L'\0';
|
||||
wcscpy(dir, path);
|
||||
strcpyW(dir, path);
|
||||
*ptr = ch;
|
||||
}
|
||||
}
|
||||
|
||||
if ((p = wcsrchr(ptr, (WCHAR)L'.')) == NULL)
|
||||
if ((p = strrchrW(ptr, (WCHAR)L'.')) == NULL)
|
||||
{
|
||||
if (fname)
|
||||
wcscpy(fname, ptr);
|
||||
strcpyW(fname, ptr);
|
||||
if (ext)
|
||||
*ext = (WCHAR)L'\0';
|
||||
}
|
||||
@ -500,10 +470,10 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
{
|
||||
*p = (WCHAR)L'\0';
|
||||
if (fname)
|
||||
wcscpy(fname, ptr);
|
||||
strcpyW(fname, ptr);
|
||||
*p = (WCHAR)L'.';
|
||||
if (ext)
|
||||
wcscpy(ext, p);
|
||||
strcpyW(ext, p);
|
||||
}
|
||||
|
||||
/* Fix pathological case - Win returns ':' as part of the
|
||||
@ -516,8 +486,8 @@ void _wsplitpath(const WCHAR *inpath, WCHAR *drv, WCHAR *dir,
|
||||
{
|
||||
pathbuff[0] = (WCHAR)L':';
|
||||
pathbuff[1] = (WCHAR)L'\0';
|
||||
wcscat(pathbuff,dir);
|
||||
wcscpy(dir, pathbuff);
|
||||
strcatW(pathbuff,dir);
|
||||
strcpyW(dir, pathbuff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -688,7 +658,7 @@ VOID _makepath(char * path, const char * drive,
|
||||
const char * extension )
|
||||
{
|
||||
char ch;
|
||||
TRACE("_makepath got %s %s %s %s\n", drive, directory,
|
||||
TRACE("got %s %s %s %s\n", drive, directory,
|
||||
filename, extension);
|
||||
|
||||
if ( !path )
|
||||
@ -719,7 +689,7 @@ VOID _makepath(char * path, const char * drive,
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("_makepath returns %s\n",path);
|
||||
TRACE("returning %s\n",path);
|
||||
}
|
||||
|
||||
|
||||
|
@ -9,9 +9,10 @@
|
||||
#include "wine/unicode.h"
|
||||
#include "msvcrt.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
LPWSTR wcsrchr( LPWSTR str, WCHAR ch );
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/*********************************************************************
|
||||
* getenv (MSVCRT.@)
|
||||
@ -51,7 +52,7 @@ WCHAR *_wgetenv(const WCHAR *name)
|
||||
|
||||
for (pp = environ; (*pp); pp = pp + strlenW(pp) + 1)
|
||||
{
|
||||
pos =wcsrchr(pp,'=');
|
||||
pos = strrchrW(pp,'=');
|
||||
if (pos)
|
||||
length = pos -pp;
|
||||
else
|
||||
|
@ -7,6 +7,11 @@
|
||||
#include "msvcrt.h"
|
||||
#include "ms_errno.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "msvcrt/conio.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
@ -86,8 +91,6 @@ int* __doserrno(void)
|
||||
return GET_THREAD_VAR_PTR(doserrno);
|
||||
}
|
||||
|
||||
char *strerror(int);
|
||||
|
||||
/*********************************************************************
|
||||
* strerror (MSVCRT.@)
|
||||
*/
|
||||
@ -99,8 +102,6 @@ char* MSVCRT_strerror(int err)
|
||||
/**********************************************************************
|
||||
* _strerror (MSVCRT.@)
|
||||
*/
|
||||
extern int sprintf(char *str, const char *format, ...);
|
||||
|
||||
const char* _strerror(const char* err)
|
||||
{
|
||||
static char strerrbuff[256]; /* FIXME: Per thread, nprintf */
|
||||
@ -108,12 +109,10 @@ const char* _strerror(const char* err)
|
||||
return strerrbuff;
|
||||
}
|
||||
|
||||
int _cprintf( const char * format, ... );
|
||||
|
||||
/*********************************************************************
|
||||
* perror (MSVCRT.@)
|
||||
*/
|
||||
void MSVCRT_perror(const char *str)
|
||||
void MSVCRT_perror(const char* str)
|
||||
{
|
||||
_cprintf("%s: %s\n",str,MSVCRT_strerror(GET_THREAD_VAR(errno)));
|
||||
}
|
||||
|
@ -5,6 +5,10 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/conio.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* MT */
|
||||
@ -12,9 +16,7 @@ extern CRITICAL_SECTION MSVCRT_exit_cs;
|
||||
#define LOCK_EXIT EnterCriticalSection(&MSVCRT_exit_cs)
|
||||
#define UNLOCK_EXIT LeaveCriticalSection(&MSVCRT_exit_cs)
|
||||
|
||||
typedef void (*MSVCRT_atexit_func)(void);
|
||||
|
||||
static MSVCRT_atexit_func *MSVCRT_atexit_table = NULL;
|
||||
static _onexit_t *MSVCRT_atexit_table = NULL;
|
||||
static int MSVCRT_atexit_table_size = 0;
|
||||
static int MSVCRT_atexit_registered = 0; /* Points to free slot */
|
||||
|
||||
@ -40,11 +42,9 @@ void __MSVCRT__call_atexit(void)
|
||||
/*********************************************************************
|
||||
* __dllonexit (MSVCRT.@)
|
||||
*/
|
||||
MSVCRT_atexit_func __dllonexit(MSVCRT_atexit_func func,
|
||||
MSVCRT_atexit_func **start,
|
||||
MSVCRT_atexit_func **end)
|
||||
_onexit_t __dllonexit(_onexit_t func, _onexit_t **start, _onexit_t **end)
|
||||
{
|
||||
MSVCRT_atexit_func *tmp;
|
||||
_onexit_t *tmp;
|
||||
int len;
|
||||
|
||||
TRACE("(%p,%p,%p)\n", func, start, end);
|
||||
@ -62,7 +62,7 @@ MSVCRT_atexit_func __dllonexit(MSVCRT_atexit_func func,
|
||||
if (++len <= 0)
|
||||
return NULL;
|
||||
|
||||
tmp = (MSVCRT_atexit_func *)MSVCRT_realloc(*start, len * sizeof(tmp));
|
||||
tmp = (_onexit_t *)MSVCRT_realloc(*start, len * sizeof(tmp));
|
||||
if (!tmp)
|
||||
return NULL;
|
||||
*start = tmp;
|
||||
@ -145,7 +145,7 @@ void MSVCRT__cexit(void)
|
||||
/*********************************************************************
|
||||
* _onexit (MSVCRT.@)
|
||||
*/
|
||||
MSVCRT_atexit_func _onexit(MSVCRT_atexit_func func)
|
||||
_onexit_t _onexit(_onexit_t func)
|
||||
{
|
||||
TRACE("(%p)\n",func);
|
||||
|
||||
@ -155,7 +155,7 @@ void MSVCRT__cexit(void)
|
||||
LOCK_EXIT;
|
||||
if (MSVCRT_atexit_registered > MSVCRT_atexit_table_size - 1)
|
||||
{
|
||||
MSVCRT_atexit_func *newtable;
|
||||
_onexit_t *newtable;
|
||||
TRACE("expanding table\n");
|
||||
newtable = MSVCRT_calloc(sizeof(void *),MSVCRT_atexit_table_size + 32);
|
||||
if (!newtable)
|
||||
@ -191,7 +191,7 @@ void MSVCRT_exit(int exitcode)
|
||||
/*********************************************************************
|
||||
* atexit (MSVCRT.@)
|
||||
*/
|
||||
int MSVCRT_atexit(MSVCRT_atexit_func func)
|
||||
int MSVCRT_atexit(_onexit_t func)
|
||||
{
|
||||
TRACE("(%p)\n", func);
|
||||
return _onexit(func) == func ? 0 : -1;
|
||||
|
@ -7,99 +7,34 @@
|
||||
* Copyright 2000 Jon Griffiths
|
||||
*/
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "ntddk.h"
|
||||
#include "msvcrt.h"
|
||||
#include "ms_errno.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
#include "wine/unicode.h"
|
||||
#include "msvcrt/direct.h"
|
||||
#include "msvcrt/fcntl.h"
|
||||
#include "msvcrt/io.h"
|
||||
#include "msvcrt/stdio.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/string.h"
|
||||
#include "msvcrt/sys/stat.h"
|
||||
#include "msvcrt/sys/utime.h"
|
||||
#include "msvcrt/time.h"
|
||||
|
||||
/* stat() mode bits */
|
||||
#define _S_IFMT 0xF000
|
||||
#define _S_IFREG 0x8000
|
||||
#define _S_IFDIR 0x4000
|
||||
#define _S_IFCHR 0x2000
|
||||
#define _S_IFIFO 0x1000
|
||||
#define _S_IFBLK 0x3000
|
||||
#define _S_IREAD 0x0100
|
||||
#define _S_IWRITE 0x0080
|
||||
#define _S_IEXEC 0x0040
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* for stat mode, permissions apply to all,owner and group */
|
||||
#define MSVCRT_S_IREAD (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6))
|
||||
#define MSVCRT_S_IWRITE (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
|
||||
#define MSVCRT_S_IEXEC (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6))
|
||||
|
||||
/* _open modes */
|
||||
#define _O_RDONLY 0x0000
|
||||
#define _O_WRONLY 0x0001
|
||||
#define _O_RDWR 0x0002
|
||||
#define _O_APPEND 0x0008
|
||||
#define _O_CREAT 0x0100
|
||||
#define _O_TRUNC 0x0200
|
||||
#define _O_EXCL 0x0400
|
||||
#define _O_TEXT 0x4000
|
||||
#define _O_BINARY 0x8000
|
||||
#define _O_TEMPORARY 0x0040 /* Will be closed and deleted on exit */
|
||||
|
||||
/* _access() bit flags FIXME: incomplete */
|
||||
#define W_OK 2
|
||||
|
||||
typedef struct _crtfile
|
||||
{
|
||||
char* _ptr;
|
||||
int _cnt;
|
||||
char* _base;
|
||||
int _flag;
|
||||
int _file; /* fd */
|
||||
int _charbuf;
|
||||
int _bufsiz;
|
||||
char *_tmpfname;
|
||||
} MSVCRT_FILE;
|
||||
|
||||
/* file._flag flags */
|
||||
#define _IOREAD 0x0001
|
||||
#define _IOWRT 0x0002
|
||||
#define _IOEOF 0x0010
|
||||
#define _IOERR 0x0020
|
||||
#define _IORW 0x0080
|
||||
#define _IOAPPEND 0x0200
|
||||
|
||||
#define SEEK_SET 0
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
#define _IOFBF 0
|
||||
#define _IOLBF 1
|
||||
#define _IONBF 2
|
||||
|
||||
#define BUFSIZ 512
|
||||
|
||||
#define MSVCRT_stdin (&MSVCRT__iob[0])
|
||||
#define MSVCRT_stdout (&MSVCRT__iob[1])
|
||||
#define MSVCRT_stderr (&MSVCRT__iob[2])
|
||||
|
||||
struct _stat
|
||||
{
|
||||
unsigned short st_dev;
|
||||
unsigned short st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
unsigned int st_rdev;
|
||||
int st_size;
|
||||
int st_atime;
|
||||
int st_mtime;
|
||||
int st_ctime;
|
||||
};
|
||||
|
||||
typedef long MSVCRT_fpos_t;
|
||||
|
||||
struct _utimbuf
|
||||
{
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
|
||||
/* FIXME: Make this dynamic */
|
||||
#define MSVCRT_MAX_FILES 257
|
||||
@ -109,6 +44,9 @@ MSVCRT_FILE* MSVCRT_files[MSVCRT_MAX_FILES];
|
||||
int MSVCRT_flags[MSVCRT_MAX_FILES];
|
||||
char *MSVCRT_tempfiles[MSVCRT_MAX_FILES];
|
||||
MSVCRT_FILE MSVCRT__iob[3];
|
||||
#define MSVCRT_stdin (MSVCRT__iob+STDIN_FILENO)
|
||||
#define MSVCRT_stdout (MSVCRT__iob+STDOUT_FILENO)
|
||||
#define MSVCRT_stderr (MSVCRT__iob+STDERR_FILENO)
|
||||
|
||||
static int MSVCRT_fdstart = 3; /* first unallocated fd */
|
||||
static int MSVCRT_fdend = 3; /* highest allocated fd */
|
||||
@ -134,14 +72,6 @@ extern CRITICAL_SECTION MSVCRT_file_cs;
|
||||
#define LOCK_FILES EnterCriticalSection(&MSVCRT_file_cs)
|
||||
#define UNLOCK_FILES LeaveCriticalSection(&MSVCRT_file_cs)
|
||||
|
||||
time_t MSVCRT_time(time_t *);
|
||||
int _getdrive(void);
|
||||
WCHAR *_wcsdup(const WCHAR *);
|
||||
unsigned int wcslen(const WCHAR*);
|
||||
int iswalpha(WCHAR);
|
||||
int towupper(WCHAR);
|
||||
int towlower(WCHAR);
|
||||
int _vsnwprintf(WCHAR *,unsigned int,const WCHAR *,va_list);
|
||||
|
||||
/* INTERNAL: Get the HANDLE for a fd */
|
||||
static HANDLE msvcrt_fdtoh(int fd)
|
||||
@ -656,7 +586,7 @@ int _futime(int fd, struct _utimbuf *t)
|
||||
|
||||
if (!t)
|
||||
{
|
||||
time_t currTime;
|
||||
MSVCRT_time_t currTime;
|
||||
MSVCRT_time(&currTime);
|
||||
RtlSecondsSince1970ToTime(currTime, &at);
|
||||
memcpy(&wt, &at, sizeof(wt));
|
||||
@ -681,7 +611,7 @@ int _futime(int fd, struct _utimbuf *t)
|
||||
/*********************************************************************
|
||||
* _get_osfhandle (MSVCRT.@)
|
||||
*/
|
||||
HANDLE _get_osfhandle(int fd)
|
||||
long _get_osfhandle(int fd)
|
||||
{
|
||||
HANDLE hand = msvcrt_fdtoh(fd);
|
||||
HANDLE newhand = hand;
|
||||
@ -789,7 +719,7 @@ WCHAR *_wmktemp(WCHAR *pattern)
|
||||
/*********************************************************************
|
||||
* _open (MSVCRT.@)
|
||||
*/
|
||||
int _open(const char *path,int flags)
|
||||
int _open(const char *path,int flags,...)
|
||||
{
|
||||
DWORD access = 0, creation = 0;
|
||||
int ioflag = 0, fd;
|
||||
@ -875,9 +805,9 @@ int _open(const char *path,int flags)
|
||||
/*********************************************************************
|
||||
* _wopen (MSVCRT.@)
|
||||
*/
|
||||
int _wopen(const WCHAR *path,int flags)
|
||||
int _wopen(const WCHAR *path,int flags,...)
|
||||
{
|
||||
const unsigned int len = wcslen(path);
|
||||
const unsigned int len = strlenW(path);
|
||||
char *patha = MSVCRT_calloc(len + 1,1);
|
||||
if (patha && WideCharToMultiByte(CP_ACP,0,path,len,patha,len,NULL,NULL))
|
||||
{
|
||||
@ -919,10 +849,10 @@ int _wcreat(const WCHAR *path, int flags)
|
||||
/*********************************************************************
|
||||
* _open_osfhandle (MSVCRT.@)
|
||||
*/
|
||||
int _open_osfhandle(HANDLE hand, int flags)
|
||||
int _open_osfhandle(long hand, int flags)
|
||||
{
|
||||
int fd = msvcrt_alloc_fd(hand,flags);
|
||||
TRACE(":handle (%d) fd (%d)\n",hand,fd);
|
||||
TRACE(":handle (%ld) fd (%d)\n",hand,fd);
|
||||
return fd;
|
||||
}
|
||||
|
||||
@ -1057,7 +987,7 @@ int _stat(const char* path, struct _stat * buf)
|
||||
buf->st_atime = dw;
|
||||
RtlTimeToSecondsSince1970(&hfi.ftLastWriteTime, &dw);
|
||||
buf->st_mtime = buf->st_ctime = dw;
|
||||
TRACE("\n%d %d %d %d %d %d\n", buf->st_mode,buf->st_nlink,buf->st_size,
|
||||
TRACE("\n%d %d %d %ld %ld %ld\n", buf->st_mode,buf->st_nlink,buf->st_size,
|
||||
buf->st_atime,buf->st_mtime, buf->st_ctime);
|
||||
return 0;
|
||||
}
|
||||
@ -1083,13 +1013,13 @@ int _wstat(const WCHAR* path, struct _stat * buf)
|
||||
|
||||
memset(buf,0,sizeof(struct _stat));
|
||||
|
||||
/* FIXME: rdev isnt drive num,despite what the docs say-what is it? */
|
||||
if (iswalpha(*path))
|
||||
buf->st_dev = buf->st_rdev = towupper(*path - (WCHAR)L'A'); /* drive num */
|
||||
/* FIXME: rdev isn't drive num, despite what the docs says-what is it? */
|
||||
if (MSVCRT_iswalpha(*path))
|
||||
buf->st_dev = buf->st_rdev = toupperW(*path - (WCHAR)L'A'); /* drive num */
|
||||
else
|
||||
buf->st_dev = buf->st_rdev = _getdrive() - 1;
|
||||
|
||||
plen = wcslen(path);
|
||||
plen = strlenW(path);
|
||||
|
||||
/* Dir, or regular file? */
|
||||
if ((hfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
|
||||
@ -1101,8 +1031,8 @@ int _wstat(const WCHAR* path, struct _stat * buf)
|
||||
/* executable? */
|
||||
if (plen > 6 && path[plen-4] == (WCHAR)L'.') /* shortest exe: "\x.exe" */
|
||||
{
|
||||
ULONGLONG ext = towlower(path[plen-1]) | (towlower(path[plen-2]) << 16) |
|
||||
((ULONGLONG)towlower(path[plen-3]) << 32);
|
||||
ULONGLONG ext = tolowerW(path[plen-1]) | (tolowerW(path[plen-2]) << 16) |
|
||||
((ULONGLONG)tolowerW(path[plen-3]) << 32);
|
||||
if (ext == WCEXE || ext == WCBAT || ext == WCCMD || ext == WCCOM)
|
||||
mode |= MSVCRT_S_IEXEC;
|
||||
}
|
||||
@ -1118,7 +1048,7 @@ int _wstat(const WCHAR* path, struct _stat * buf)
|
||||
buf->st_atime = dw;
|
||||
RtlTimeToSecondsSince1970(&hfi.ftLastWriteTime, &dw);
|
||||
buf->st_mtime = buf->st_ctime = dw;
|
||||
TRACE("\n%d %d %d %d %d %d\n", buf->st_mode,buf->st_nlink,buf->st_size,
|
||||
TRACE("\n%d %d %d %ld %ld %ld\n", buf->st_mode,buf->st_nlink,buf->st_size,
|
||||
buf->st_atime,buf->st_mtime, buf->st_ctime);
|
||||
return 0;
|
||||
}
|
||||
@ -1211,7 +1141,7 @@ int _wutime(const WCHAR* path, struct _utimbuf *t)
|
||||
/*********************************************************************
|
||||
* _write (MSVCRT.@)
|
||||
*/
|
||||
unsigned int _write(int fd, const void* buf, unsigned int count)
|
||||
int _write(int fd, const void* buf, unsigned int count)
|
||||
{
|
||||
DWORD num_written;
|
||||
HANDLE hand = msvcrt_fdtoh(fd);
|
||||
@ -1366,9 +1296,9 @@ char *MSVCRT_fgets(char *s, int size, MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* fgetwc (MSVCRT.@)
|
||||
*/
|
||||
WCHAR MSVCRT_fgetwc(MSVCRT_FILE* file)
|
||||
MSVCRT_wint_t MSVCRT_fgetwc(MSVCRT_FILE* file)
|
||||
{
|
||||
WCHAR wc;
|
||||
MSVCRT_wint_t wc;
|
||||
if (_read(file->_file, &wc, sizeof(wc)) != sizeof(wc))
|
||||
return MSVCRT_WEOF;
|
||||
return wc;
|
||||
@ -1377,7 +1307,7 @@ WCHAR MSVCRT_fgetwc(MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* getwc (MSVCRT.@)
|
||||
*/
|
||||
WCHAR MSVCRT_getwc(MSVCRT_FILE* file)
|
||||
MSVCRT_wint_t MSVCRT_getwc(MSVCRT_FILE* file)
|
||||
{
|
||||
return MSVCRT_fgetwc(file);
|
||||
}
|
||||
@ -1385,7 +1315,7 @@ WCHAR MSVCRT_getwc(MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* _fgetwchar (MSVCRT.@)
|
||||
*/
|
||||
WCHAR _fgetwchar(void)
|
||||
MSVCRT_wint_t _fgetwchar(void)
|
||||
{
|
||||
return MSVCRT_fgetwc(MSVCRT_stdin);
|
||||
}
|
||||
@ -1393,7 +1323,7 @@ WCHAR _fgetwchar(void)
|
||||
/*********************************************************************
|
||||
* getwchar (MSVCRT.@)
|
||||
*/
|
||||
WCHAR MSVCRT_getwchar(void)
|
||||
MSVCRT_wint_t MSVCRT_getwchar(void)
|
||||
{
|
||||
return _fgetwchar();
|
||||
}
|
||||
@ -1401,7 +1331,7 @@ WCHAR MSVCRT_getwchar(void)
|
||||
/*********************************************************************
|
||||
* fputwc (MSVCRT.@)
|
||||
*/
|
||||
WCHAR MSVCRT_fputwc(WCHAR wc, MSVCRT_FILE* file)
|
||||
MSVCRT_wint_t MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file)
|
||||
{
|
||||
if (_write(file->_file, &wc, sizeof(wc)) != sizeof(wc))
|
||||
return MSVCRT_WEOF;
|
||||
@ -1411,7 +1341,7 @@ WCHAR MSVCRT_fputwc(WCHAR wc, MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* _fputwchar (MSVCRT.@)
|
||||
*/
|
||||
WCHAR _fputwchar(WCHAR wc)
|
||||
MSVCRT_wint_t _fputwchar(MSVCRT_wint_t wc)
|
||||
{
|
||||
return MSVCRT_fputwc(wc, MSVCRT_stdout);
|
||||
}
|
||||
@ -1482,7 +1412,7 @@ MSVCRT_FILE* MSVCRT_fopen(const char *path, const char *mode)
|
||||
*/
|
||||
MSVCRT_FILE *_wfopen(const WCHAR *path, const WCHAR *mode)
|
||||
{
|
||||
const unsigned int plen = wcslen(path), mlen = wcslen(mode);
|
||||
const unsigned int plen = strlenW(path), mlen = strlenW(mode);
|
||||
char *patha = MSVCRT_calloc(plen + 1, 1);
|
||||
char *modea = MSVCRT_calloc(mlen + 1, 1);
|
||||
|
||||
@ -1548,9 +1478,9 @@ int _fputchar(int c)
|
||||
/*********************************************************************
|
||||
* fread (MSVCRT.@)
|
||||
*/
|
||||
DWORD MSVCRT_fread(void *ptr, int size, int nmemb, MSVCRT_FILE* file)
|
||||
MSVCRT_size_t MSVCRT_fread(void *ptr, MSVCRT_size_t size, MSVCRT_size_t nmemb, MSVCRT_FILE* file)
|
||||
{
|
||||
DWORD read = _read(file->_file,ptr, size * nmemb);
|
||||
int read = _read(file->_file,ptr, size * nmemb);
|
||||
if (read <= 0)
|
||||
return 0;
|
||||
return read / size;
|
||||
@ -1615,7 +1545,7 @@ int MSVCRT_fsetpos(MSVCRT_FILE* file, MSVCRT_fpos_t *pos)
|
||||
*/
|
||||
int MSVCRT_fscanf(MSVCRT_FILE* file, const char *format, ...)
|
||||
{
|
||||
/* NOTE: If you extend this function, extend _cscanf in console.c too */
|
||||
/* NOTE: If you extend this function, extend MSVCRT__cscanf in console.c too */
|
||||
int rd = 0;
|
||||
int nch;
|
||||
va_list ap;
|
||||
@ -1736,7 +1666,7 @@ int MSVCRT_fscanf(MSVCRT_FILE* file, const char *format, ...)
|
||||
/*********************************************************************
|
||||
* fseek (MSVCRT.@)
|
||||
*/
|
||||
LONG MSVCRT_fseek(MSVCRT_FILE* file, LONG offset, int whence)
|
||||
int MSVCRT_fseek(MSVCRT_FILE* file, long offset, int whence)
|
||||
{
|
||||
return _lseek(file->_file,offset,whence);
|
||||
}
|
||||
@ -1752,9 +1682,9 @@ LONG MSVCRT_ftell(MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* fwrite (MSVCRT.@)
|
||||
*/
|
||||
unsigned int MSVCRT_fwrite(const void *ptr, int size, int nmemb, MSVCRT_FILE* file)
|
||||
MSVCRT_size_t MSVCRT_fwrite(const void *ptr, MSVCRT_size_t size, MSVCRT_size_t nmemb, MSVCRT_FILE* file)
|
||||
{
|
||||
unsigned int written = _write(file->_file, ptr, size * nmemb);
|
||||
int written = _write(file->_file, ptr, size * nmemb);
|
||||
if (written <= 0)
|
||||
return 0;
|
||||
return written / size;
|
||||
@ -1773,7 +1703,7 @@ int MSVCRT_fputs(const char *s, MSVCRT_FILE* file)
|
||||
*/
|
||||
int MSVCRT_fputws(const WCHAR *s, MSVCRT_FILE* file)
|
||||
{
|
||||
return MSVCRT_fwrite(s,wcslen(s),1,file) == 1 ? 0 : MSVCRT_EOF;
|
||||
return MSVCRT_fwrite(s,strlenW(s),1,file) == 1 ? 0 : MSVCRT_EOF;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
@ -1825,9 +1755,9 @@ int MSVCRT_putc(int c, MSVCRT_FILE* file)
|
||||
/*********************************************************************
|
||||
* putchar (MSVCRT.@)
|
||||
*/
|
||||
void MSVCRT_putchar(int c)
|
||||
int MSVCRT_putchar(int c)
|
||||
{
|
||||
MSVCRT_fputc(c, MSVCRT_stdout);
|
||||
return MSVCRT_fputc(c, MSVCRT_stdout);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
@ -1847,7 +1777,7 @@ int MSVCRT_puts(const char *s)
|
||||
int _putws(const WCHAR *s)
|
||||
{
|
||||
static const WCHAR nl = (WCHAR)L'\n';
|
||||
if (MSVCRT_fwrite(s,wcslen(s),1,MSVCRT_stdout) == 1)
|
||||
if (MSVCRT_fwrite(s,strlenW(s),1,MSVCRT_stdout) == 1)
|
||||
return MSVCRT_fwrite(&nl,sizeof(nl),1,MSVCRT_stdout) == 1 ? 0 : MSVCRT_EOF;
|
||||
return MSVCRT_EOF;
|
||||
}
|
||||
@ -1921,9 +1851,10 @@ int _wrename(const WCHAR *oldpath,const WCHAR *newpath)
|
||||
/*********************************************************************
|
||||
* setvbuf (MSVCRT.@)
|
||||
*/
|
||||
void MSVCRT_setvbuf(MSVCRT_FILE* file, char *buf, int mode, unsigned int size)
|
||||
int MSVCRT_setvbuf(MSVCRT_FILE* file, char *buf, int mode, MSVCRT_size_t size)
|
||||
{
|
||||
FIXME("(%p,%p,%d,%d)stub\n",file, buf, mode, size);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
@ -1931,7 +1862,7 @@ void MSVCRT_setvbuf(MSVCRT_FILE* file, char *buf, int mode, unsigned int size)
|
||||
*/
|
||||
void MSVCRT_setbuf(MSVCRT_FILE* file, char *buf)
|
||||
{
|
||||
MSVCRT_setvbuf(file, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
|
||||
MSVCRT_setvbuf(file, buf, buf ? MSVCRT__IOFBF : MSVCRT__IONBF, BUFSIZ);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
@ -1964,7 +1895,6 @@ MSVCRT_FILE* MSVCRT_tmpfile(void)
|
||||
return msvcrt_alloc_fp(fd);
|
||||
return NULL;
|
||||
}
|
||||
extern int vsnprintf(void *, unsigned int, const void*, va_list);
|
||||
|
||||
/*********************************************************************
|
||||
* vfprintf (MSVCRT.@)
|
||||
|
@ -9,6 +9,9 @@
|
||||
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* MT */
|
||||
|
@ -111,17 +111,9 @@ static int compare_info(LCID lcid, DWORD flags, char* buff, const char* cmp)
|
||||
return !strncasecmp(cmp, buff, strlen(cmp));
|
||||
}
|
||||
|
||||
|
||||
/* INTERNAL: Callback for enumerated languages */
|
||||
#ifdef __GNUC__
|
||||
#define UNUSED __attribute__((unused))
|
||||
#else
|
||||
#define UNUSED
|
||||
#endif
|
||||
|
||||
static BOOL CALLBACK
|
||||
find_best_locale_proc(HMODULE hModule UNUSED, LPCSTR type UNUSED,
|
||||
LPCSTR name UNUSED, WORD LangID, LONG lParam)
|
||||
find_best_locale_proc(HMODULE hModule WINE_UNUSED, LPCSTR type WINE_UNUSED,
|
||||
LPCSTR name WINE_UNUSED, WORD LangID, LONG lParam)
|
||||
{
|
||||
locale_search_t *res = (locale_search_t *)lParam;
|
||||
const LCID lcid = MAKELCID(LangID, SORT_DEFAULT);
|
||||
|
@ -5,6 +5,9 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/stdio.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* Index to TLS */
|
||||
@ -21,11 +24,7 @@ static inline BOOL msvcrt_init_tls(void);
|
||||
static inline BOOL msvcrt_free_tls(void);
|
||||
static inline void msvcrt_init_critical_sections(void);
|
||||
static inline void msvcrt_free_critical_sections(void);
|
||||
#ifdef __GNUC__
|
||||
const char *msvcrt_get_reason(DWORD reason) __attribute__((unused));
|
||||
#else
|
||||
const char *msvcrt_get_reason(DWORD reason);
|
||||
#endif
|
||||
const char* msvcrt_get_reason(DWORD reason) WINE_UNUSED;
|
||||
|
||||
void msvcrt_init_io(void);
|
||||
void msvcrt_init_console(void);
|
||||
|
@ -14,6 +14,8 @@
|
||||
#include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
#ifndef HAVE_FINITE
|
||||
@ -674,7 +676,7 @@ LONGLONG MSVCRT_div(int num, int denom)
|
||||
* VERSION
|
||||
* [!i386] Non-x86 can't run win32 apps so we don't need binary compatibility
|
||||
*/
|
||||
div_t MSVCRT_div(int num, int denom)
|
||||
MSVCRT_div_t MSVCRT_div(int num, int denom)
|
||||
{
|
||||
return div(num,denom);
|
||||
}
|
||||
@ -700,7 +702,7 @@ ULONGLONG MSVCRT_ldiv(long num, long denom)
|
||||
* VERSION
|
||||
* [!i386] Non-x86 can't run win32 apps so we don't need binary compatibility
|
||||
*/
|
||||
ldiv_t MSVCRT_ldiv(long num, long denom)
|
||||
MSVCRT_ldiv_t MSVCRT_ldiv(long num, long denom)
|
||||
{
|
||||
return ldiv(num,denom);
|
||||
}
|
||||
|
@ -10,6 +10,9 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/string.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
unsigned char MSVCRT_mbctype[257];
|
||||
@ -428,7 +431,7 @@ char *_mbsncpy(char *dst, const char *src, unsigned int len)
|
||||
*
|
||||
* Find a multibyte character in a multibyte string.
|
||||
*/
|
||||
char *_mbschr(const char *str, unsigned int c)
|
||||
unsigned char* _mbschr(const unsigned char* str, unsigned int c)
|
||||
{
|
||||
if(MSVCRT___mb_cur_max > 1)
|
||||
{
|
||||
@ -472,7 +475,7 @@ unsigned int _mbsnccnt(const unsigned char *str, unsigned int len)
|
||||
/*********************************************************************
|
||||
* _mbsncat(MSVCRT.@)
|
||||
*/
|
||||
char *_mbsncat(char *dst, const unsigned char *src, unsigned int len)
|
||||
unsigned char* _mbsncat(unsigned char* dst, const unsigned char* src, MSVCRT_size_t len)
|
||||
{
|
||||
if(MSVCRT___mb_cur_max > 1)
|
||||
{
|
||||
|
@ -6,6 +6,10 @@
|
||||
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
typedef int (*MSVCRT_comp_func)(const void*, const void*);
|
||||
@ -19,8 +23,6 @@ void _beep( unsigned int freq, unsigned int duration)
|
||||
Beep(freq, duration);
|
||||
}
|
||||
|
||||
extern int rand(void);
|
||||
|
||||
/*********************************************************************
|
||||
* rand (MSVCRT.@)
|
||||
*/
|
||||
|
@ -11,10 +11,6 @@
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Files */
|
||||
#define MSVCRT_EOF -1
|
||||
#define MSVCRT_WEOF (WCHAR)(0xFFFF)
|
||||
|
||||
/* TLS data */
|
||||
extern DWORD MSVCRT_tls_index;
|
||||
|
||||
@ -33,14 +29,13 @@ typedef struct __MSVCRT_thread_data
|
||||
#define SET_THREAD_VAR(x,y) \
|
||||
((MSVCRT_thread_data*)TlsGetValue(MSVCRT_tls_index))->x = y
|
||||
|
||||
void MSVCRT__set_errno(int);
|
||||
int MSVCRT__set_new_mode(int mode);
|
||||
int _fcloseall(void);
|
||||
void* MSVCRT_malloc(unsigned int);
|
||||
void* MSVCRT_calloc(unsigned int, unsigned int);
|
||||
void MSVCRT_free(void *);
|
||||
int _cputs(const char *);
|
||||
int _cprintf( const char *, ... );
|
||||
char* _strdup(const char *);
|
||||
void MSVCRT__set_errno(int);
|
||||
char* msvcrt_strndup(const char*,unsigned int);
|
||||
LPWSTR msvcrt_wstrndup(LPCWSTR, unsigned int);
|
||||
|
||||
/* FIXME: This should be declared in new.h but it's not an extern "C" so
|
||||
* it would not be much use anyway. Even for Winelib applications.
|
||||
*/
|
||||
int MSVCRT__set_new_mode(int mode);
|
||||
|
||||
#endif /* __WINE_MSVCRT_H */
|
||||
|
@ -470,8 +470,8 @@ debug_channels (msvcrt)
|
||||
@ cdecl _strtime(str) _strtime
|
||||
@ forward -noimport _strupr ntdll._strupr
|
||||
@ cdecl _swab(str str long) _swab
|
||||
@ stub _sys_errlist #() # FIXME: This is supposed to be a variable!
|
||||
@ stub _sys_nerr #() # FIXME: This is supposed to be a variable!
|
||||
@ extern _sys_errlist MSVCRT__sys_errlist
|
||||
@ extern _sys_nerr MSVCRT__sys_nerr
|
||||
@ cdecl _tell(long) _tell
|
||||
@ stub _telli64 #(long)
|
||||
@ cdecl _tempnam(str str) _tempnam
|
||||
|
@ -14,18 +14,11 @@
|
||||
#include "msvcrt.h"
|
||||
#include "ms_errno.h"
|
||||
|
||||
#include "msvcrt/process.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* Process creation flags */
|
||||
#define _P_WAIT 0
|
||||
#define _P_NOWAIT 1
|
||||
#define _P_OVERLAY 2
|
||||
#define _P_NOWAITO 3
|
||||
#define _P_DETACH 4
|
||||
|
||||
void MSVCRT__exit(int);
|
||||
void _searchenv(const char* file, const char* env, char *buf);
|
||||
|
||||
/* FIXME: Check file extensions for app to run */
|
||||
static const unsigned int EXE = 'e' << 16 | 'x' << 8 | 'e';
|
||||
static const unsigned int BAT = 'b' << 16 | 'a' << 8 | 't';
|
||||
@ -83,9 +76,9 @@ static int msvcrt_spawn(int flags, const char* exe, char* args, char* env)
|
||||
}
|
||||
|
||||
/* INTERNAL: Convert argv list to a single 'delim'-separated string */
|
||||
static char* msvcrt_argvtos(const char* *arg, char delim)
|
||||
static char* msvcrt_argvtos(const char* const* arg, char delim)
|
||||
{
|
||||
const char **search = arg;
|
||||
const char* const* search = arg;
|
||||
long size = 0;
|
||||
char *ret;
|
||||
|
||||
@ -152,8 +145,8 @@ int _cwait(int *status, int pid, int action)
|
||||
/*********************************************************************
|
||||
* _spawnve (MSVCRT.@)
|
||||
*/
|
||||
int _spawnve(int flags, const char* name, const char **argv,
|
||||
const char **envv)
|
||||
int _spawnve(int flags, const char* name, const char* const* argv,
|
||||
const char* const* envv)
|
||||
{
|
||||
char * args = msvcrt_argvtos(argv,' ');
|
||||
char * envs = msvcrt_argvtos(envv,0);
|
||||
@ -177,7 +170,7 @@ int _spawnve(int flags, const char* name, const char **argv,
|
||||
/*********************************************************************
|
||||
* _spawnv (MSVCRT.@)
|
||||
*/
|
||||
int _spawnv(int flags, const char* name, const char **argv)
|
||||
int _spawnv(int flags, const char* name, const char* const* argv)
|
||||
{
|
||||
return _spawnve(flags, name, argv, NULL);
|
||||
}
|
||||
@ -185,8 +178,8 @@ int _spawnv(int flags, const char* name, const char **argv)
|
||||
/*********************************************************************
|
||||
* _spawnvpe (MSVCRT.@)
|
||||
*/
|
||||
int _spawnvpe(int flags, const char* name, const char **argv,
|
||||
const char **envv)
|
||||
int _spawnvpe(int flags, const char* name, const char* const* argv,
|
||||
const char* const* envv)
|
||||
{
|
||||
char fullname[MAX_PATH];
|
||||
_searchenv(name, "PATH", fullname);
|
||||
@ -196,7 +189,7 @@ int _spawnvpe(int flags, const char* name, const char **argv,
|
||||
/*********************************************************************
|
||||
* _spawnvp (MSVCRT.@)
|
||||
*/
|
||||
int _spawnvp(int flags, const char* name, const char **argv)
|
||||
int _spawnvp(int flags, const char* name, const char* const* argv)
|
||||
{
|
||||
return _spawnvpe(flags, name, argv, NULL);
|
||||
}
|
||||
|
@ -8,6 +8,8 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/string.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
*/
|
||||
#include "msvcrt.h"
|
||||
|
||||
#include "msvcrt/process.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
@ -13,7 +15,7 @@ DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
*/
|
||||
unsigned long _beginthreadex(void* sec,
|
||||
unsigned int stack,
|
||||
LPTHREAD_START_ROUTINE start,
|
||||
unsigned __stdcall (*start)(void*),
|
||||
void* arg, unsigned int flag,
|
||||
unsigned int* addr)
|
||||
{
|
||||
|
@ -10,21 +10,18 @@
|
||||
#include <sys/times.h>
|
||||
#include "msvcrt.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/sys/timeb.h"
|
||||
#include "msvcrt/time.h"
|
||||
|
||||
typedef struct __MSVCRT_timeb
|
||||
{
|
||||
time_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
} MSVCRT_timeb;
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
/* INTERNAL: Return formatted current time/date */
|
||||
char* msvcrt_get_current_time(char* out, const char* format)
|
||||
{
|
||||
static const time_t bad_time = (time_t)-1;
|
||||
static const MSVCRT_time_t bad_time = (MSVCRT_time_t)-1;
|
||||
time_t t;
|
||||
struct tm *_tm = NULL;
|
||||
char *retval = NULL;
|
||||
@ -73,7 +70,7 @@ clock_t MSVCRT_clock(void)
|
||||
/*********************************************************************
|
||||
* difftime (MSVCRT.@)
|
||||
*/
|
||||
double MSVCRT_difftime(time_t time1, time_t time2)
|
||||
double MSVCRT_difftime(MSVCRT_time_t time1, MSVCRT_time_t time2)
|
||||
{
|
||||
return (double)(time1 - time2);
|
||||
}
|
||||
@ -81,16 +78,16 @@ double MSVCRT_difftime(time_t time1, time_t time2)
|
||||
/*********************************************************************
|
||||
* time (MSVCRT.@)
|
||||
*/
|
||||
time_t MSVCRT_time(time_t* buf)
|
||||
MSVCRT_time_t MSVCRT_time(MSVCRT_time_t* buf)
|
||||
{
|
||||
time_t curtime = time(NULL);
|
||||
MSVCRT_time_t curtime = time(NULL);
|
||||
return buf ? *buf = curtime : curtime;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _ftime (MSVCRT.@)
|
||||
*/
|
||||
void _ftime(MSVCRT_timeb* buf)
|
||||
void _ftime(struct _timeb *buf)
|
||||
{
|
||||
buf->time = MSVCRT_time(NULL);
|
||||
buf->millitm = 0; /* FIXME */
|
||||
|
@ -10,11 +10,16 @@
|
||||
#include "winnls.h"
|
||||
#include "wine/unicode.h"
|
||||
|
||||
#include "msvcrt/stdio.h"
|
||||
#include "msvcrt/stdlib.h"
|
||||
#include "msvcrt/string.h"
|
||||
#include "msvcrt/wctype.h"
|
||||
|
||||
DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
/* INTERNAL: MSVCRT_malloc() based wstrndup */
|
||||
LPWSTR msvcrt_wstrndup(LPCWSTR buf, unsigned int size)
|
||||
WCHAR* msvcrt_wstrndup(LPCWSTR buf, unsigned int size)
|
||||
{
|
||||
WCHAR* ret;
|
||||
unsigned int len = strlenW(buf), max_len;
|
||||
@ -33,9 +38,9 @@ LPWSTR msvcrt_wstrndup(LPCWSTR buf, unsigned int size)
|
||||
/*********************************************************************
|
||||
* _wcsdup (MSVCRT.@)
|
||||
*/
|
||||
LPWSTR _wcsdup( LPCWSTR str )
|
||||
WCHAR* _wcsdup( const WCHAR* str )
|
||||
{
|
||||
LPWSTR ret = NULL;
|
||||
WCHAR* ret = NULL;
|
||||
if (str)
|
||||
{
|
||||
int size = (strlenW(str) + 1) * sizeof(WCHAR);
|
||||
@ -48,7 +53,7 @@ LPWSTR _wcsdup( LPCWSTR str )
|
||||
/*********************************************************************
|
||||
* _wcsicoll (MSVCRT.@)
|
||||
*/
|
||||
INT _wcsicoll( LPCWSTR str1, LPCWSTR str2 )
|
||||
INT _wcsicoll( const WCHAR* str1, const WCHAR* str2 )
|
||||
{
|
||||
/* FIXME: handle collates */
|
||||
return strcmpiW( str1, str2 );
|
||||
@ -57,9 +62,9 @@ INT _wcsicoll( LPCWSTR str1, LPCWSTR str2 )
|
||||
/*********************************************************************
|
||||
* _wcsnset (MSVCRT.@)
|
||||
*/
|
||||
LPWSTR _wcsnset( LPWSTR str, WCHAR c, INT n )
|
||||
WCHAR* _wcsnset( WCHAR* str, WCHAR c, MSVCRT_size_t n )
|
||||
{
|
||||
LPWSTR ret = str;
|
||||
WCHAR* ret = str;
|
||||
while ((n-- > 0) && *str) *str++ = c;
|
||||
return ret;
|
||||
}
|
||||
@ -67,10 +72,10 @@ LPWSTR _wcsnset( LPWSTR str, WCHAR c, INT n )
|
||||
/*********************************************************************
|
||||
* _wcsrev (MSVCRT.@)
|
||||
*/
|
||||
LPWSTR _wcsrev( LPWSTR str )
|
||||
WCHAR* _wcsrev( WCHAR* str )
|
||||
{
|
||||
LPWSTR ret = str;
|
||||
LPWSTR end = str + strlenW(str) - 1;
|
||||
WCHAR* ret = str;
|
||||
WCHAR* end = str + strlenW(str) - 1;
|
||||
while (end > str)
|
||||
{
|
||||
WCHAR t = *end;
|
||||
@ -83,9 +88,9 @@ LPWSTR _wcsrev( LPWSTR str )
|
||||
/*********************************************************************
|
||||
* _wcsset (MSVCRT.@)
|
||||
*/
|
||||
LPWSTR _wcsset( LPWSTR str, WCHAR c )
|
||||
WCHAR* _wcsset( WCHAR* str, WCHAR c )
|
||||
{
|
||||
LPWSTR ret = str;
|
||||
WCHAR* ret = str;
|
||||
while (*str) *str++ = c;
|
||||
return ret;
|
||||
}
|
||||
@ -219,7 +224,7 @@ int _vsnwprintf(WCHAR *str, unsigned int len,
|
||||
/*********************************************************************
|
||||
* vswprintf (MSVCRT.@)
|
||||
*/
|
||||
int MSVCRT_vswprintf( LPWSTR str, LPCWSTR format, va_list args )
|
||||
int MSVCRT_vswprintf( WCHAR* str, const WCHAR* format, va_list args )
|
||||
{
|
||||
return _vsnwprintf( str, INT_MAX, format, args );
|
||||
}
|
||||
@ -227,7 +232,7 @@ int MSVCRT_vswprintf( LPWSTR str, LPCWSTR format, va_list args )
|
||||
/*********************************************************************
|
||||
* wcscoll (MSVCRT.@)
|
||||
*/
|
||||
DWORD MSVCRT_wcscoll( LPCWSTR str1, LPCWSTR str2 )
|
||||
int MSVCRT_wcscoll( const WCHAR* str1, const WCHAR* str2 )
|
||||
{
|
||||
/* FIXME: handle collates */
|
||||
return strcmpW( str1, str2 );
|
||||
@ -236,12 +241,12 @@ DWORD MSVCRT_wcscoll( LPCWSTR str1, LPCWSTR str2 )
|
||||
/*********************************************************************
|
||||
* wcspbrk (MSVCRT.@)
|
||||
*/
|
||||
LPWSTR MSVCRT_wcspbrk( LPCWSTR str, LPCWSTR accept )
|
||||
WCHAR* MSVCRT_wcspbrk( const WCHAR* str, const WCHAR* accept )
|
||||
{
|
||||
LPCWSTR p;
|
||||
const WCHAR* p;
|
||||
while (*str)
|
||||
{
|
||||
for (p = accept; *p; p++) if (*p == *str) return (LPWSTR)str;
|
||||
for (p = accept; *p; p++) if (*p == *str) return (WCHAR*)str;
|
||||
str++;
|
||||
}
|
||||
return NULL;
|
||||
@ -343,10 +348,6 @@ INT MSVCRT_iswxdigit( WCHAR wc )
|
||||
return get_char_typeW(wc) & C1_XDIGIT;
|
||||
}
|
||||
|
||||
extern char *_itoa( long , char *, int);
|
||||
extern char *_ultoa( long , char *, int);
|
||||
extern char *_ltoa( long , char *, int);
|
||||
|
||||
/*********************************************************************
|
||||
* _itow (MSVCRT.@)
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user