-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, Randy,

I believe that passing a non-zero flag is required by the API (as db(3)
says,  the flags argument *must* be set).  However, I don't think it's
good to break existing code and has committed a workaround as revision
196525:

Modified: head/lib/libc/db/hash/hash.c
==============================================================================
- --- head/lib/libc/db/hash/hash.c      Mon Aug 24 22:35:53 2009        
(r196524)
+++ head/lib/libc/db/hash/hash.c        Mon Aug 24 23:44:07 2009        
(r196525)
@@ -711,7 +711,7 @@ hash_seq(const DB *dbp, DBT *key, DBT *d
                hashp->cndx = 1;
                hashp->cpage = NULL;
        }
- - next_bucket:
+next_bucket:
        for (bp = NULL; !bp || !bp[0]; ) {
                if (!(bufp = hashp->cpage)) {
                        for (bucket = hashp->cbucket;
@@ -732,7 +732,7 @@ hash_seq(const DB *dbp, DBT *key, DBT *d
                        }
                } else {
                        bp = (u_int16_t *)hashp->cpage->page;
- -                     if (flag == R_NEXT) {
+                       if (flag == R_NEXT || flag == 0) {
                                hashp->cndx += 2;
                                if (hashp->cndx > bp[0]) {
                                        hashp->cpage = NULL;


I would propose the following change be applied to exim as well.  Using
0 as flag is unsupported according to the manual page anyway:

- --- ./src/dbstuff.h.orig      2007-08-29 07:02:22.000000000 -0700
+++ ./src/dbstuff.h     2009-08-24 16:49:31.258232116 -0700
@@ -331,7 +331,7 @@

 /* EXIM_DBSCAN - returns TRUE if data is returned, FALSE at end */
 #define EXIM_DBSCAN(db, key, data, first, cursor)      \
- -       ((db)->seq(db, &key, &data, (first? R_FIRST : 0)) == 0)
+       ((db)->seq(db, &key, &data, (first? R_FIRST : R_NEXT)) == 0)

 /* EXIM_DBDELETE_CURSOR - terminate scanning operation (null). Make it
 refer to cursor, to keep picky compilers happy. */

By checking Kirk McKusick's CD with the SCCS history of BSD Unix I'd say
it's pretty safe to assume that R_NEXT would exist wherever R_FIRST existed.

Cheers,
- --
Xin LI <[email protected]>    http://www.delphij.net/
FreeBSD - The Power to Serve!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (FreeBSD)

iEYEARECAAYFAkqTKxEACgkQi+vbBBjt66DRKgCfQcyV650m+kcS0etkAf5Z3E12
qZQAn2FSfjHkTJ50mFK3neEfxqUlYxAV
=0/OL
-----END PGP SIGNATURE-----

-- 
## List details at http://lists.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to