summaryrefslogtreecommitdiffstats
path: root/mandocdb.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2011-12-25 14:58:39 +0000
committerIngo Schwarze <schwarze@openbsd.org>2011-12-25 14:58:39 +0000
commite354f02652b641f5d8891c38baf28df81421f487 (patch)
tree0099942f292e9ed19c685e90cd94f94ce75ea015 /mandocdb.c
parent20c8cad8f64887c77b09b3ee81ab573973c2d6e6 (diff)
downloadmandoc-e354f02652b641f5d8891c38baf28df81421f487.tar.gz
For binary compatability of the databases across architectures,
use pointers to arrays, not pointers to structs. It is now possible to create databases on sparc64 and use them on i386 and vice versa. Kristaps@ can't think of anything else that might be required, either. Put this in now such that we can move on.
Diffstat (limited to 'mandocdb.c')
-rw-r--r--mandocdb.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 3615c665..4a1ea4cc 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -575,7 +575,7 @@ index_merge(const struct of *of, struct mparse *mp,
uint64_t mask;
size_t sv;
unsigned seq;
- struct db_val vbuf;
+ uint64_t vbuf[2];
char type;
rec = 0;
@@ -714,7 +714,7 @@ index_merge(const struct of *of, struct mparse *mp,
recs->last = 0;
} else
rec++;
- vbuf.rec = htobe32(rec);
+ vbuf[1] = htobe64(rec);
/*
* Copy from the in-memory hashtable of pending
@@ -726,8 +726,8 @@ index_merge(const struct of *of, struct mparse *mp,
seq = R_NEXT;
assert(sizeof(uint64_t) == val.size);
memcpy(&mask, val.data, val.size);
- vbuf.mask = htobe64(mask);
- val.size = sizeof(struct db_val);
+ vbuf[0] = htobe64(mask);
+ val.size = sizeof(vbuf);
val.data = &vbuf;
dbt_put(mdb->db, mdb->dbn, &key, &val);
}
@@ -768,7 +768,7 @@ index_prune(const struct of *ofile, struct mdb *mdb, struct recs *recs)
{
const struct of *of;
const char *fn;
- struct db_val *vbuf;
+ uint64_t vbuf[2];
unsigned seq, sseq;
DBT key, val;
int ch;
@@ -817,11 +817,11 @@ index_prune(const struct of *ofile, struct mdb *mdb, struct recs *recs)
while (0 == (ch = (*mdb->db->seq)(mdb->db,
&key, &val, sseq))) {
sseq = R_NEXT;
- if (sizeof(struct db_val) != val.size)
+ if (sizeof(vbuf) != val.size)
break;
- vbuf = val.data;
- if (recs->last != betoh32(vbuf->rec))
+ memcpy(vbuf, val.data, val.size);
+ if (recs->last != betoh64(vbuf[1]))
continue;
if ((ch = (*mdb->db->del)(mdb->db,