diff options
author | Nikola Pajkovsky <npajkovs@redhat.com> | 2010-10-08 10:49:19 +0200 |
---|---|---|
committer | Nikola Pajkovsky <npajkovs@redhat.com> | 2010-10-08 10:49:19 +0200 |
commit | cd583be50cf85caf90bcd05f1c3d9b3bb390afbd (patch) | |
tree | fb7f1df7b77faa23638f12d3cea90b5d2b7dc8bb | |
parent | 6745521cae08cb8077eb30fa1f8def94af44cb5d (diff) | |
parent | d22e5b810305d445acfb5e32eb33feac3c607f5d (diff) | |
download | abrt-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.cpp | 12 | ||||
-rw-r--r-- | src/daemon/abrt-action-generate-backtrace.c | 81 | ||||
-rw-r--r-- | src/daemon/abrt-action-save-package-data.cpp | 59 | ||||
-rw-r--r-- | src/daemon/abrt-server.c | 53 |
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; |