aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-11-26 07:42:11 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-11-26 07:42:11 +0000
commit4aa67b7a74bb11df4cba5e49f1b089a7da6b5fc4 (patch)
treedc0af717985ac313470e44b41fd4297f80ce6958
parenta121fde484ea2d14b80a55edbc89155192ed5364 (diff)
downloadmandoc-4aa67b7a74bb11df4cba5e49f1b089a7da6b5fc4.tar.gz
mandoc-4aa67b7a74bb11df4cba5e49f1b089a7da6b5fc4.tar.zst
mandoc-4aa67b7a74bb11df4cba5e49f1b089a7da6b5fc4.zip
No point in trying to go on when elementary database operations
like preparing queries or binding variables fail; that won't yield useful results anyway but may generate huge pointless error messages. Issue reported by deraadt@.
-rw-r--r--compat_err.c14
-rwxr-xr-xconfigure1
-rw-r--r--mansearch.c17
3 files changed, 24 insertions, 8 deletions
diff --git a/compat_err.c b/compat_err.c
index fd6e11f4..d8b09cb2 100644
--- a/compat_err.c
+++ b/compat_err.c
@@ -6,7 +6,7 @@ int dummy;
#else
-/* $Id: compat_err.c,v 1.3 2015/11/07 14:22:29 schwarze Exp $ */
+/* $Id: compat_err.c,v 1.4 2015/11/26 07:42:11 schwarze Exp $ */
/*
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -77,6 +77,18 @@ err(int eval, const char *fmt, ...)
}
void
+errx(int eval, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vwarnxi(fmt, ap);
+ va_end(ap);
+ fputc('\n', stderr);
+ exit(eval);
+}
+
+void
warn(const char *fmt, ...)
{
va_list ap;
diff --git a/configure b/configure
index 261d50bb..21997fcc 100755
--- a/configure
+++ b/configure
@@ -339,6 +339,7 @@ __HEREDOC__
if [ ${HAVE_ERR} -eq 0 ]; then
echo "extern void err(int, const char *, ...);"
+ echo "extern void errx(int, const char *, ...);"
echo "extern void warn(const char *, ...);"
echo "extern void warnx(const char *, ...);"
fi
diff --git a/mansearch.c b/mansearch.c
index 9832d577..e6e5d997 100644
--- a/mansearch.c
+++ b/mansearch.c
@@ -1,4 +1,4 @@
-/* $Id: mansearch.c,v 1.62 2015/11/07 14:22:29 schwarze Exp $ */
+/* $Id: mansearch.c,v 1.63 2015/11/26 07:42:11 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -54,17 +54,17 @@ extern const char *const mansearch_keynames[];
#define SQL_BIND_TEXT(_db, _s, _i, _v) \
do { if (SQLITE_OK != sqlite3_bind_text \
((_s), (_i)++, (_v), -1, SQLITE_STATIC)) \
- warnx("%s", sqlite3_errmsg((_db))); \
+ errx((int)MANDOCLEVEL_SYSERR, "%s", sqlite3_errmsg((_db))); \
} while (0)
#define SQL_BIND_INT64(_db, _s, _i, _v) \
do { if (SQLITE_OK != sqlite3_bind_int64 \
((_s), (_i)++, (_v))) \
- warnx("%s", sqlite3_errmsg((_db))); \
+ errx((int)MANDOCLEVEL_SYSERR, "%s", sqlite3_errmsg((_db))); \
} while (0)
#define SQL_BIND_BLOB(_db, _s, _i, _v) \
do { if (SQLITE_OK != sqlite3_bind_blob \
((_s), (_i)++, (&_v), sizeof(_v), SQLITE_STATIC)) \
- warnx("%s", sqlite3_errmsg((_db))); \
+ errx((int)MANDOCLEVEL_SYSERR, "%s", sqlite3_errmsg((_db))); \
} while (0)
struct expr {
@@ -262,7 +262,8 @@ mansearch(const struct mansearch *search,
j = 1;
c = sqlite3_prepare_v2(db, sql, -1, &s, NULL);
if (SQLITE_OK != c)
- warnx("%s", sqlite3_errmsg(db));
+ errx((int)MANDOCLEVEL_SYSERR,
+ "%s", sqlite3_errmsg(db));
for (ep = e; NULL != ep; ep = ep->next) {
if (NULL == ep->substr) {
@@ -312,14 +313,16 @@ mansearch(const struct mansearch *search,
"WHERE pageid=? ORDER BY sec, arch, name",
-1, &s, NULL);
if (SQLITE_OK != c)
- warnx("%s", sqlite3_errmsg(db));
+ errx((int)MANDOCLEVEL_SYSERR,
+ "%s", sqlite3_errmsg(db));
c = sqlite3_prepare_v2(db,
"SELECT bits, key, pageid FROM keys "
"WHERE pageid=? AND bits & ?",
-1, &s2, NULL);
if (SQLITE_OK != c)
- warnx("%s", sqlite3_errmsg(db));
+ errx((int)MANDOCLEVEL_SYSERR,
+ "%s", sqlite3_errmsg(db));
for (mp = ohash_first(&htab, &idx);
NULL != mp;