summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mandocdb.c14
-rw-r--r--mansearch.c52
2 files changed, 30 insertions, 36 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 4740a284..47fe23c7 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -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 ff88898b..7f6ec165 100644
--- a/mansearch.c
+++ b/mansearch.c
@@ -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 *