version 1.36, 2011/12/16 12:06:35 |
version 1.37, 2011/12/20 21:41:11 |
Line 525 index_merge(const struct of *of, struct mparse *mp, |
|
Line 525 index_merge(const struct of *of, struct mparse *mp, |
|
struct mdoc *mdoc; |
struct mdoc *mdoc; |
struct man *man; |
struct man *man; |
const char *fn, *msec, *mtitle, *arch; |
const char *fn, *msec, *mtitle, *arch; |
|
uint64_t mask; |
size_t sv; |
size_t sv; |
unsigned seq; |
unsigned seq; |
struct db_val vbuf; |
struct db_val vbuf; |
Line 655 index_merge(const struct of *of, struct mparse *mp, |
|
Line 656 index_merge(const struct of *of, struct mparse *mp, |
|
seq = R_FIRST; |
seq = R_FIRST; |
while (0 == (ch = (*hash->seq)(hash, &key, &val, seq))) { |
while (0 == (ch = (*hash->seq)(hash, &key, &val, seq))) { |
seq = R_NEXT; |
seq = R_NEXT; |
vbuf.mask = htobe64(*(uint64_t *)val.data); |
assert(sizeof(uint64_t) == val.size); |
|
memcpy(&mask, val.data, val.size); |
|
vbuf.mask = htobe64(mask); |
val.size = sizeof(struct db_val); |
val.size = sizeof(struct db_val); |
val.data = &vbuf; |
val.data = &vbuf; |
dbt_put(db, dbf, &key, &val); |
dbt_put(db, dbf, &key, &val); |
Line 708 index_prune(const struct of *ofile, DB *db, const char |
|
Line 711 index_prune(const struct of *ofile, DB *db, const char |
|
seq = R_FIRST; |
seq = R_FIRST; |
while (0 == (ch = (*idx->seq)(idx, &key, &val, seq))) { |
while (0 == (ch = (*idx->seq)(idx, &key, &val, seq))) { |
seq = R_NEXT; |
seq = R_NEXT; |
*maxrec = *(recno_t *)key.data; |
assert(sizeof(recno_t) == key.size); |
|
memcpy(maxrec, key.data, key.size); |
|
|
/* Deleted records are zero-sized. Skip them. */ |
/* Deleted records are zero-sized. Skip them. */ |
|
|
Line 1068 pmdoc_Sh(MDOC_ARGS) |
|
Line 1072 pmdoc_Sh(MDOC_ARGS) |
|
static void |
static void |
hash_put(DB *db, const struct buf *buf, uint64_t mask) |
hash_put(DB *db, const struct buf *buf, uint64_t mask) |
{ |
{ |
|
uint64_t oldmask; |
DBT key, val; |
DBT key, val; |
int rc; |
int rc; |
|
|
Line 1080 hash_put(DB *db, const struct buf *buf, uint64_t mask) |
|
Line 1085 hash_put(DB *db, const struct buf *buf, uint64_t mask) |
|
if ((rc = (*db->get)(db, &key, &val, 0)) < 0) { |
if ((rc = (*db->get)(db, &key, &val, 0)) < 0) { |
perror("hash"); |
perror("hash"); |
exit((int)MANDOCLEVEL_SYSERR); |
exit((int)MANDOCLEVEL_SYSERR); |
} else if (0 == rc) |
} else if (0 == rc) { |
mask |= *(uint64_t *)val.data; |
assert(sizeof(uint64_t) == val.size); |
|
memcpy(&oldmask, val.data, val.size); |
|
mask |= oldmask; |
|
} |
|
|
val.data = &mask; |
val.data = &mask; |
val.size = sizeof(uint64_t); |
val.size = sizeof(uint64_t); |