Revert buffer2array() behavior back to tried and true 0.11.x version

Warren's fix in r4872 made phpMp work again, but also broke
the unit tests completely (they work in this version).

The version in 0.12.0 is far too buggy (it was from mpd-ke, what
do you expect?).  This one passes all the unit tests that the
mpd-ke one passed, and should also work with phpMp when used
with PHP magic quotes.

This also means we can search on 100 (or more) tags at once, so
no more arbitrary limits other than system memory.

To run the unit tests, just do this:
gcc -o t -DUNIT_TEST=1 src/buffer2array.c && ./t && echo OK

git-svn-id: https://svn.musicpd.org/mpd/trunk@4874 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Eric Wong
2006-10-06 08:54:43 +00:00
parent 1a51bfb84a
commit e3222d807a
4 changed files with 123 additions and 71 deletions

View File

@@ -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;