1 /*
2 * LASH
3 *
4 * Copyright (C) 2002, 2003 Robert Ham <rah@bash.sh>
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21 #include <stdlib.h>
22
23 #include <lash/lash.h>
24 #include <lash/args.h>
25 #include <lash/internal.h>
26 #include <lash/internal_headers.h>
27
28 void
lash_args_free_argv(lash_args_t * args)29 lash_args_free_argv(lash_args_t * args)
30 {
31 if (args->argv) {
32 int i;
33
34 for (i = 0; i < args->argc; i++)
35 free(args->argv[i]);
36 free(args->argv);
37 args->argv = NULL;
38 }
39 }
40
41 void
lash_args_free(lash_args_t * args)42 lash_args_free(lash_args_t * args)
43 {
44 if (args->project)
45 free(args->project);
46 if (args->server)
47 free(args->server);
48 lash_args_free_argv(args);
49 }
50
51 lash_args_t *
lash_args_new()52 lash_args_new()
53 {
54 lash_args_t *args;
55
56 args = lash_malloc0(sizeof(lash_args_t));
57 args->project = NULL;
58 args->server = NULL;
59 uuid_clear(args->id);
60 args->flags = 0;
61 args->argc = 0;
62 args->argv = NULL;
63
64 return args;
65 }
66
67
68 lash_args_t *
lash_args_duplicate(const lash_args_t * const src)69 lash_args_duplicate(const lash_args_t *const src)
70 {
71 if (src == NULL)
72 return NULL;
73
74 lash_args_t* result = lash_args_new();
75
76 if (src->project)
77 result->project = lash_strdup(src->project);
78 if (src->server)
79 result->server = lash_strdup(src->server);
80 if (!uuid_is_null(src->id))
81 uuid_copy(result->id, src->id);
82 result->flags = src->flags;
83 result->argc = 0;
84 result->argv = NULL;
85 if (src->argc > 0 && src->argv)
86 lash_args_set_args(result, src->argc, (const char**)src->argv);
87
88 return result;
89 }
90
91
92 void
lash_args_destroy(lash_args_t * args)93 lash_args_destroy(lash_args_t * args)
94 {
95 lash_args_free(args);
96 free(args);
97 }
98
99 void
lash_args_set_project(lash_args_t * args,const char * project)100 lash_args_set_project(lash_args_t * args, const char *project)
101 {
102 set_string_property(args->project, project);
103 }
104
105 void
lash_args_set_server(lash_args_t * args,const char * server)106 lash_args_set_server(lash_args_t * args, const char *server)
107 {
108 set_string_property(args->server, server);
109 }
110
111 void
lash_args_set_id(lash_args_t * args,uuid_t id)112 lash_args_set_id(lash_args_t * args, uuid_t id)
113 {
114 uuid_copy(args->id, id);
115 }
116
117 void
lash_args_set_flags(lash_args_t * args,int flags)118 lash_args_set_flags(lash_args_t * args, int flags)
119 {
120 args->flags = flags;
121 }
122
123 void
lash_args_set_flag(lash_args_t * args,int flag)124 lash_args_set_flag(lash_args_t * args, int flag)
125 {
126 args->flags |= flag;
127 }
128
129 const char *
lash_args_get_project(const lash_args_t * args)130 lash_args_get_project(const lash_args_t * args)
131 {
132 return args->project;
133 }
134
135 const char *
lash_args_get_server(const lash_args_t * args)136 lash_args_get_server(const lash_args_t * args)
137 {
138 return args->server;
139 }
140
141 void
lash_args_get_id(const lash_args_t * args,uuid_t id)142 lash_args_get_id(const lash_args_t * args, uuid_t id)
143 {
144 uuid_copy(id, ((lash_args_t *) args)->id);
145 }
146
147 int
lash_args_get_flags(const lash_args_t * args)148 lash_args_get_flags(const lash_args_t * args)
149 {
150 return args->flags;
151 }
152
153 void
lash_args_set_args(lash_args_t * args,int argc,const char ** argv)154 lash_args_set_args(lash_args_t * args, int argc, const char ** argv)
155 {
156 int i;
157
158 lash_args_free_argv(args);
159
160 args->argc = argc;
161 args->argv = lash_malloc(sizeof(char *) * argc);
162
163 for (i = 0; i < argc; i++)
164 args->argv[i] = lash_strdup(argv[i]);
165 }
166
167 int
lash_args_get_argc(const lash_args_t * args)168 lash_args_get_argc(const lash_args_t * args)
169 {
170 return args->argc;
171 }
172
173 char **
lash_args_take_argv(lash_args_t * args)174 lash_args_take_argv(lash_args_t * args)
175 {
176 char **argv;
177
178 argv = args->argv;
179 args->argv = NULL;
180 return argv;
181 }
182
183 const char *const *
lash_args_get_argv(const lash_args_t * args)184 lash_args_get_argv(const lash_args_t * args)
185 {
186 return (const char *const *)args->argv;
187 }
188
189
190 /* EOF */
191