summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/Response.cxx3
-rw-r--r--src/client/Response.hxx11
-rw-r--r--src/command/AllCommands.cxx16
-rw-r--r--src/protocol/Result.cxx2
-rw-r--r--src/protocol/Result.hxx2
5 files changed, 13 insertions, 21 deletions
diff --git a/src/client/Response.cxx b/src/client/Response.cxx
index 9af3c74ed..d443e66a5 100644
--- a/src/client/Response.cxx
+++ b/src/client/Response.cxx
@@ -20,7 +20,6 @@
#include "config.h"
#include "Response.hxx"
#include "Client.hxx"
-#include "protocol/Result.hxx"
#include "util/FormatString.hxx"
#include <string.h>
@@ -66,7 +65,7 @@ void
Response::FormatError(enum ack code, const char *fmt, ...)
{
Format("ACK [%i@%u] {%s} ",
- (int)code, list_index, current_command);
+ (int)code, list_index, command);
va_list args;
va_start(args, fmt);
diff --git a/src/client/Response.hxx b/src/client/Response.hxx
index 044bdf307..5841e7f61 100644
--- a/src/client/Response.hxx
+++ b/src/client/Response.hxx
@@ -37,13 +37,22 @@ class Response {
*/
const unsigned list_index;
+ /**
+ * This command's name. Used to generate error messages.
+ */
+ const char *command;
+
public:
Response(Client &_client, unsigned _list_index)
- :client(_client), list_index(_list_index) {}
+ :client(_client), list_index(_list_index), command("") {}
Response(const Response &) = delete;
Response &operator=(const Response &) = delete;
+ void SetCommand(const char *_command) {
+ command = _command;
+ }
+
bool Write(const void *data, size_t length);
bool Write(const char *data);
bool FormatV(const char *fmt, va_list args);
diff --git a/src/command/AllCommands.cxx b/src/command/AllCommands.cxx
index f98018f88..66d10ef1b 100644
--- a/src/command/AllCommands.cxx
+++ b/src/command/AllCommands.cxx
@@ -33,7 +33,6 @@
#include "OtherCommands.hxx"
#include "Permission.hxx"
#include "tag/TagType.h"
-#include "protocol/Result.hxx"
#include "Partition.hxx"
#include "client/Client.hxx"
#include "client/Response.hxx"
@@ -343,8 +342,6 @@ static const struct command *
command_checked_lookup(Response &r, unsigned permission,
const char *cmd_name, Request args)
{
- current_command = "";
-
const struct command *cmd = command_lookup(cmd_name);
if (cmd == nullptr) {
r.FormatError(ACK_ERROR_UNKNOWN,
@@ -352,7 +349,7 @@ command_checked_lookup(Response &r, unsigned permission,
return nullptr;
}
- current_command = cmd->cmd;
+ r.SetCommand(cmd->cmd);
if (!command_check_request(cmd, r, permission, args))
return nullptr;
@@ -372,18 +369,13 @@ command_process(Client &client, unsigned num, char *line)
Tokenizer tokenizer(line);
- const char *const cmd_name = current_command =
- tokenizer.NextWord(error);
+ const char *const cmd_name = tokenizer.NextWord(error);
if (cmd_name == nullptr) {
- current_command = "";
-
if (tokenizer.IsEnd())
r.FormatError(ACK_ERROR_UNKNOWN, "No command given");
else
r.Error(ACK_ERROR_UNKNOWN, error.GetMessage());
- current_command = nullptr;
-
/* this client does not speak the MPD protocol; kick
the connection */
return CommandResult::FINISH;
@@ -397,7 +389,6 @@ command_process(Client &client, unsigned num, char *line)
while (true) {
if (args.size == COMMAND_ARGV_MAX) {
r.Error(ACK_ERROR_ARG, "Too many arguments");
- current_command = nullptr;
return CommandResult::ERROR;
}
@@ -407,7 +398,6 @@ command_process(Client &client, unsigned num, char *line)
break;
r.Error(ACK_ERROR_UNKNOWN, error.GetMessage());
- current_command = nullptr;
return CommandResult::ERROR;
}
@@ -424,7 +414,5 @@ command_process(Client &client, unsigned num, char *line)
? cmd->handler(client, args, r)
: CommandResult::ERROR;
- current_command = nullptr;
-
return ret;
}
diff --git a/src/protocol/Result.cxx b/src/protocol/Result.cxx
index 7d8dfb759..6a0da1665 100644
--- a/src/protocol/Result.cxx
+++ b/src/protocol/Result.cxx
@@ -21,8 +21,6 @@
#include "Result.hxx"
#include "client/Client.hxx"
-const char *current_command;
-
void
command_success(Client &client)
{
diff --git a/src/protocol/Result.hxx b/src/protocol/Result.hxx
index 7dcb969e1..d75bbe51b 100644
--- a/src/protocol/Result.hxx
+++ b/src/protocol/Result.hxx
@@ -24,8 +24,6 @@
class Client;
-extern const char *current_command;
-
void
command_success(Client &client);