Python bindings examples: PEP8 conpliance
[gpgme.git] / tests / run-swdb.c
1 /* run-swdb.c  - Test tool for SWDB function
2  * Copyright (C) 2016 g10 Code GmbH
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * GPGME is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <https://www.gnu.org/licenses/>.
18  */
19
20 /* We need to include config.h so that we know whether we are building
21    with large file system (LFS) support. */
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <stdlib.h>
27 #include <stdio.h>
28 #include <string.h>
29 #include <assert.h>
30
31 #include <gpgme.h>
32
33 #define PGM "run-swdb"
34
35 #include "run-support.h"
36
37
38 static int verbose;
39
40
41 static const char *
42 isotimestr (unsigned long value)
43 {
44   time_t t;
45   static char buffer[25+5];
46   struct tm *tp;
47
48   if (!value)
49     return "none";
50   t = value;
51
52   tp = gmtime (&t);
53   snprintf (buffer, sizeof buffer, "%04d-%02d-%02d %02d:%02d:%02d",
54             1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday,
55             tp->tm_hour, tp->tm_min, tp->tm_sec);
56   return buffer;
57 }
58
59
60 static int
61 show_usage (int ex)
62 {
63   fputs ("usage: " PGM " [options] NAME [VERSION]\n\n"
64          "Options:\n"
65          "  --verbose        run in verbose mode\n"
66          "  --status         print status lines from the backend\n"
67          , stderr);
68   exit (ex);
69 }
70
71
72 int
73 main (int argc, char **argv)
74 {
75   int last_argc = -1;
76   gpgme_error_t err;
77   gpgme_ctx_t ctx;
78   gpgme_protocol_t protocol = GPGME_PROTOCOL_GPGCONF;
79   const char *name;
80   const char *iversion;
81   gpgme_query_swdb_result_t result;
82
83   if (argc)
84     { argc--; argv++; }
85
86   while (argc && last_argc != argc )
87     {
88       last_argc = argc;
89       if (!strcmp (*argv, "--"))
90         {
91           argc--; argv++;
92           break;
93         }
94       else if (!strcmp (*argv, "--help"))
95         show_usage (0);
96       else if (!strcmp (*argv, "--verbose"))
97         {
98           verbose = 1;
99           argc--; argv++;
100         }
101       else if (!strncmp (*argv, "--", 2))
102         show_usage (1);
103     }
104
105   if (argc < 1 || argc > 2)
106     show_usage (1);
107   name = argv[0];
108   iversion = argc > 1? argv[1] : NULL;
109
110   init_gpgme (protocol);
111
112   err = gpgme_new (&ctx);
113   fail_if_err (err);
114   gpgme_set_protocol (ctx, protocol);
115
116   err = gpgme_op_query_swdb (ctx, name, iversion, 0);
117   if (err)
118     {
119       fprintf (stderr, PGM ": error querying swdb: %s\n", gpg_strerror (err));
120       exit (1);
121     }
122
123   result = gpgme_op_query_swdb_result (ctx);
124   if (!result)
125     {
126       fprintf (stderr, PGM ": error querying swdb: %s\n", "no result");
127       exit (1);
128     }
129
130   printf ("package ...: %s\n"
131           "iversion ..: %s\n"
132           "version ...: %s\n",
133           nonnull (result->name),
134           nonnull (result->iversion),
135           nonnull (result->version));
136   printf ("reldate ...: %s\n", isotimestr (result->reldate));
137   printf ("created ...: %s\n", isotimestr (result->created));
138   printf ("retrieved .: %s\n", isotimestr (result->retrieved));
139   printf ("flags .....:%s%s%s%s%s%s%s\n",
140           result->warning? " warning" : "",
141           result->update?  " update"  : "",
142           result->urgent?  " urgent"  : "",
143           result->unknown? " unknown" : "",
144           result->tooold?  " tooold"  : "",
145           result->noinfo?  " noinfo"  : "",
146           result->error?   " error"   : "" );
147
148
149   gpgme_release (ctx);
150   return 0;
151 }