From 58e7efce3d5ac71e308e7e44176473cd66e8ad26 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 4 May 2011 14:39:37 +0200 Subject: move $ABRT_foo checking and setting into helper routines. I'm sick of fixing incorrect PROGNAME defines. Now g_progname is a variable and it is set from argv[0]. Signed-off-by: Denys Vlasenko --- src/lib/parse_options.c | 51 +++++++++++++++++++++++++++++++++++++++++++++---- src/lib/parse_options.h | 7 +++++++ 2 files changed, 54 insertions(+), 4 deletions(-) (limited to 'src/lib') diff --git a/src/lib/parse_options.c b/src/lib/parse_options.c index d9ce8a2f..4e4a3e08 100644 --- a/src/lib/parse_options.c +++ b/src/lib/parse_options.c @@ -24,12 +24,55 @@ #define USAGE_OPTS_WIDTH 24 #define USAGE_GAP 2 -void show_usage_and_die(const char *usage, const struct options *opt) +const char *g_progname; + +const char *abrt_init(char **argv) { - fprintf(stderr, _("Usage: %s\n"), usage); + char *env_verbose = getenv("ABRT_VERBOSE"); + if (env_verbose) + g_verbose = atoi(env_verbose); + + g_progname = strrchr(argv[0], '/'); + if (g_progname) + g_progname++; + else + g_progname = argv[0]; + + char *pfx = getenv("ABRT_PROG_PREFIX"); + if (pfx && string_to_bool(pfx)) + msg_prefix = g_progname; + + return g_progname; +} - if (opt->type != OPTION_GROUP) - fputc('\n', stderr); +void export_abrt_envvars(int pfx) +{ + putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose)); + if (pfx) + { + putenv((char*)"ABRT_PROG_PREFIX=1"); + msg_prefix = g_progname; + } +} + +void show_usage_and_die(const char *usage, const struct options *opt) +{ + fputs(_("Usage: "), stderr); + while (*usage) + { + int len = strchrnul(usage, '\b') - usage; + if (len > 0) + { + fprintf(stderr, "%.*s", len, usage); + usage += len; + } + if (*usage == '\b') + { + fputs(g_progname, stderr); + usage++; + } + } + fputs("\n\n", stderr); for (; opt->type != OPTION_END; opt++) { diff --git a/src/lib/parse_options.h b/src/lib/parse_options.h index 8c784b96..285d97a0 100644 --- a/src/lib/parse_options.h +++ b/src/lib/parse_options.h @@ -23,6 +23,13 @@ extern "C" { #endif +const char *abrt_init(char **argv); +#define export_abrt_envvars abrt_export_abrt_envvars +void export_abrt_envvars(int pfx); +#define g_progname abrt_g_progname +extern const char *g_progname; + + enum parse_opt_type { OPTION_BOOL, OPTION_GROUP, -- cgit