=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mandocdb.c,v retrieving revision 1.26 retrieving revision 1.27 diff -c -r1.26 -r1.27 *** src/usr.bin/mandoc/mandocdb.c 2011/12/19 02:26:33 1.26 --- src/usr.bin/mandoc/mandocdb.c 2011/12/20 00:41:24 1.27 *************** *** 1,4 **** ! /* $Id: mandocdb.c,v 1.26 2011/12/19 02:26:33 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze --- 1,4 ---- ! /* $Id: mandocdb.c,v 1.27 2011/12/20 00:41:24 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze *************** *** 518,523 **** --- 518,524 ---- struct mdoc *mdoc; struct man *man; const char *fn, *msec, *mtitle, *arch; + uint64_t mask; size_t sv; unsigned seq; struct db_val vbuf; *************** *** 648,654 **** seq = R_FIRST; while (0 == (ch = (*hash->seq)(hash, &key, &val, seq))) { seq = R_NEXT; ! vbuf.mask = htobe64(*(uint64_t *)val.data); val.size = sizeof(struct db_val); val.data = &vbuf; dbt_put(db, dbf, &key, &val); --- 649,657 ---- seq = R_FIRST; while (0 == (ch = (*hash->seq)(hash, &key, &val, seq))) { 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); val.data = &vbuf; dbt_put(db, dbf, &key, &val); *************** *** 701,707 **** seq = R_FIRST; while (0 == (ch = (*idx->seq)(idx, &key, &val, seq))) { seq = R_NEXT; ! *maxrec = *(recno_t *)key.data; /* Deleted records are zero-sized. Skip them. */ --- 704,711 ---- seq = R_FIRST; while (0 == (ch = (*idx->seq)(idx, &key, &val, seq))) { seq = R_NEXT; ! assert(sizeof(recno_t) == key.size); ! memcpy(maxrec, key.data, key.size); /* Deleted records are zero-sized. Skip them. */ *************** *** 1061,1066 **** --- 1065,1071 ---- static void hash_put(DB *db, const struct buf *buf, uint64_t mask) { + uint64_t oldmask; DBT key, val; int rc; *************** *** 1073,1080 **** if ((rc = (*db->get)(db, &key, &val, 0)) < 0) { perror("hash"); exit((int)MANDOCLEVEL_SYSERR); ! } else if (0 == rc) ! mask |= *(uint64_t *)val.data; val.data = &mask; val.size = sizeof(uint64_t); --- 1078,1088 ---- if ((rc = (*db->get)(db, &key, &val, 0)) < 0) { perror("hash"); exit((int)MANDOCLEVEL_SYSERR); ! } else if (0 == rc) { ! assert(sizeof(uint64_t) == val.size); ! memcpy(&oldmask, val.data, val.size); ! mask |= oldmask; ! } val.data = &mask; val.size = sizeof(uint64_t);