projects
/
oweals
/
gnunet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- dont resend useless channel_destroy messages
[oweals/gnunet.git]
/
src
/
util
/
program.c
diff --git
a/src/util/program.c
b/src/util/program.c
index 4985995b49def5946f2833322929a4a2369ec0f5..8b1d7773ed249cf4b9a802679647493a7664215e 100644
(file)
--- a/
src/util/program.c
+++ b/
src/util/program.c
@@
-4,7
+4,7
@@
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version
2
, or (at your
+ by the Free Software Foundation; either version
3
, or (at your
option) any later version.
GNUnet is distributed in the hope that it will be useful, but
option) any later version.
GNUnet is distributed in the hope that it will be useful, but
@@
-25,15
+25,9
@@
*/
#include "platform.h"
*/
#include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_configuration_lib.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_directories.h"
-#include "gnunet_getopt_lib.h"
-#include "gnunet_os_lib.h"
-#include "gnunet_program_lib.h"
+#include "gnunet_util_lib.h"
#include "gnunet_resolver_service.h"
#include "gnunet_resolver_service.h"
-#include "gnunet_
scheduler_lib
.h"
+#include "gnunet_
directories
.h"
#include <gcrypt.h>
#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
#include <gcrypt.h>
#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
@@
-78,6
+72,7
@@
GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg);
int
GNUNET_SPEEDUP_stop_ (void);
int
GNUNET_SPEEDUP_stop_ (void);
+
/**
* Initial task called by the scheduler for each
* program. Runs the program-specific main task.
/**
* Initial task called by the scheduler for each
* program. Runs the program-specific main task.
@@
-86,8
+81,10
@@
static void
program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct CommandContext *cc = cls;
program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct CommandContext *cc = cls;
- GNUNET_SPEEDUP_start_(cc->cfg);
+ if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
+ return;
+ GNUNET_SPEEDUP_start_(cc->cfg);
GNUNET_RESOLVER_connect (cc->cfg);
cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
}
GNUNET_RESOLVER_connect (cc->cfg);
cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
}
@@
-143,9
+140,13
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
int run_without_scheduler)
{
struct CommandContext cc;
int run_without_scheduler)
{
struct CommandContext cc;
+#if ENABLE_NLS
char *path;
char *path;
+#endif
char *loglev;
char *logfile;
char *loglev;
char *logfile;
+ char *cfg_fn;
+ const char *xdg;
int ret;
unsigned int cnt;
unsigned long long skew_offset;
int ret;
unsigned int cnt;
unsigned long long skew_offset;
@@
-158,7
+159,7
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
GNUNET_GETOPT_OPTION_HELP (binaryHelp),
GNUNET_GETOPT_OPTION_LOGLEVEL (&loglev),
GNUNET_GETOPT_OPTION_LOGFILE (&logfile),
GNUNET_GETOPT_OPTION_HELP (binaryHelp),
GNUNET_GETOPT_OPTION_LOGLEVEL (&loglev),
GNUNET_GETOPT_OPTION_LOGFILE (&logfile),
- GNUNET_GETOPT_OPTION_VERSION (PACKAGE_VERSION)
+ GNUNET_GETOPT_OPTION_VERSION (PACKAGE_VERSION
" " VCS_VERSION
)
};
struct GNUNET_GETOPT_CommandLineOption *allopts;
const char *gargs;
};
struct GNUNET_GETOPT_CommandLineOption *allopts;
const char *gargs;
@@
-196,7
+197,6
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
cc.task = task;
cc.task_cls = task_cls;
cc.cfg = cfg = GNUNET_CONFIGURATION_create ();
cc.task = task;
cc.task_cls = task_cls;
cc.cfg = cfg = GNUNET_CONFIGURATION_create ();
-
/* prepare */
#if ENABLE_NLS
setlocale (LC_ALL, "");
/* prepare */
#if ENABLE_NLS
setlocale (LC_ALL, "");
@@
-224,7
+224,15
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
qsort (allopts, cnt, sizeof (struct GNUNET_GETOPT_CommandLineOption),
&cmd_sorter);
loglev = NULL;
qsort (allopts, cnt, sizeof (struct GNUNET_GETOPT_CommandLineOption),
&cmd_sorter);
loglev = NULL;
- cc.cfgfile = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE);
+ xdg = getenv ("XDG_CONFIG_HOME");
+ if (NULL != xdg)
+ GNUNET_asprintf (&cfg_fn,
+ "%s%s%s",
+ xdg,
+ DIR_SEPARATOR_STR,
+ "gnunet.conf");
+ else
+ cfg_fn = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE);
lpfx = GNUNET_strdup (binaryName);
if (NULL != (spc = strstr (lpfx, " ")))
*spc = '\0';
lpfx = GNUNET_strdup (binaryName);
if (NULL != (spc = strstr (lpfx, " ")))
*spc = '\0';
@@
-236,17
+244,20
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
GNUNET_free_non_null (cc.cfgfile);
GNUNET_free_non_null (loglev);
GNUNET_free_non_null (logfile);
GNUNET_free_non_null (cc.cfgfile);
GNUNET_free_non_null (loglev);
GNUNET_free_non_null (logfile);
+ GNUNET_free (cfg_fn);
GNUNET_free (allopts);
GNUNET_free (lpfx);
return (ret == GNUNET_SYSERR) ? GNUNET_SYSERR : GNUNET_OK;
}
GNUNET_free (allopts);
GNUNET_free (lpfx);
return (ret == GNUNET_SYSERR) ? GNUNET_SYSERR : GNUNET_OK;
}
+ if (NULL == cc.cfgfile)
+ cc.cfgfile = GNUNET_strdup (cfg_fn);
if (GNUNET_YES ==
GNUNET_DISK_file_test (cc.cfgfile))
(void) GNUNET_CONFIGURATION_load (cfg, cc.cfgfile);
else
{
(void) GNUNET_CONFIGURATION_load (cfg, NULL);
if (GNUNET_YES ==
GNUNET_DISK_file_test (cc.cfgfile))
(void) GNUNET_CONFIGURATION_load (cfg, cc.cfgfile);
else
{
(void) GNUNET_CONFIGURATION_load (cfg, NULL);
- if (0 != strcmp (cc.cfgfile,
GNUNET_DEFAULT_USER_CONFIG_FILE
))
+ if (0 != strcmp (cc.cfgfile,
cfg_fn
))
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Could not access configuration file `%s'\n"),
cc.cfgfile);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Could not access configuration file `%s'\n"),
cc.cfgfile);
@@
-277,7
+288,8
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
/* clean up */
GNUNET_SPEEDUP_stop_ ();
GNUNET_CONFIGURATION_destroy (cfg);
/* clean up */
GNUNET_SPEEDUP_stop_ ();
GNUNET_CONFIGURATION_destroy (cfg);
- GNUNET_free_non_null (cc.cfgfile);
+ GNUNET_free (cc.cfgfile);
+ GNUNET_free (cfg_fn);
GNUNET_free_non_null (loglev);
GNUNET_free_non_null (logfile);
return GNUNET_OK;
GNUNET_free_non_null (loglev);
GNUNET_free_non_null (logfile);
return GNUNET_OK;
@@
-293,8
+305,8
@@
GNUNET_PROGRAM_run2 (int argc, char *const *argv, const char *binaryName,
* @param binaryHelp help text for the program
* @param options command line options
* @param task main function to run
* @param binaryHelp help text for the program
* @param options command line options
* @param task main function to run
- * @param task_cls closure for task
- * @return
GNUNET_SYSERR on error,
GNUNET_OK on success
+ * @param task_cls closure for
@a
task
+ * @return
#GNUNET_SYSERR on error, #
GNUNET_OK on success
*/
int
GNUNET_PROGRAM_run (int argc, char *const *argv, const char *binaryName,
*/
int
GNUNET_PROGRAM_run (int argc, char *const *argv, const char *binaryName,