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