diff options
author | Werner Koch <[email protected]> | 2024-01-09 11:51:34 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-01-09 11:52:11 +0000 |
commit | 64006729047fd57e3c9827013bc3224388ce9987 (patch) | |
tree | 5591b8990e8d0551422c133f04ffaf06b8629f85 | |
parent | common,w32: Remove duplicated backslashes when setting the homedir. (diff) | |
download | gnupg-64006729047fd57e3c9827013bc3224388ce9987.tar.gz gnupg-64006729047fd57e3c9827013bc3224388ce9987.zip |
gpgconf: Adjust -X command for the new VERSION file format
* tools/gpgconf.c (show_version_gnupg): Read and parse the entire
VERSION file.
--
GnuPG-bug-id: 6918
-rw-r--r-- | tools/gpgconf.c | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/tools/gpgconf.c b/tools/gpgconf.c index e92fb68e8..268ae5668 100644 --- a/tools/gpgconf.c +++ b/tools/gpgconf.c @@ -1042,10 +1042,12 @@ get_revision_from_blurb (const char *blurb, int *r_len) static void show_version_gnupg (estream_t fp, const char *prefix) { - char *fname, *p; + char *fname, *p, *p0; size_t n; estream_t verfp; - char line[100]; + char *line = NULL; + size_t line_len = 0; + ssize_t length; es_fprintf (fp, "%s%sGnuPG %s (%s)\n%s%s\n", prefix, *prefix?"":"* ", strusage (13), BUILD_REVISION, prefix, strusage (17)); @@ -1064,20 +1066,46 @@ show_version_gnupg (estream_t fp, const char *prefix) verfp = es_fopen (fname, "r"); if (!verfp) es_fprintf (fp, "%s[VERSION file not found]\n", prefix); - else if (!es_fgets (line, sizeof line, verfp)) - es_fprintf (fp, "%s[VERSION file is empty]\n", prefix); else { - trim_spaces (line); - for (p=line; *p; p++) - if (*p < ' ' || *p > '~' || *p == '[') - *p = '?'; - es_fprintf (fp, "%s%s\n", prefix, line); + int lnr = 0; + + p0 = NULL; + while ((length = es_read_line (verfp, &line, &line_len, NULL))>0) + { + lnr++; + trim_spaces (line); + if (lnr == 1 && *line != '[') + { + /* Old file format where we look only at the + * first line. */ + p0 = line; + break; + } + else if (!strncmp (line, "version=", 8)) + { + p0 = line + 8; + break; + } + } + if (length < 0 || es_ferror (verfp)) + es_fprintf (fp, "%s[VERSION file read error]\n", prefix); + else if (p0) + { + for (p=p0; *p; p++) + if (*p < ' ' || *p > '~' || *p == '[') + *p = '?'; + es_fprintf (fp, "%s%s\n", prefix, p0); + } + else + es_fprintf (fp, "%s[VERSION file is empty]\n", prefix); + + es_fclose (verfp); } - es_fclose (verfp); } xfree (fname); } + xfree (line); #ifdef HAVE_W32_SYSTEM { |