Lines Matching refs:db

59 #define	dbm_dirty(db) ((db)->dbm_flags & _DBM_DIRTY)  argument
60 #define dbm_dirdirty(db) ((db)->dbm_flags & _DBM_DIRDIRTY) argument
61 #define dbm_defwrite(db) ((db)->dbm_flags & _DBM_DEFWRITE) argument
62 #define dbm_setdirty(db) (db)->dbm_flags |= _DBM_DIRTY argument
63 #define dbm_clrdirty(db) (db)->dbm_flags &= ~_DBM_DIRTY argument
64 #define dbm_setdirdirty(db) (db)->dbm_flags |= _DBM_DIRDIRTY argument
65 #define dbm_clrdirdirty(db) (db)->dbm_flags &= ~_DBM_DIRDIRTY argument
80 static int dbm_flushpag(DBM *db);
91 dbm_setdefwrite(DBM *db) in dbm_setdefwrite() argument
93 db->dbm_flags |= _DBM_DEFWRITE; in dbm_setdefwrite()
99 dbm_error(DBM *db) in dbm_error() argument
101 return (db->dbm_flags & _DBM_IOERR); in dbm_error()
107 dbm_clearerr(DBM *db) in dbm_clearerr() argument
109 return (db->dbm_flags &= ~_DBM_IOERR); in dbm_clearerr()
113 dbm_flush(DBM *db) in dbm_flush() argument
116 if (dbm_flushpag(db) < 0) in dbm_flush()
118 if (dbm_flushdir(db) < 0) in dbm_flush()
124 dbm_flushpag(DBM *db) in dbm_flushpag() argument
129 if (dbm_dirty(db)) { /* must page out the page */ in dbm_flushpag()
130 where = (((off64_t)db->dbm_pagbno) * PBLKSIZ); in dbm_flushpag()
131 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_flushpag()
132 (write(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)) { in dbm_flushpag()
133 db->dbm_flags |= _DBM_IOERR; in dbm_flushpag()
136 dbm_clrdirty(db); in dbm_flushpag()
142 dbm_flushdir(DBM *db) in dbm_flushdir() argument
146 if (dbm_dirdirty(db)) { /* must page out the dir */ in dbm_flushdir()
147 where = (((off64_t)db->dbm_dirbno) * DBLKSIZ); in dbm_flushdir()
148 if ((lseek64(db->dbm_dirf, where, L_SET) != where) || in dbm_flushdir()
149 (write(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)) { in dbm_flushdir()
152 dbm_clrdirdirty(db); in dbm_flushdir()
164 DBM *db; in dbm_open() local
167 if ((db = (DBM *)malloc(sizeof (*db))) == 0) { in dbm_open()
171 db->dbm_flags = (flags & 03) == O_RDONLY ? _DBM_RDONLY : 0; in dbm_open()
174 if (strlcpy(db->dbm_pagbuf, file, sizeof (db->dbm_pagbuf)) >= in dbm_open()
175 sizeof (db->dbm_pagbuf) || in dbm_open()
176 strlcat(db->dbm_pagbuf, ".pag", sizeof (db->dbm_pagbuf)) >= in dbm_open()
177 sizeof (db->dbm_pagbuf)) { in dbm_open()
185 db->dbm_pagf = open64(db->dbm_pagbuf, flags, mode); in dbm_open()
186 if (db->dbm_pagf < 0) { in dbm_open()
195 (void) strlcpy(db->dbm_pagbuf, file, sizeof (db->dbm_pagbuf)); in dbm_open()
196 (void) strlcat(db->dbm_pagbuf, ".dir", sizeof (db->dbm_pagbuf)); in dbm_open()
197 db->dbm_dirf = open64(db->dbm_pagbuf, flags, mode); in dbm_open()
198 if (db->dbm_dirf < 0) { in dbm_open()
202 (void) fstat64(db->dbm_dirf, &statb); in dbm_open()
203 db->dbm_maxbno = statb.st_size * BYTESIZ-1; in dbm_open()
204 db->dbm_pagbno = db->dbm_dirbno = -1; in dbm_open()
205 return (db); in dbm_open()
207 (void) close(db->dbm_pagf); in dbm_open()
209 free((char *)db); in dbm_open()
215 dbm_close(DBM *db) in dbm_close() argument
217 (void) dbm_close_status(db); in dbm_close()
222 dbm_close_status(DBM *db) in dbm_close_status() argument
227 if (dbm_flush(db) < 0) in dbm_close_status()
229 if (close(db->dbm_dirf) < 0) in dbm_close_status()
231 if (close(db->dbm_pagf) < 0) in dbm_close_status()
233 free((char *)db); in dbm_close_status()
238 dbm_forder(DBM *db, datum key) in dbm_forder() argument
243 for (db->dbm_hmask = 0; ; db->dbm_hmask = (db->dbm_hmask<<1)+1) { in dbm_forder()
244 db->dbm_blkno = hash & db->dbm_hmask; in dbm_forder()
245 db->dbm_bitno = db->dbm_blkno + db->dbm_hmask; in dbm_forder()
246 if (getbit(db) == 0) in dbm_forder()
249 return (db->dbm_blkno); in dbm_forder()
253 dbm_fetch(DBM *db, datum key) in dbm_fetch() argument
258 if (dbm_error(db)) in dbm_fetch()
260 dbm_access(db, dcalchash(key)); in dbm_fetch()
261 if ((i = finddatum(db->dbm_pagbuf, key)) >= 0) { in dbm_fetch()
262 item = makdatum(db->dbm_pagbuf, i+1); in dbm_fetch()
273 dbm_delete(DBM *db, datum key) in dbm_delete() argument
278 if (dbm_error(db)) in dbm_delete()
280 if (dbm_rdonly(db)) { in dbm_delete()
284 dbm_access(db, dcalchash(key)); in dbm_delete()
285 if ((i = finddatum(db->dbm_pagbuf, key)) < 0) in dbm_delete()
287 if (!delitem(db->dbm_pagbuf, i)) in dbm_delete()
289 db->dbm_pagbno = db->dbm_blkno; in dbm_delete()
290 if (dbm_defwrite(db)) { in dbm_delete()
291 dbm_setdirty(db); in dbm_delete()
293 where = (((off64_t)db->dbm_blkno) * PBLKSIZ); in dbm_delete()
294 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_delete()
295 (write(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)) { in dbm_delete()
297 db->dbm_flags |= _DBM_IOERR; in dbm_delete()
305 dbm_store(DBM *db, datum key, datum dat, int replace) in dbm_store() argument
313 if (dbm_error(db)) in dbm_store()
315 if (dbm_rdonly(db)) { in dbm_store()
321 dbm_access(db, key_hash); in dbm_store()
322 if ((i = finddatum(db->dbm_pagbuf, key)) >= 0) { in dbm_store()
325 if (!delitem(db->dbm_pagbuf, i)) { in dbm_store()
326 db->dbm_flags |= _DBM_IOERR; in dbm_store()
330 if (!additem(db->dbm_pagbuf, key, dat)) in dbm_store()
332 db->dbm_pagbno = db->dbm_blkno; in dbm_store()
333 if (dbm_defwrite(db)) { in dbm_store()
334 dbm_setdirty(db); in dbm_store()
336 where = (((off64_t)db->dbm_blkno) * PBLKSIZ); in dbm_store()
337 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_store()
338 (write(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)) { in dbm_store()
339 db->dbm_flags |= _DBM_IOERR; in dbm_store()
347 db->dbm_flags |= _DBM_IOERR; in dbm_store()
353 item = makdatum(db->dbm_pagbuf, i); in dbm_store()
361 if (item_hash & (db->dbm_hmask+1)) { in dbm_store()
362 item1 = makdatum(db->dbm_pagbuf, i+1); in dbm_store()
366 db->dbm_flags |= _DBM_IOERR; in dbm_store()
370 !delitem(db->dbm_pagbuf, i)) { in dbm_store()
371 db->dbm_flags |= _DBM_IOERR; in dbm_store()
378 db->dbm_pagbno = db->dbm_blkno; in dbm_store()
379 where = (((off64_t)db->dbm_blkno) * PBLKSIZ); in dbm_store()
380 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_store()
381 (write(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)) { in dbm_store()
382 db->dbm_flags |= _DBM_IOERR; in dbm_store()
385 dbm_clrdirty(db); /* clear dirty */ in dbm_store()
386 where = (((off64_t)db->dbm_blkno + db->dbm_hmask + 1) * PBLKSIZ); in dbm_store()
387 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_store()
388 (write(db->dbm_pagf, ovfbuf, PBLKSIZ) != PBLKSIZ)) { in dbm_store()
389 db->dbm_flags |= _DBM_IOERR; in dbm_store()
392 if (setbit(db) < 0) { in dbm_store()
393 db->dbm_flags |= _DBM_IOERR; in dbm_store()
397 db->dbm_flags |= _DBM_IOERR; in dbm_store()
404 dbm_hashinc(DBM *db, unsigned long hash) in dbm_hashinc() argument
408 hash &= db->dbm_hmask; in dbm_hashinc()
409 bit = db->dbm_hmask+1; in dbm_hashinc()
425 dbm_firsthash(DBM *db, unsigned long hash) in dbm_firsthash() argument
431 dbm_access(db, hash); in dbm_firsthash()
433 bitem = makdatum(db->dbm_pagbuf, 0); in dbm_firsthash()
435 item = makdatum(db->dbm_pagbuf, i); in dbm_firsthash()
444 db->dbm_keyptr = j + 2; in dbm_firsthash()
445 db->dbm_blkptr = db->dbm_blkno; in dbm_firsthash()
448 hash = dbm_hashinc(db, hash); in dbm_firsthash()
456 dbm_firstkey(DBM *db) in dbm_firstkey() argument
468 db->dbm_blkptr = 0L; in dbm_firstkey()
469 db->dbm_keyptr = 0; in dbm_firstkey()
471 rval = dbm_firsthash(db, 0L); in dbm_firstkey()
477 dbm_nextkey(DBM *db) in dbm_nextkey() argument
480 return (dbm_do_nextkey(db, nullkey)); in dbm_nextkey()
494 dbm_slow_nextkey(DBM *db) in dbm_slow_nextkey() argument
501 if (dbm_error(db) || fstat64(db->dbm_pagf, &statb) < 0) in dbm_slow_nextkey()
506 if (db->dbm_blkptr != db->dbm_pagbno) { in dbm_slow_nextkey()
508 if (dbm_dirty(db)) (void) dbm_flushpag(db); in dbm_slow_nextkey()
510 db->dbm_pagbno = db->dbm_blkptr; in dbm_slow_nextkey()
511 where = (((off64_t)db->dbm_blkptr) * PBLKSIZ); in dbm_slow_nextkey()
512 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_slow_nextkey()
513 (read(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != in dbm_slow_nextkey()
515 (void) memset(db->dbm_pagbuf, 0, PBLKSIZ); in dbm_slow_nextkey()
517 else if (chkblk(db->dbm_pagbuf) < 0) in dbm_slow_nextkey()
518 db->dbm_flags |= _DBM_IOERR; in dbm_slow_nextkey()
522 if (((short *)(uintptr_t)db->dbm_pagbuf)[0] != 0) { in dbm_slow_nextkey()
523 item = makdatum(db->dbm_pagbuf, db->dbm_keyptr); in dbm_slow_nextkey()
525 db->dbm_keyptr += 2; in dbm_slow_nextkey()
528 db->dbm_keyptr = 0; in dbm_slow_nextkey()
531 if (++db->dbm_blkptr >= statb.st_size) in dbm_slow_nextkey()
543 dbm_do_nextkey(DBM *db, datum inkey) in dbm_do_nextkey() argument
556 if (dbm_error(db)) { in dbm_do_nextkey()
565 dbm_access(db, (hash = dcalchash(inkey))); in dbm_do_nextkey()
566 if ((i = finddatum(db->dbm_pagbuf, inkey)) >= 0) { in dbm_do_nextkey()
567 db->dbm_keyptr = i + 2; in dbm_do_nextkey()
568 db->dbm_blkptr = db->dbm_blkno; in dbm_do_nextkey()
574 if (db->dbm_blkptr == 0L && in dbm_do_nextkey()
575 db->dbm_keyptr == 0) in dbm_do_nextkey()
576 return (dbm_firsthash(db, 0L)); in dbm_do_nextkey()
580 if (db->dbm_blkptr != db->dbm_pagbno) { in dbm_do_nextkey()
582 if (dbm_dirty(db)) (void) dbm_flushpag(db); in dbm_do_nextkey()
583 db->dbm_pagbno = db->dbm_blkptr; in dbm_do_nextkey()
584 where = (((off64_t)db->dbm_blkptr) * PBLKSIZ); in dbm_do_nextkey()
585 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_do_nextkey()
586 (read(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != in dbm_do_nextkey()
588 (void) memset(db->dbm_pagbuf, 0, PBLKSIZ); in dbm_do_nextkey()
590 else if (chkblk(db->dbm_pagbuf) < 0) in dbm_do_nextkey()
591 db->dbm_flags |= _DBM_IOERR; in dbm_do_nextkey()
595 if (db->dbm_keyptr >= 2) in dbm_do_nextkey()
596 key = makdatum(db->dbm_pagbuf, (db->dbm_keyptr-2)); in dbm_do_nextkey()
607 return (dbm_slow_nextkey(db)); in dbm_do_nextkey()
617 sp = (short *)(uintptr_t)db->dbm_pagbuf; in dbm_do_nextkey()
630 item.dptr = db->dbm_pagbuf+sp[i + 1]; in dbm_do_nextkey()
698 db->dbm_keyptr = j + 2; in dbm_do_nextkey()
699 db->dbm_blkptr = db->dbm_blkno; in dbm_do_nextkey()
708 hash = dbm_hashinc(db, hash); in dbm_do_nextkey()
713 return (dbm_firsthash(db, hash)); in dbm_do_nextkey()
719 dbm_access(DBM *db, unsigned long hash) in dbm_access() argument
733 if (my_bitno > db->dbm_maxbno) break; in dbm_access()
738 if (b != db->dbm_dirbno) { in dbm_access()
739 if (dbm_dirdirty(db)) in dbm_access()
740 (void) dbm_flushdir(db); /* must flush */ in dbm_access()
741 db->dbm_dirbno = b; in dbm_access()
743 if ((lseek64(db->dbm_dirf, where, L_SET) != where) || in dbm_access()
744 (read(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != in dbm_access()
746 (void) memset(db->dbm_dirbuf, 0, DBLKSIZ); in dbm_access()
748 if ((db->dbm_dirbuf[i] & (1<<n)) == 0) break; in dbm_access()
756 db->dbm_blkno = my_blkno; in dbm_access()
757 db->dbm_bitno = my_bitno; in dbm_access()
758 db->dbm_hmask = my_hmask; in dbm_access()
760 if (my_blkno != db->dbm_pagbno) { in dbm_access()
761 if (dbm_dirty(db)) { /* must page out the page */ in dbm_access()
762 where = (((off64_t)db->dbm_pagbno) * PBLKSIZ); in dbm_access()
763 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_access()
764 (write(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != in dbm_access()
766 db->dbm_flags |= _DBM_IOERR; in dbm_access()
768 dbm_clrdirty(db); in dbm_access()
771 db->dbm_pagbno = my_blkno; in dbm_access()
773 if ((lseek64(db->dbm_pagf, where, L_SET) != where) || in dbm_access()
774 (read(db->dbm_pagf, db->dbm_pagbuf, PBLKSIZ) != PBLKSIZ)) in dbm_access()
775 (void) memset(db->dbm_pagbuf, 0, PBLKSIZ); in dbm_access()
777 else if (chkblk(db->dbm_pagbuf) < 0) in dbm_access()
778 db->dbm_flags |= _DBM_IOERR; in dbm_access()
784 getbit(DBM *db) in getbit() argument
790 if (db->dbm_bitno > db->dbm_maxbno) in getbit()
792 n = db->dbm_bitno % BYTESIZ; in getbit()
793 bn = db->dbm_bitno / BYTESIZ; in getbit()
796 if (b != db->dbm_dirbno) { in getbit()
797 if (dbm_dirdirty(db)) in getbit()
798 (void) dbm_flushdir(db); /* must flush */ in getbit()
799 db->dbm_dirbno = b; in getbit()
801 if ((lseek64(db->dbm_dirf, where, L_SET) != where) || in getbit()
802 (read(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)) in getbit()
803 (void) memset(db->dbm_dirbuf, 0, DBLKSIZ); in getbit()
805 return (db->dbm_dirbuf[i] & (1<<n)); in getbit()
809 setbit(DBM *db) in setbit() argument
815 if (db->dbm_bitno > db->dbm_maxbno) in setbit()
816 db->dbm_maxbno = db->dbm_bitno; in setbit()
817 n = db->dbm_bitno % BYTESIZ; in setbit()
818 bn = db->dbm_bitno / BYTESIZ; in setbit()
821 if (b != db->dbm_dirbno) { in setbit()
822 if (dbm_dirdirty(db)) in setbit()
823 (void) dbm_flushdir(db); in setbit()
824 db->dbm_dirbno = b; in setbit()
826 if ((lseek64(db->dbm_dirf, where, L_SET) != where) || in setbit()
827 (read(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)) in setbit()
828 (void) memset(db->dbm_dirbuf, 0, DBLKSIZ); in setbit()
830 db->dbm_dirbuf[i] |= 1<<n; in setbit()
831 db->dbm_dirbno = b; in setbit()
832 if (dbm_defwrite(db)) { in setbit()
833 dbm_setdirdirty(db); in setbit()
836 if ((lseek64(db->dbm_dirf, where, L_SET) != where) || in setbit()
837 (write(db->dbm_dirf, db->dbm_dirbuf, DBLKSIZ) != DBLKSIZ)) { in setbit()