76 #if SIZEOF_LONG > SIZEOF_INT
77 #define TOO_LONG(n) ((long)(+(int)(n)) != (long)(n))
82 #define RUBY_GDBM_RW_BIT 0x20000000
84 #define MY_BLOCK_SIZE (2048)
85 #define MY_FATAL_FUNC rb_gdbm_fatal
103 #define GetDBM(obj, dbmp) do {\
104 Data_Get_Struct((obj), struct dbmdata, (dbmp));\
105 if ((dbmp) == 0) closed_dbm();\
106 if ((dbmp)->di_dbm == 0) closed_dbm();\
109 #define GetDBM2(obj, data, dbm) {\
110 GetDBM((obj), (data));\
111 (dbm) = dbmp->di_dbm;\
193 VALUE file, vmode, vflags;
198 if (
rb_scan_args(argc, argv,
"12", &file, &vmode, &vflags) == 1) {
201 else if (
NIL_P(vmode)) {
215 flags |= GDBM_CLOEXEC;
219 flags &= ~RUBY_GDBM_RW_BIT;
241 if (mode == -1)
return Qnil;
243 if (gdbm_errno == GDBM_FILE_OPEN_ERROR ||
244 gdbm_errno == GDBM_CANT_BE_READER ||
245 gdbm_errno == GDBM_CANT_BE_WRITER)
301 val = gdbm_fetch(dbm, key);
321 key.
dsize = (int)len;
342 key = gdbm_firstkey(dbm);
362 key.
dsize = (int)len;
363 key2 = gdbm_nextkey(dbm, key);
409 VALUE keystr, valstr, ifnone;
431 VALUE keystr, valstr2;
439 if (!
NIL_P(valstr2) &&
453 rb_warn(
"GDBM#index is deprecated; use GDBM#key");
499 for (i=0; i<
argc; i++) {
525 key.
dsize = (int)len;
528 if (!gdbm_exists(dbm, key)) {
532 if (gdbm_delete(dbm, key)) {
571 VALUE keystr, valstr;
595 VALUE keystr, valstr;
597 int i, status = 0, n;
610 if (status != 0)
break;
618 if (n > 0) dbmp->
di_size = n - (int)RARRAY_LEN(ary);
642 while (key = gdbm_firstkey(dbm), key.
dptr) {
643 if (gdbm_delete(dbm, key)) {
650 while (key = gdbm_firstkey(dbm), key.
dptr) {
651 for (; key.
dptr; key = nextkey) {
652 nextkey = gdbm_nextkey(dbm, key);
653 if (gdbm_delete(dbm, key)) {
679 VALUE keystr, valstr;
718 if (gdbm_store(dbm, key, val, GDBM_REPLACE)) {
785 for (key = gdbm_firstkey(dbm); key.
dptr; key = nextkey) {
786 nextkey = gdbm_nextkey(dbm, key);
812 key = gdbm_firstkey(dbm);
943 for (key = gdbm_firstkey(dbm); key.
dptr; key = nextkey) {
944 nextkey = gdbm_nextkey(dbm, key);
975 key.
dsize = (int)len;
978 if (gdbm_exists(dbm, key))
996 VALUE keystr, valstr2;
1005 if (!
NIL_P(valstr2) &&
1055 gdbm_reorganize(dbm);
1097 if (gdbm_setopt(dbm, GDBM_CACHESIZE, &optval,
sizeof(optval)) == -1) {
1125 if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval,
sizeof(optval)) == -1) {
1147 #if !defined(GDBM_SYNCMODE)
1160 if (gdbm_setopt(dbm, GDBM_FASTMODE, &optval,
sizeof(optval)) == -1) {
1276 #if defined(GDBM_SYNC)
1280 #if defined(GDBM_NOLOCK)