From 3532e1788f22d6db1a5c26d7fef28bd391c2f4a0 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 7 Mar 2021 17:14:58 +0100 Subject: [PATCH] open: Fix opening "." (again) We can't always rely on the initial URL's path(), so use either the user-specified argument or the URL path for determining the realpath, depending on whether we got a file:// URL argument. Fixes #4950. --- Userland/Utilities/open.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Userland/Utilities/open.cpp b/Userland/Utilities/open.cpp index c141eb817f..10e7491343 100644 --- a/Userland/Utilities/open.cpp +++ b/Userland/Utilities/open.cpp @@ -48,7 +48,10 @@ int main(int argc, char* argv[]) auto url = URL::create_with_url_or_path(url_or_path); if (url.protocol() == "file") { - auto real_path = Core::File::real_path_for(url.path()); + // NOTE: Since URL::create_with_url_or_path() returns "file:///" for ".", and we chose + // to fix that in open(1) itself using Core::File::real_path_for(), we have to + // conditionally chose either the URL's path or user-specified argument (also a path). + auto real_path = Core::File::real_path_for(StringView(url_or_path).starts_with("file://") ? url.path() : url_or_path); if (real_path.is_null()) { // errno *should* be preserved from Core::File::real_path_for(). warnln("Failed to open '{}': {}", url.path(), strerror(errno));