summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-05-04 14:39:37 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2011-05-04 14:39:37 +0200
commit58e7efce3d5ac71e308e7e44176473cd66e8ad26 (patch)
treed4822587940487f2910e925990a55377e60e05bd /src/lib
parent27e7d86db7c6c96e8da75e8e8dda6359b9e73c41 (diff)
downloadabrt-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.c51
-rw-r--r--src/lib/parse_options.h7
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,