From 687a16b26008944019b98f5fb6009d3db90e9747 Mon Sep 17 00:00:00 2001 From: Fabian Boehm Date: Wed, 13 Jul 2022 21:42:31 +0800 Subject: [PATCH] status fish-path: Remove "(deleted)" suffix Fixes #9018. (cherry picked from commit 6e0653af9325844ff1701d332ec8e2e0b57d8ee3) --- CHANGELOG.rst | 1 + src/common.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7e5921545..bdbfa83e5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,7 @@ This release of fish fixes a number of problems identified in fish 3.5.0. - Completing ``git blame`` or ``git -C`` works correctly (:issue:`9053`). - On terminals that emit a ``CSI u`` sequence for :kbd:`Shift-Space`, fish inserts a space instead of printing an error. (:issue:`9054`). +- ``status fish-path`` on Linux-based platforms could print the path with a " (deleted)" suffix (such as ``/usr/bin/fish (deleted)``), which is now removed (:issue:`9019`). -------------- diff --git a/src/common.cpp b/src/common.cpp index 0c746e6e3..5dc4849a7 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1900,7 +1900,17 @@ std::string get_executable_path(const char *argv0) { } if (len > 0) { buff[len] = '\0'; - return std::string(buff); + // When /proc/self/exe points to a file that was deleted (or overwritten on update!) + // then linux adds a " (deleted)" suffix. + // If that's not a valid path, let's remove that awkward suffix. + std::string buffstr{buff}; + if (access(buff, F_OK)) { + auto dellen = const_strlen(" (deleted)"); + if (buffstr.size() > dellen && buffstr.compare(buffstr.size() - dellen, dellen, " (deleted)") == 0) { + buffstr = buffstr.substr(0, buffstr.size() - const_strlen(" (deleted)")); + } + } + return buffstr; } #endif