aboutsummaryrefslogtreecommitdiffstats
path: root/src/command.c
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2006-10-06 10:33:27 +0000
committerWarren Dukes <warren.dukes@gmail.com>2006-10-06 10:33:27 +0000
commite19882660677baf8ba01c3006cf1a8ae5bee83ef (patch)
tree998b69d48f4db57d4e3d0540ae808f1722612528 /src/command.c
parente3222d807a6178e0a4a5254b8443c3432b663efb (diff)
downloadmpd-e19882660677baf8ba01c3006cf1a8ae5bee83ef.tar.gz
mpd-e19882660677baf8ba01c3006cf1a8ae5bee83ef.tar.xz
mpd-e19882660677baf8ba01c3006cf1a8ae5bee83ef.zip
put back np's supperrior buffer2array, and fix my bug fix from change 4872
git-svn-id: https://svn.musicpd.org/mpd/trunk@4875 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/command.c')
-rw-r--r--src/command.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/command.c b/src/command.c
index 41fdbd716..f1b98a9f3 100644
--- a/src/command.c
+++ b/src/command.c
@@ -108,6 +108,13 @@
#define COMMAND_STATUS_AUDIO "audio"
#define COMMAND_STATUS_UPDATING_DB "updating_db"
+/*
+ * The most we ever use is for search/find, and that limits it to the
+ * number of tags we can have. Add one for the command, and one extra
+ * to catch errors clients may send us
+ */
+#define COMMAND_ARGV_MAX (2+(TAG_NUM_OF_ITEM_TYPES*2))
+
typedef struct _CommandEntry CommandEntry;
typedef int (*CommandHandlerFunction) (int, int *, int, char **);
@@ -1052,27 +1059,28 @@ static CommandEntry *getCommandEntryAndCheckArgcAndPermission(int fd,
static CommandEntry *getCommandEntryFromString(char *string, int *permission)
{
CommandEntry *cmd = NULL;
- char **argv;
- int argc = buffer2array(string, &argv);
+ char *argv[COMMAND_ARGV_MAX] = { NULL };
+ int argc = buffer2array(string, argv, COMMAND_ARGV_MAX);
if (0 == argc)
return NULL;
cmd = getCommandEntryAndCheckArgcAndPermission(0, permission,
argc, argv);
- freeArgArray(argv, argc);
return cmd;
}
static int processCommandInternal(int fd, int *permission,
- char *string, struct strnode *cmdnode)
+ char *commandString, struct strnode *cmdnode)
{
- char **argv;
- int argc = buffer2array(string, &argv);
+ int argc;
+ char *argv[COMMAND_ARGV_MAX] = { NULL };
CommandEntry *cmd;
int ret = -1;
+ argc = buffer2array(commandString, argv, COMMAND_ARGV_MAX);
+
if (argc == 0)
return 0;
@@ -1086,8 +1094,6 @@ static int processCommandInternal(int fd, int *permission,
}
}
- freeArgArray(argv, argc);
-
current_command = NULL;
return ret;