Skip to content

Commit

Permalink
Squashed 'src/leveldb/' changes from 524b7e3..f545dfa
Browse files Browse the repository at this point in the history
f545dfa Merge #18: Use utf-8 to decode filename
f8e797a Use utf-8 to decode filename
2fc1148 Merge #14: Fixes to allow building with msvc.
d6eab93 Fixes to allow building with msvc.

git-subtree-dir: src/leveldb
git-subtree-split: f545dfa
  • Loading branch information
MarcoFalke committed Jan 26, 2019
1 parent ec749b1 commit 4f2e6c8
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
2 changes: 2 additions & 0 deletions db/c.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
#include "leveldb/c.h"

#include <stdlib.h>
#ifndef WIN32
#include <unistd.h>
#endif
#include "leveldb/cache.h"
#include "leveldb/comparator.h"
#include "leveldb/db.h"
Expand Down
7 changes: 7 additions & 0 deletions port/port_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,16 @@
#define STORAGE_LEVELDB_PORT_PORT_WIN_H_

#ifdef _MSC_VER
#if !(_MSC_VER >= 1900)
#define snprintf _snprintf
#endif
#define close _close
#define fread_unlocked _fread_nolock
#ifdef _WIN64
#define ssize_t int64_t
#else
#define ssize_t int32_t
#endif
#endif

#include <string>
Expand Down
25 changes: 13 additions & 12 deletions util/env_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -203,24 +203,16 @@ class Win32Env : public Env

void ToWidePath(const std::string& value, std::wstring& target) {
wchar_t buffer[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, value.c_str(), -1, buffer, MAX_PATH);
MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, buffer, MAX_PATH);
target = buffer;
}

void ToNarrowPath(const std::wstring& value, std::string& target) {
char buffer[MAX_PATH];
WideCharToMultiByte(CP_ACP, 0, value.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, value.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
target = buffer;
}

std::string GetCurrentDir()
{
CHAR path[MAX_PATH];
::GetModuleFileNameA(::GetModuleHandleA(NULL),path,MAX_PATH);
*strrchr(path,'\\') = 0;
return std::string(path);
}

std::wstring GetCurrentDirW()
{
WCHAR path[MAX_PATH];
Expand All @@ -229,6 +221,13 @@ std::wstring GetCurrentDirW()
return std::wstring(path);
}

std::string GetCurrentDir()
{
std::string path;
ToNarrowPath(GetCurrentDirW(), path);
return path;
}

std::string& ModifyPath(std::string& path)
{
if(path[0] == '/' || path[0] == '\\'){
Expand Down Expand Up @@ -764,14 +763,16 @@ uint64_t Win32Env::NowMicros()
static Status CreateDirInner( const std::string& dirname )
{
Status sRet;
DWORD attr = ::GetFileAttributes(dirname.c_str());
std::wstring dirnameW;
ToWidePath(dirname, dirnameW);
DWORD attr = ::GetFileAttributesW(dirnameW.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);
BOOL result = ::CreateDirectoryW(dirnameW.c_str(), NULL);
if (result == FALSE) {
sRet = Status::IOError(dirname, "Could not create directory.");
return sRet;
Expand Down

0 comments on commit 4f2e6c8

Please sign in to comment.