summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikola Pajkovsky <npajkovs@redhat.com>2010-10-08 10:49:19 +0200
committerNikola Pajkovsky <npajkovs@redhat.com>2010-10-08 10:49:19 +0200
commitcd583be50cf85caf90bcd05f1c3d9b3bb390afbd (patch)
treefb7f1df7b77faa23638f12d3cea90b5d2b7dc8bb
parent6745521cae08cb8077eb30fa1f8def94af44cb5d (diff)
parentd22e5b810305d445acfb5e32eb33feac3c607f5d (diff)
downloadabrt-cd583be50cf85caf90bcd05f1c3d9b3bb390afbd.tar.gz
abrt-cd583be50cf85caf90bcd05f1c3d9b3bb390afbd.tar.xz
abrt-cd583be50cf85caf90bcd05f1c3d9b3bb390afbd.zip
Merge branch 'unify-parser'
* unify-parser: abrt-server uses new parser abrt-action-save-package-data uses new parser use a new INTEGER option abrt-action-generate-backtrace uses new parser
-rw-r--r--src/daemon/Daemon.cpp12
-rw-r--r--src/daemon/abrt-action-generate-backtrace.c81
-rw-r--r--src/daemon/abrt-action-save-package-data.cpp59
-rw-r--r--src/daemon/abrt-server.c53
4 files changed, 84 insertions, 121 deletions
diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp
index 548067bd..eb1e21fc 100644
--- a/src/daemon/Daemon.cpp
+++ b/src/daemon/Daemon.cpp
@@ -872,7 +872,7 @@ static struct options abrtd_options[] = {
OPT_BOOL( 'h' , "help", &help_opt, _("Show this help message")),
OPT_BOOL( 'd' , 0, &daemonize_opt, _("Do not daemonize")),
OPT_BOOL( 's' , 0, &syslog_opt, _("Log to syslog even with -d")),
- OPT_STRING( 't' , 0, &timeout_opt, "sec", _("Exit after SEC seconds of inactivity")),
+ OPT_INTEGER( 't' , 0, &timeout_opt, _("Exit after SEC seconds of inactivity")),
OPT_BOOL( 'v' , 0, &g_verbose, _("Verbose")),
OPT_END()
};
@@ -906,16 +906,6 @@ int main(int argc, char** argv)
if (syslog_opt)
start_syslog_logging();
- if (timeout_opt)
- {
- unsigned long ul;
- char *end;
- errno = 0;
- s_timeout = ul = strtoul(timeout_opt, &end, 0);
- if (!(errno == 0 && *end == '\0' && ul <= INT_MAX))
- parse_usage_and_die(abrtd_usage, abrtd_options);
- }
-
putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
msg_prefix = "abrtd"; /* for log(), error_msg() and such */
diff --git a/src/daemon/abrt-action-generate-backtrace.c b/src/daemon/abrt-action-generate-backtrace.c
index 46f002a4..2b8152fb 100644
--- a/src/daemon/abrt-action-generate-backtrace.c
+++ b/src/daemon/abrt-action-generate-backtrace.c
@@ -18,14 +18,19 @@
*/
#include "abrtlib.h"
#include "backtrace.h"
+#include "parse_options.h"
#define DEBUGINFO_CACHE_DIR LOCALSTATEDIR"/cache/abrt-di"
+static const char * const abrt_action_generage_backtrace_usage[] = {
+ "abrt-action-generate-backtrace [options] -d DIR",
+ NULL
+};
static const char *dump_dir_name = ".";
static char *debuginfo_dirs;
-static unsigned exec_timeout_sec = 60;
+static int exec_timeout_sec = 60;
static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
@@ -240,63 +245,45 @@ static char *get_backtrace(struct dump_dir *dd)
return bt;
}
+static char *d_opt, *i_opt;
+static int s_opt, help_opt;
+
+static struct options abrt_action_generate_backtrace_options[] = {
+ OPT_BOOL( 'h' , "help", &help_opt, "Show this help message"),
+ OPT_STRING( 'd' , 0, &d_opt, "dir", "Crash dump directory"),
+ OPT_STRING( 'i' , 0, &i_opt, "dir1[:dir2]...", "Additional debuginfo directories"),
+ OPT_INTEGER( 't' , 0, &exec_timeout_sec, "Kill gdb if it runs for more than SECONDS"),
+ OPT_BOOL( 'v' , 0, &g_verbose, "Verbose"),
+ OPT_BOOL( 's' , 0, &s_opt, "Log to syslog even with -d"),
+ OPT_END()
+};
+
int main(int argc, char **argv)
{
char *env_verbose = getenv("ABRT_VERBOSE");
if (env_verbose)
g_verbose = atoi(env_verbose);
- debuginfo_dirs = xstrdup(DEBUGINFO_CACHE_DIR);
- enum {
- OPT_s = (1 << 0),
- };
- int optflags = 0;
- int opt;
- while ((opt = getopt(argc, argv, "d:i:t:vs")) != -1)
+ parse_opts(argc, argv, abrt_action_generate_backtrace_options,
+ abrt_action_generage_backtrace_usage);
+
+ if (help_opt || !d_opt)
+ parse_usage_and_die(abrt_action_generage_backtrace_usage,
+ abrt_action_generate_backtrace_options);
+
+ dump_dir_name = d_opt;
+
+ debuginfo_dirs = xstrdup("");
+ if (i_opt)
{
- switch (opt)
- {
- case 'd':
- dump_dir_name = optarg;
- break;
- case 'i': {
- char *old = debuginfo_dirs;
- if (optarg[0])
- debuginfo_dirs = xasprintf("%s:%s", debuginfo_dirs, optarg);
- else
- debuginfo_dirs = xstrdup("");
- free(old);
- break;
- }
- case 't':
- exec_timeout_sec = xatoi_u(optarg);
- break;
- case 'v':
- g_verbose++;
- break;
- case 's':
- optflags |= OPT_s;
- break;
- default:
- /* Careful: the string below contains tabs, dont replace with spaces */
- error_msg_and_die(
- "Usage: abrt-action-generate-backtrace -d DIR [-i DIR1:DIR2] [-t SECONDS] [-vs]"
- "\n"
- "\nGenerate backtrace, its quality rating, hash, and crashed function"
- "\n"
- "\nOptions:"
- "\n -d DIR Crash dump directory"
- "\n -i DIR1:DIR2 Additional debuginfo directories"
- "\n -t SECONDS Kill gdb if it runs for more than SECONDS"
- "\n -v Verbose"
- "\n -s Log to syslog"
- );
- }
+ free(debuginfo_dirs);
+ debuginfo_dirs = xasprintf("%s:%s", DEBUGINFO_CACHE_DIR, i_opt);
}
putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
msg_prefix = xasprintf("abrt-action-generate-backtrace[%u]", getpid());
- if (optflags & OPT_s)
+
+ if (s_opt)
{
openlog(msg_prefix, 0, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;
diff --git a/src/daemon/abrt-action-save-package-data.cpp b/src/daemon/abrt-action-save-package-data.cpp
index 9a5a1748..c4522e0f 100644
--- a/src/daemon/abrt-action-save-package-data.cpp
+++ b/src/daemon/abrt-action-save-package-data.cpp
@@ -21,7 +21,12 @@
#include "abrt_packages.h"
#include "Settings.h"
#include "rpm.h"
+#include "parse_options.h"
+static const char * const abrt_action_save_package_data_usage[] = {
+ "abrt-action-save-package-data [options] -d DIR",
+ NULL
+};
/**
* Returns the first full path argument in the command line or NULL.
@@ -267,6 +272,17 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name)
return error;
}
+static char *d_opt;
+static int s_opt, help_opt;
+
+static struct options abrt_action_save_package_data_options[] = {
+ OPT_BOOL( 'h' , "help", &help_opt, "Show this help message"),
+ OPT_STRING( 'd' , 0, &d_opt, "dir", "Crash dump directory"),
+ OPT_BOOL( 'v' , 0, &g_verbose, "Verbose"),
+ OPT_BOOL( 's' , 0, &s_opt, "Log to syslog"),
+ OPT_END()
+};
+
int main(int argc, char **argv)
{
char *env_verbose = getenv("ABRT_VERBOSE");
@@ -274,42 +290,19 @@ int main(int argc, char **argv)
g_verbose = atoi(env_verbose);
const char *dump_dir_name = ".";
- enum {
- OPT_s = (1 << 0),
- };
- int optflags = 0;
- int opt;
- while ((opt = getopt(argc, argv, "d:i:t:vs")) != -1)
- {
- switch (opt)
- {
- case 'd':
- dump_dir_name = optarg;
- break;
- case 'v':
- g_verbose++;
- break;
- case 's':
- optflags |= OPT_s;
- break;
- default:
- /* Careful: the string below contains tabs, dont replace with spaces */
- error_msg_and_die(
- "Usage: abrt-action-save-package-data -d DIR [-vs]"
- "\n"
- "\nQuery package database and save package name, component, and description"
- "\n"
- "\nOptions:"
- "\n -d DIR Crash dump directory"
- "\n -v Verbose"
- "\n -s Log to syslog"
- );
- }
- }
+
+ parse_opts(argc, argv, abrt_action_save_package_data_options,
+ abrt_action_save_package_data_usage);
+
+ if (help_opt || !d_opt)
+ parse_usage_and_die(abrt_action_save_package_data_usage,
+ abrt_action_save_package_data_options);
+
+ dump_dir_name = d_opt;
putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
msg_prefix = xasprintf("abrt-action-save-package-data[%u]", getpid());
- if (optflags & OPT_s)
+ if (s_opt)
{
openlog(msg_prefix, 0, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;
diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c
index bb2c024d..311fc959 100644
--- a/src/daemon/abrt-server.c
+++ b/src/daemon/abrt-server.c
@@ -19,6 +19,7 @@
#include "dump_dir.h"
#include "crash_types.h" /* FILENAME_foo */
#include "hooklib.h"
+#include "parse_options.h"
/* Maximal length of backtrace. */
@@ -75,6 +76,10 @@ Finalizing dump creation:
\0
*/
+static const char * const abrt_server_usage[] = {
+ "abrt-server [options]",
+ NULL
+};
/* Buffer for incomplete incoming messages. */
static char *messagebuf_data = NULL;
@@ -277,45 +282,33 @@ static void process_message(const char *message)
static void dummy_handler(int sig_unused) {}
+static int s_opt, help_opt;
+
+static struct options abrt_server_options[] = {
+ OPT_BOOL( 'h' , "help", &help_opt, "Show this help message"),
+ OPT_INTEGER( 'u' , 0, &client_uid, "Use UID as client uid"),
+ OPT_BOOL( 'v' , 0, &g_verbose, "Verbose"),
+ OPT_BOOL( 's' , 0, &s_opt, "Log to syslog"),
+ OPT_END()
+};
+
int main(int argc, char **argv)
{
char *env_verbose = getenv("ABRT_VERBOSE");
if (env_verbose)
g_verbose = atoi(env_verbose);
- enum {
- OPT_s = (1 << 0),
- };
- int optflags = 0;
- int opt;
- while ((opt = getopt(argc, argv, "u:vs")) != -1)
- {
- switch (opt)
- {
- case 'u':
- client_uid = xatoi_u(optarg);
- break;
- case 'v':
- g_verbose++;
- break;
- case 's':
- optflags |= OPT_s;
- break;
- default:
- error_msg_and_die(
- "Usage: abrt-server [-v] [-u UID]\n"
- "\n(So far only) creates crash dumps"
- "\nOptions:"
- "\n\t-v\tVerbose"
- "\n\t-s\tLog to syslog"
- "\n\t-u UID\tUse UID as client uid"
- );
- }
- }
+
+ parse_opts(argc, argv, abrt_server_options,
+ abrt_server_usage);
+
+ if (help_opt)
+ parse_usage_and_die(abrt_server_usage,
+ abrt_server_options);
putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
msg_prefix = xasprintf("abrt-server[%u]", getpid());
- if (optflags & OPT_s)
+ if (s_opt)
{
openlog(msg_prefix, 0, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;