1 /* the Music Player Daemon (MPD)
2 * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
3 * This project's homepage is: http://www.musicpd.org
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #include "buffer2array.h"
31 return (c
== ' ' || c
== '\t');
34 int buffer2array(char *buffer
, char *array
[], const int max
)
39 while (*c
!= '\0' && i
< max
) {
47 else if (*(c
++) == '\\' && *c
!= '\0') {
48 memmove(c
- 1, c
, strlen(c
) + 1);
52 while (isWhiteSpace(*c
))
57 while (!isWhiteSpace(*c
) && *c
!= '\0')
63 while (isWhiteSpace(*c
))
77 char *a
[4] = { NULL
};
81 b
= strdup("lsinfo \"/some/dir/name \\\"test\\\"\"");
82 max
= buffer2array(b
, a
, 4);
83 assert( !strcmp("lsinfo", a
[0]) );
84 assert( !strcmp("/some/dir/name \"test\"", a
[1]) );
87 b
= strdup("lsinfo \"/some/dir/name \\\"test\\\" something else\"");
88 max
= buffer2array(b
, a
, 4);
89 assert( !strcmp("lsinfo", a
[0]) );
90 assert( !strcmp("/some/dir/name \"test\" something else", a
[1]) );
93 b
= strdup("lsinfo \"/some/dir\\\\name\"");
94 max
= buffer2array(b
, a
, 4);
95 assert( !strcmp("lsinfo", a
[0]) );
96 assert( !strcmp("/some/dir\\name", a
[1]) );
99 b
= strdup("lsinfo \"/some/dir name\"");
100 max
= buffer2array(b
, a
, 4);
101 assert( !strcmp("lsinfo", a
[0]) );
102 assert( !strcmp("/some/dir name", a
[1]) );
105 b
= strdup("lsinfo \"\\\"/some/dir\\\"\"");
106 max
= buffer2array(b
, a
, 4);
107 assert( !strcmp("lsinfo", a
[0]) );
108 assert( !strcmp("\"/some/dir\"", a
[1]) );
111 b
= strdup("lsinfo \"\\\"/some/dir\\\" x\"");
112 max
= buffer2array(b
, a
, 4);
113 assert( !strcmp("lsinfo", a
[0]) );
114 assert( !strcmp("\"/some/dir\" x", a
[1]) );
117 b
= strdup("lsinfo \"single quote\\'d from php magicquotes\"");
118 max
= buffer2array(b
, a
, 4);
119 assert( !strcmp("lsinfo", a
[0]) );
120 assert( !strcmp("single quote\'d from php magicquotes", a
[1]) );
123 b
= strdup("lsinfo \"double quote\\\"d from php magicquotes\"");
124 max
= buffer2array(b
, a
, 4);
125 assert( !strcmp("lsinfo", a
[0]) );
126 assert( !strcmp("double quote\"d from php magicquotes", a
[1]) );