diff options
Diffstat (limited to 'src/command.c')
-rw-r--r-- | src/command.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/src/command.c b/src/command.c index f1b98a9f3..41fdbd716 100644 --- a/src/command.c +++ b/src/command.c @@ -108,13 +108,6 @@ #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 **); @@ -1059,28 +1052,27 @@ static CommandEntry *getCommandEntryAndCheckArgcAndPermission(int fd, static CommandEntry *getCommandEntryFromString(char *string, int *permission) { CommandEntry *cmd = NULL; - char *argv[COMMAND_ARGV_MAX] = { NULL }; - int argc = buffer2array(string, argv, COMMAND_ARGV_MAX); + char **argv; + int argc = buffer2array(string, &argv); if (0 == argc) return NULL; cmd = getCommandEntryAndCheckArgcAndPermission(0, permission, argc, argv); + freeArgArray(argv, argc); return cmd; } static int processCommandInternal(int fd, int *permission, - char *commandString, struct strnode *cmdnode) + char *string, struct strnode *cmdnode) { - int argc; - char *argv[COMMAND_ARGV_MAX] = { NULL }; + char **argv; + int argc = buffer2array(string, &argv); CommandEntry *cmd; int ret = -1; - argc = buffer2array(commandString, argv, COMMAND_ARGV_MAX); - if (argc == 0) return 0; @@ -1094,6 +1086,8 @@ static int processCommandInternal(int fd, int *permission, } } + freeArgArray(argv, argc); + current_command = NULL; return ret; |