1 2 #include "vector_pairs.h" 3 prescan_db(GDBM_FILE mdb)4int 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