aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_getopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/fs_getopt.c')
-rw-r--r--src/fs/fs_getopt.c274
1 files changed, 0 insertions, 274 deletions
diff --git a/src/fs/fs_getopt.c b/src/fs/fs_getopt.c
deleted file mode 100644
index 43a02a9fa..000000000
--- a/src/fs/fs_getopt.c
+++ /dev/null
@@ -1,274 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file fs/fs_getopt.c
23 * @brief helper functions for command-line argument processing
24 * @author Igor Wronsky, Christian Grothoff
25 */
26#include "platform.h"
27#include "gnunet_fs_service.h"
28#include "gnunet_getopt_lib.h"
29#include "fs_api.h"
30
31/* ******************** command-line option parsing API ******************** */
32
33/**
34 * Command-line option parser function that allows the user
35 * to specify one or more '-k' options with keywords. Each
36 * specified keyword will be added to the URI. A pointer to
37 * the URI must be passed as the "scls" argument.
38 *
39 * @param ctx command line processor context
40 * @param scls must be of type "struct GNUNET_FS_Uri **"
41 * @param option name of the option (typically 'k')
42 * @param value command line argument given
43 * @return #GNUNET_OK on success
44 */
45static int
46getopt_set_keywords (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
47 void *scls,
48 const char *option,
49 const char *value)
50{
51 struct GNUNET_FS_Uri **uri = scls;
52 struct GNUNET_FS_Uri *u = *uri;
53 char *val;
54 size_t slen;
55
56 if (NULL == u)
57 {
58 u = GNUNET_new (struct GNUNET_FS_Uri);
59 *uri = u;
60 u->type = GNUNET_FS_URI_KSK;
61 u->data.ksk.keywordCount = 0;
62 u->data.ksk.keywords = NULL;
63 }
64 else
65 {
66 GNUNET_assert (GNUNET_FS_URI_KSK == u->type);
67 }
68 slen = strlen (value);
69 if (0 == slen)
70 return GNUNET_SYSERR; /* cannot be empty */
71 if (value[0] == '+')
72 {
73 /* simply preserve the "mandatory" flag */
74 if (slen < 2)
75 return GNUNET_SYSERR; /* empty keywords not allowed */
76 if ((value[1] == '"') && (slen > 3) && (value[slen - 1] == '"'))
77 {
78 /* remove the quotes, keep the '+' */
79 val = GNUNET_malloc (slen - 1);
80 val[0] = '+';
81 GNUNET_memcpy (&val[1],
82 &value[2],
83 slen - 3);
84 val[slen - 2] = '\0';
85 }
86 else
87 {
88 /* no quotes, just keep the '+' */
89 val = GNUNET_strdup (value);
90 }
91 }
92 else
93 {
94 if ((value[0] == '"') && (slen > 2) && (value[slen - 1] == '"'))
95 {
96 /* remove the quotes, add a space */
97 val = GNUNET_malloc (slen);
98 val[0] = ' ';
99 GNUNET_memcpy (&val[1],
100 &value[1],
101 slen - 2);
102 val[slen - 1] = '\0';
103 }
104 else
105 {
106 /* add a space to indicate "not mandatory" */
107 val = GNUNET_malloc (slen + 2);
108 strcpy (val, " ");
109 strcat (val, value);
110 }
111 }
112 GNUNET_array_append (u->data.ksk.keywords,
113 u->data.ksk.keywordCount,
114 val);
115 return GNUNET_OK;
116}
117
118
119/**
120 * Allow user to specify keywords.
121 *
122 * @param shortName short name of the option
123 * @param name long name of the option
124 * @param argumentHelp help text for the option argument
125 * @param description long help text for the option
126 * @param[out] topKeywords set to the desired value
127 */
128struct GNUNET_GETOPT_CommandLineOption
129GNUNET_FS_GETOPT_KEYWORDS (char shortName,
130 const char *name,
131 const char *argumentHelp,
132 const char *description,
133 struct GNUNET_FS_Uri **topKeywords)
134{
135 struct GNUNET_GETOPT_CommandLineOption clo = {
136 .shortName = shortName,
137 .name = name,
138 .argumentHelp = argumentHelp,
139 .description = description,
140 .require_argument = 1,
141 .processor = &getopt_set_keywords,
142 .scls = (void *) topKeywords
143 };
144
145 return clo;
146}
147
148
149/**
150 * Command-line option parser function that allows the user to specify
151 * one or more '-m' options with metadata. Each specified entry of
152 * the form "type=value" will be added to the metadata. A pointer to
153 * the metadata must be passed as the "scls" argument.
154 *
155 * @param ctx command line processor context
156 * @param scls must be of type "struct GNUNET_MetaData **"
157 * @param option name of the option (typically 'k')
158 * @param value command line argument given
159 * @return #GNUNET_OK on success
160 */
161static int
162getopt_set_metadata (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
163 void *scls,
164 const char *option,
165 const char *value)
166{
167 struct GNUNET_CONTAINER_MetaData **mm = scls;
168
169#if HAVE_EXTRACTOR_H && HAVE_LIBEXTRACTOR
170 enum EXTRACTOR_MetaType type;
171 const char *typename;
172 const char *typename_i18n;
173#endif
174 struct GNUNET_CONTAINER_MetaData *meta;
175 char *tmp;
176
177 meta = *mm;
178 if (meta == NULL)
179 {
180 meta = GNUNET_CONTAINER_meta_data_create ();
181 *mm = meta;
182 }
183
184 /* Use GNUNET_STRINGS_get_utf8_args() in main() to acquire utf-8-encoded
185 * commandline arguments, so that the following line is not needed.
186 */
187 /*tmp = GNUNET_STRINGS_to_utf8 (value, strlen (value), locale_charset ());*/
188 tmp = GNUNET_strdup (value);
189#if HAVE_EXTRACTOR_H && HAVE_LIBEXTRACTOR
190 type = EXTRACTOR_metatype_get_max ();
191 while (type > 0)
192 {
193 type--;
194 typename = EXTRACTOR_metatype_to_string (type);
195 typename_i18n = dgettext (LIBEXTRACTOR_GETTEXT_DOMAIN, typename);
196 if ((strlen (tmp) >= strlen (typename) + 1) &&
197 (tmp[strlen (typename)] == ':') &&
198 (0 == strncmp (typename, tmp, strlen (typename))))
199 {
200 GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
201 EXTRACTOR_METAFORMAT_UTF8,
202 "text/plain",
203 &tmp[strlen (typename) + 1],
204 strlen (&tmp[strlen (typename) + 1])
205 + 1);
206 GNUNET_free (tmp);
207 tmp = NULL;
208 break;
209 }
210 if ((strlen (tmp) >= strlen (typename_i18n) + 1) &&
211 (tmp[strlen (typename_i18n)] == ':') &&
212 (0 == strncmp (typename_i18n, tmp, strlen (typename_i18n))))
213 {
214 GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>", type,
215 EXTRACTOR_METAFORMAT_UTF8,
216 "text/plain",
217 &tmp[strlen (typename_i18n) + 1],
218 strlen (&tmp
219 [strlen (typename_i18n) + 1])
220 + 1);
221 GNUNET_free (tmp);
222 tmp = NULL;
223 break;
224 }
225 }
226#endif
227
228 if (NULL != tmp)
229 {
230 GNUNET_CONTAINER_meta_data_insert (meta, "<gnunet>",
231 EXTRACTOR_METATYPE_UNKNOWN,
232 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
233 tmp, strlen (tmp) + 1);
234 GNUNET_free (tmp);
235 printf (_
236 (
237 "Unknown metadata type in metadata option `%s'. Using metadata type `unknown' instead.\n"),
238 value);
239 }
240 return GNUNET_OK;
241}
242
243
244/**
245 * Allow user to specify metadata.
246 *
247 * @param shortName short name of the option
248 * @param name long name of the option
249 * @param argumentHelp help text for the option argument
250 * @param description long help text for the option
251 * @param[out] metadata set to the desired value
252 */
253struct GNUNET_GETOPT_CommandLineOption
254GNUNET_FS_GETOPT_METADATA (char shortName,
255 const char *name,
256 const char *argumentHelp,
257 const char *description,
258 struct GNUNET_CONTAINER_MetaData **meta)
259{
260 struct GNUNET_GETOPT_CommandLineOption clo = {
261 .shortName = shortName,
262 .name = name,
263 .argumentHelp = argumentHelp,
264 .description = description,
265 .require_argument = 1,
266 .processor = &getopt_set_metadata,
267 .scls = (void *) meta
268 };
269
270 return clo;
271}
272
273
274/* end of fs_getopt.c */