From 1cf41474327ca813976f622e8e0b73bb3841a44c Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Fri, 16 Dec 2011 12:06:35 +0000 Subject: Make the stored "cat"/"mdoc"/"man" strings just be c/d/a single-character bytes. This cuts down a little in index size and allows for cleaner extraction of information. --- mandocdb.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'mandocdb.c') diff --git a/mandocdb.c b/mandocdb.c index d9acf3e8..24758a0e 100644 --- a/mandocdb.c +++ b/mandocdb.c @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.35 2011/12/16 08:04:34 kristaps Exp $ */ +/* $Id: mandocdb.c,v 1.36 2011/12/16 12:06:35 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze @@ -528,6 +528,7 @@ index_merge(const struct of *of, struct mparse *mp, size_t sv; unsigned seq; struct db_val vbuf; + char type; for (rec = 0; of; of = of->next) { fn = of->fname; @@ -608,7 +609,8 @@ index_merge(const struct of *of, struct mparse *mp, */ dbuf->len = 0; - buf_append(dbuf, mdoc ? "mdoc" : (man ? "man" : "cat")); + type = mdoc ? 'd' : (man ? 'a' : 'c'); + buf_appendb(dbuf, &type, 1); buf_appendb(dbuf, fn, strlen(fn) + 1); buf_appendb(dbuf, msec, strlen(msec) + 1); buf_appendb(dbuf, mtitle, strlen(mtitle) + 1); @@ -696,7 +698,7 @@ index_prune(const struct of *ofile, DB *db, const char *dbf, recno_t **recs, size_t *recsz, size_t *reccur) { const struct of *of; - const char *fn, *cp; + const char *fn; struct db_val *vbuf; unsigned seq, sseq; DBT key, val; @@ -707,7 +709,6 @@ index_prune(const struct of *ofile, DB *db, const char *dbf, while (0 == (ch = (*idx->seq)(idx, &key, &val, seq))) { seq = R_NEXT; *maxrec = *(recno_t *)key.data; - cp = val.data; /* Deleted records are zero-sized. Skip them. */ @@ -721,11 +722,8 @@ index_prune(const struct of *ofile, DB *db, const char *dbf, * Failing any of these, we go into our error handler. */ - if (NULL == (fn = memchr(cp, '\0', val.size))) - break; - if (++fn - cp >= (int)val.size) - break; - if (NULL == memchr(fn, '\0', val.size - (fn - cp))) + fn = (char *)val.data + 1; + if (NULL == memchr(fn, '\0', val.size - 1)) break; /* -- cgit v1.2.3