aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandocdb.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-04-18 21:55:38 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-04-18 21:55:38 +0000
commitc6c090486b119cabb1a49899e858e69c6578816e (patch)
tree2b7f18818217f07963d75780928dc0471b38ae68 /mandocdb.c
parent411bfa6dc02db92cb73b645471fecb82e9666574 (diff)
downloadmandoc-c6c090486b119cabb1a49899e858e69c6578816e.tar.gz
mandoc-c6c090486b119cabb1a49899e858e69c6578816e.tar.zst
mandoc-c6c090486b119cabb1a49899e858e69c6578816e.zip
In update mode, when opening the database fails, probably because it is
missing or corrupt, just rebuild it from scratch. This also helps when installing the very first port on a freshly installed machine and is similar to what espie@'s classical makewhatis(8) did. Issue reported by naddy@ via kili@.
Diffstat (limited to 'mandocdb.c')
-rw-r--r--mandocdb.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 5b05ef45..5800d0e7 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.137 2014/04/16 21:36:18 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.138 2014/04/18 21:55:38 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -442,15 +442,25 @@ main(int argc, char *argv[])
*/
if (0 == set_basedir(path_arg))
goto out;
- for (i = 0; i < argc; i++)
- filescan(argv[i]);
- if (0 == dbopen(1))
- goto out;
- if (OP_TEST != op)
- dbprune();
+ if (dbopen(1)) {
+ for (i = 0; i < argc; i++)
+ filescan(argv[i]);
+ if (OP_TEST != op)
+ dbprune();
+ } else {
+ /*
+ * Database missing or corrupt.
+ * Recreate from scratch.
+ */
+ op = OP_DEFAULT;
+ if (0 == treescan())
+ goto out;
+ if (0 == dbopen(0))
+ goto out;
+ }
if (OP_DELETE != op)
mpages_merge(mc, mp);
- dbclose(1);
+ dbclose(OP_DEFAULT == op ? 0 : 1);
} else {
/*
* If we have arguments, use them as our manpaths.