"env.cc",
"load_library.cc",
]) + tf_platform_hdrs([
+ "wide_char.h",
]) + [
"platform/env.cc",
"platform/file_system.cc",
#endif
#if defined(PLATFORM_WINDOWS)
#include <windows.h>
-#include "tensorflow/core/platform/windows/windows_file_system.h"
+#include "tensorflow/core/platform/windows/wide_char.h"
#define PATH_MAX MAX_PATH
#else
#include <unistd.h>
HMODULE hModule = GetModuleHandleW(NULL);
WCHAR wc_file_path[MAX_PATH] = {0};
GetModuleFileNameW(hModule, wc_file_path, MAX_PATH);
- string file_path = WindowsFileSystem::WideCharToUtf8(wc_file_path);
+ string file_path = WideCharToUtf8(wc_file_path);
std::copy(file_path.begin(), file_path.end(), exe_path);
#else
CHECK_NE(-1, readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1));
#include "tensorflow/core/lib/core/error_codes.pb.h"
#include "tensorflow/core/platform/load_library.h"
#include "tensorflow/core/platform/logging.h"
+#include "tensorflow/core/platform/windows/wide_char.h"
#include "tensorflow/core/platform/windows/windows_file_system.h"
#pragma comment(lib, "Shlwapi.lib")
}
bool MatchPath(const string& path, const string& pattern) override {
- std::wstring ws_path(WindowsFileSystem::Utf8ToWideChar(path));
- std::wstring ws_pattern(WindowsFileSystem::Utf8ToWideChar(pattern));
+ std::wstring ws_path(Utf8ToWideChar(path));
+ std::wstring ws_pattern(Utf8ToWideChar(pattern));
return PathMatchSpecW(ws_path.c_str(), ws_pattern.c_str()) == TRUE;
}
std::string file_name = library_filename;
std::replace(file_name.begin(), file_name.end(), '/', '\\');
- std::wstring ws_file_name(WindowsFileSystem::Utf8ToWideChar(file_name));
+ std::wstring ws_file_name(Utf8ToWideChar(file_name));
HMODULE hModule = LoadLibraryExW(ws_file_name.c_str(), NULL,
LOAD_WITH_ALTERED_SEARCH_PATH);
--- /dev/null
+/* Copyright 2018 Google Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+==============================================================================*/
+
+#ifndef TENSORFLOW_CORE_PLATFORM_WINDOWS_WIDE_CHAR_H_
+#define TENSORFLOW_CORE_PLATFORM_WINDOWS_WIDE_CHAR_H_
+
+#include <Windows.h>
+#include <string>
+#include "tensorflow/core/platform/types.h"
+
+namespace tensorflow {
+
+inline std::wstring Utf8ToWideChar(const string& utf8str) {
+ int size_required = MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(),
+ (int)utf8str.size(), NULL, 0);
+ std::wstring ws_translated_str(size_required, 0);
+ MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), (int)utf8str.size(),
+ &ws_translated_str[0], size_required);
+ return ws_translated_str;
+}
+
+inline string WideCharToUtf8(const std::wstring& wstr) {
+ if (wstr.empty()) return std::string();
+ int size_required = WideCharToMultiByte(
+ CP_UTF8, 0, wstr.c_str(), (int)wstr.size(), NULL, 0, NULL, NULL);
+ string utf8_translated_str(size_required, 0);
+ WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int)wstr.size(),
+ &utf8_translated_str[0], size_required, NULL, NULL);
+ return utf8_translated_str;
+}
+
+} // namespace tensorflow
+
+#endif // TENSORFLOW_CORE_PLATFORM_WINDOWS_WIDE_CHAR_H_
#include "tensorflow/core/platform/logging.h"
#include "tensorflow/core/platform/posix/error.h"
#include "tensorflow/core/platform/windows/error.h"
+#include "tensorflow/core/platform/windows/wide_char.h"
#include "tensorflow/core/platform/windows/windows_file_system.h"
// TODO(mrry): Prevent this Windows.h #define from leaking out of our headers.
Status RenameFile(const string& src, const string& target) override;
string TranslateName(const string& name) const override { return name; }
-
- static std::wstring Utf8ToWideChar(const string& utf8str) {
- int size_required = MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(),
- (int)utf8str.size(), NULL, 0);
- std::wstring ws_translated_str(size_required, 0);
- MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), (int)utf8str.size(),
- &ws_translated_str[0], size_required);
- return ws_translated_str;
- }
-
- static string WideCharToUtf8(const std::wstring& wstr) {
- if (wstr.empty()) return std::string();
- int size_required = WideCharToMultiByte(
- CP_UTF8, 0, wstr.c_str(), (int)wstr.size(), NULL, 0, NULL, NULL);
- string utf8_translated_str(size_required, 0);
- WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), (int)wstr.size(),
- &utf8_translated_str[0], size_required, NULL, NULL);
- return utf8_translated_str;
- }
};
class LocalWinFileSystem : public WindowsFileSystem {