Mercurial > mm7
comparison lib/swig/swigwin-2.0.11/CCache/args.c @ 1899:b3009adc0e2f
Adding swig, gitignore, hgignore
author | Nomad |
---|---|
date | Mon, 21 Oct 2013 10:42:27 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1867:eb580660bbbb | 1899:b3009adc0e2f |
---|---|
1 /* | |
2 convenient routines for argument list handling | |
3 | |
4 Copyright (C) Andrew Tridgell 2002 | |
5 | |
6 This program is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2 of the License, or | |
9 (at your option) any later version. | |
10 | |
11 This program is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with this program; if not, write to the Free Software | |
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
19 */ | |
20 | |
21 #include "ccache.h" | |
22 | |
23 ARGS *args_init(int init_argc, char **init_args) | |
24 { | |
25 ARGS *args; | |
26 int i; | |
27 args = (ARGS *)x_malloc(sizeof(ARGS)); | |
28 args->argc = 0; | |
29 args->argv = (char **)x_malloc(sizeof(char *)); | |
30 args->argv[0] = NULL; | |
31 for (i=0;i<init_argc;i++) { | |
32 args_add(args, init_args[i]); | |
33 } | |
34 return args; | |
35 } | |
36 | |
37 | |
38 void args_add(ARGS *args, const char *s) | |
39 { | |
40 args->argv = (char**)x_realloc(args->argv, (args->argc + 2) * sizeof(char *)); | |
41 args->argv[args->argc] = x_strdup(s); | |
42 args->argc++; | |
43 args->argv[args->argc] = NULL; | |
44 } | |
45 | |
46 /* pop the last element off the args list */ | |
47 void args_pop(ARGS *args, int n) | |
48 { | |
49 while (n--) { | |
50 args->argc--; | |
51 free(args->argv[args->argc]); | |
52 args->argv[args->argc] = NULL; | |
53 } | |
54 } | |
55 | |
56 /* remove the first element of the argument list */ | |
57 void args_remove_first(ARGS *args) | |
58 { | |
59 free(args->argv[0]); | |
60 memmove(&args->argv[0], | |
61 &args->argv[1], | |
62 args->argc * sizeof(args->argv[0])); | |
63 args->argc--; | |
64 } | |
65 | |
66 /* add an argument into the front of the argument list */ | |
67 void args_add_prefix(ARGS *args, const char *s) | |
68 { | |
69 args->argv = (char**)x_realloc(args->argv, (args->argc + 2) * sizeof(char *)); | |
70 memmove(&args->argv[1], &args->argv[0], | |
71 (args->argc+1) * sizeof(args->argv[0])); | |
72 args->argv[0] = x_strdup(s); | |
73 args->argc++; | |
74 } | |
75 | |
76 /* strip any arguments beginning with the specified prefix */ | |
77 void args_strip(ARGS *args, const char *prefix) | |
78 { | |
79 int i; | |
80 for (i=0; i<args->argc; ) { | |
81 if (strncmp(args->argv[i], prefix, strlen(prefix)) == 0) { | |
82 free(args->argv[i]); | |
83 memmove(&args->argv[i], | |
84 &args->argv[i+1], | |
85 args->argc * sizeof(args->argv[i])); | |
86 args->argc--; | |
87 } else { | |
88 i++; | |
89 } | |
90 } | |
91 } |