123772Sbloom /* 223772Sbloom * Copyright (c) 1980 Regents of the University of California. 323772Sbloom * All rights reserved. The Berkeley software License Agreement 423772Sbloom * specifies the terms and conditions for redistribution. 523772Sbloom */ 623772Sbloom 723760Skre #ifndef lint 8*24292Skre static char sccsid[] = "@(#)dbm.c 5.3 (Berkeley) 85/08/15"; 923772Sbloom #endif not lint 1023760Skre 1123760Skre #include "dbm.h" 1223760Skre 1323760Skre #define NODB ((DBM *)0) 1423760Skre 1523760Skre static DBM *cur_db = NODB; 1623760Skre 1723760Skre static char no_db[] = "dbm: no open database\n"; 1823760Skre 1923760Skre dbminit(file) 2023760Skre char *file; 2123760Skre { 2223760Skre if (cur_db != NODB) 2323760Skre dbm_close(cur_db); 2423760Skre 2523760Skre cur_db = dbm_open(file, 2, 0); 2623760Skre if (cur_db == NODB) { 2723760Skre cur_db = dbm_open(file, 0, 0); 28*24292Skre if (cur_db == NODB) 29*24292Skre return (-1); 3023760Skre } 3123760Skre return (0); 3223760Skre } 3323760Skre 3423760Skre long 3523760Skre forder(key) 3623760Skre datum key; 3723760Skre { 3823760Skre if (cur_db == NODB) { 3923760Skre printf(no_db); 4023760Skre return (0L); 4123760Skre } 4223760Skre return (dbm_forder(cur_db, key)); 4323760Skre } 4423760Skre 4523760Skre datum 4623760Skre fetch(key) 4723760Skre datum key; 4823760Skre { 4923760Skre datum item; 5023760Skre 5123760Skre if (cur_db == NODB) { 5223760Skre printf(no_db); 5323760Skre item.dptr = 0; 5423760Skre return (item); 5523760Skre } 5623760Skre return (dbm_fetch(cur_db, key)); 5723760Skre } 5823760Skre 5923760Skre delete(key) 6023760Skre datum key; 6123760Skre { 6223760Skre if (cur_db == NODB) { 6323760Skre printf(no_db); 6423760Skre return (-1); 6523760Skre } 6623760Skre if (dbm_rdonly(cur_db)) 6723760Skre return (-1); 6823760Skre return (dbm_delete(cur_db, key)); 6923760Skre } 7023760Skre 7123760Skre store(key, dat) 7223760Skre datum key, dat; 7323760Skre { 7423760Skre if (cur_db == NODB) { 7523760Skre printf(no_db); 7623760Skre return (-1); 7723760Skre } 7823760Skre if (dbm_rdonly(cur_db)) 7923760Skre return (-1); 8023760Skre 8123760Skre return (dbm_store(cur_db, key, dat, DBM_REPLACE)); 8223760Skre } 8323760Skre 8423760Skre datum 8523760Skre firstkey() 8623760Skre { 8723760Skre datum item; 8823760Skre 8923760Skre if (cur_db == NODB) { 9023760Skre printf(no_db); 9123760Skre item.dptr = 0; 9223760Skre return (item); 9323760Skre } 9423760Skre return (dbm_firstkey(cur_db)); 9523760Skre } 9623760Skre 9723760Skre datum 9823760Skre nextkey(key) 9923760Skre datum key; 10023760Skre { 10123760Skre datum item; 10223760Skre 10323760Skre if (cur_db == NODB) { 10423760Skre printf(no_db); 10523760Skre item.dptr = 0; 10623760Skre return (item); 10723760Skre } 10823760Skre return (dbm_nextkey(cur_db, key)); 10923760Skre } 110