Implemented the remaining 64-bit file functions, and added a few other
functions and exported variables. Removed the almost empty lconv.c file.
This commit is contained in:
parent
16e5634a3b
commit
dec198afe0
|
@ -21,7 +21,6 @@ C_SRCS = \
|
|||
exit.c \
|
||||
file.c \
|
||||
heap.c \
|
||||
lconv.c \
|
||||
locale.c \
|
||||
lock.c \
|
||||
main.c \
|
||||
|
|
|
@ -46,8 +46,8 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
/* INTERNAL: Translate finddata_t to PWIN32_FIND_DATAA */
|
||||
static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, struct _finddata_t* ft)
|
||||
/* INTERNAL: Translate WIN32_FIND_DATAA to finddata_t */
|
||||
static void msvcrt_fttofd( const WIN32_FIND_DATAA *fd, struct _finddata_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
|
@ -66,8 +66,8 @@ static void msvcrt_fttofd(LPWIN32_FIND_DATAA fd, struct _finddata_t* ft)
|
|||
strcpy(ft->name, fd->cFileName);
|
||||
}
|
||||
|
||||
/* INTERNAL: Translate wfinddata_t to PWIN32_FIND_DATAA */
|
||||
static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, struct _wfinddata_t* ft)
|
||||
/* INTERNAL: Translate WIN32_FIND_DATAW to wfinddata_t */
|
||||
static void msvcrt_wfttofd( const WIN32_FIND_DATAW *fd, struct _wfinddata_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
|
@ -86,6 +86,46 @@ static void msvcrt_wfttofd(LPWIN32_FIND_DATAW fd, struct _wfinddata_t* ft)
|
|||
strcpyW(ft->name, fd->cFileName);
|
||||
}
|
||||
|
||||
/* INTERNAL: Translate WIN32_FIND_DATAA to finddatai64_t */
|
||||
static void msvcrt_fttofdi64( const WIN32_FIND_DATAA *fd, struct _finddatai64_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
if (fd->dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
|
||||
ft->attrib = 0;
|
||||
else
|
||||
ft->attrib = fd->dwFileAttributes;
|
||||
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftCreationTime, &dw );
|
||||
ft->time_create = dw;
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftLastAccessTime, &dw );
|
||||
ft->time_access = dw;
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftLastWriteTime, &dw );
|
||||
ft->time_write = dw;
|
||||
ft->size = ((__int64)fd->nFileSizeHigh) << 32 | fd->nFileSizeLow;
|
||||
strcpy(ft->name, fd->cFileName);
|
||||
}
|
||||
|
||||
/* INTERNAL: Translate WIN32_FIND_DATAW to wfinddatai64_t */
|
||||
static void msvcrt_wfttofdi64( const WIN32_FIND_DATAW *fd, struct _wfinddatai64_t* ft)
|
||||
{
|
||||
DWORD dw;
|
||||
|
||||
if (fd->dwFileAttributes == FILE_ATTRIBUTE_NORMAL)
|
||||
ft->attrib = 0;
|
||||
else
|
||||
ft->attrib = fd->dwFileAttributes;
|
||||
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftCreationTime, &dw );
|
||||
ft->time_create = dw;
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftLastAccessTime, &dw );
|
||||
ft->time_access = dw;
|
||||
RtlTimeToSecondsSince1970( (LARGE_INTEGER *)&fd->ftLastWriteTime, &dw );
|
||||
ft->time_write = dw;
|
||||
ft->size = ((__int64)fd->nFileSizeHigh) << 32 | fd->nFileSizeLow;
|
||||
strcpyW(ft->name, fd->cFileName);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _chdir (MSVCRT.@)
|
||||
*/
|
||||
|
@ -181,6 +221,44 @@ long _wfindfirst(const MSVCRT_wchar_t * fspec, struct _wfinddata_t* ft)
|
|||
return (long)hfind;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _findfirsti64 (MSVCRT.@)
|
||||
*/
|
||||
long _findfirsti64(const char * fspec, struct _finddatai64_t* ft)
|
||||
{
|
||||
WIN32_FIND_DATAA find_data;
|
||||
HANDLE hfind;
|
||||
|
||||
hfind = FindFirstFileA(fspec, &find_data);
|
||||
if (hfind == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
MSVCRT__set_errno(GetLastError());
|
||||
return -1;
|
||||
}
|
||||
msvcrt_fttofdi64(&find_data,ft);
|
||||
TRACE(":got handle %p\n",hfind);
|
||||
return (long)hfind;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _wfindfirsti64 (MSVCRT.@)
|
||||
*/
|
||||
long _wfindfirsti64(const MSVCRT_wchar_t * fspec, struct _wfinddatai64_t* ft)
|
||||
{
|
||||
WIN32_FIND_DATAW find_data;
|
||||
HANDLE hfind;
|
||||
|
||||
hfind = FindFirstFileW(fspec, &find_data);
|
||||
if (hfind == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
MSVCRT__set_errno(GetLastError());
|
||||
return -1;
|
||||
}
|
||||
msvcrt_wfttofdi64(&find_data,ft);
|
||||
TRACE(":got handle %p\n",hfind);
|
||||
return (long)hfind;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _findnext (MSVCRT.@)
|
||||
*/
|
||||
|
@ -215,6 +293,40 @@ int _wfindnext(long hand, struct _wfinddata_t * ft)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _findnexti64 (MSVCRT.@)
|
||||
*/
|
||||
int _findnexti64(long hand, struct _finddatai64_t * ft)
|
||||
{
|
||||
WIN32_FIND_DATAA find_data;
|
||||
|
||||
if (!FindNextFileA((HANDLE)hand, &find_data))
|
||||
{
|
||||
*MSVCRT__errno() = MSVCRT_ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
msvcrt_fttofdi64(&find_data,ft);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _wfindnexti64 (MSVCRT.@)
|
||||
*/
|
||||
int _wfindnexti64(long hand, struct _wfinddatai64_t * ft)
|
||||
{
|
||||
WIN32_FIND_DATAW find_data;
|
||||
|
||||
if (!FindNextFileW((HANDLE)hand, &find_data))
|
||||
{
|
||||
*MSVCRT__errno() = MSVCRT_ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
msvcrt_wfttofdi64(&find_data,ft);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _getcwd (MSVCRT.@)
|
||||
*/
|
||||
|
|
|
@ -164,3 +164,11 @@ int _set_error_mode(int mode)
|
|||
}
|
||||
return old;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* _seterrormode (MSVCRT.@)
|
||||
*/
|
||||
void _seterrormode(int mode)
|
||||
{
|
||||
SetErrorMode( mode );
|
||||
}
|
||||
|
|
|
@ -42,6 +42,8 @@ static LPCSTR szMsgBoxTitle = "Wine C++ Runtime Library";
|
|||
extern int MSVCRT_app_type;
|
||||
extern char *MSVCRT__pgmptr;
|
||||
|
||||
void (*_aexit_rtn)(int) = MSVCRT__exit;
|
||||
|
||||
/* INTERNAL: call atexit functions */
|
||||
void __MSVCRT__call_atexit(void)
|
||||
{
|
||||
|
@ -142,7 +144,7 @@ void MSVCRT__amsg_exit(int errnum)
|
|||
}
|
||||
else
|
||||
_cprintf("\nruntime error R60%d\n",errnum);
|
||||
MSVCRT__exit(255);
|
||||
_aexit_rtn(255);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
|
|
@ -551,7 +551,7 @@ int _fcloseall(void)
|
|||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _lseek (MSVCRT.@)
|
||||
* _lseeki64 (MSVCRT.@)
|
||||
*/
|
||||
__int64 _lseeki64(int fd, __int64 offset, int whence)
|
||||
{
|
||||
|
@ -715,6 +715,25 @@ LONG _filelength(int fd)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _filelengthi64 (MSVCRT.@)
|
||||
*/
|
||||
__int64 _filelengthi64(int fd)
|
||||
{
|
||||
__int64 curPos = _lseeki64(fd, 0, SEEK_CUR);
|
||||
if (curPos != -1)
|
||||
{
|
||||
__int64 endPos = _lseeki64(fd, 0, SEEK_END);
|
||||
if (endPos != -1)
|
||||
{
|
||||
if (endPos != curPos)
|
||||
_lseeki64(fd, curPos, SEEK_SET);
|
||||
return endPos;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _fileno (MSVCRT.@)
|
||||
*/
|
||||
|
@ -1368,9 +1387,9 @@ int MSVCRT__stat(const char* path, struct _stat * buf)
|
|||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _wstat (MSVCRT.@)
|
||||
* _wstati64 (MSVCRT.@)
|
||||
*/
|
||||
int _wstat(const MSVCRT_wchar_t* path, struct _stat * buf)
|
||||
int _wstati64(const MSVCRT_wchar_t* path, struct _stati64 * buf)
|
||||
{
|
||||
DWORD dw;
|
||||
WIN32_FILE_ATTRIBUTE_DATA hfi;
|
||||
|
@ -1418,24 +1437,46 @@ int _wstat(const MSVCRT_wchar_t* path, struct _stat * buf)
|
|||
|
||||
buf->st_mode = mode;
|
||||
buf->st_nlink = 1;
|
||||
buf->st_size = hfi.nFileSizeLow;
|
||||
buf->st_size = ((__int64)hfi.nFileSizeHigh << 32) + hfi.nFileSizeLow;
|
||||
RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastAccessTime, &dw);
|
||||
buf->st_atime = dw;
|
||||
RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastWriteTime, &dw);
|
||||
buf->st_mtime = buf->st_ctime = dw;
|
||||
TRACE("\n%d %d %d %ld %ld %ld\n", buf->st_mode,buf->st_nlink,buf->st_size,
|
||||
TRACE("%d %d 0x%08lx%08lx %ld %ld %ld\n", buf->st_mode,buf->st_nlink,
|
||||
(long)(buf->st_size >> 32),(long)buf->st_size,
|
||||
buf->st_atime,buf->st_mtime, buf->st_ctime);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _wstat (MSVCRT.@)
|
||||
*/
|
||||
int _wstat(const MSVCRT_wchar_t* path, struct _stat * buf)
|
||||
{
|
||||
int ret;
|
||||
struct _stati64 bufi64;
|
||||
|
||||
ret = _wstati64( path, &bufi64 );
|
||||
if (!ret) msvcrt_cp_from_stati64(&bufi64, buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _tell (MSVCRT.@)
|
||||
*/
|
||||
LONG _tell(int fd)
|
||||
long _tell(int fd)
|
||||
{
|
||||
return _lseek(fd, 0, SEEK_CUR);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _telli64 (MSVCRT.@)
|
||||
*/
|
||||
__int64 _telli64(int fd)
|
||||
{
|
||||
return _lseeki64(fd, 0, SEEK_CUR);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _tempnam (MSVCRT.@)
|
||||
*/
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
* msvcrt.dll lconv functions
|
||||
*
|
||||
* Copyright 2002 Uwe Bonnes
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* NOTE: just stubs for now 020325
|
||||
*/
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* __lconv_init (MSVCRT.@)
|
||||
*/
|
||||
void __lconv_init(void)
|
||||
{
|
||||
FIXME(" stub\n");
|
||||
}
|
|
@ -583,6 +583,14 @@ struct MSVCRT_lconv *MSVCRT_localeconv(void) {
|
|||
return &xlconv;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* __lconv_init (MSVCRT.@)
|
||||
*/
|
||||
void __lconv_init(void)
|
||||
{
|
||||
FIXME(" stub\n");
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* _Gettnames (MSVCRT.@)
|
||||
*/
|
||||
|
|
|
@ -467,6 +467,14 @@ unsigned int _clearfp(void)
|
|||
return retVal;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* __fpecode (MSVCRT.@)
|
||||
*/
|
||||
int *__fpecode(void)
|
||||
{
|
||||
return &msvcrt_get_thread_data()->fpecode;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* ldexp (MSVCRT.@)
|
||||
*/
|
||||
|
|
|
@ -40,6 +40,7 @@ typedef struct __MSVCRT_thread_data
|
|||
unsigned long doserrno;
|
||||
char *mbstok_next; /* next ptr for mbstok() */
|
||||
char *efcvt_buffer; /* buffer for ecvt/fcvt */
|
||||
int fpecode;
|
||||
terminate_function terminate_handler;
|
||||
unexpected_function unexpected_handler;
|
||||
_se_translator_function se_translator;
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
@ cdecl __crtLCMapStringA(long long str long ptr long long long)
|
||||
@ cdecl __dllonexit(ptr ptr ptr)
|
||||
@ cdecl __doserrno()
|
||||
@ stub __fpecode #()
|
||||
@ cdecl __fpecode()
|
||||
@ cdecl __getmainargs(ptr ptr ptr long ptr)
|
||||
@ extern __initenv MSVCRT___initenv
|
||||
@ cdecl __isascii(long) MSVCRT___isascii
|
||||
|
@ -160,7 +160,7 @@
|
|||
@ cdecl _adj_fprem1()
|
||||
@ cdecl _adj_fptan()
|
||||
@ cdecl _adjust_fdiv()
|
||||
@ stub _aexit_rtn
|
||||
@ extern _aexit_rtn
|
||||
@ cdecl _amsg_exit(long) MSVCRT__amsg_exit
|
||||
@ cdecl _assert(str str long) MSVCRT__assert
|
||||
@ stub _atodbl #(ptr str)
|
||||
|
@ -223,13 +223,13 @@
|
|||
@ cdecl _filbuf(ptr)
|
||||
@ stub _fileinfo
|
||||
@ cdecl _filelength(long)
|
||||
@ stub _filelengthi64 #(long)
|
||||
@ cdecl -ret64 _filelengthi64(long)
|
||||
@ cdecl _fileno(ptr)
|
||||
@ cdecl _findclose(long)
|
||||
@ cdecl _findfirst(str ptr)
|
||||
@ stub _findfirsti64 #(str ptr)
|
||||
@ cdecl _findfirsti64(str ptr)
|
||||
@ cdecl _findnext(long ptr)
|
||||
@ stub _findnexti64 #(long ptr)
|
||||
@ cdecl _findnexti64(long ptr)
|
||||
@ cdecl _finite( double )
|
||||
@ cdecl _flsbuf(long ptr)
|
||||
@ cdecl _flushall()
|
||||
|
@ -322,7 +322,7 @@
|
|||
@ cdecl _lock(long)
|
||||
@ cdecl _locking(long long long)
|
||||
@ cdecl _logb( double )
|
||||
@ stub _longjmpex
|
||||
@ cdecl -i386 longjmpex(ptr long) MSVCRT_longjmp
|
||||
@ cdecl _lrotl(long long)
|
||||
@ cdecl _lrotr(long long)
|
||||
@ cdecl _lsearch(ptr ptr long long ptr)
|
||||
|
@ -344,7 +344,7 @@
|
|||
@ cdecl _mbctolower(long)
|
||||
@ stub _mbctombb #(long)
|
||||
@ cdecl _mbctoupper(long)
|
||||
@ stub _mbctype
|
||||
@ extern _mbctype MSVCRT_mbctype
|
||||
@ stub _mbsbtype #(str long)
|
||||
@ cdecl _mbscat(str str) strcat
|
||||
@ cdecl _mbschr(str long)
|
||||
|
@ -396,7 +396,7 @@
|
|||
@ cdecl _onexit(ptr)
|
||||
@ varargs _open(str long)
|
||||
@ cdecl _open_osfhandle(long long)
|
||||
@ stub _osver
|
||||
@ extern _osver MSVCRT__osver
|
||||
@ stub _outp #(long long)
|
||||
@ stub _outpd #(long long)
|
||||
@ stub _outpw #(long long)
|
||||
|
@ -425,7 +425,7 @@
|
|||
@ stdcall -i386 _seh_longjmp_unwind(ptr)
|
||||
@ cdecl _set_error_mode(long)
|
||||
@ stub _set_sbh_threshold #(long)
|
||||
@ stub _seterrormode #(long)
|
||||
@ cdecl _seterrormode(long)
|
||||
@ cdecl -i386 _setjmp(ptr) MSVCRT__setjmp
|
||||
@ cdecl -i386 _setjmp3(ptr long) MSVCRT__setjmp3
|
||||
@ stub _setmaxstdio #(long)
|
||||
|
@ -467,7 +467,7 @@
|
|||
@ extern _sys_errlist MSVCRT__sys_errlist
|
||||
@ extern _sys_nerr MSVCRT__sys_nerr
|
||||
@ cdecl _tell(long)
|
||||
@ stub _telli64 #(long)
|
||||
@ cdecl -ret64 _telli64(long)
|
||||
@ cdecl _tempnam(str str)
|
||||
@ stub _timezone # extern
|
||||
@ cdecl _tolower(long) MSVCRT__tolower
|
||||
|
@ -515,9 +515,9 @@
|
|||
@ stub _wexecvpe #(wstr ptr ptr)
|
||||
@ cdecl _wfdopen(long wstr)
|
||||
@ cdecl _wfindfirst(wstr ptr)
|
||||
@ stub _wfindfirsti64 #(wstr ptr)
|
||||
@ cdecl _wfindfirsti64(wstr ptr)
|
||||
@ cdecl _wfindnext(long ptr)
|
||||
@ stub _wfindnexti64 #(long ptr)
|
||||
@ cdecl _wfindnexti64(long ptr)
|
||||
@ cdecl _wfopen(wstr wstr)
|
||||
@ stub _wfreopen #(wstr wstr ptr)
|
||||
@ cdecl _wfsopen(wstr wstr long)
|
||||
|
@ -553,7 +553,7 @@
|
|||
@ stub _wspawnvpe #(long wstr ptr ptr)
|
||||
@ cdecl _wsplitpath(wstr wstr wstr wstr wstr)
|
||||
@ cdecl _wstat(wstr ptr)
|
||||
@ stub _wstati64 #(wstr ptr)
|
||||
@ cdecl _wstati64(wstr ptr)
|
||||
@ stub _wstrdate #(ptr)
|
||||
@ stub _wstrtime #(ptr)
|
||||
@ stub _wsystem #(wstr)
|
||||
|
|
Loading…
Reference in New Issue