Module: wine Branch: master Commit: 566d8e5eaafbb97ad93ac1e7ddf0b369719f3c71 URL: http://source.winehq.org/git/wine.git/?a=commit;h=566d8e5eaafbb97ad93ac1e7dd...
Author: Eryk Wieliczko ewdevel@gmail.com Date: Mon Nov 1 20:52:22 2010 +0100
msvcrt: Implement _findfirst64i32 and _findnext64i32.
---
dlls/msvcr100/msvcr100.spec | 4 +- dlls/msvcr80/msvcr80.spec | 4 +- dlls/msvcr90/msvcr90.spec | 4 +- dlls/msvcrt/dir.c | 59 +++++++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 + 5 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 1e40d01..2f23ff0 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -620,11 +620,11 @@ @ stub _findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 -@ stub _findfirst64i32 +@ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 @ stub _findnext32 @ stub _findnext32i64 @ cdecl _findnext64(long ptr) msvcrt._findnext64 -@ stub _findnext64i32 +@ cdecl _findnext64i32(long ptr) msvcrt._findnext64i32 @ cdecl _finite( double ) msvcrt._finite @ cdecl _flsbuf(long ptr) msvcrt._flsbuf @ cdecl _flushall() msvcrt._flushall diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 86235aa..5f0198c 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -461,11 +461,11 @@ @ stub _findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 -@ stub _findfirst64i32 +@ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 @ stub _findnext32 @ stub _findnext32i64 @ cdecl _findnext64(long ptr) msvcrt._findnext64 -@ stub _findnext64i32 +@ cdecl _findnext64i32(long ptr) msvcrt._findnext64i32 @ cdecl _finite( double ) msvcrt._finite @ cdecl _flsbuf(long ptr) msvcrt._flsbuf @ cdecl _flushall() msvcrt._flushall diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 39bd039..7a53b7b 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -453,11 +453,11 @@ @ stub _findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 -@ stub _findfirst64i32 +@ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 @ stub _findnext32 @ stub _findnext32i64 @ cdecl _findnext64(long ptr) msvcrt._findnext64 -@ stub _findnext64i32 +@ cdecl _findnext64i32(long ptr) msvcrt._findnext64i32 @ cdecl _finite( double ) msvcrt._finite @ cdecl _flsbuf(long ptr) msvcrt._flsbuf @ cdecl _flushall() msvcrt._flushall diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c index 5b5f641..b45a459 100644 --- a/dlls/msvcrt/dir.c +++ b/dlls/msvcrt/dir.c @@ -116,6 +116,25 @@ static void msvcrt_fttofd64( const WIN32_FIND_DATAA *fd, struct MSVCRT__finddata strcpy(ft->name, fd->cFileName); }
+/* INTERNAL: Translate WIN32_FIND_DATAA to finddata64i32_t */ +static void msvcrt_fttofd64i32( const WIN32_FIND_DATAA *fd, struct MSVCRT__finddata64i32_t* ft) +{ + DWORD dw; + + if (fd->dwFileAttributes == FILE_ATTRIBUTE_NORMAL) + ft->attrib = 0; + else + ft->attrib = fd->dwFileAttributes; + + RtlTimeToSecondsSince1970( (const LARGE_INTEGER *)&fd->ftCreationTime, &dw ); + ft->time_create = dw; + RtlTimeToSecondsSince1970( (const LARGE_INTEGER *)&fd->ftLastAccessTime, &dw ); + ft->time_access = dw; + RtlTimeToSecondsSince1970( (const LARGE_INTEGER *)&fd->ftLastWriteTime, &dw ); + ft->time_write = dw; + ft->size = 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 MSVCRT__wfinddatai64_t* ft) @@ -330,6 +349,27 @@ MSVCRT_intptr_t CDECL MSVCRT__findfirst64(const char * fspec, struct MSVCRT__fin }
/********************************************************************* + * _findfirst64i32 (MSVCRT.@) + * + * 64-bit/32-bit version of _findfirst. + */ +MSVCRT_intptr_t CDECL MSVCRT__findfirst64i32(const char * fspec, struct MSVCRT__finddata64i32_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_fttofd64i32(&find_data,ft); + TRACE(":got handle %p\n",hfind); + return (MSVCRT_intptr_t)hfind; +} + +/********************************************************************* * _wfindfirsti64 (MSVCRT.@) * * Unicode version of _findfirsti64. @@ -438,6 +478,25 @@ int CDECL MSVCRT__findnext64(long hand, struct MSVCRT__finddata64_t * ft) }
/********************************************************************* + * _findnext64i32 (MSVCRT.@) + * + * 64-bit/32-bit version of _findnext. + */ +int CDECL MSVCRT__findnext64i32(long hand, struct MSVCRT__finddata64i32_t * ft) +{ + WIN32_FIND_DATAA find_data; + + if (!FindNextFileA((HANDLE)hand, &find_data)) + { + *MSVCRT__errno() = MSVCRT_ENOENT; + return -1; + } + + msvcrt_fttofd64i32(&find_data,ft); + return 0; +} + +/********************************************************************* * _wfindnexti64 (MSVCRT.@) * * Unicode version of _findnexti64. diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ffe5506..eb0d8ec 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -412,9 +412,11 @@ @ cdecl _findclose(long) MSVCRT__findclose @ cdecl _findfirst(str ptr) MSVCRT__findfirst @ cdecl _findfirst64(str ptr) MSVCRT__findfirst64 +@ cdecl _findfirst64i32(str ptr) MSVCRT__findfirst64i32 @ cdecl _findfirsti64(str ptr) MSVCRT__findfirsti64 @ cdecl _findnext(long ptr) MSVCRT__findnext @ cdecl _findnext64(long ptr) MSVCRT__findnext64 +@ cdecl _findnext64i32(long ptr) MSVCRT__findnext64i32 @ cdecl _findnexti64(long ptr) MSVCRT__findnexti64 @ cdecl _finite( double ) @ cdecl _flsbuf(long ptr) MSVCRT__flsbuf