Skip to content

Commit

Permalink
AK: Add hostname parameter to URL::create_with_file_scheme()
Browse files Browse the repository at this point in the history
This adds a hostname parameter as the third parameter to
URL::create_with_file_scheme(). If the hostname is "localhost", it will
be ignored (as per the URL specification).

This can for example be used by ls(1) to create more conforming file
URLs.
  • Loading branch information
MaxWipfli authored and awesomekling committed Jun 1, 2021
1 parent ce80188 commit 5caaa52
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
7 changes: 5 additions & 2 deletions AK/URL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,14 +178,17 @@ u16 URL::default_port_for_scheme(const StringView& scheme)
return 0;
}

URL URL::create_with_file_scheme(const String& path, const String& fragment)
URL URL::create_with_file_scheme(const String& path, const String& fragment, const String& hostname)
{
LexicalPath lexical_path(path);
if (!lexical_path.is_valid() || !lexical_path.is_absolute())
return {};

URL url;
url.set_scheme("file");
url.set_host(String::empty());
// NOTE: If the hostname is localhost (or null, which implies localhost), it should be set to the empty string.
// This is because a file URL always needs a non-null hostname.
url.set_host(hostname.is_null() || hostname == "localhost" ? String::empty() : hostname);
url.set_paths(lexical_path.parts());
// NOTE: To indicate that we want to end the path with a slash, we have to append an empty path segment.
if (path.ends_with('/'))
Expand Down
2 changes: 1 addition & 1 deletion AK/URL.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class URL {
const String& data_payload() const { return m_data_payload; }

static URL create_with_url_or_path(const String&);
static URL create_with_file_scheme(const String& path, const String& fragment = {});
static URL create_with_file_scheme(const String& path, const String& fragment = {}, const String& hostname = {});
static URL create_with_file_protocol(const String& path, const String& fragment = {}) { return create_with_file_scheme(path, fragment); }
static URL create_with_data(const StringView& mime_type, const StringView& payload, bool is_base64 = false);

Expand Down

0 comments on commit 5caaa52

Please sign in to comment.