Module: wine Branch: master Commit: cd7f0962107f0630b72a2b9480394e660c983b34 URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd7f0962107f0630b72a2b9480...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Mar 15 03:01:43 2011 +0300
msvcrt: Add _findfirst32() implementation.
---
dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/dir.c | 39 +++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 1 + 5 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 1eca092..c3dfa7d 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -617,7 +617,7 @@ @ cdecl -ret64 _filelengthi64(long) msvcrt._filelengthi64 @ cdecl _fileno(ptr) msvcrt._fileno @ cdecl _findclose(long) msvcrt._findclose -@ stub _findfirst32 +@ cdecl _findfirst32(str ptr) msvcrt._findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 @ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index e7b26e7..a615c0d 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -458,7 +458,7 @@ @ cdecl -ret64 _filelengthi64(long) msvcrt._filelengthi64 @ cdecl _fileno(ptr) msvcrt._fileno @ cdecl _findclose(long) msvcrt._findclose -@ stub _findfirst32 +@ cdecl _findfirst32(str ptr) msvcrt._findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 @ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 9ba5bbc..6b3e766 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -450,7 +450,7 @@ @ cdecl -ret64 _filelengthi64(long) msvcrt._filelengthi64 @ cdecl _fileno(ptr) msvcrt._fileno @ cdecl _findclose(long) msvcrt._findclose -@ stub _findfirst32 +@ cdecl _findfirst32(str ptr) msvcrt._findfirst32 @ stub _findfirst32i64 @ cdecl _findfirst64(str ptr) msvcrt._findfirst64 @ cdecl _findfirst64i32(str ptr) msvcrt._findfirst64i32 diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c index a5c4974..712ffa9 100644 --- a/dlls/msvcrt/dir.c +++ b/dlls/msvcrt/dir.c @@ -56,6 +56,26 @@ static void msvcrt_fttofd( const WIN32_FIND_DATAA *fd, struct MSVCRT__finddata_t strcpy(ft->name, fd->cFileName); }
+/* INTERNAL: Translate WIN32_FIND_DATAA to finddata32_t */ +static void msvcrt_fttofd32( const WIN32_FIND_DATAA *fd, struct MSVCRT__finddata32_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 wfinddata_t */ static void msvcrt_wfttofd( const WIN32_FIND_DATAW *fd, struct MSVCRT__wfinddata_t* ft) { @@ -326,6 +346,25 @@ MSVCRT_intptr_t CDECL MSVCRT__findfirst(const char * fspec, struct MSVCRT__findd }
/********************************************************************* + * _findfirst32 (MSVCRT.@) + */ +MSVCRT_intptr_t CDECL MSVCRT__findfirst32(const char * fspec, struct MSVCRT__finddata32_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_fttofd32(&find_data, ft); + TRACE(":got handle %p\n", hfind); + return (MSVCRT_intptr_t)hfind; +} + +/********************************************************************* * _wfindfirst (MSVCRT.@) * * Unicode version of _findfirst. diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 440eeb8..a4656a7 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -411,6 +411,7 @@ @ cdecl _fileno(ptr) MSVCRT__fileno @ cdecl _findclose(long) MSVCRT__findclose @ cdecl _findfirst(str ptr) MSVCRT__findfirst +@ cdecl _findfirst32(str ptr) MSVCRT__findfirst32 @ cdecl _findfirst64(str ptr) MSVCRT__findfirst64 @ cdecl _findfirst64i32(str ptr) MSVCRT__findfirst64i32 @ cdecl _findfirsti64(str ptr) MSVCRT__findfirsti64