[1/2] msvcrt: Implement _wfindfirst64
André Hentschel
nerv at dawncrow.de
Sat Feb 26 12:20:55 CST 2011
for Wireshark 1.5.0 win64
---
dlls/msvcrt/dir.c | 41 +++++++++++++++++++++++++++++++++++++++++
dlls/msvcrt/msvcrt.spec | 2 +-
2 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/dlls/msvcrt/dir.c b/dlls/msvcrt/dir.c
index 1e8fd8d..8fcff3d 100644
--- a/dlls/msvcrt/dir.c
+++ b/dlls/msvcrt/dir.c
@@ -116,6 +116,26 @@ static void msvcrt_fttofd64( const WIN32_FIND_DATAA *fd, struct MSVCRT__finddata
strcpy(ft->name, fd->cFileName);
}
+/* INTERNAL: Translate WIN32_FIND_DATAW to wfinddata64_t */
+static void msvcrt_wfttofd64( const WIN32_FIND_DATAW *fd, struct MSVCRT__wfinddata64_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 = ((__int64)fd->nFileSizeHigh) << 32 | fd->nFileSizeLow;
+ strcpyW(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)
{
@@ -369,6 +389,27 @@ MSVCRT_intptr_t CDECL MSVCRT__findfirst64(const char * fspec, struct MSVCRT__fin
}
/*********************************************************************
+ * _wfindfirst64 (MSVCRT.@)
+ *
+ * Unicode version of _findfirst64.
+ */
+MSVCRT_intptr_t CDECL MSVCRT__wfindfirst64(const MSVCRT_wchar_t * fspec, struct MSVCRT__wfinddata64_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_wfttofd64(&find_data,ft);
+ TRACE(":got handle %p\n",hfind);
+ return (MSVCRT_intptr_t)hfind;
+}
+
+/*********************************************************************
* _findfirst64i32 (MSVCRT.@)
*
* 64-bit/32-bit version of _findfirst.
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index f1e3259..cc40817 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1112,7 +1112,7 @@
@ cdecl _wexecvpe(wstr ptr ptr)
@ cdecl _wfdopen(long wstr) MSVCRT__wfdopen
@ cdecl _wfindfirst(wstr ptr) MSVCRT__wfindfirst
-# stub _wfindfirst64
+@ cdecl _wfindfirst64(wstr ptr) MSVCRT__wfindfirst64
@ cdecl _wfindfirsti64(wstr ptr) MSVCRT__wfindfirsti64
@ cdecl _wfindfirst64i32(wstr ptr) MSVCRT__wfindfirst64i32
@ cdecl _wfindnext(long ptr) MSVCRT__wfindnext
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list