diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2006-10-06 10:33:27 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2006-10-06 10:33:27 +0000 |
commit | e19882660677baf8ba01c3006cf1a8ae5bee83ef (patch) | |
tree | 998b69d48f4db57d4e3d0540ae808f1722612528 /src/command.c | |
parent | e3222d807a6178e0a4a5254b8443c3432b663efb (diff) | |
download | mpd-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.c | 22 |
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; |