diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-05-04 14:39:37 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-05-04 14:39:37 +0200 |
commit | 58e7efce3d5ac71e308e7e44176473cd66e8ad26 (patch) | |
tree | d4822587940487f2910e925990a55377e60e05bd /src/lib | |
parent | 27e7d86db7c6c96e8da75e8e8dda6359b9e73c41 (diff) | |
download | abrt-58e7efce3d5ac71e308e7e44176473cd66e8ad26.tar.gz abrt-58e7efce3d5ac71e308e7e44176473cd66e8ad26.tar.xz abrt-58e7efce3d5ac71e308e7e44176473cd66e8ad26.zip |
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 <dvlasenk@redhat.com>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/parse_options.c | 51 | ||||
-rw-r--r-- | src/lib/parse_options.h | 7 |
2 files changed, 54 insertions, 4 deletions
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, |