From 2bde8e466a4451c7319e3a072d118917957d6554 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Wed, 25 May 2011 19:08:45 +0100 Subject: Merge WebKit at r82507: Initial merge by git Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e --- Source/WebCore/platform/win/FileSystemWin.cpp | 46 +++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'Source/WebCore/platform/win/FileSystemWin.cpp') diff --git a/Source/WebCore/platform/win/FileSystemWin.cpp b/Source/WebCore/platform/win/FileSystemWin.cpp index 5ee3b8e..03a2eaf 100644 --- a/Source/WebCore/platform/win/FileSystemWin.cpp +++ b/Source/WebCore/platform/win/FileSystemWin.cpp @@ -31,9 +31,11 @@ #include "FileSystem.h" #include "NotImplemented.h" +#include "PathWalker.h" #include "PlatformString.h" #include #include +#include #include #include @@ -184,18 +186,18 @@ static String cachedStorageDirectory(DWORD pathIdentifier) return directory; } -CString openTemporaryFile(const char*, PlatformFileHandle& handle) +String openTemporaryFile(const String&, PlatformFileHandle& handle) { handle = INVALID_HANDLE_VALUE; char tempPath[MAX_PATH]; int tempPathLength = ::GetTempPathA(WTF_ARRAY_LENGTH(tempPath), tempPath); if (tempPathLength <= 0 || tempPathLength > WTF_ARRAY_LENGTH(tempPath)) - return CString(); + return String(); HCRYPTPROV hCryptProv = 0; if (!CryptAcquireContext(&hCryptProv, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) - return CString(); + return String(); char proposedPath[MAX_PATH]; while (1) { @@ -226,9 +228,28 @@ CString openTemporaryFile(const char*, PlatformFileHandle& handle) CryptReleaseContext(hCryptProv, 0); if (!isHandleValid(handle)) - return CString(); + return String(); - return proposedPath; + return String::fromUTF8(proposedPath); +} + +PlatformFileHandle openFile(const String& path, FileOpenMode mode) +{ + DWORD desiredAccess = 0; + DWORD creationDisposition = 0; + switch (mode) { + case OpenForRead: + desiredAccess = GENERIC_READ; + creationDisposition = OPEN_EXISTING; + case OpenForWrite: + desiredAccess = GENERIC_WRITE; + creationDisposition = CREATE_ALWAYS; + default: + ASSERT_NOT_REACHED(); + } + + String destination = path; + return CreateFile(destination.charactersWithNullTermination(), desiredAccess, 0, 0, creationDisposition, FILE_ATTRIBUTE_NORMAL, 0); } void closeFile(PlatformFileHandle& handle) @@ -297,10 +318,21 @@ bool safeCreateFile(const String& path, CFDataRef data) return true; } -Vector listDirectory(const String& path, const String& filter) +Vector listDirectory(const String& directory, const String& filter) { Vector entries; - notImplemented(); + + PathWalker walker(directory, filter); + if (!walker.isValid()) + return entries; + + do { + if (walker.data().dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + continue; + + entries.append(makeString(directory, "\\", reinterpret_cast(walker.data().cFileName))); + } while (walker.step()); + return entries; } -- cgit v1.1