17 #ifdef HAVE_SYS_CDEFS_H
18 # include <sys/cdefs.h>
24 #define DSIZE_TYPE TYPEOF_DATUM_DSIZE
25 #if SIZEOF_DATUM_DSIZE > SIZEOF_INT
26 # define RSTRING_DSIZE(s) RSTRING_LEN(s)
27 # define TOO_LONG(n) 0
29 # define RSTRING_DSIZE(s) RSTRING_LENINT(s)
30 # define TOO_LONG(n) ((long)(+(DSIZE_TYPE)(n)) != (n))
35 #define RUBY_DBM_RW_BIT 0x20000000
48 #define GetDBM(obj, dbmp) {\
49 Data_Get_Struct((obj), struct dbmdata, (dbmp));\
50 if ((dbmp) == 0) closed_dbm();\
51 if ((dbmp)->di_dbm == 0) closed_dbm();\
54 #define GetDBM2(obj, data, dbm) {\
55 GetDBM((obj), (data));\
56 (dbm) = dbmp->di_dbm;\
134 if (
rb_scan_args(argc, argv,
"12", &file, &vmode, &vflags) == 1) {
137 else if (
NIL_P(vmode)) {
158 flags &= ~RUBY_DBM_RW_BIT;
193 #if defined(HAVE_DBM_PAGFNO)
196 #if defined(HAVE_DBM_DIRFNO)
200 #if defined(RUBYDBM_DB_HEADER) && defined(HAVE_TYPE_DBC)
203 ((DBC*)dbm)->dbp->set_errfile(((DBC*)dbm)->dbp,
NULL);
208 if (mode == -1)
return Qnil;
259 value = dbm_fetch(dbm, key);
260 if (value.
dptr == 0) {
293 VALUE keystr, valstr, ifnone;
324 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
325 val = dbm_fetch(dbm, key);
338 rb_warn(
"DBM#index is deprecated; use DBM#key");
358 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
360 val = dbm_fetch(dbm, key);
385 for (i=0; i<
argc; i++) {
422 value = dbm_fetch(dbm, key);
423 if (value.
dptr == 0) {
432 if (dbm_delete(dbm, key)) {
456 VALUE keystr, valstr;
462 key = dbm_firstkey(dbm);
464 val = dbm_fetch(dbm, key);
467 dbm_delete(dbm, key);
486 VALUE keystr, valstr;
496 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
497 val = dbm_fetch(dbm, key);
502 if (status != 0)
break;
511 if (dbm_delete(dbm, key)) {
516 if (n > 0) dbmp->
di_size = n - RARRAY_LEN(ary);
538 while (key = dbm_firstkey(dbm), key.
dptr) {
539 if (dbm_delete(dbm, key)) {
561 VALUE keystr, valstr;
565 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
566 val = dbm_fetch(dbm, key);
672 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
697 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
724 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
725 val = dbm_fetch(dbm, key);
748 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
768 VALUE keystr, valstr;
774 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
775 val = dbm_fetch(dbm, key);
802 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
825 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
826 val = dbm_fetch(dbm, key);
857 val = dbm_fetch(dbm, key);
885 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
886 val = dbm_fetch(dbm, key);
911 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
912 val = dbm_fetch(dbm, key);
937 for (key = dbm_firstkey(dbm); key.
dptr; key = dbm_nextkey(dbm)) {
938 val = dbm_fetch(dbm, key);
1092 #if defined(_DBM_IOERR)
1094 #elif defined(RUBYDBM_GDBM_HEADER)
1095 # if defined(HAVE_DECLARED_LIBVAR_GDBM_VERSION)
1098 # elif defined(HAVE_UNDECLARED_LIBVAR_GDBM_VERSION)
1106 #elif defined(RUBYDBM_DB_HEADER)
1107 # if defined(HAVE_DB_VERSION)
1113 #elif defined(_RELIC_H)
1114 # if defined(HAVE_DPVERSION)