// 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 #elif defined(__linux__) #include #include #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 executable_path(std::string(buffer, static_cast(length))); return executable_path.remove_filename(); #else return std::filesystem::path(); #endif } } // namespace flutter