提交 d119d62c 编写于 作者: C Chinmay Garde 提交者: GitHub

Add fml::paths::GetExecutableDirectoryPath. (#3508)

上级 ae9ad396
......@@ -12,6 +12,7 @@ source_set("fml") {
"message_loop.h",
"message_loop_impl.cc",
"message_loop_impl.h",
"paths.h",
"task_runner.cc",
"task_runner.h",
"thread.cc",
......@@ -43,6 +44,7 @@ source_set("fml") {
"platform/darwin/message_loop_darwin.mm",
"platform/darwin/nsstring_utils.h",
"platform/darwin/nsstring_utils.mm",
"platform/darwin/paths_darwin.mm",
"platform/darwin/resource_mapping_darwin.h",
"platform/darwin/resource_mapping_darwin.mm",
"platform/darwin/scoped_block.h",
......@@ -62,6 +64,7 @@ source_set("fml") {
"platform/android/jni_weak_ref.h",
"platform/android/message_loop_android.cc",
"platform/android/message_loop_android.h",
"platform/android/paths_android.cc",
"platform/android/scoped_java_ref.cc",
"platform/android/scoped_java_ref.h",
]
......@@ -83,6 +86,7 @@ source_set("fml") {
sources += [
"platform/linux/message_loop_linux.cc",
"platform/linux/message_loop_linux.h",
"platform/linux/paths_linux.cc",
"platform/linux/timerfd.cc",
"platform/linux/timerfd.h",
]
......
......@@ -8,6 +8,7 @@
#include <mutex>
#include "flutter/fml/mapping.h"
#include "flutter/fml/paths.h"
#include "lib/ftl/build_config.h"
#include "lib/ftl/logging.h"
#include "third_party/icu/source/common/unicode/udata.h"
......@@ -44,7 +45,16 @@ class ICUContext {
// Check if the mapping can by directly accessed via a file path. In this
// case, the data file needs to be next to the executable.
auto file = std::make_unique<FileMapping>(kIcuDataFileName);
auto directory = fml::paths::GetExecutableDirectoryPath();
if (!directory.first) {
return false;
}
// FIXME(chinmaygarde): There is no Path::Join in FTL. So a non-portable
// version is used here. Patch FTL and update.
auto file = std::make_unique<FileMapping>(directory.second + "/" +
kIcuDataFileName);
if (file->GetSize() != 0) {
mapping_ = std::move(file);
return true;
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_FML_PATHS_H_
#define FLUTTER_FML_PATHS_H_
#include <string>
#include <utility>
namespace fml {
namespace paths {
std::pair<bool, std::string> GetExecutableDirectoryPath();
} // namespace paths
} // namespace fml
#endif // FLUTTER_FML_PATHS_H_
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/fml/paths.h"
namespace fml {
namespace paths {
std::pair<bool, std::string> GetExecutableDirectoryPath() {
return {false, ""};
}
} // namespace paths
} // namespace fml
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/fml/paths.h"
#include <Foundation/Foundation.h>
#include "lib/ftl/files/path.h"
namespace fml {
namespace paths {
std::pair<bool, std::string> GetExecutableDirectoryPath() {
return {true, files::GetDirectoryName(
[NSBundle mainBundle].executablePath.UTF8String)};
}
} // namespace paths
} // namespace fml
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/fml/paths.h"
#include <unistd.h>
#include "lib/ftl/files/path.h"
namespace fml {
namespace paths {
std::pair<bool, std::string> GetExecutableDirectoryPath() {
const int path_size = 255;
char path[path_size] = {0};
auto read_size = ::readlink("/proc/self/exe", path, path_size);
if (read_size == -1) {
return {false, ""};
}
return {true, files::GetDirectoryName(std::string{path, read_size})};
}
} // namespace paths
} // namespace fml
......@@ -1913,12 +1913,14 @@ FILE: ../../../flutter/fml/message_loop.h
FILE: ../../../flutter/fml/message_loop_impl.cc
FILE: ../../../flutter/fml/message_loop_impl.h
FILE: ../../../flutter/fml/message_loop_unittests.cc
FILE: ../../../flutter/fml/paths.h
FILE: ../../../flutter/fml/platform/android/jni_util.cc
FILE: ../../../flutter/fml/platform/android/jni_util.h
FILE: ../../../flutter/fml/platform/android/jni_weak_ref.cc
FILE: ../../../flutter/fml/platform/android/jni_weak_ref.h
FILE: ../../../flutter/fml/platform/android/message_loop_android.cc
FILE: ../../../flutter/fml/platform/android/message_loop_android.h
FILE: ../../../flutter/fml/platform/android/paths_android.cc
FILE: ../../../flutter/fml/platform/android/scoped_java_ref.cc
FILE: ../../../flutter/fml/platform/android/scoped_java_ref.h
FILE: ../../../flutter/fml/platform/darwin/cf_utils.cc
......@@ -1927,6 +1929,7 @@ FILE: ../../../flutter/fml/platform/darwin/message_loop_darwin.h
FILE: ../../../flutter/fml/platform/darwin/message_loop_darwin.mm
FILE: ../../../flutter/fml/platform/darwin/nsstring_utils.h
FILE: ../../../flutter/fml/platform/darwin/nsstring_utils.mm
FILE: ../../../flutter/fml/platform/darwin/paths_darwin.mm
FILE: ../../../flutter/fml/platform/darwin/resource_mapping_darwin.h
FILE: ../../../flutter/fml/platform/darwin/resource_mapping_darwin.mm
FILE: ../../../flutter/fml/platform/darwin/scoped_block.mm
......@@ -1934,6 +1937,7 @@ FILE: ../../../flutter/fml/platform/darwin/scoped_nsobject.h
FILE: ../../../flutter/fml/platform/darwin/scoped_nsobject.mm
FILE: ../../../flutter/fml/platform/linux/message_loop_linux.cc
FILE: ../../../flutter/fml/platform/linux/message_loop_linux.h
FILE: ../../../flutter/fml/platform/linux/paths_linux.cc
FILE: ../../../flutter/fml/platform/linux/timerfd.cc
FILE: ../../../flutter/fml/platform/linux/timerfd.h
FILE: ../../../flutter/fml/task_runner.cc
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册