root/ext/dbm/odbm.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. Scm_Init_odbm
  2. odbm_odbm_init
  3. odbm_odbm_close
  4. odbm_odbm_closedP
  5. odbm_odbm_store
  6. odbm_odbm_fetch
  7. odbm_odbm_delete
  8. odbm_odbm_firstkey
  9. odbm_odbm_nextkey
  10. Scm_Init_odbm

   1 /* Generated by genstub.  Do not edit. */
   2 #include <gauche.h>
   3 #if defined(__CYGWIN__) || defined(__MINGW32__)
   4 #define SCM_CGEN_CONST /*empty*/
   5 #else
   6 #define SCM_CGEN_CONST const
   7 #endif
   8 
   9  #include <gauche/extend.h>
  10  #include "dbmconf.h"
  11 
  12  #if HAVE_DBM_H
  13  #include <dbm.h>
  14  #elif HAVE_GDBM_DBM_H
  15  #include <gdbm/dbm.h>
  16  #endif
  17 
  18  #define CHECK_ODBM() if (!odbm_opened) Scm_Error("odbm file already closed")
  19 
  20  /* Hack for initialization stub */
  21  static void Scm_odbm_internal_init(ScmModule*);
  22  void Scm_Init_odbm(void)
  23  {
  24     SCM_INIT_EXTENSION(odbm);
  25     Scm_odbm_internal_init(SCM_FIND_MODULE("dbm.odbm", SCM_FIND_MODULE_CREATE));
  26  }
  27  #define Scm_Init_odbm  Scm_odbm_internal_init
  28 
  29  #define TO_DATUM(datum_, scm_)                    \
  30    do {                                            \
  31      const ScmStringBody *b = SCM_STRING_BODY(scm_);\
  32      datum_.dptr = (char*)SCM_STRING_BODY_START(b);\
  33      datum_.dsize = SCM_STRING_BODY_SIZE(b);       \
  34    } while (0)
  35  #define FROM_DATUM(scm_, datum_)           \
  36    do {                                     \
  37      if (datum_.dptr) {                     \
  38        scm_ = Scm_MakeString(datum_.dptr, datum_.dsize, -1, SCM_MAKSTR_COPYING); \
  39      } else {                               \
  40        scm_ = SCM_FALSE;                    \
  41      }                                      \
  42    } while (0)
  43 
  44 static int odbm_opened = FALSE;
  45 static ScmObj odbm_odbm_init(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
  46 {
  47   ScmObj name_scm;
  48   ScmString* name;
  49   SCM_ENTER_SUBR("odbm-init");
  50   name_scm = SCM_ARGREF(0);
  51   if (!SCM_STRINGP(name_scm)) Scm_Error("string required, but got %S", name_scm);
  52   name = SCM_STRING(name_scm);
  53   {
  54 {
  55 int SCM_RESULT;
  56 if (odbm_opened) Scm_Error("dbm file is already opened.");
  57 SCM_RESULT = dbminit(Scm_GetString(name));
  58 if (SCM_RESULT < 0) {
  59   Scm_SysError("couldn't open dbm database %S", name);
  60 }
  61 odbm_opened = TRUE;
  62 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
  63 }
  64   }
  65 }
  66 
  67 static SCM_DEFINE_STRING_CONST(odbm_odbm_init__NAME, "odbm-init", 9, 9);
  68 static SCM_DEFINE_SUBR(odbm_odbm_init__STUB, 1, 0, SCM_OBJ(&odbm_odbm_init__NAME), odbm_odbm_init, NULL, NULL);
  69 
  70 static ScmObj odbm_odbm_close(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
  71 {
  72   SCM_ENTER_SUBR("odbm-close");
  73   {
  74 if (odbm_opened) {
  75   dbmclose();
  76   odbm_opened = FALSE;
  77 }
  78 SCM_RETURN(SCM_UNDEFINED);
  79   }
  80 }
  81 
  82 static SCM_DEFINE_STRING_CONST(odbm_odbm_close__NAME, "odbm-close", 10, 10);
  83 static SCM_DEFINE_SUBR(odbm_odbm_close__STUB, 0, 0, SCM_OBJ(&odbm_odbm_close__NAME), odbm_odbm_close, NULL, NULL);
  84 
  85 static ScmObj odbm_odbm_closedP(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
  86 {
  87   SCM_ENTER_SUBR("odbm-closed?");
  88   {
  89 {
  90 int SCM_RESULT;
  91  SCM_RESULT = (!odbm_opened);
  92 SCM_RETURN(SCM_MAKE_BOOL(SCM_RESULT));
  93 }
  94   }
  95 }
  96 
  97 static SCM_DEFINE_STRING_CONST(odbm_odbm_closedP__NAME, "odbm-closed?", 12, 12);
  98 static SCM_DEFINE_SUBR(odbm_odbm_closedP__STUB, 0, 0, SCM_OBJ(&odbm_odbm_closedP__NAME), odbm_odbm_closedP, NULL, NULL);
  99 
 100 static ScmObj odbm_odbm_store(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
 101 {
 102   ScmObj key_scm;
 103   ScmString* key;
 104   ScmObj val_scm;
 105   ScmString* val;
 106   SCM_ENTER_SUBR("odbm-store");
 107   key_scm = SCM_ARGREF(0);
 108   if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
 109   key = SCM_STRING(key_scm);
 110   val_scm = SCM_ARGREF(1);
 111   if (!SCM_STRINGP(val_scm)) Scm_Error("string required, but got %S", val_scm);
 112   val = SCM_STRING(val_scm);
 113   {
 114 {
 115 int SCM_RESULT;
 116 datum dkey, dval;
 117 CHECK_ODBM();
 118 TO_DATUM(dkey, key);
 119 TO_DATUM(dval, val);
 120 SCM_RESULT = store(dkey, dval);
 121 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
 122 }
 123   }
 124 }
 125 
 126 static SCM_DEFINE_STRING_CONST(odbm_odbm_store__NAME, "odbm-store", 10, 10);
 127 static SCM_DEFINE_SUBR(odbm_odbm_store__STUB, 2, 0, SCM_OBJ(&odbm_odbm_store__NAME), odbm_odbm_store, NULL, NULL);
 128 
 129 static ScmObj odbm_odbm_fetch(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
 130 {
 131   ScmObj key_scm;
 132   ScmString* key;
 133   SCM_ENTER_SUBR("odbm-fetch");
 134   key_scm = SCM_ARGREF(0);
 135   if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
 136   key = SCM_STRING(key_scm);
 137   {
 138 {
 139 ScmObj SCM_RESULT;
 140 datum dkey, dval;
 141 CHECK_ODBM();
 142 TO_DATUM(dkey, key);
 143 dval = fetch(dkey);
 144 FROM_DATUM(SCM_RESULT, dval);
 145 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
 146 }
 147   }
 148 }
 149 
 150 static SCM_DEFINE_STRING_CONST(odbm_odbm_fetch__NAME, "odbm-fetch", 10, 10);
 151 static SCM_DEFINE_SUBR(odbm_odbm_fetch__STUB, 1, 0, SCM_OBJ(&odbm_odbm_fetch__NAME), odbm_odbm_fetch, NULL, NULL);
 152 
 153 static ScmObj odbm_odbm_delete(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
 154 {
 155   ScmObj key_scm;
 156   ScmString* key;
 157   SCM_ENTER_SUBR("odbm-delete");
 158   key_scm = SCM_ARGREF(0);
 159   if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
 160   key = SCM_STRING(key_scm);
 161   {
 162 {
 163 int SCM_RESULT;
 164 datum dkey;
 165 CHECK_ODBM();
 166 TO_DATUM(dkey, key);
 167 SCM_RESULT = delete(dkey);
 168 SCM_RETURN(Scm_MakeInteger(SCM_RESULT));
 169 }
 170   }
 171 }
 172 
 173 static SCM_DEFINE_STRING_CONST(odbm_odbm_delete__NAME, "odbm-delete", 11, 11);
 174 static SCM_DEFINE_SUBR(odbm_odbm_delete__STUB, 1, 0, SCM_OBJ(&odbm_odbm_delete__NAME), odbm_odbm_delete, NULL, NULL);
 175 
 176 static ScmObj odbm_odbm_firstkey(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
 177 {
 178   SCM_ENTER_SUBR("odbm-firstkey");
 179   {
 180 {
 181 ScmObj SCM_RESULT;
 182 datum dkey;
 183 CHECK_ODBM();
 184 dkey = firstkey();
 185 FROM_DATUM(SCM_RESULT, dkey);
 186 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
 187 }
 188   }
 189 }
 190 
 191 static SCM_DEFINE_STRING_CONST(odbm_odbm_firstkey__NAME, "odbm-firstkey", 13, 13);
 192 static SCM_DEFINE_SUBR(odbm_odbm_firstkey__STUB, 0, 0, SCM_OBJ(&odbm_odbm_firstkey__NAME), odbm_odbm_firstkey, NULL, NULL);
 193 
 194 static ScmObj odbm_odbm_nextkey(ScmObj *SCM_FP, int SCM_ARGCNT, void *data_)
 195 {
 196   ScmObj key_scm;
 197   ScmString* key;
 198   SCM_ENTER_SUBR("odbm-nextkey");
 199   key_scm = SCM_ARGREF(0);
 200   if (!SCM_STRINGP(key_scm)) Scm_Error("string required, but got %S", key_scm);
 201   key = SCM_STRING(key_scm);
 202   {
 203 {
 204 ScmObj SCM_RESULT;
 205 datum dkey, dnkey;
 206 CHECK_ODBM();
 207 TO_DATUM(dkey, key);
 208 dnkey = nextkey(dkey);
 209 FROM_DATUM(SCM_RESULT, dnkey);
 210 SCM_RETURN(SCM_OBJ_SAFE(SCM_RESULT));
 211 }
 212   }
 213 }
 214 
 215 static SCM_DEFINE_STRING_CONST(odbm_odbm_nextkey__NAME, "odbm-nextkey", 12, 12);
 216 static SCM_DEFINE_SUBR(odbm_odbm_nextkey__STUB, 1, 0, SCM_OBJ(&odbm_odbm_nextkey__NAME), odbm_odbm_nextkey, NULL, NULL);
 217 
 218 void Scm_Init_odbm(ScmModule *module)
 219 {
 220 
 221   SCM_DEFINE(module, "odbm-nextkey", SCM_OBJ(&odbm_odbm_nextkey__STUB));
 222   SCM_DEFINE(module, "odbm-firstkey", SCM_OBJ(&odbm_odbm_firstkey__STUB));
 223   SCM_DEFINE(module, "odbm-delete", SCM_OBJ(&odbm_odbm_delete__STUB));
 224   SCM_DEFINE(module, "odbm-fetch", SCM_OBJ(&odbm_odbm_fetch__STUB));
 225   SCM_DEFINE(module, "odbm-store", SCM_OBJ(&odbm_odbm_store__STUB));
 226   SCM_DEFINE(module, "odbm-closed?", SCM_OBJ(&odbm_odbm_closedP__STUB));
 227   SCM_DEFINE(module, "odbm-close", SCM_OBJ(&odbm_odbm_close__STUB));
 228   SCM_DEFINE(module, "odbm-init", SCM_OBJ(&odbm_odbm_init__STUB));
 229 }

/* [<][>][^][v][top][bottom][index][help] */