aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-01-05 04:13:52 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-01-05 04:13:52 +0000
commitb35727d655f29415823be44ca497ad971e401519 (patch)
treef31f4090c3f9712497ee5aae273f1c6b8efeed59
parent42b944defba9613b4887c77042d426c2b784fac3 (diff)
downloadmandoc-b35727d655f29415823be44ca497ad971e401519.tar.gz
mandoc-b35727d655f29415823be44ca497ad971e401519.tar.zst
mandoc-b35727d655f29415823be44ca497ad971e401519.zip
Remove the obsolete file name column from the mpages table.
This column wasn't helpful because one manpage can have multiple MLINKS. Use the file name column in the mlinks table, instead.
-rw-r--r--mandocdb.c16
-rw-r--r--mansearch.c54
2 files changed, 32 insertions, 38 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 32aac2f6..6e5d991b 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.99 2014/01/05 03:25:51 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.100 2014/01/05 04:13:52 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -1818,12 +1818,6 @@ dbindex(const struct mpage *mpage, struct mchars *mc)
SQL_EXEC("BEGIN TRANSACTION");
i = 1;
- /*
- * XXX The following line is obsolete
- * and only kept for backward compatibility
- * until apropos(1) and friends have caught up.
- */
- SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->mlinks->file);
SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, desc);
SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form);
SQL_STEP(stmts[STMT_INSERT_PAGE]);
@@ -1960,13 +1954,7 @@ dbopen(int real)
return(0);
}
- /*
- * XXX The first column in table mpages is obsolete
- * and only kept for backward compatibility
- * until apropos(1) and friends have caught up.
- */
sql = "CREATE TABLE \"mpages\" (\n"
- " \"file\" TEXT NOT NULL,\n"
" \"desc\" TEXT NOT NULL,\n"
" \"form\" INTEGER NOT NULL,\n"
" \"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL\n"
@@ -2003,7 +1991,7 @@ prepare_statements:
sql = "DELETE FROM mpages where file=?";
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_DELETE_PAGE], NULL);
sql = "INSERT INTO mpages "
- "(file,desc,form) VALUES (?,?,?)";
+ "(desc,form) VALUES (?,?)";
sqlite3_prepare_v2(db, sql, -1, &stmts[STMT_INSERT_PAGE], NULL);
sql = "INSERT INTO mlinks "
"(file,sec,arch,name,pageid) VALUES (?,?,?,?,?)";
diff --git a/mansearch.c b/mansearch.c
index 3787f454..20b5a536 100644
--- a/mansearch.c
+++ b/mansearch.c
@@ -1,4 +1,4 @@
-/* $Id: mansearch.c,v 1.16 2014/01/05 03:25:51 schwarze Exp $ */
+/* $Id: mansearch.c,v 1.17 2014/01/05 04:13:52 schwarze Exp $ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -70,7 +70,6 @@ struct expr {
struct match {
uint64_t id; /* identifier in database */
- char *file; /* relative filepath of manpage */
char *desc; /* description of manpage */
int form; /* 0 == catpage */
};
@@ -126,7 +125,8 @@ static const struct type types[] = {
{ 0ULL, NULL }
};
-static char *buildnames(sqlite3 *, sqlite3_stmt *, uint64_t);
+static void buildnames(struct manpage *, sqlite3 *,
+ sqlite3_stmt *, uint64_t, const char *);
static char *buildoutput(sqlite3 *, sqlite3_stmt *,
uint64_t, uint64_t);
static void *hash_alloc(size_t, void *);
@@ -279,7 +279,7 @@ mansearch(const struct mansearch *search,
* distribution of buckets in the table.
*/
while (SQLITE_ROW == (c = sqlite3_step(s))) {
- id = sqlite3_column_int64(s, 3);
+ id = sqlite3_column_int64(s, 2);
idx = ohash_lookup_memory
(&htab, (char *)&id,
sizeof(uint64_t), (uint32_t)id);
@@ -289,11 +289,9 @@ mansearch(const struct mansearch *search,
mp = mandoc_calloc(1, sizeof(struct match));
mp->id = id;
- mp->file = mandoc_strdup
- ((char *)sqlite3_column_text(s, 0));
mp->desc = mandoc_strdup
- ((char *)sqlite3_column_text(s, 1));
- mp->form = sqlite3_column_int(s, 2);
+ ((char *)sqlite3_column_text(s, 0));
+ mp->form = sqlite3_column_int(s, 1);
ohash_insert(&htab, idx, mp);
}
@@ -323,18 +321,12 @@ mansearch(const struct mansearch *search,
(*res, maxres * sizeof(struct manpage));
}
mpage = *res + cur;
- if (-1 == asprintf(&mpage->file, "%s/%s",
- paths->paths[i], mp->file)) {
- perror(0);
- exit((int)MANDOCLEVEL_SYSERR);
- }
mpage->desc = mp->desc;
mpage->form = mp->form;
- mpage->names = buildnames(db, s, mp->id);
+ buildnames(mpage, db, s, mp->id, paths->paths[i]);
mpage->output = outbit ?
buildoutput(db, s2, mp->id, outbit) : NULL;
- free(mp->file);
free(mp);
cur++;
}
@@ -354,23 +346,27 @@ out:
return(rc);
}
-static char *
-buildnames(sqlite3 *db, sqlite3_stmt *s, uint64_t id)
+static void
+buildnames(struct manpage *mpage, sqlite3 *db, sqlite3_stmt *s,
+ uint64_t id, const char *path)
{
- char *names, *newnames;
+ char *newnames;
const char *oldnames, *sep1, *name, *sec, *sep2, *arch;
size_t i;
int c;
- names = NULL;
+ mpage->names = NULL;
i = 1;
SQL_BIND_INT64(db, s, i, id);
while (SQLITE_ROW == (c = sqlite3_step(s))) {
- if (NULL == names) {
+
+ /* Assemble the list of names. */
+
+ if (NULL == mpage->names) {
oldnames = "";
sep1 = "";
} else {
- oldnames = names;
+ oldnames = mpage->names;
sep1 = ", ";
}
sec = sqlite3_column_text(s, 1);
@@ -382,13 +378,23 @@ buildnames(sqlite3 *db, sqlite3_stmt *s, uint64_t id)
perror(0);
exit((int)MANDOCLEVEL_SYSERR);
}
- free(names);
- names = newnames;
+ free(mpage->names);
+ mpage->names = newnames;
+
+ /* Also save the first file name encountered. */
+
+ if (NULL != mpage->file)
+ continue;
+
+ name = sqlite3_column_text(s, 0);
+ if (-1 == asprintf(&mpage->file, "%s/%s", path, name)) {
+ perror(0);
+ exit((int)MANDOCLEVEL_SYSERR);
+ }
}
if (SQLITE_DONE != c)
fprintf(stderr, "%s\n", sqlite3_errmsg(db));
sqlite3_reset(s);
- return(names);
}
static char *