rpm  4.11.1-rc1
rpmdb.c
Go to the documentation of this file.
1 #include "system.h"
2 
3 #include <popt.h>
4 #include <rpm/rpmcli.h>
5 #include "cliutils.h"
6 #include "debug.h"
7 
8 #if !defined(__GLIBC__) && !defined(__APPLE__)
9 char ** environ = NULL;
10 #endif
11 
12 enum modes {
13  MODE_INITDB = (1 << 0),
14  MODE_REBUILDDB = (1 << 1),
15  MODE_VERIFYDB = (1 << 2),
16 };
17 
18 static int mode = 0;
19 
20 static struct poptOption dbOptsTable[] = {
21  { "initdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_INITDB,
22  N_("initialize database"), NULL},
23  { "rebuilddb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_REBUILDDB,
24  N_("rebuild database inverted lists from installed package headers"),
25  NULL},
26  { "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
27  &mode, MODE_VERIFYDB, N_("verify database files"), NULL},
28  POPT_TABLEEND
29 };
30 
31 static struct poptOption optionsTable[] = {
32  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, dbOptsTable, 0,
33  N_("Database options:"), NULL },
34  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
35  N_("Common options for all rpm modes and executables:"), NULL },
36 
37  POPT_AUTOALIAS
38  POPT_AUTOHELP
39  POPT_TABLEEND
40 };
41 
42 int main(int argc, char *argv[])
43 {
44  int ec = EXIT_FAILURE;
45  poptContext optCon = rpmcliInit(argc, argv, optionsTable);
46  rpmts ts = NULL;
47 
48  if (argc < 2 || poptPeekArg(optCon)) {
49  printUsage(optCon, stderr, 0);
50  goto exit;
51  }
52 
53  ts = rpmtsCreate();
55 
56  switch (mode) {
57  case MODE_INITDB:
58  ec = rpmtsInitDB(ts, 0644);
59  break;
60  case MODE_REBUILDDB:
61  { rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}");
62  rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags);
63  ec = rpmtsRebuildDB(ts);
64  rpmtsSetVSFlags(ts, ovsflags);
65  } break;
66  case MODE_VERIFYDB:
67  ec = rpmtsVerifyDB(ts);
68  break;
69  default:
70  argerror(_("only one major mode may be specified"));
71  }
72 
73 exit:
74  rpmtsFree(ts);
75  rpmcliFini(optCon);
76  return ec;
77 }