rev 380 - in trunk: modules/dbm src
SVN User <[email protected]> Sat, 17 Apr 2004 22:01:55 -0400
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-04-17 22:01:52 -0400 (Sat, 17 Apr 2004)
New Revision: 380
Modified:
trunk/modules/dbm/DBM.c
trunk/src/src.vcproj
Log:
Modified: trunk/modules/dbm/DBM.c
===================================================================
--- trunk/modules/dbm/DBM.c 2004-04-18 01:03:46 UTC (rev 379)
+++ trunk/modules/dbm/DBM.c 2004-04-18 02:01:52 UTC (rev 380)
@@ -110,6 +110,35 @@
MODULE_CONSTANT_INT(DBM, RWTRUNC, APR_DBM_RWTRUNC ); // r/w, truncate if already there
}
+DEF( DB, getNames, FPARM2( name, NULL,
+ type, NEW_STRING("SDBM") ) ) {
+ apr_status_t aprerr;
+ apr_pool_t* pool;
+ obj_p res;
+ char *name, *type, *used1, *used2;
+
+ STRING_PARAM(1, name);
+ STRING_PARAM(2, type);
+
+ aprerr = apr_pool_create(&pool, get_pr_head_pool());
+ IF_APR_ERR("out of memory in getNames()") return NULL;
+
+ aprerr = apr_dbm_get_usednames_ex(pool, type, name, &used1, &used2);
+ IF_APR_ERR("getNames() in dbm") return NULL;
+
+ res = NEW_LIST(2);
+ list_append(ist, res, NEW_STRING(used1));
+ // apr_free(used1); XXX how do I free these?
+ if (used2) {
+ list_append(ist, res, NEW_STRING(used2));
+ // apr_free(used2); XXX how do I free these?
+ } else
+ list_append(ist, res, OBJ(NONE));
+ set_immutable(res);
+ switch_proto(ist, res, OBJ(TUPLE_PROTO));
+ return res;
+}
+
DEF( DB, __init__, FPARM4( name, NULL,
mode, DBM_RWCREATE,
type, NEW_STRING("SDBM"),
@@ -131,10 +160,12 @@
aprerr = apr_dbm_open_ex(&db, type, name, mode, uperm, cntxt);
IF_APR_ERR("opening dbm database") return NULL;
+ read_unlock(ist, self);
set_attr(ist, self, sym(ist, "name"), parms[1]);
set_attr(ist, self, sym(ist, "mode"), parms[3]);
set_attr(ist, self, sym(ist, "type"), parms[5]);
set_attr(ist, self, sym(ist, "uperm"), parms[7]);
+ read_lock(ist, self);
self->data_type = DATA_TYPE_DATAPTR;
self->data.ptr = db;
@@ -142,19 +173,6 @@
return OBJ(NONE);
}
-DEF(DB, close, NULL) {
- apr_dbm_p db = self->data.ptr;
- if (db) apr_dbm_close(db);
- self->data.ptr = NULL;
- return self;
-}
-
-DEF(DB, closed_QUES, NULL) {
- apr_dbm_p db = self->data.ptr;
- if (db) return OBJ(PR_FALSE);
- else return OBJ(PR_TRUE);
-}
-
DEF(DB, fetch, FPARM1(key, NULL)) {
apr_status_t aprerr;
apr_dbm_p db = self->data.ptr;
@@ -166,7 +184,10 @@
aprerr = apr_dbm_fetch (db, key, &value);
IF_APR_DBM_ERR(db, "fetch(key)");
- return NEW_STRINGN(value.dptr, value.dsize);
+ if (value.dptr)
+ return NEW_STRINGN(value.dptr, value.dsize);
+ else
+ return OBJ(NONE);
}
DEF(DB, store, FPARM2(key, NULL, value, NULL)) {
@@ -219,7 +240,10 @@
aprerr = apr_dbm_firstkey(db, &key);
IF_APR_DBM_ERR(db, "firstKey()");
- return NEW_STRINGN(key.dptr, key.dsize);
+ if (key.dptr)
+ return NEW_STRINGN(key.dptr, key.dsize);
+ else
+ return OBJ(NONE);
}
DEF(DB, nextKey, FPARM1(key, NULL)) {
@@ -232,7 +256,11 @@
aprerr = apr_dbm_nextkey(db, &key);
IF_APR_DBM_ERR(db, "nextKey(key)");
- return NEW_STRINGN(key.dptr, key.dsize);
+
+ if (key.dptr)
+ return NEW_STRINGN(key.dptr, key.dsize);
+ else
+ return OBJ(NONE);
}
DEF(DB, freeDatum, FPARM1(data, NULL)) {
@@ -245,33 +273,22 @@
apr_dbm_freedatum(db, data);
return parms[1];
}
-DEF( DB, getNames, FPARM2( name, NULL,
- type, NEW_STRING("SDBM") ) ) {
- apr_status_t aprerr;
- apr_pool_t* pool;
- obj_p res;
- char *name, *type, *used1, *used2;
- STRING_PARAM(1, name);
- STRING_PARAM(2, type);
+DEF(DB, close, NULL) {
+ apr_dbm_p db = self->data.ptr;
+ if (db) apr_dbm_close(db);
+ self->data.ptr = NULL;
+ return self;
+}
- aprerr = apr_pool_create(&pool, get_pr_head_pool());
- IF_APR_ERR("out of memory in getNames()") return NULL;
+DEF(DB, closed_QUES, NULL) {
+ apr_dbm_p db = self->data.ptr;
+ if (db) return OBJ(PR_FALSE);
+ else return OBJ(PR_TRUE);
+}
- aprerr = apr_dbm_get_usednames_ex(pool, type, name, &used1, &used2);
- IF_APR_ERR("getNames() in dbm") return NULL;
-
- res = NEW_LIST(2);
- list_append(ist, res, NEW_STRING(used1));
- // apr_free(used1); XXX how do I free these?
- if (used2) {
- list_append(ist, res, NEW_STRING(used2));
- // apr_free(used2); XXX how do I free these?
- } else
- list_append(ist, res, OBJ(NONE));
- set_immutable(res);
- switch_proto(ist, res, OBJ(TUPLE_PROTO));
- return res;
+DEF(DB, __objList__, FORM_RPARAM) {
+ return parms[1];
}
MAIN_MODULE_INIT(DBM) {
@@ -287,4 +304,5 @@
MODULE_ADD_SYM(DB, freeDatum);
MODULE_ADD_SYM(DB, close);
MODULE_ADD_SYM(DB, closed_QUES);
+ MODULE_ADD_SYM(DB, __objList__);
}
Modified: trunk/src/src.vcproj
===================================================================
--- trunk/src/src.vcproj 2004-04-18 01:03:46 UTC (rev 379)
+++ trunk/src/src.vcproj 2004-04-18 02:01:52 UTC (rev 380)
@@ -250,6 +250,9 @@
RelativePath="..\pr\chained.pr">
</File>
<File
+ RelativePath="..\pr\dbm.pr">
+ </File>
+ <File
RelativePath="..\pr\defs.pr">
</File>
<File