| // Copyright 2013 The Flutter 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/shell/platform/common/path_utils.h" |
| |
| #if defined(_WIN32) |
| #include <windows.h> |
| #elif defined(__linux__) |
| #include <linux/limits.h> |
| #include <unistd.h> |
| #endif |
| |
| namespace flutter { |
| |
| std::filesystem::path GetExecutableDirectory() { |
| #if defined(_WIN32) |
| wchar_t buffer[MAX_PATH]; |
| if (GetModuleFileName(nullptr, buffer, MAX_PATH) == 0) { |
| return std::filesystem::path(); |
| } |
| std::filesystem::path executable_path(buffer); |
| return executable_path.remove_filename(); |
| #elif defined(__linux__) |
| char buffer[PATH_MAX + 1]; |
| ssize_t length = readlink("/proc/self/exe", buffer, sizeof(buffer)); |
| if (length > PATH_MAX) { |
| return std::filesystem::path(); |
| } |
| std::filesystem::path executable_path(std::string(buffer, length)); |
| return executable_path.remove_filename(); |
| #else |
| return std::filesystem::path(); |
| #endif |
| } |
| |
| } // namespace flutter |