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)) {
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)
static VALUE fdbm_delete(VALUE obj, VALUE keystr)
static VALUE fdbm_length(VALUE obj)
static VALUE fdbm_s_open(int argc, VALUE *argv, VALUE klass)
static VALUE fdbm_store(VALUE, VALUE, VALUE)
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
static VALUE fdbm_index(VALUE hash, VALUE value)
void rb_error_frozen(const char *what)
static VALUE fdbm_values(VALUE obj)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE rb_ary_push(VALUE ary, VALUE item)
static VALUE fdbm_replace(VALUE obj, VALUE other)
VALUE rb_ary_tmp_new(long capa)
VALUE rb_protect(VALUE(*proc)(VALUE), VALUE data, int *state)
void rb_raise(VALUE exc, const char *fmt,...)
#define RETURN_ENUMERATOR(obj, argc, argv)
VALUE rb_ary_clear(VALUE ary)
#define GetDBM2(obj, data, dbm)
void rb_include_module(VALUE klass, VALUE module)
static VALUE fdbm_has_key(VALUE obj, VALUE keystr)
static void free_dbm(struct dbmdata *dbmp)
void rb_fd_fix_cloexec(int fd)
static VALUE fdbm_values_at(int argc, VALUE *argv, VALUE obj)
static VALUE fdbm_empty_p(VALUE obj)
static VALUE fdbm_reject(VALUE obj)
return Data_Wrap_Struct(CLASS_OF(interp), 0, ip_free, slave)
int rb_block_given_p(void)
static VALUE fdbm_aref(VALUE obj, VALUE keystr)
static VALUE fdbm_to_a(VALUE obj)
static VALUE fdbm_select(VALUE obj)
static VALUE fdbm_close(VALUE obj)
static void fdbm_modify(VALUE obj)
void rb_define_const(VALUE, const char *, VALUE)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
void rb_sys_fail_str(VALUE mesg)
static VALUE fdbm_shift(VALUE obj)
static VALUE fdbm_each_key(VALUE obj)
#define ExportStringValue(v)
VALUE rb_obj_as_string(VALUE)
VALUE rb_tainted_str_new(const char *, long)
static VALUE fdbm_clear(VALUE obj)
VALUE rb_sprintf(const char *format,...)
rb_block_call(enumerable, id_each, 0, 0, chunk_ii, arg)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
static VALUE fdbm_to_hash(VALUE obj)
rb_hash_aset(hash, RARRAY_AREF(key_value_pair, 0), RARRAY_AREF(key_value_pair, 1))
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
int memcmp(const void *s1, const void *s2, size_t len)
void rb_sys_fail(const char *mesg)
void rb_jump_tag(int tag)
static VALUE rb_eDBMError
static VALUE fdbm_alloc(VALUE klass)
static VALUE fdbm_fetch(VALUE obj, VALUE keystr, VALUE ifnone)
static VALUE fdbm_initialize(int argc, VALUE *argv, VALUE obj)
static VALUE fdbm_closed(VALUE obj)
RUBY_EXTERN VALUE rb_cObject
static VALUE fdbm_each_value(VALUE obj)
static VALUE fdbm_keys(VALUE obj)
#define Data_Get_Struct(obj, type, sval)
static VALUE fdbm_update(VALUE obj, VALUE other)
static VALUE fdbm_invert(VALUE obj)
static VALUE fdbm_has_value(VALUE obj, VALUE valstr)
VALUE rb_hash_delete_if(VALUE)
static void closed_dbm(void)
#define GetDBM(obj, dbmp)
static void version(void)
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
static VALUE fdbm_key(VALUE obj, VALUE valstr)
static VALUE fdbm_delete_if(VALUE obj)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
void rb_warn(const char *fmt,...)
static VALUE fdbm_each_pair(VALUE obj)
static VALUE fdbm_fetch_m(int argc, VALUE *argv, VALUE obj)