From 676dfabc91b5f9b0ff54ce145a34352fe0a43202 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 9 Feb 2015 07:55:06 +0100 Subject: command/{Queue,File}Commands: drop "file:///" prefix for absolute paths Requiring this prefix makes the client's intention very clear, but it was too hard to understand why this prefix was needed. Initially, my intention was to differentiate from broken clients which prefix relate URIs with a slash; once MPD allowed that. In the past few years however, MPD has disallowed that, and there was no significant breakage (except for the "add /" special case which some clients apparently still do). So I figure it's about time to define that an URI that begins with a slash points to an arbitrary file on the file system. --- src/command/FileCommands.cxx | 13 ++++++++++++- src/command/QueueCommands.cxx | 15 +++------------ 2 files changed, 15 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/command/FileCommands.cxx b/src/command/FileCommands.cxx index 789aa1f28..1e0f9c585 100644 --- a/src/command/FileCommands.cxx +++ b/src/command/FileCommands.cxx @@ -202,11 +202,22 @@ read_file_comments(Client &client, const Path path_fs) } +static const char * +translate_uri(const char *uri) +{ + if (memcmp(uri, "file:///", 8) == 0) + /* drop the "file://", leave only an absolute path + (starting with a slash) */ + return uri + 7; + + return uri; +} + CommandResult handle_read_comments(Client &client, ConstBuffer args) { assert(args.size == 1); - const char *const uri = args.front(); + const char *const uri = translate_uri(args.front()); if (memcmp(uri, "file:///", 8) == 0) { /* read comments from arbitrary local file */ diff --git a/src/command/QueueCommands.cxx b/src/command/QueueCommands.cxx index 20634652a..d461170fd 100644 --- a/src/command/QueueCommands.cxx +++ b/src/command/QueueCommands.cxx @@ -43,18 +43,13 @@ #include static const char * -translate_uri(Client &client, const char *uri) +translate_uri(const char *uri) { if (memcmp(uri, "file:///", 8) == 0) /* drop the "file://", leave only an absolute path (starting with a slash) */ return uri + 7; - if (PathTraitsUTF8::IsAbsolute(uri)) { - command_error(client, ACK_ERROR_NO_EXIST, "Malformed URI"); - return nullptr; - } - return uri; } @@ -70,9 +65,7 @@ handle_add(Client &client, ConstBuffer args) here */ uri = ""; - uri = translate_uri(client, uri); - if (uri == nullptr) - return CommandResult::ERROR; + uri = translate_uri(uri); if (uri_has_scheme(uri) || PathTraitsUTF8::IsAbsolute(uri)) { const SongLoader loader(client); @@ -101,9 +94,7 @@ handle_add(Client &client, ConstBuffer args) CommandResult handle_addid(Client &client, ConstBuffer args) { - const char *const uri = translate_uri(client, args.front()); - if (uri == nullptr) - return CommandResult::ERROR; + const char *const uri = translate_uri(args.front()); const SongLoader loader(client); Error error; -- cgit v1.2.3