1 
2 #include "vector_pairs.h"
3 
prescan_db(GDBM_FILE mdb)4 int prescan_db(GDBM_FILE mdb) {
5 	/* walk through the whole database */
6 	/* count keys and check for database sanity */
7 	int keycount = 0;
8 	datum mykey, myvalue;
9 	mykey = gdbm_firstkey(mdb);
10 	if (mykey.dptr == NULL) {
11 		fprintf(stderr, "empty database\n");
12 		return(-1);
13 	}
14 
15 	do {
16 		if (mykey.dsize < MINKEYSIZE) {
17 			fprintf(stderr, "empty key\n");
18 			return(-1);
19 		}
20 
21 		if (mykey.dsize > MAXKEYSIZE) {
22 			fprintf(stderr, "huge key\n");
23 			return(-1);
24 		}
25 
26 		myvalue = gdbm_fetch(mdb, mykey);
27 
28 		if (myvalue.dptr == NULL) {
29 			fprintf(stderr, "key with no value\n");
30 			return(-1);
31 		}
32 		if (myvalue.dsize != MULTI_VEC_LEN + FILE_HASH_LEN + BASE_HASH_LEN) {
33 			fprintf(stderr, "nonstandard value length: %d \n", myvalue.dsize);
34 			return(-1);
35 		}
36 		keycount++;
37 		mykey = gdbm_nextkey(mdb, mykey);
38 	} while (mykey.dptr != NULL);
39 
40 	return(keycount);
41 }
42