Module: wine Branch: master Commit: 7d50809705d83e55b05e857c7a785bc4e8a3b7d0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d50809705d83e55b05e857c7a...
Author: Eryk Wieliczko ewdevel@gmail.com Date: Sat Nov 20 14:49:54 2010 +0100
msvcrt: Implement _wfindfirst64i32.
---
dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/dir.c | 41 +++++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 1 + 5 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index a305cb2..c35e42b 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1341,7 +1341,7 @@ @ stub _wfindfirst32 @ stub _wfindfirst32i64 @ stub _wfindfirst64 -@ stub _wfindfirst64i32 +@ cdecl _wfindfirst64i32(wstr ptr) msvcrt._wfindfirst64i32 @ stub _wfindnext32 @ stub _wfindnext32i64 @ stub _wfindnext64 diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 36f522c..abc7db0 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1194,7 +1194,7 @@ @ stub _wfindfirst32 @ stub _wfindfirst32i64 @ stub _wfindfirst64 -@ stub _wfindfirst64i32 +@ cdecl _wfindfirst64i32(wstr ptr) msvcrt._wfindfirst64i32 @ stub _wfindnext32 @ stub _wfindnext32i64 @ stub _wfindnext64 diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 33bfb33..2d5cc32 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1181,7 +1181,7 @@ @ stub _wfindfirst32 @ stub _wfindfirst32i64 @ stub _wfindfirst64 -@ stub _wfindfirst64i32 +@ cdecl _wfindfirst64i32(wstr ptr) msvcrt._wfindfirst64i32 @ stub _wfindnext32 @ stub _wfindnext32i64 @ stub _wfindnext64 diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c index f175ac0..415c9eb 100644 --- a/dlls/msvcrt/dir.c +++ b/dlls/msvcrt/dir.c @@ -156,6 +156,26 @@ static void msvcrt_wfttofdi64( const WIN32_FIND_DATAW *fd, struct MSVCRT__wfindd strcpyW(ft->name, fd->cFileName); }
+/* INTERNAL: Translate WIN32_FIND_DATAW to wfinddata64i32_t */ +static void msvcrt_wfttofd64i32( const WIN32_FIND_DATAW *fd, struct MSVCRT__wfinddata64i32_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; + strcpyW(ft->name, fd->cFileName); +} + /********************************************************************* * _chdir (MSVCRT.@) * @@ -370,6 +390,27 @@ MSVCRT_intptr_t CDECL MSVCRT__findfirst64i32(const char * fspec, struct MSVCRT__ }
/********************************************************************* + * _wfindfirst64i32 (MSVCRT.@) + * + * Unicode version of _findfirst64i32. + */ +MSVCRT_intptr_t CDECL MSVCRT__wfindfirst64i32(const MSVCRT_wchar_t * fspec, struct MSVCRT__wfinddata64i32_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_wfttofd64i32(&find_data,ft); + TRACE(":got handle %p\n",hfind); + return (MSVCRT_intptr_t)hfind; +} + +/********************************************************************* * _wfindfirsti64 (MSVCRT.@) * * Unicode version of _findfirsti64. diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e65c152..de3dded 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1114,6 +1114,7 @@ @ cdecl _wfindfirst(wstr ptr) MSVCRT__wfindfirst # stub _wfindfirst64 @ cdecl _wfindfirsti64(wstr ptr) MSVCRT__wfindfirsti64 +@ cdecl _wfindfirst64i32(wstr ptr) MSVCRT__wfindfirst64i32 @ cdecl _wfindnext(long ptr) MSVCRT__wfindnext # stub _wfindnext64 @ cdecl _wfindnexti64(long ptr) MSVCRT__wfindnexti64