ext/dbm/dbm.c File Reference

#include "ruby.h"
#include <fcntl.h>
#include <errno.h>

Go to the source code of this file.

Data Structures

struct  dbmdata

Defines

#define DSIZE_TYPE   TYPEOF_DATUM_DSIZE
#define RSTRING_DSIZE(s)   RSTRING_LENINT(s)
#define TOO_LONG(n)   ((long)(+(DSIZE_TYPE)(n)) != (n))
#define RUBY_DBM_RW_BIT   0x20000000
#define GetDBM(obj, dbmp)
#define GetDBM2(obj, data, dbm)
#define O_CLOEXEC   0

Functions

static void closed_dbm (void)
static void free_dbm (struct dbmdata *dbmp)
static VALUE fdbm_close (VALUE obj)
static VALUE fdbm_closed (VALUE obj)
static VALUE fdbm_alloc (VALUE klass)
static VALUE fdbm_initialize (int argc, VALUE *argv, VALUE obj)
static VALUE fdbm_s_open (int argc, VALUE *argv, VALUE klass)
static VALUE fdbm_fetch (VALUE obj, VALUE keystr, VALUE ifnone)
static VALUE fdbm_aref (VALUE obj, VALUE keystr)
static VALUE fdbm_fetch_m (int argc, VALUE *argv, VALUE obj)
static VALUE fdbm_key (VALUE obj, VALUE valstr)
static VALUE fdbm_index (VALUE hash, VALUE value)
static VALUE fdbm_select (VALUE obj)
static VALUE fdbm_values_at (int argc, VALUE *argv, VALUE obj)
static void fdbm_modify (VALUE obj)
static VALUE fdbm_delete (VALUE obj, VALUE keystr)
static VALUE fdbm_shift (VALUE obj)
static VALUE fdbm_delete_if (VALUE obj)
static VALUE fdbm_clear (VALUE obj)
static VALUE fdbm_invert (VALUE obj)
static VALUE fdbm_store (VALUE, VALUE, VALUE)
static VALUE update_i (RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm))
static VALUE fdbm_update (VALUE obj, VALUE other)
static VALUE fdbm_replace (VALUE obj, VALUE other)
static VALUE fdbm_length (VALUE obj)
static VALUE fdbm_empty_p (VALUE obj)
static VALUE fdbm_each_value (VALUE obj)
static VALUE fdbm_each_key (VALUE obj)
static VALUE fdbm_each_pair (VALUE obj)
static VALUE fdbm_keys (VALUE obj)
static VALUE fdbm_values (VALUE obj)
static VALUE fdbm_has_key (VALUE obj, VALUE keystr)
static VALUE fdbm_has_value (VALUE obj, VALUE valstr)
static VALUE fdbm_to_a (VALUE obj)
static VALUE fdbm_to_hash (VALUE obj)
static VALUE fdbm_reject (VALUE obj)
void Init_dbm (void)

Variables

static VALUE rb_cDBM
static VALUE rb_eDBMError


Define Documentation

#define DSIZE_TYPE   TYPEOF_DATUM_DSIZE

Definition at line 24 of file dbm.c.

Referenced by fdbm_delete(), fdbm_delete_if(), fdbm_fetch(), fdbm_has_key(), fdbm_has_value(), and fdbm_key().

#define GetDBM ( obj,
dbmp   ) 

Value:

{\
    Data_Get_Struct((obj), struct dbmdata, (dbmp));\
    if ((dbmp) == 0) closed_dbm();\
    if ((dbmp)->di_dbm == 0) closed_dbm();\
}

Definition at line 48 of file dbm.c.

Referenced by fdbm_close(), fgdbm_close(), fgdbm_empty_p(), fsdbm_close(), and fsdbm_empty_p().

#define GetDBM2 ( obj,
data,
dbm   ) 

Value:

{\
    GetDBM((obj), (data));\
    (dbm) = dbmp->di_dbm;\
}

Definition at line 54 of file dbm.c.

Referenced by fdbm_clear(), fdbm_delete(), fdbm_delete_if(), fdbm_each_key(), fdbm_each_pair(), fdbm_each_value(), fdbm_empty_p(), fdbm_fetch(), fdbm_has_key(), fdbm_has_value(), fdbm_invert(), fdbm_key(), fdbm_keys(), fdbm_length(), fdbm_select(), fdbm_shift(), fdbm_store(), fdbm_to_a(), fdbm_to_hash(), fdbm_values(), fgdbm_clear(), fgdbm_delete_if(), fgdbm_each_key(), fgdbm_each_pair(), fgdbm_each_value(), fgdbm_has_key(), fgdbm_has_value(), fgdbm_invert(), fgdbm_key(), fgdbm_keys(), fgdbm_length(), fgdbm_reorganize(), fgdbm_select(), fgdbm_set_cachesize(), fgdbm_set_fastmode(), fgdbm_set_syncmode(), fgdbm_shift(), fgdbm_store(), fgdbm_sync(), fgdbm_to_a(), fgdbm_to_hash(), fgdbm_values(), fsdbm_clear(), fsdbm_delete(), fsdbm_delete_if(), fsdbm_each_key(), fsdbm_each_pair(), fsdbm_each_value(), fsdbm_fetch(), fsdbm_has_key(), fsdbm_has_value(), fsdbm_invert(), fsdbm_key(), fsdbm_keys(), fsdbm_length(), fsdbm_select(), fsdbm_shift(), fsdbm_store(), fsdbm_to_a(), fsdbm_to_hash(), fsdbm_values(), rb_gdbm_delete(), and rb_gdbm_fetch3().

#define O_CLOEXEC   0

Referenced by fdbm_initialize(), get_device_once(), rb_cloexec_dup2(), rb_cloexec_open(), rb_cloexec_pipe(), and sdbm_prep().

#define RSTRING_DSIZE (  )     RSTRING_LENINT(s)

Definition at line 29 of file dbm.c.

Referenced by fdbm_store().

#define RUBY_DBM_RW_BIT   0x20000000

Definition at line 35 of file dbm.c.

Referenced by fdbm_initialize(), and Init_dbm().

#define TOO_LONG (  )     ((long)(+(DSIZE_TYPE)(n)) != (n))

Definition at line 30 of file dbm.c.

Referenced by fdbm_delete(), fdbm_fetch(), fdbm_has_key(), fdbm_has_value(), fdbm_key(), fgdbm_has_key(), rb_gdbm_delete(), rb_gdbm_fetch2(), and rb_gdbm_nextkey().


Function Documentation

static void closed_dbm ( void   )  [static]

Definition at line 43 of file dbm.c.

References rb_eDBMError, and rb_raise().

static VALUE fdbm_alloc ( VALUE  klass  )  [static]

Definition at line 107 of file dbm.c.

References Data_Wrap_Struct, and free_dbm().

Referenced by Init_dbm().

static VALUE fdbm_aref ( VALUE  obj,
VALUE  keystr 
) [static]

Definition at line 277 of file dbm.c.

References fdbm_fetch(), and Qnil.

Referenced by Init_dbm().

static VALUE fdbm_clear ( VALUE  obj  )  [static]

Definition at line 529 of file dbm.c.

References dbmdata::di_size, fdbm_modify(), GetDBM2, key, rb_eDBMError, and rb_raise().

Referenced by fdbm_replace(), and Init_dbm().

static VALUE fdbm_close ( VALUE  obj  )  [static]

Definition at line 75 of file dbm.c.

References dbmdata::di_dbm, GetDBM, and Qnil.

Referenced by fdbm_s_open(), and Init_dbm().

static VALUE fdbm_closed ( VALUE  obj  )  [static]

Definition at line 93 of file dbm.c.

References Data_Get_Struct, dbmdata::di_dbm, Qfalse, and Qtrue.

Referenced by Init_dbm().

static VALUE fdbm_delete ( VALUE  obj,
VALUE  keystr 
) [static]

Definition at line 405 of file dbm.c.

References dbmdata::di_size, datum::dptr, datum::dsize, DSIZE_TYPE, ExportStringValue, fdbm_modify(), GetDBM2, key, len, Qnil, rb_block_given_p(), rb_eDBMError, rb_raise(), rb_tainted_str_new(), rb_yield(), RSTRING_LEN, RSTRING_PTR, TOO_LONG, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_delete_if ( VALUE  obj  )  [static]

Definition at line 481 of file dbm.c.

References dbmdata::di_size, datum::dptr, datum::dsize, DSIZE_TYPE, fdbm_modify(), GetDBM2, key, OBJ_FREEZE, RARRAY_LEN, RARRAY_PTR, rb_ary_clear(), rb_ary_push(), rb_ary_tmp_new(), rb_assoc_new(), rb_eDBMError, rb_jump_tag(), rb_protect(), rb_raise(), rb_str_dup(), rb_tainted_str_new(), rb_yield(), RSTRING_LEN, RSTRING_PTR, RTEST, val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_each_key ( VALUE  obj  )  [static]

Definition at line 739 of file dbm.c.

References GetDBM2, key, rb_tainted_str_new(), rb_yield(), and RETURN_ENUMERATOR.

Referenced by Init_dbm().

static VALUE fdbm_each_pair ( VALUE  obj  )  [static]

Definition at line 763 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, key, rb_assoc_new(), rb_tainted_str_new(), rb_yield(), RETURN_ENUMERATOR, val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_each_value ( VALUE  obj  )  [static]

Definition at line 715 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, key, rb_tainted_str_new(), rb_yield(), RETURN_ENUMERATOR, and val.

Referenced by Init_dbm().

static VALUE fdbm_empty_p ( VALUE  obj  )  [static]

Definition at line 687 of file dbm.c.

References dbmdata::di_dbm, dbmdata::di_size, GetDBM2, key, Qfalse, and Qtrue.

Referenced by Init_dbm().

static VALUE fdbm_fetch ( VALUE  obj,
VALUE  keystr,
VALUE  ifnone 
) [static]

Definition at line 245 of file dbm.c.

References datum::dptr, datum::dsize, DSIZE_TYPE, ExportStringValue, GetDBM2, key, len, Qnil, rb_block_given_p(), rb_tainted_str_new(), rb_yield(), RSTRING_LEN, RSTRING_PTR, and TOO_LONG.

Referenced by fdbm_aref(), fdbm_fetch_m(), and fdbm_values_at().

static VALUE fdbm_fetch_m ( int  argc,
VALUE *  argv,
VALUE  obj 
) [static]

Definition at line 291 of file dbm.c.

References fdbm_fetch(), NIL_P, rb_block_given_p(), rb_eIndexError, rb_raise(), rb_scan_args(), and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_has_key ( VALUE  obj,
VALUE  keystr 
) [static]

Definition at line 843 of file dbm.c.

References datum::dptr, DSIZE_TYPE, ExportStringValue, GetDBM2, key, len, Qfalse, Qtrue, RSTRING_LEN, RSTRING_PTR, TOO_LONG, and val.

Referenced by Init_dbm().

static VALUE fdbm_has_value ( VALUE  obj,
VALUE  valstr 
) [static]

Definition at line 871 of file dbm.c.

References datum::dptr, datum::dsize, DSIZE_TYPE, ExportStringValue, GetDBM2, key, len, memcmp(), Qfalse, Qtrue, RSTRING_LEN, RSTRING_PTR, TOO_LONG, and val.

Referenced by Init_dbm().

static VALUE fdbm_index ( VALUE  hash,
VALUE  value 
) [static]

Definition at line 336 of file dbm.c.

References fdbm_key(), and rb_warn().

Referenced by Init_dbm().

static VALUE fdbm_initialize ( int  argc,
VALUE *  argv,
VALUE  obj 
) [static]

Definition at line 126 of file dbm.c.

References ALLOC, DATA_PTR, dbmdata::di_dbm, dbmdata::di_size, FilePathValue, NIL_P, NULL, NUM2INT, O_CLOEXEC, Qnil, rb_fd_fix_cloexec(), rb_scan_args(), rb_sys_fail_str(), RSTRING_PTR, RUBY_DBM_RW_BIT, and VALUE.

Referenced by fdbm_s_open(), and Init_dbm().

static VALUE fdbm_invert ( VALUE  obj  )  [static]

Definition at line 556 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, hash(), key, rb_hash_aset(), rb_hash_new(), rb_tainted_str_new(), val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_key ( VALUE  obj,
VALUE  valstr 
) [static]

Definition at line 310 of file dbm.c.

References datum::dptr, datum::dsize, DSIZE_TYPE, ExportStringValue, GetDBM2, key, len, memcmp(), Qnil, rb_tainted_str_new(), RSTRING_LEN, RSTRING_PTR, TOO_LONG, and val.

Referenced by fdbm_index(), and Init_dbm().

static VALUE fdbm_keys ( VALUE  obj  )  [static]

Definition at line 792 of file dbm.c.

References GetDBM2, key, rb_ary_new(), rb_ary_push(), rb_tainted_str_new(), and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_length ( VALUE  obj  )  [static]

Definition at line 662 of file dbm.c.

References dbmdata::di_size, GetDBM2, INT2FIX, and key.

Referenced by Init_dbm().

static void fdbm_modify ( VALUE  obj  )  [static]

Definition at line 393 of file dbm.c.

References OBJ_FROZEN, and rb_error_frozen().

Referenced by fdbm_clear(), fdbm_delete(), fdbm_delete_if(), fdbm_shift(), fdbm_store(), fsdbm_clear(), fsdbm_delete(), fsdbm_delete_if(), fsdbm_shift(), and fsdbm_store().

static VALUE fdbm_reject ( VALUE  obj  )  [static]

Definition at line 954 of file dbm.c.

References fdbm_to_hash(), and rb_hash_delete_if().

Referenced by Init_dbm().

static VALUE fdbm_replace ( VALUE  obj,
VALUE  other 
) [static]

Definition at line 611 of file dbm.c.

References fdbm_clear(), rb_block_call(), rb_intern, and update_i().

Referenced by Init_dbm().

static VALUE fdbm_s_open ( int  argc,
VALUE *  argv,
VALUE  klass 
) [static]

Definition at line 229 of file dbm.c.

References Data_Wrap_Struct, fdbm_close(), fdbm_initialize(), free_dbm(), NIL_P, Qnil, rb_block_given_p(), rb_ensure(), rb_yield(), and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_select ( VALUE  obj  )  [static]

Definition at line 350 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, key, rb_ary_new(), rb_ary_push(), rb_assoc_new(), rb_tainted_str_new(), rb_yield(), RTEST, val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_shift ( VALUE  obj  )  [static]

Definition at line 451 of file dbm.c.

References dbmdata::di_size, datum::dptr, datum::dsize, fdbm_modify(), GetDBM2, key, Qnil, rb_assoc_new(), rb_tainted_str_new(), val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_store ( VALUE  ,
VALUE  ,
VALUE   
) [static]

Definition at line 627 of file dbm.c.

References DBM_REPLACE, dbmdata::di_size, datum::dptr, datum::dsize, EPERM, errno, fdbm_modify(), GetDBM2, key, rb_eDBMError, rb_obj_as_string(), rb_raise(), rb_sys_fail(), RSTRING_DSIZE, RSTRING_PTR, and val.

Referenced by Init_dbm(), and update_i().

static VALUE fdbm_to_a ( VALUE  obj  )  [static]

Definition at line 902 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, key, rb_ary_new(), rb_ary_push(), rb_assoc_new(), rb_tainted_str_new(), val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_to_hash ( VALUE  obj  )  [static]

Definition at line 928 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, hash(), key, rb_hash_aset(), rb_hash_new(), rb_tainted_str_new(), val, and VALUE.

Referenced by fdbm_reject(), and Init_dbm().

static VALUE fdbm_update ( VALUE  obj,
VALUE  other 
) [static]

Definition at line 596 of file dbm.c.

References rb_block_call(), rb_intern, and update_i().

Referenced by Init_dbm().

static VALUE fdbm_values ( VALUE  obj  )  [static]

Definition at line 816 of file dbm.c.

References datum::dptr, datum::dsize, GetDBM2, key, rb_ary_new(), rb_ary_push(), rb_tainted_str_new(), val, and VALUE.

Referenced by Init_dbm().

static VALUE fdbm_values_at ( int  argc,
VALUE *  argv,
VALUE  obj 
) [static]

Definition at line 380 of file dbm.c.

References fdbm_fetch(), Qnil, rb_ary_new2, rb_ary_push(), and VALUE.

Referenced by Init_dbm().

static void free_dbm ( struct dbmdata dbmp  )  [static]

Definition at line 60 of file dbm.c.

References dbmdata::di_dbm, and xfree.

Referenced by fdbm_alloc(), fdbm_s_open(), fgdbm_initialize(), fgdbm_s_alloc(), and fgdbm_s_open().

void Init_dbm ( void   ) 

Definition at line 1021 of file dbm.c.

References fdbm_alloc(), fdbm_aref(), fdbm_clear(), fdbm_close(), fdbm_closed(), fdbm_delete(), fdbm_delete_if(), fdbm_each_key(), fdbm_each_pair(), fdbm_each_value(), fdbm_empty_p(), fdbm_fetch_m(), fdbm_has_key(), fdbm_has_value(), fdbm_index(), fdbm_initialize(), fdbm_invert(), fdbm_key(), fdbm_keys(), fdbm_length(), fdbm_reject(), fdbm_replace(), fdbm_s_open(), fdbm_select(), fdbm_shift(), fdbm_store(), fdbm_to_a(), fdbm_to_hash(), fdbm_update(), fdbm_values(), fdbm_values_at(), INT2FIX, NULL, rb_cDBM, rb_cObject, rb_define_alloc_func(), rb_define_class(), rb_define_const(), rb_define_method(), rb_define_singleton_method(), rb_eDBMError, rb_eStandardError, rb_include_module(), rb_mEnumerable, rb_sprintf(), rb_str_new2, RUBY_DBM_RW_BIT, RUBY_EXTERN, VALUE, and version().

static VALUE update_i ( RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)   )  [static]

Definition at line 577 of file dbm.c.

References Check_Type, fdbm_store(), Qnil, RARRAY_LEN, RARRAY_PTR, rb_eArgError, rb_raise(), and T_ARRAY.

Referenced by fdbm_replace(), fdbm_update(), fgdbm_replace(), fgdbm_update(), fsdbm_replace(), and fsdbm_update().


Variable Documentation

VALUE rb_cDBM [static]

Definition at line 33 of file dbm.c.

Referenced by Init_dbm(), and Init_sdbm().

VALUE rb_eDBMError [static]

Definition at line 33 of file dbm.c.

Referenced by closed_dbm(), closed_sdbm(), fdbm_clear(), fdbm_delete(), fdbm_delete_if(), fdbm_store(), fsdbm_clear(), fsdbm_delete(), fsdbm_delete_if(), fsdbm_store(), Init_dbm(), and Init_sdbm().


Generated on 19 Jul 2016 for Ruby by  doxygen 1.4.7