diff options
author | Werner Koch <[email protected]> | 2016-12-02 21:46:07 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-12-02 21:51:19 +0000 |
commit | b462d603f5110842489edce9e01e4ea40ac05cba (patch) | |
tree | b995f838e99e402d4cf35d4f11d85259b98f2f27 /src/gpg-error.c | |
parent | w32-iconv: Remove invalid link to unicode.org in comment. (diff) | |
download | libgpg-error-b462d603f5110842489edce9e01e4ea40ac05cba.tar.gz libgpg-error-b462d603f5110842489edce9e01e4ea40ac05cba.zip |
New option --desc for gpg-error.
* doc/errorref.txt: Remove all tabs.
* doc/Makefile.am (install-data-local): New to install errorref.txt.
(uninstall-local): New.
(errorref.txt.x): New.
* src/Makefile.am (gpg_error_CPPFLAGS): Define PKGDATADIR
* src/gpg-error.c (print_desc): New.
(show_usage): New.
(main): Improve option parser. Add new option --desc. Call
print_desc.
--
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'src/gpg-error.c')
-rw-r--r-- | src/gpg-error.c | 208 |
1 files changed, 163 insertions, 45 deletions
diff --git a/src/gpg-error.c b/src/gpg-error.c index 117b367..4a09e1d 100644 --- a/src/gpg-error.c +++ b/src/gpg-error.c @@ -1,5 +1,5 @@ /* gpg-error.c - Determining gpg-error error codes. - Copyright (C) 2004 g10 Code GmbH + Copyright (C) 2004, 2016 g10 Code GmbH This file is part of libgpg-error. @@ -370,12 +370,107 @@ get_err_from_str (char *str, gpg_error_t *err) } +static void +print_desc (const char *symbol) +{ + static int initialized; + static FILE *fp; + char line[512]; + char *p; + int indesc = 0; + int blanklines = 0; + int last_was_keyword = 0; + + if (!initialized) + { + initialized = 1; + fp = fopen (PKGDATADIR "/errorref.txt", "r"); + } + if (!fp) + return; + rewind (fp); + while (fgets (line, sizeof line, fp)) + { + if (*line == '#') + continue; + if (*line && line[strlen(line)-1] == '\n') + line[strlen(line)-1] = 0; + + if (!strncmp (line, "GPG_ERR_", 8)) + { + if (indesc == 1 && last_was_keyword) + continue; /* Skip keywords immediately following a matched + * keyword. */ + last_was_keyword = 1; + + indesc = 0; + p = strchr (line, ' '); + if (!p) + continue; + *p = 0; + if (!strcmp (line, symbol)) + { + indesc = 1; + continue; /* Skip this line. */ + } + } + else + last_was_keyword = 0; + if (!indesc) + continue; + if (indesc == 1 && !*line) + continue; /* Skip leading empty lines in a description. */ + if (indesc == 1) + putchar ('\n'); /* One leading empty line. */ + indesc = 2; + if (!*line) + { + blanklines++; + continue; + } + for (; blanklines; blanklines--) + putchar ('\n'); + printf ("%s\n", line); + } + putchar ('\n'); /* One trailing blank line. */ +} + + + + +static int +show_usage (const char *name) +{ + if (name) + { + fprintf (stderr, _("Usage: %s GPG-ERROR [...]\n"), + strrchr (name,'/')? (strrchr (name, '/')+1): name); + exit (1); + } + + fputs ("gpg-error (" PACKAGE_NAME ") " PACKAGE_VERSION "\n", stdout); + fputs ("Options:\n" + " --version Print version\n" + " --lib-version Print library version\n" + " --help Print this help\n" + " --list Print all error codes\n" + " --defines Print all error codes as #define lines\n" + " --desc Print with error description\n" + , stdout); + exit (0); +} + + + int main (int argc, char *argv[]) { - int i = 1; + const char *pgmname = argv[0]; + int last_argc = -1; + int i; int listmode = 0; + int desc = 0; const char *source_sym; const char *error_sym; gpg_error_t err; @@ -383,46 +478,60 @@ main (int argc, char *argv[]) gpgrt_init (); i18n_init (); - if (argc == 1) - { - fprintf (stderr, _("Usage: %s GPG-ERROR [...]\n"), - strrchr (argv[0],'/')? (strrchr (argv[0], '/')+1): argv[0]); - exit (1); - } - else if (argc == 2 && !strcmp (argv[1], "--version")) - { - fputs ("gpg-error (" PACKAGE_NAME ") " PACKAGE_VERSION "\n", stdout); - exit (0); - } - else if (argc == 2 && !strcmp (argv[1], "--help")) - { - fputs ("gpg-error (" PACKAGE_NAME ") " PACKAGE_VERSION "\n", stdout); - fputs ("Options:\n" - " --version Print version\n" - " --lib-version Print library version\n" - " --help Print this help\n" - " --list Print all error codes\n" - " --defines Print all error codes as #define lines\n" - , stdout); - exit (0); - } - else if (argc == 2 && !strcmp (argv[1], "--lib-version")) - { - printf ("Version from header: %s (0x%06x)\n", - GPG_ERROR_VERSION, GPG_ERROR_VERSION_NUMBER); - printf ("Version from binary: %s\n", gpg_error_check_version (NULL)); - printf ("Copyright blurb ...:%s\n", gpg_error_check_version ("\x01\x01")); - exit (0); - } - else if (argc == 2 && !strcmp (argv[1], "--list")) + + if (argc) { - listmode = 1; + argc--; argv++; } - else if (argc == 2 && !strcmp (argv[1], "--defines")) + while (argc && last_argc != argc ) { - listmode = 2; + last_argc = argc; + if (!strcmp (*argv, "--")) + { + argc--; argv++; + break; + } + else if (!strcmp (*argv, "--version")) + { + fputs ("gpg-error (" PACKAGE_NAME ") " PACKAGE_VERSION "\n", stdout); + exit (0); + } + else if (!strcmp (*argv, "--help")) + { + show_usage (NULL); + } + else if (!strcmp (*argv, "--lib-version")) + { + argc--; argv++; + printf ("Version from header: %s (0x%06x)\n", + GPG_ERROR_VERSION, GPG_ERROR_VERSION_NUMBER); + printf ("Version from binary: %s\n", gpg_error_check_version (NULL)); + printf ("Copyright blurb ...:%s\n", + gpg_error_check_version ("\x01\x01")); + exit (0); + } + else if (!strcmp (*argv, "--list")) + { + listmode = 1; + argc--; argv++; + } + else if (!strcmp (*argv, "--defines")) + { + listmode = 2; + argc--; argv++; + } + else if (!strcmp (*argv, "--desc")) + { + desc = 1; + argc--; argv++; + } + else if (!strncmp (*argv, "--", 2)) + show_usage (pgmname); } + if ((argc && listmode) || (!argc && !listmode)) + show_usage (pgmname); + if (listmode == 1) { @@ -434,18 +543,26 @@ main (int argc, char *argv[]) err -= 1; source_sym = gpg_strsource_sym (err); if (source_sym) - printf ("%u = (%u, -) = (%s, -) = (%s, -)\n", - err, gpg_err_source (err), - source_sym, gpg_strsource (err)); + { + printf ("%u = (%u, -) = (%s, -) = (%s, -)\n", + err, gpg_err_source (err), + source_sym, gpg_strsource (err)); + if (desc) + print_desc (source_sym); + } } for (i=0; i < GPG_ERR_CODE_DIM; i++) { err = gpg_err_make (GPG_ERR_SOURCE_UNKNOWN, i); error_sym = gpg_strerror_sym (err); if (error_sym) - printf ("%u = (-, %u) = (-, %s) = (-, %s)\n", - err, gpg_err_code (err), - error_sym, gpg_strerror (err)); + { + printf ("%u = (-, %u) = (-, %s) = (-, %s)\n", + err, gpg_err_code (err), + error_sym, gpg_strerror (err)); + if (desc) + print_desc (error_sym); + } } } else if (listmode == 2) @@ -493,7 +610,7 @@ main (int argc, char *argv[]) } else /* Standard mode. */ { - while (i < argc) + for (i=0; i < argc; i++) { if (get_err_from_number (argv[i], &err) || get_err_from_symbol (argv[i], &err) @@ -506,11 +623,12 @@ main (int argc, char *argv[]) err, gpg_err_source (err), gpg_err_code (err), source_sym ? source_sym : "-", error_sym ? error_sym:"-", gpg_strsource (err), gpg_strerror (err)); + if (desc) + print_desc (error_sym); } else fprintf (stderr, _("%s: warning: could not recognize %s\n"), argv[0], argv[i]); - i++; } } |