76 #define RUBY_GDBM_RW_BIT 0x20000000
78 #define MY_BLOCK_SIZE (2048)
79 #define MY_FATAL_FUNC rb_gdbm_fatal
97 #define GetDBM(obj, dbmp) do {\
98 Data_Get_Struct((obj), struct dbmdata, (dbmp));\
99 if ((dbmp) == 0) closed_dbm();\
100 if ((dbmp)->di_dbm == 0) closed_dbm();\
103 #define GetDBM2(obj, data, dbm) {\
104 GetDBM((obj), (data));\
105 (dbm) = dbmp->di_dbm;\
187 VALUE file, vmode, vflags;
192 if (
rb_scan_args(argc, argv,
"12", &file, &vmode, &vflags) == 1) {
195 else if (
NIL_P(vmode)) {
208 flags &= ~RUBY_GDBM_RW_BIT;
226 if (mode == -1)
return Qnil;
228 if (gdbm_errno == GDBM_FILE_OPEN_ERROR ||
229 gdbm_errno == GDBM_CANT_BE_READER ||
230 gdbm_errno == GDBM_CANT_BE_WRITER)
286 val = gdbm_fetch(dbm, key);
324 key = gdbm_firstkey(dbm);
342 key2 = gdbm_nextkey(dbm, key);
388 VALUE keystr, valstr, ifnone;
410 VALUE keystr, valstr2;
418 if (!
NIL_P(valstr2) &&
432 rb_warn(
"GDBM#index is deprecated; use GDBM#key");
478 for (i=0; i<
argc; i++) {
505 if (!gdbm_exists(dbm, key)) {
509 if (gdbm_delete(dbm, key)) {
548 VALUE keystr, valstr;
572 VALUE keystr, valstr;
574 int i, status = 0, n;
586 if (status != 0)
break;
617 while (key = gdbm_firstkey(dbm), key.
dptr) {
618 if (gdbm_delete(dbm, key)) {
625 while (key = gdbm_firstkey(dbm), key.
dptr) {
626 for (; key.
dptr; key = nextkey) {
627 nextkey = gdbm_nextkey(dbm, key);
628 if (gdbm_delete(dbm, key)) {
654 VALUE keystr, valstr;
693 if (gdbm_store(dbm, key, val, GDBM_REPLACE)) {
760 for (key = gdbm_firstkey(dbm); key.
dptr; key = nextkey) {
761 nextkey = gdbm_nextkey(dbm, key);
787 key = gdbm_firstkey(dbm);
918 for (key = gdbm_firstkey(dbm); key.
dptr; key = nextkey) {
919 nextkey = gdbm_nextkey(dbm, key);
948 if (gdbm_exists(dbm, key))
966 VALUE keystr, valstr2;
975 if (!
NIL_P(valstr2) &&
1025 gdbm_reorganize(dbm);
1066 if (gdbm_setopt(dbm, GDBM_CACHESIZE, &optval,
sizeof(optval)) == -1) {
1094 if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval,
sizeof(optval)) == -1) {
1116 #if !defined(GDBM_SYNCMODE)
1129 if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval,
sizeof(optval)) == -1) {
1245 #if defined(GDBM_SYNC)
1249 #if defined(GDBM_NOLOCK)