aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arm/gnunet-arm.c3
-rw-r--r--src/ats/perf_ats_mlp.c2
-rw-r--r--src/chat/gnunet-chat.c4
-rw-r--r--src/core/gnunet-core.c4
-rw-r--r--src/dht/gnunet-dht-get.c4
-rw-r--r--src/dht/gnunet-dht-monitor.c3
-rw-r--r--src/dht/gnunet-dht-put.c3
-rw-r--r--src/dns/gnunet-dns-monitor.c4
-rw-r--r--src/dns/gnunet-dns-redirector.c4
-rw-r--r--src/exit/gnunet-daemon-exit.c3
-rw-r--r--src/fs/gnunet-directory.c4
-rw-r--r--src/fs/gnunet-download.c4
-rw-r--r--src/fs/gnunet-fs.c4
-rw-r--r--src/fs/gnunet-helper-fs-publish.c5
-rw-r--r--src/fs/gnunet-pseudonym.c4
-rw-r--r--src/fs/gnunet-publish.c4
-rw-r--r--src/fs/gnunet-search.c4
-rw-r--r--src/fs/gnunet-unindex.c4
-rw-r--r--src/gns/gnunet-gns-fcfsd.c3
-rw-r--r--src/gns/gnunet-gns-lookup.c3
-rw-r--r--src/gns/gnunet-gns-proxy.c3
-rw-r--r--src/gns/gnunet-gns.c3
-rw-r--r--src/hostlist/gnunet-daemon-hostlist.c3
-rw-r--r--src/include/gnunet_strings_lib.h18
-rw-r--r--src/integration-tests/connection_watchdog.c4
-rw-r--r--src/namestore/gnunet-namestore.c3
-rw-r--r--src/nat/gnunet-nat-server.c3
-rw-r--r--src/nse/gnunet-nse-profiler.c5
-rw-r--r--src/peerinfo-tool/gnunet-peerinfo.c4
-rw-r--r--src/pt/gnunet-daemon-pt.c3
-rw-r--r--src/statistics/gnunet-statistics.c4
-rw-r--r--src/template/gnunet-template.c4
-rw-r--r--src/testing_old/gnunet-testing.c4
-rw-r--r--src/topology/gnunet-daemon-topology.c3
-rw-r--r--src/transport/gnunet-transport.c4
-rw-r--r--src/util/gnunet-resolver.c4
-rw-r--r--src/util/gnunet-rsa.c4
-rw-r--r--src/util/program.c1
-rw-r--r--src/util/strings.c90
-rw-r--r--src/vpn/gnunet-vpn.c4
40 files changed, 242 insertions, 2 deletions
diff --git a/src/arm/gnunet-arm.c b/src/arm/gnunet-arm.c
index 58aa70957..744c3f208 100644
--- a/src/arm/gnunet-arm.c
+++ b/src/arm/gnunet-arm.c
@@ -431,6 +431,9 @@ main (int argc, char *const *argv)
431 if (temp_timeout_ms > 0) 431 if (temp_timeout_ms > 0)
432 timeout.rel_value = temp_timeout_ms; 432 timeout.rel_value = temp_timeout_ms;
433 433
434 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
435 return 2;
436
434 if (GNUNET_OK == 437 if (GNUNET_OK ==
435 GNUNET_PROGRAM_run (argc, argv, "gnunet-arm", 438 GNUNET_PROGRAM_run (argc, argv, "gnunet-arm",
436 gettext_noop 439 gettext_noop
diff --git a/src/ats/perf_ats_mlp.c b/src/ats/perf_ats_mlp.c
index b9ee5e4dc..ff2d8dada 100644
--- a/src/ats/perf_ats_mlp.c
+++ b/src/ats/perf_ats_mlp.c
@@ -360,6 +360,8 @@ main (int argc, char *argv[])
360 GNUNET_GETOPT_OPTION_END 360 GNUNET_GETOPT_OPTION_END
361 }; 361 };
362 362
363 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
364 return 2;
363 365
364 GNUNET_PROGRAM_run (argc, argv, 366 GNUNET_PROGRAM_run (argc, argv,
365 "perf_ats_mlp", "nohelp", options, 367 "perf_ats_mlp", "nohelp", options,
diff --git a/src/chat/gnunet-chat.c b/src/chat/gnunet-chat.c
index 7b11c0d18..012f78ed9 100644
--- a/src/chat/gnunet-chat.c
+++ b/src/chat/gnunet-chat.c
@@ -737,6 +737,10 @@ main (int argc, char *const *argv)
737 flags |= O_NONBLOCK; 737 flags |= O_NONBLOCK;
738 fcntl (0, F_SETFL, flags); 738 fcntl (0, F_SETFL, flags);
739#endif 739#endif
740
741 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
742 return 2;
743
740 return (GNUNET_OK == 744 return (GNUNET_OK ==
741 GNUNET_PROGRAM_run (argc, argv, "gnunet-chat", 745 GNUNET_PROGRAM_run (argc, argv, "gnunet-chat",
742 gettext_noop ("Join a chat on GNUnet."), options, 746 gettext_noop ("Join a chat on GNUnet."), options,
diff --git a/src/core/gnunet-core.c b/src/core/gnunet-core.c
index 4fe0a4f86..78bc14154 100644
--- a/src/core/gnunet-core.c
+++ b/src/core/gnunet-core.c
@@ -89,6 +89,10 @@ main (int argc, char *const *argv)
89 static const struct GNUNET_GETOPT_CommandLineOption options[] = { 89 static const struct GNUNET_GETOPT_CommandLineOption options[] = {
90 GNUNET_GETOPT_OPTION_END 90 GNUNET_GETOPT_OPTION_END
91 }; 91 };
92
93 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
94 return 2;
95
92 return (GNUNET_OK == 96 return (GNUNET_OK ==
93 GNUNET_PROGRAM_run (argc, argv, "gnunet-core", 97 GNUNET_PROGRAM_run (argc, argv, "gnunet-core",
94 gettext_noop 98 gettext_noop
diff --git a/src/dht/gnunet-dht-get.c b/src/dht/gnunet-dht-get.c
index fb185c489..7555f9009 100644
--- a/src/dht/gnunet-dht-get.c
+++ b/src/dht/gnunet-dht-get.c
@@ -226,6 +226,10 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
226int 226int
227main (int argc, char *const *argv) 227main (int argc, char *const *argv)
228{ 228{
229
230 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
231 return 2;
232
229 return (GNUNET_OK == 233 return (GNUNET_OK ==
230 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-get", 234 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-get",
231 gettext_noop 235 gettext_noop
diff --git a/src/dht/gnunet-dht-monitor.c b/src/dht/gnunet-dht-monitor.c
index 8ca3beb2a..088874a53 100644
--- a/src/dht/gnunet-dht-monitor.c
+++ b/src/dht/gnunet-dht-monitor.c
@@ -315,6 +315,9 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
315int 315int
316main (int argc, char *const *argv) 316main (int argc, char *const *argv)
317{ 317{
318 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
319 return 2;
320
318 return (GNUNET_OK == 321 return (GNUNET_OK ==
319 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-get", 322 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-get",
320 gettext_noop 323 gettext_noop
diff --git a/src/dht/gnunet-dht-put.c b/src/dht/gnunet-dht-put.c
index 59acc792b..f6409bdff 100644
--- a/src/dht/gnunet-dht-put.c
+++ b/src/dht/gnunet-dht-put.c
@@ -217,6 +217,9 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
217int 217int
218main (int argc, char *const *argv) 218main (int argc, char *const *argv)
219{ 219{
220 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
221 return 2;
222
220 return (GNUNET_OK == 223 return (GNUNET_OK ==
221 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-put", 224 GNUNET_PROGRAM_run (argc, argv, "gnunet-dht-put",
222 gettext_noop 225 gettext_noop
diff --git a/src/dns/gnunet-dns-monitor.c b/src/dns/gnunet-dns-monitor.c
index 82715aabc..2a05efdee 100644
--- a/src/dns/gnunet-dns-monitor.c
+++ b/src/dns/gnunet-dns-monitor.c
@@ -342,6 +342,10 @@ main (int argc, char *const *argv)
342 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity), 342 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity),
343 GNUNET_GETOPT_OPTION_END 343 GNUNET_GETOPT_OPTION_END
344 }; 344 };
345
346 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
347 return 2;
348
345 return (GNUNET_OK == 349 return (GNUNET_OK ==
346 GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-monitor", 350 GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-monitor",
347 gettext_noop 351 gettext_noop
diff --git a/src/dns/gnunet-dns-redirector.c b/src/dns/gnunet-dns-redirector.c
index a45b89609..5ba7e87c6 100644
--- a/src/dns/gnunet-dns-redirector.c
+++ b/src/dns/gnunet-dns-redirector.c
@@ -241,6 +241,10 @@ main (int argc, char *const *argv)
241 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity), 241 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity),
242 GNUNET_GETOPT_OPTION_END 242 GNUNET_GETOPT_OPTION_END
243 }; 243 };
244
245 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
246 return 2;
247
244 return (GNUNET_OK == 248 return (GNUNET_OK ==
245 GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-redirector", 249 GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-redirector",
246 gettext_noop 250 gettext_noop
diff --git a/src/exit/gnunet-daemon-exit.c b/src/exit/gnunet-daemon-exit.c
index 26f3e7536..216625567 100644
--- a/src/exit/gnunet-daemon-exit.c
+++ b/src/exit/gnunet-daemon-exit.c
@@ -3230,6 +3230,9 @@ main (int argc, char *const *argv)
3230 GNUNET_GETOPT_OPTION_END 3230 GNUNET_GETOPT_OPTION_END
3231 }; 3231 };
3232 3232
3233 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
3234 return 2;
3235
3233 return (GNUNET_OK == 3236 return (GNUNET_OK ==
3234 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-exit", 3237 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-exit",
3235 gettext_noop 3238 gettext_noop
diff --git a/src/fs/gnunet-directory.c b/src/fs/gnunet-directory.c
index c722f57ff..4122cb154 100644
--- a/src/fs/gnunet-directory.c
+++ b/src/fs/gnunet-directory.c
@@ -173,6 +173,10 @@ main (int argc, char *const *argv)
173 static struct GNUNET_GETOPT_CommandLineOption options[] = { 173 static struct GNUNET_GETOPT_CommandLineOption options[] = {
174 GNUNET_GETOPT_OPTION_END 174 GNUNET_GETOPT_OPTION_END
175 }; 175 };
176
177 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
178 return 2;
179
176 return (GNUNET_OK == 180 return (GNUNET_OK ==
177 GNUNET_PROGRAM_run (argc, argv, "gnunet-directory [OPTIONS] FILENAME", 181 GNUNET_PROGRAM_run (argc, argv, "gnunet-directory [OPTIONS] FILENAME",
178 gettext_noop 182 gettext_noop
diff --git a/src/fs/gnunet-download.c b/src/fs/gnunet-download.c
index 5a66aea27..bd5b09c0d 100644
--- a/src/fs/gnunet-download.c
+++ b/src/fs/gnunet-download.c
@@ -272,6 +272,10 @@ main (int argc, char *const *argv)
272 0, &GNUNET_GETOPT_increment_value, &verbose}, 272 0, &GNUNET_GETOPT_increment_value, &verbose},
273 GNUNET_GETOPT_OPTION_END 273 GNUNET_GETOPT_OPTION_END
274 }; 274 };
275
276 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
277 return 2;
278
275 return (GNUNET_OK == 279 return (GNUNET_OK ==
276 GNUNET_PROGRAM_run (argc, argv, "gnunet-download [OPTIONS] URI", 280 GNUNET_PROGRAM_run (argc, argv, "gnunet-download [OPTIONS] URI",
277 gettext_noop 281 gettext_noop
diff --git a/src/fs/gnunet-fs.c b/src/fs/gnunet-fs.c
index 0b2892371..404c64e4d 100644
--- a/src/fs/gnunet-fs.c
+++ b/src/fs/gnunet-fs.c
@@ -119,6 +119,10 @@ main (int argc, char *const *argv)
119 GNUNET_GETOPT_OPTION_VERBOSE (&verbose), 119 GNUNET_GETOPT_OPTION_VERBOSE (&verbose),
120 GNUNET_GETOPT_OPTION_END 120 GNUNET_GETOPT_OPTION_END
121 }; 121 };
122
123 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
124 return 2;
125
122 return (GNUNET_OK == 126 return (GNUNET_OK ==
123 GNUNET_PROGRAM_run (argc, argv, "gnunet-fs [OPTIONS]", 127 GNUNET_PROGRAM_run (argc, argv, "gnunet-fs [OPTIONS]",
124 gettext_noop ("Special file-sharing operations"), 128 gettext_noop ("Special file-sharing operations"),
diff --git a/src/fs/gnunet-helper-fs-publish.c b/src/fs/gnunet-helper-fs-publish.c
index 86b02492d..45f6d588d 100644
--- a/src/fs/gnunet-helper-fs-publish.c
+++ b/src/fs/gnunet-helper-fs-publish.c
@@ -413,7 +413,7 @@ extract_files (struct ScanTreeNode *item)
413 * @return 0 on success 413 * @return 0 on success
414 */ 414 */
415int main(int argc, 415int main(int argc,
416 char **argv) 416 char *const *argv)
417{ 417{
418 const char *filename_expanded; 418 const char *filename_expanded;
419 const char *ex; 419 const char *ex;
@@ -424,6 +424,9 @@ int main(int argc,
424 * binary mode. 424 * binary mode.
425 */ 425 */
426 _setmode (1, _O_BINARY); 426 _setmode (1, _O_BINARY);
427 /* Get utf-8-encoded arguments */
428 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
429 return 5;
427#endif 430#endif
428 431
429 /* parse command line */ 432 /* parse command line */
diff --git a/src/fs/gnunet-pseudonym.c b/src/fs/gnunet-pseudonym.c
index 38826d1de..2b1b897c2 100644
--- a/src/fs/gnunet-pseudonym.c
+++ b/src/fs/gnunet-pseudonym.c
@@ -313,6 +313,10 @@ main (int argc, char *const *argv)
313 }; 313 };
314 bo.expiration_time = 314 bo.expiration_time =
315 GNUNET_FS_year_to_time (GNUNET_FS_get_current_year () + 2); 315 GNUNET_FS_year_to_time (GNUNET_FS_get_current_year () + 2);
316
317 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
318 return 2;
319
316 return (GNUNET_OK == 320 return (GNUNET_OK ==
317 GNUNET_PROGRAM_run (argc, argv, "gnunet-pseudonym [OPTIONS]", 321 GNUNET_PROGRAM_run (argc, argv, "gnunet-pseudonym [OPTIONS]",
318 gettext_noop ("Manage GNUnet pseudonyms."), 322 gettext_noop ("Manage GNUnet pseudonyms."),
diff --git a/src/fs/gnunet-publish.c b/src/fs/gnunet-publish.c
index a1b26dbd5..24e49d369 100644
--- a/src/fs/gnunet-publish.c
+++ b/src/fs/gnunet-publish.c
@@ -736,6 +736,10 @@ main (int argc, char *const *argv)
736 "GNUnet publish starts\n"); 736 "GNUnet publish starts\n");
737 bo.expiration_time = 737 bo.expiration_time =
738 GNUNET_FS_year_to_time (GNUNET_FS_get_current_year () + 2); 738 GNUNET_FS_year_to_time (GNUNET_FS_get_current_year () + 2);
739
740 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
741 return 2;
742
739 return (GNUNET_OK == 743 return (GNUNET_OK ==
740 GNUNET_PROGRAM_run (argc, argv, "gnunet-publish [OPTIONS] FILENAME", 744 GNUNET_PROGRAM_run (argc, argv, "gnunet-publish [OPTIONS] FILENAME",
741 gettext_noop 745 gettext_noop
diff --git a/src/fs/gnunet-search.c b/src/fs/gnunet-search.c
index 60620a4b3..88507f608 100644
--- a/src/fs/gnunet-search.c
+++ b/src/fs/gnunet-search.c
@@ -302,6 +302,10 @@ main (int argc, char *const *argv)
302 1, &GNUNET_GETOPT_set_uint, &results_limit}, 302 1, &GNUNET_GETOPT_set_uint, &results_limit},
303 GNUNET_GETOPT_OPTION_END 303 GNUNET_GETOPT_OPTION_END
304 }; 304 };
305
306 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
307 return 2;
308
305 return (GNUNET_OK == 309 return (GNUNET_OK ==
306 GNUNET_PROGRAM_run (argc, argv, "gnunet-search [OPTIONS] KEYWORD", 310 GNUNET_PROGRAM_run (argc, argv, "gnunet-search [OPTIONS] KEYWORD",
307 gettext_noop 311 gettext_noop
diff --git a/src/fs/gnunet-unindex.c b/src/fs/gnunet-unindex.c
index 3e8308df2..f4e352737 100644
--- a/src/fs/gnunet-unindex.c
+++ b/src/fs/gnunet-unindex.c
@@ -170,6 +170,10 @@ main (int argc, char *const *argv)
170 0, &GNUNET_GETOPT_set_one, &verbose}, 170 0, &GNUNET_GETOPT_set_one, &verbose},
171 GNUNET_GETOPT_OPTION_END 171 GNUNET_GETOPT_OPTION_END
172 }; 172 };
173
174 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
175 return 2;
176
173 return (GNUNET_OK == 177 return (GNUNET_OK ==
174 GNUNET_PROGRAM_run (argc, argv, "gnunet-unindex [OPTIONS] FILENAME", 178 GNUNET_PROGRAM_run (argc, argv, "gnunet-unindex [OPTIONS] FILENAME",
175 gettext_noop 179 gettext_noop
diff --git a/src/gns/gnunet-gns-fcfsd.c b/src/gns/gnunet-gns-fcfsd.c
index cd4e8e72d..b919b4fed 100644
--- a/src/gns/gnunet-gns-fcfsd.c
+++ b/src/gns/gnunet-gns-fcfsd.c
@@ -797,6 +797,9 @@ main (int argc, char *const *argv)
797 797
798 int ret; 798 int ret;
799 799
800 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
801 return 2;
802
800 GNUNET_log_setup ("fcfsd", "WARNING", NULL); 803 GNUNET_log_setup ("fcfsd", "WARNING", NULL);
801 ret = 804 ret =
802 (GNUNET_OK == 805 (GNUNET_OK ==
diff --git a/src/gns/gnunet-gns-lookup.c b/src/gns/gnunet-gns-lookup.c
index f33264f61..bcd2b5bcc 100644
--- a/src/gns/gnunet-gns-lookup.c
+++ b/src/gns/gnunet-gns-lookup.c
@@ -204,6 +204,9 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
204int 204int
205main (int argc, char *const *argv) 205main (int argc, char *const *argv)
206{ 206{
207 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
208 return 2;
209
207 return (GNUNET_OK == 210 return (GNUNET_OK ==
208 GNUNET_PROGRAM_run (argc, argv, "gnunet-gns-get", 211 GNUNET_PROGRAM_run (argc, argv, "gnunet-gns-get",
209 gettext_noop 212 gettext_noop
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index b35cacad0..2fef34343 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -2320,6 +2320,9 @@ main (int argc, char *const *argv)
2320 2320
2321 int ret; 2321 int ret;
2322 2322
2323 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
2324 return 2;
2325
2323 GNUNET_log_setup ("gnunet-gns-proxy", "WARNING", NULL); 2326 GNUNET_log_setup ("gnunet-gns-proxy", "WARNING", NULL);
2324 ret = 2327 ret =
2325 (GNUNET_OK == 2328 (GNUNET_OK ==
diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c
index 2a49ba1c2..1efe74842 100644
--- a/src/gns/gnunet-gns.c
+++ b/src/gns/gnunet-gns.c
@@ -248,6 +248,9 @@ main (int argc, char *const *argv)
248 248
249 int ret; 249 int ret;
250 250
251 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
252 return 2;
253
251 GNUNET_log_setup ("gnunet-gns", "WARNING", NULL); 254 GNUNET_log_setup ("gnunet-gns", "WARNING", NULL);
252 ret = 255 ret =
253 (GNUNET_OK == 256 (GNUNET_OK ==
diff --git a/src/hostlist/gnunet-daemon-hostlist.c b/src/hostlist/gnunet-daemon-hostlist.c
index 8b7bf3a3e..6637f37ce 100644
--- a/src/hostlist/gnunet-daemon-hostlist.c
+++ b/src/hostlist/gnunet-daemon-hostlist.c
@@ -334,6 +334,9 @@ main (int argc, char *const *argv)
334 334
335 int ret; 335 int ret;
336 336
337 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
338 return 2;
339
337 GNUNET_log_setup ("hostlist", "WARNING", NULL); 340 GNUNET_log_setup ("hostlist", "WARNING", NULL);
338 ret = 341 ret =
339 (GNUNET_OK == 342 (GNUNET_OK ==
diff --git a/src/include/gnunet_strings_lib.h b/src/include/gnunet_strings_lib.h
index 54d2e3034..d68ca5c78 100644
--- a/src/include/gnunet_strings_lib.h
+++ b/src/include/gnunet_strings_lib.h
@@ -390,6 +390,24 @@ GNUNET_STRINGS_to_address_ip (const char *addr,
390 struct sockaddr_storage *r_buf); 390 struct sockaddr_storage *r_buf);
391 391
392 392
393/**
394 * Returns utf-8 encoded arguments.
395 * Does nothing (returns a copy of argc and argv) on any platform
396 * other than W32.
397 * Returned argv has u8argv[u8argc] == NULL.
398 * Returned argv is a single memory block, and can be freed with a single
399 * GNUNET_free () call.
400 *
401 * @param argc argc (as given by main())
402 * @param argv argv (as given by main())
403 * @param u8argc a location to store new argc in (though it's th same as argc)
404 * @param u8argv a location to store new argv in
405 * @return GNUNET_OK on success, GNUNET_SYSERR on failure
406 */
407int
408GNUNET_STRINGS_get_utf8_args (int argc, char *const *argv, int *u8argc,
409 char *const **u8argv);
410
393/* ifndef GNUNET_UTIL_STRING_H */ 411/* ifndef GNUNET_UTIL_STRING_H */
394#endif 412#endif
395/* end of gnunet_util_string.h */ 413/* end of gnunet_util_string.h */
diff --git a/src/integration-tests/connection_watchdog.c b/src/integration-tests/connection_watchdog.c
index a06b5a763..bcf9d0379 100644
--- a/src/integration-tests/connection_watchdog.c
+++ b/src/integration-tests/connection_watchdog.c
@@ -1090,6 +1090,10 @@ main (int argc, char *const *argv)
1090 GNUNET_NO, &GNUNET_GETOPT_set_one, &ping}, 1090 GNUNET_NO, &GNUNET_GETOPT_set_one, &ping},
1091 GNUNET_GETOPT_OPTION_END 1091 GNUNET_GETOPT_OPTION_END
1092 }; 1092 };
1093
1094 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
1095 return 2;
1096
1093 return (GNUNET_OK == 1097 return (GNUNET_OK ==
1094 GNUNET_PROGRAM_run (argc, argv, "cn", 1098 GNUNET_PROGRAM_run (argc, argv, "cn",
1095 gettext_noop ("help text"), options, &run, 1099 gettext_noop ("help text"), options, &run,
diff --git a/src/namestore/gnunet-namestore.c b/src/namestore/gnunet-namestore.c
index a0d1de10a..624981201 100644
--- a/src/namestore/gnunet-namestore.c
+++ b/src/namestore/gnunet-namestore.c
@@ -493,6 +493,9 @@ main (int argc, char *const *argv)
493 493
494 int ret; 494 int ret;
495 495
496 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
497 return 2;
498
496 GNUNET_log_setup ("gnunet-namestore", "WARNING", NULL); 499 GNUNET_log_setup ("gnunet-namestore", "WARNING", NULL);
497 ret = 500 ret =
498 (GNUNET_OK == 501 (GNUNET_OK ==
diff --git a/src/nat/gnunet-nat-server.c b/src/nat/gnunet-nat-server.c
index 9b6846cf0..e971bd3b1 100644
--- a/src/nat/gnunet-nat-server.c
+++ b/src/nat/gnunet-nat-server.c
@@ -313,6 +313,9 @@ main (int argc, char *const argv[])
313 GNUNET_GETOPT_OPTION_END 313 GNUNET_GETOPT_OPTION_END
314 }; 314 };
315 315
316 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
317 return 2;
318
316 if (GNUNET_OK != 319 if (GNUNET_OK !=
317 GNUNET_PROGRAM_run (argc, argv, "gnunet-nat-server [options] PORT", 320 GNUNET_PROGRAM_run (argc, argv, "gnunet-nat-server [options] PORT",
318 _("GNUnet NAT traversal test helper daemon"), options, 321 _("GNUnet NAT traversal test helper daemon"), options,
diff --git a/src/nse/gnunet-nse-profiler.c b/src/nse/gnunet-nse-profiler.c
index 4a4bea5ed..cf88690d5 100644
--- a/src/nse/gnunet-nse-profiler.c
+++ b/src/nse/gnunet-nse-profiler.c
@@ -914,8 +914,11 @@ static struct GNUNET_GETOPT_CommandLineOption options[] = {
914 914
915 915
916int 916int
917main (int argc, char *argv[]) 917main (int argc, char *const *argv)
918{ 918{
919 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
920 return 2;
921
919 GNUNET_log_setup ("nse-profiler", 922 GNUNET_log_setup ("nse-profiler",
920#if VERBOSE 923#if VERBOSE
921 "DEBUG", 924 "DEBUG",
diff --git a/src/peerinfo-tool/gnunet-peerinfo.c b/src/peerinfo-tool/gnunet-peerinfo.c
index de27cd276..d3637af44 100644
--- a/src/peerinfo-tool/gnunet-peerinfo.c
+++ b/src/peerinfo-tool/gnunet-peerinfo.c
@@ -952,6 +952,10 @@ main (int argc, char *const *argv)
952 1, &GNUNET_GETOPT_set_string, &put_uri}, 952 1, &GNUNET_GETOPT_set_string, &put_uri},
953 GNUNET_GETOPT_OPTION_END 953 GNUNET_GETOPT_OPTION_END
954 }; 954 };
955
956 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
957 return 2;
958
955 return (GNUNET_OK == 959 return (GNUNET_OK ==
956 GNUNET_PROGRAM_run (argc, argv, "gnunet-peerinfo", 960 GNUNET_PROGRAM_run (argc, argv, "gnunet-peerinfo",
957 gettext_noop ("Print information about peers."), 961 gettext_noop ("Print information about peers."),
diff --git a/src/pt/gnunet-daemon-pt.c b/src/pt/gnunet-daemon-pt.c
index 2ad8468ef..73936a489 100644
--- a/src/pt/gnunet-daemon-pt.c
+++ b/src/pt/gnunet-daemon-pt.c
@@ -967,6 +967,9 @@ main (int argc, char *const *argv)
967 GNUNET_GETOPT_OPTION_END 967 GNUNET_GETOPT_OPTION_END
968 }; 968 };
969 969
970 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
971 return 2;
972
970 return (GNUNET_OK == 973 return (GNUNET_OK ==
971 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-pt", 974 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-pt",
972 gettext_noop 975 gettext_noop
diff --git a/src/statistics/gnunet-statistics.c b/src/statistics/gnunet-statistics.c
index 3eef887fc..add2ddf41 100644
--- a/src/statistics/gnunet-statistics.c
+++ b/src/statistics/gnunet-statistics.c
@@ -240,6 +240,10 @@ main (int argc, char *const *argv)
240 &GNUNET_GETOPT_set_one, &watch}, 240 &GNUNET_GETOPT_set_one, &watch},
241 GNUNET_GETOPT_OPTION_END 241 GNUNET_GETOPT_OPTION_END
242 }; 242 };
243
244 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
245 return 2;
246
243 return (GNUNET_OK == 247 return (GNUNET_OK ==
244 GNUNET_PROGRAM_run (argc, argv, "gnunet-statistics [options [value]]", 248 GNUNET_PROGRAM_run (argc, argv, "gnunet-statistics [options [value]]",
245 gettext_noop 249 gettext_noop
diff --git a/src/template/gnunet-template.c b/src/template/gnunet-template.c
index 7b1d9dfff..3020a73be 100644
--- a/src/template/gnunet-template.c
+++ b/src/template/gnunet-template.c
@@ -63,6 +63,10 @@ main (int argc, char *const *argv)
63 /* FIMXE: add options here */ 63 /* FIMXE: add options here */
64 GNUNET_GETOPT_OPTION_END 64 GNUNET_GETOPT_OPTION_END
65 }; 65 };
66
67 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
68 return 2;
69
66 return (GNUNET_OK == 70 return (GNUNET_OK ==
67 GNUNET_PROGRAM_run (argc, argv, "gnunet-template", 71 GNUNET_PROGRAM_run (argc, argv, "gnunet-template",
68 gettext_noop ("help text"), options, &run, 72 gettext_noop ("help text"), options, &run,
diff --git a/src/testing_old/gnunet-testing.c b/src/testing_old/gnunet-testing.c
index bdbb5e8c5..375185b0e 100644
--- a/src/testing_old/gnunet-testing.c
+++ b/src/testing_old/gnunet-testing.c
@@ -282,6 +282,10 @@ main (int argc, char *const *argv)
282 GNUNET_YES, &GNUNET_GETOPT_set_string, &create_cfg_template}, 282 GNUNET_YES, &GNUNET_GETOPT_set_string, &create_cfg_template},
283 GNUNET_GETOPT_OPTION_END 283 GNUNET_GETOPT_OPTION_END
284 }; 284 };
285
286 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
287 return 2;
288
285 return (GNUNET_OK == 289 return (GNUNET_OK ==
286 GNUNET_PROGRAM_run (argc, argv, "gnunet-testing", 290 GNUNET_PROGRAM_run (argc, argv, "gnunet-testing",
287 gettext_noop ("Command line tool to access the testing library"), options, &run, 291 gettext_noop ("Command line tool to access the testing library"), options, &run,
diff --git a/src/topology/gnunet-daemon-topology.c b/src/topology/gnunet-daemon-topology.c
index 57da127fd..356e2c963 100644
--- a/src/topology/gnunet-daemon-topology.c
+++ b/src/topology/gnunet-daemon-topology.c
@@ -1356,6 +1356,9 @@ main (int argc, char *const *argv)
1356 }; 1356 };
1357 int ret; 1357 int ret;
1358 1358
1359 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
1360 return 2;
1361
1359 ret = 1362 ret =
1360 (GNUNET_OK == 1363 (GNUNET_OK ==
1361 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-topology", 1364 GNUNET_PROGRAM_run (argc, argv, "gnunet-daemon-topology",
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c
index 3b6b7e4c5..d07afccea 100644
--- a/src/transport/gnunet-transport.c
+++ b/src/transport/gnunet-transport.c
@@ -639,6 +639,10 @@ main (int argc, char *const *argv)
639 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity), 639 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity),
640 GNUNET_GETOPT_OPTION_END 640 GNUNET_GETOPT_OPTION_END
641 }; 641 };
642
643 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
644 return 2;
645
642 return (GNUNET_OK == 646 return (GNUNET_OK ==
643 GNUNET_PROGRAM_run (argc, argv, "gnunet-transport", 647 GNUNET_PROGRAM_run (argc, argv, "gnunet-transport",
644 gettext_noop 648 gettext_noop
diff --git a/src/util/gnunet-resolver.c b/src/util/gnunet-resolver.c
index 142dd0d2f..559637748 100644
--- a/src/util/gnunet-resolver.c
+++ b/src/util/gnunet-resolver.c
@@ -149,6 +149,10 @@ main (int argc, char *const *argv)
149 0, &GNUNET_GETOPT_set_one, &reverse }, 149 0, &GNUNET_GETOPT_set_one, &reverse },
150 GNUNET_GETOPT_OPTION_END 150 GNUNET_GETOPT_OPTION_END
151 }; 151 };
152
153 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
154 return 2;
155
152 return (GNUNET_OK == 156 return (GNUNET_OK ==
153 GNUNET_PROGRAM_run (argc, argv, "gnunet-resolver [hostname]", 157 GNUNET_PROGRAM_run (argc, argv, "gnunet-resolver [hostname]",
154 gettext_noop ("Use build-in GNUnet stub resolver"), 158 gettext_noop ("Use build-in GNUnet stub resolver"),
diff --git a/src/util/gnunet-rsa.c b/src/util/gnunet-rsa.c
index f3cd83a8b..fc9d20064 100644
--- a/src/util/gnunet-rsa.c
+++ b/src/util/gnunet-rsa.c
@@ -119,6 +119,10 @@ main (int argc, char *const *argv)
119 0, &GNUNET_GETOPT_set_one, &print_short_identity }, 119 0, &GNUNET_GETOPT_set_one, &print_short_identity },
120 GNUNET_GETOPT_OPTION_END 120 GNUNET_GETOPT_OPTION_END
121 }; 121 };
122
123 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
124 return 2;
125
122 return (GNUNET_OK == 126 return (GNUNET_OK ==
123 GNUNET_PROGRAM_run (argc, argv, "gnunet-rsa [OPTIONS] keyfile", 127 GNUNET_PROGRAM_run (argc, argv, "gnunet-rsa [OPTIONS] keyfile",
124 gettext_noop ("Manipulate GNUnet private RSA key files"), 128 gettext_noop ("Manipulate GNUnet private RSA key files"),
diff --git a/src/util/program.c b/src/util/program.c
index 9e1a83d0b..a8178b93a 100644
--- a/src/util/program.c
+++ b/src/util/program.c
@@ -165,6 +165,7 @@ GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
165 char *lpfx; 165 char *lpfx;
166 char *spc; 166 char *spc;
167 167
168
168 logfile = NULL; 169 logfile = NULL;
169 gargs = getenv ("GNUNET_ARGS"); 170 gargs = getenv ("GNUNET_ARGS");
170 if (gargs != NULL) 171 if (gargs != NULL)
diff --git a/src/util/strings.c b/src/util/strings.c
index 11134f139..cc44767d6 100644
--- a/src/util/strings.c
+++ b/src/util/strings.c
@@ -32,6 +32,7 @@
32#include "gnunet_common.h" 32#include "gnunet_common.h"
33#include "gnunet_strings_lib.h" 33#include "gnunet_strings_lib.h"
34#include <unicase.h> 34#include <unicase.h>
35#include <unistr.h>
35 36
36#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__) 37#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
37 38
@@ -1113,4 +1114,93 @@ GNUNET_STRINGS_to_address_ip (const char *addr,
1113 return GNUNET_STRINGS_to_address_ipv4 (addr, addrlen, (struct sockaddr_in *) r_buf); 1114 return GNUNET_STRINGS_to_address_ipv4 (addr, addrlen, (struct sockaddr_in *) r_buf);
1114} 1115}
1115 1116
1117/**
1118 * Makes a copy of argv that consists of a single memory chunk that can be
1119 * freed with a single call to GNUNET_free ();
1120 */
1121static char *const *
1122_make_continuous_arg_copy (int argc, char *const *argv)
1123{
1124 size_t argvsize = 0;
1125 int i;
1126 char **new_argv;
1127 char *p;
1128 for (i = 0; i < argc; i++)
1129 argvsize += strlen (argv[i]) + 1 + sizeof (char *);
1130 new_argv = GNUNET_malloc (argvsize + sizeof (char *));
1131 p = (char *) &new_argv[argc + 1];
1132 for (i = 0; i < argc; i++)
1133 {
1134 new_argv[i] = p;
1135 strcpy (p, argv[i]);
1136 p += strlen (argv[i]) + 1;
1137 }
1138 new_argv[argc] = NULL;
1139 return (char *const *) new_argv;
1140}
1141
1142/**
1143 * Returns utf-8 encoded arguments.
1144 * Does nothing (returns a copy of argc and argv) on any platform
1145 * other than W32.
1146 * Returned argv has u8argv[u8argc] == NULL.
1147 * Returned argv is a single memory block, and can be freed with a single
1148 * GNUNET_free () call.
1149 *
1150 * @param argc argc (as given by main())
1151 * @param argv argv (as given by main())
1152 * @param u8argc a location to store new argc in (though it's th same as argc)
1153 * @param u8argv a location to store new argv in
1154 * @return GNUNET_OK on success, GNUNET_SYSERR on failure
1155 */
1156int
1157GNUNET_STRINGS_get_utf8_args (int argc, char *const *argv, int *u8argc, char *const **u8argv)
1158{
1159#if WINDOWS
1160 wchar_t *wcmd;
1161 wchar_t **wargv;
1162 int wargc;
1163 int i;
1164 char **split_u8argv;
1165
1166 wcmd = GetCommandLineW ();
1167 if (NULL == wcmd)
1168 return GNUNET_SYSERR;
1169 wargv = CommandLineToArgvW (wcmd, &wargc);
1170 if (NULL == wargv)
1171 return GNUNET_SYSERR;
1172
1173 split_u8argv = GNUNET_malloc (argc * sizeof (char *));
1174
1175 for (i = 0; i < wargc; i++)
1176 {
1177 size_t strl;
1178 /* Hopefully it will allocate us NUL-terminated strings... */
1179 split_u8argv[i] = (char *) u16_to_u8 (wargv[i], wcslen (wargv[i]) + 1, NULL, &strl);
1180 if (split_u8argv == NULL)
1181 {
1182 int j;
1183 for (j = 0; j < i; j++)
1184 free (split_u8argv[j]);
1185 GNUNET_free (split_u8argv);
1186 LocalFree (wargv);
1187 return GNUNET_SYSERR;
1188 }
1189 }
1190
1191 *u8argv = _make_continuous_arg_copy (wargc, split_u8argv);
1192 *u8argc = wargc;
1193
1194 for (i = 0; i < wargc; i++)
1195 free (split_u8argv[i]);
1196 free (split_u8argv);
1197 return GNUNET_OK;
1198#else
1199 char *const *new_argv = (char *const *) _make_continuous_arg_copy (argc, argv);
1200 *u8argv = new_argv;
1201 *u8argc = argc;
1202 return GNUNET_OK;
1203#endif
1204}
1205
1116/* end of strings.c */ 1206/* end of strings.c */
diff --git a/src/vpn/gnunet-vpn.c b/src/vpn/gnunet-vpn.c
index ecc0442c6..b75b1d29a 100644
--- a/src/vpn/gnunet-vpn.c
+++ b/src/vpn/gnunet-vpn.c
@@ -323,6 +323,10 @@ main (int argc, char *const *argv)
323 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity), 323 GNUNET_GETOPT_OPTION_VERBOSE (&verbosity),
324 GNUNET_GETOPT_OPTION_END 324 GNUNET_GETOPT_OPTION_END
325 }; 325 };
326
327 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
328 return 2;
329
326 return (GNUNET_OK == 330 return (GNUNET_OK ==
327 GNUNET_PROGRAM_run (argc, argv, "gnunet-vpn", 331 GNUNET_PROGRAM_run (argc, argv, "gnunet-vpn",
328 gettext_noop 332 gettext_noop