Mercurial > ~darius > hgwebdir.cgi > avr-lib
comparison splitargv.c @ 20:76a6bad110e2
Add routine to split string into argv/argc
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sat, 31 Jan 2015 23:30:35 +1030 |
parents | |
children | 01e77066f72b |
comparison
equal
deleted
inserted
replaced
19:b5e4591b6570 | 20:76a6bad110e2 |
---|---|
1 /* | |
2 * Split string to argv | |
3 * | |
4 * Copyright (c) 2015 | |
5 * Daniel O'Connor <darius@dons.net.au>. All rights reserved. | |
6 * | |
7 * Redistribution and use in source and binary forms, with or without | |
8 * modification, are permitted provided that the following conditions | |
9 * are met: | |
10 * 1. Redistributions of source code must retain the above copyright | |
11 * notice, this list of conditions and the following disclaimer. | |
12 * 2. Redistributions in binary form must reproduce the above copyright | |
13 * notice, this list of conditions and the following disclaimer in the | |
14 * documentation and/or other materials provided with the distribution. | |
15 * | |
16 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
19 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE | |
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
26 * SUCH DAMAGE. | |
27 */ | |
28 | |
29 #include <string.h> | |
30 | |
31 /* Split command string on space/tab boundaries into argv/argc | |
32 * | |
33 * Ignore the first 'skip' parameters. | |
34 * If maxargs is exceeded return 1 otherwise 0 | |
35 * | |
36 * TODO: handle escape chars | |
37 */ | |
38 int | |
39 splitargv(char *buf, unsigned skip, char *argv[], unsigned maxargs, int *argc) { | |
40 char **btmp; | |
41 | |
42 *argc = 0; | |
43 btmp = &buf; | |
44 while (1) { | |
45 argv[*argc] = strsep(btmp, " \t"); | |
46 if (argv[*argc] == '\0') | |
47 break; | |
48 /* Skip arg(s) if necessary */ | |
49 if (skip) { | |
50 skip--; | |
51 continue; | |
52 } | |
53 (*argc)++; | |
54 if (*argc == maxargs) | |
55 return 1; | |
56 } | |
57 | |
58 return 0; | |
59 } | |
60 |