common/FileUtil.cpp | 14 ++++++++++++++ common/FileUtil.hpp | 7 +++++++ common/JailUtil.cpp | 10 +++------- gtk/mobile.cpp | 2 +- kit/Kit.cpp | 7 +++---- 5 files changed, 28 insertions(+), 12 deletions(-)
New commits: commit 9f7f6dca6ab13a671228a07547c16fbed8cfc0a7 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sun Jul 5 17:51:02 2020 -0400 Commit: Ashod Nakashian <ashnak...@gmail.com> CommitDate: Mon Jul 6 13:54:54 2020 +0200 wsd: cleanup realpath call The new utility is safer and more readable. Change-Id: I3a86675378d458cb004e5534dbf2b401936d0e57 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98183 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/common/FileUtil.cpp b/common/FileUtil.cpp index ac980b5f3..560a1b659 100644 --- a/common/FileUtil.cpp +++ b/common/FileUtil.cpp @@ -238,6 +238,20 @@ namespace FileUtil #endif } + std::string realpath(const char* path) + { + char* resolved = ::realpath(path, nullptr); + if (resolved) + { + std::string real = resolved; + free(resolved); + return real; + } + + LOG_SYS("Failed to get the realpath of [" << path << "]"); + return path; + } + } // namespace FileUtil namespace diff --git a/common/FileUtil.hpp b/common/FileUtil.hpp index 1ef60a843..79342a46d 100644 --- a/common/FileUtil.hpp +++ b/common/FileUtil.hpp @@ -89,6 +89,13 @@ namespace FileUtil /// Link source to target, and copy if linking fails. bool linkOrCopyFile(const char* source, const char* target); + /// Returns the realpath(3) of the provided path. + std::string realpath(const char* path); + inline std::string realpath(const std::string& path) + { + return realpath(path.c_str()); + } + /// File/Directory stat helper. class Stat { diff --git a/common/JailUtil.cpp b/common/JailUtil.cpp index 95927c476..a104b91b1 100644 --- a/common/JailUtil.cpp +++ b/common/JailUtil.cpp @@ -312,13 +312,9 @@ void setupLoSymlink(const std::string& sysTemplate, const std::string& loTemplat symlinkPathToJail(sysTemplate, loTemplate, loSubPath); // Font paths can end up as realpaths so match that too. - char* resolved = realpath(loTemplate.c_str(), nullptr); - if (resolved) - { - if (strcmp(loTemplate.c_str(), resolved) != 0) - symlinkPathToJail(sysTemplate, std::string(resolved), loSubPath); - free(resolved); - } + const std::string resolved = FileUtil::realpath(loTemplate); + if (loTemplate != resolved) + symlinkPathToJail(sysTemplate, resolved, loSubPath); } void setupRandomDeviceLink(const std::string& sysTemplate, const std::string& name) diff --git a/gtk/mobile.cpp b/gtk/mobile.cpp index 929e07d17..e467a71c2 100644 --- a/gtk/mobile.cpp +++ b/gtk/mobile.cpp @@ -324,7 +324,7 @@ int main(int argc, char* argv[]) gtk_container_add(GTK_CONTAINER(mainWindow), GTK_WIDGET(webView)); - fileURL = "file://" + std::string(realpath(argv[1], nullptr)); + fileURL = "file://" + FileUtil::realpath(argv[1]); std::string urlAndQuery = "file://" TOPSRCDIR "/loleaflet/dist/loleaflet.html" diff --git a/kit/Kit.cpp b/kit/Kit.cpp index 5eefa30f9..d14a28a81 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -338,13 +338,12 @@ namespace const Path& destination, LinkOrCopyType type) { - char* resolved = realpath(source.c_str(), nullptr); - if (resolved && resolved != source) + std::string resolved = FileUtil::realpath(source); + if (resolved != source) { LOG_DBG("linkOrCopy: Using real path [" << resolved << "] instead of original link [" << source << "]."); - source = resolved; - free(resolved); + source = std::move(resolved); } LOG_INF("linkOrCopy " << linkOrCopyTypeString(type) << " from [" << source << "] to [" _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits