aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb
diff options
context:
space:
mode:
Diffstat (limited to 'src/leveldb')
-rwxr-xr-xsrc/leveldb/build_detect_platform6
-rw-r--r--src/leveldb/port/port_win.cc6
-rw-r--r--src/leveldb/port/port_win.h4
-rw-r--r--src/leveldb/util/env_win.cc28
4 files changed, 29 insertions, 15 deletions
diff --git a/src/leveldb/build_detect_platform b/src/leveldb/build_detect_platform
index caf2352f93..1080df77f4 100755
--- a/src/leveldb/build_detect_platform
+++ b/src/leveldb/build_detect_platform
@@ -129,11 +129,9 @@ case "$TARGET_OS" in
;;
OS_WINDOWS_CROSSCOMPILE | NATIVE_WINDOWS)
PLATFORM=OS_WINDOWS
- COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_WINDOWS -DLEVELDB_PLATFORM_WINDOWS"
- PLATFORM_SHARED_CFLAGS=""
+ COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_WINDOWS -DLEVELDB_PLATFORM_WINDOWS -DWINVER=0x0500 -D__USE_MINGW_ANSI_STDIO=1"
PLATFORM_SOURCES="util/env_win.cc"
- PLATFORM_CXXFLAGS="-std=c++0x"
- PLATFORM_LIBS="-lshlwapi -ldbghelp"
+ PLATFORM_LIBS="-lshlwapi"
PORT_FILE=port/port_win.cc
CROSS_COMPILE=true
;;
diff --git a/src/leveldb/port/port_win.cc b/src/leveldb/port/port_win.cc
index 15dfde1f27..99c1d8e346 100644
--- a/src/leveldb/port/port_win.cc
+++ b/src/leveldb/port/port_win.cc
@@ -37,7 +37,7 @@ namespace leveldb {
namespace port {
Mutex::Mutex() :
- cs_(nullptr) {
+ cs_(NULL) {
assert(!cs_);
cs_ = static_cast<void *>(new CRITICAL_SECTION());
::InitializeCriticalSection(static_cast<CRITICAL_SECTION *>(cs_));
@@ -48,7 +48,7 @@ Mutex::~Mutex() {
assert(cs_);
::DeleteCriticalSection(static_cast<CRITICAL_SECTION *>(cs_));
delete static_cast<CRITICAL_SECTION *>(cs_);
- cs_ = nullptr;
+ cs_ = NULL;
assert(!cs_);
}
@@ -128,7 +128,7 @@ void InitOnce(OnceType* once, void (*initializer)()) {
}
void* AtomicPointer::Acquire_Load() const {
- void * p = nullptr;
+ void * p = NULL;
InterlockedExchangePointer(&p, rep_);
return p;
}
diff --git a/src/leveldb/port/port_win.h b/src/leveldb/port/port_win.h
index 849b01705f..45bf2f0ea7 100644
--- a/src/leveldb/port/port_win.h
+++ b/src/leveldb/port/port_win.h
@@ -31,9 +31,11 @@
#ifndef STORAGE_LEVELDB_PORT_PORT_WIN_H_
#define STORAGE_LEVELDB_PORT_PORT_WIN_H_
+#ifdef _MSC_VER
#define snprintf _snprintf
#define close _close
#define fread_unlocked _fread_nolock
+#endif
#include <string>
#include <stdint.h>
@@ -120,7 +122,7 @@ class AtomicPointer {
private:
void * rep_;
public:
- AtomicPointer() : rep_(nullptr) { }
+ AtomicPointer() : rep_(NULL) { }
explicit AtomicPointer(void* v);
void* Acquire_Load() const;
diff --git a/src/leveldb/util/env_win.cc b/src/leveldb/util/env_win.cc
index 384331aec5..f1a7610624 100644
--- a/src/leveldb/util/env_win.cc
+++ b/src/leveldb/util/env_win.cc
@@ -20,9 +20,7 @@
#include <stdio.h>
#include <errno.h>
#include <io.h>
-#include <dbghelp.h>
#include <algorithm>
-#pragma comment(lib,"DbgHelp.lib")
#ifdef max
#undef max
@@ -908,18 +906,34 @@ uint64_t Win32Env::NowMicros()
return (uint64_t)(GetTickCount64()*1000);
}
-Status Win32Env::CreateDir( const std::string& dirname )
+static Status CreateDirInner( const std::string& dirname )
{
Status sRet;
+ DWORD attr = ::GetFileAttributes(dirname.c_str());
+ if (attr == INVALID_FILE_ATTRIBUTES) { // doesn't exist:
+ std::size_t slash = dirname.find_last_of("\\");
+ if (slash != std::string::npos){
+ sRet = CreateDirInner(dirname.substr(0, slash));
+ if (!sRet.ok()) return sRet;
+ }
+ BOOL result = ::CreateDirectory(dirname.c_str(), NULL);
+ if (result == FALSE) {
+ sRet = Status::IOError(dirname, "Could not create directory.");
+ return sRet;
+ }
+ }
+ return sRet;
+}
+
+Status Win32Env::CreateDir( const std::string& dirname )
+{
std::string path = dirname;
if(path[path.length() - 1] != '\\'){
path += '\\';
}
ModifyPath(path);
- if(!::MakeSureDirectoryPathExists( path.c_str() ) ){
- sRet = Status::IOError(dirname, "Could not create directory.");
- }
- return sRet;
+
+ return CreateDirInner(path);
}
Status Win32Env::DeleteDir( const std::string& dirname )