X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FSDBM_File%2FSDBM_File.xs;h=6aafb6b99fd0cb171897b634c95fad5f017000d8;hb=46471bde41ad0777edf7b89818df6730e8b55c20;hp=681cf146961b5beeff0b8d19d0278fcb10ce9382;hpb=9fe6733ac5627eddc014ed5f2afb208fa4afd501;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/SDBM_File/SDBM_File.xs b/ext/SDBM_File/SDBM_File.xs index 681cf14..6aafb6b 100644 --- a/ext/SDBM_File/SDBM_File.xs +++ b/ext/SDBM_File/SDBM_File.xs @@ -1,3 +1,4 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" @@ -16,27 +17,6 @@ typedef SDBM_File_type * SDBM_File ; typedef datum datum_key ; typedef datum datum_value ; -#define ckFilter(arg,type,name) \ - if (db->type) { \ - SV * save_defsv ; \ - /* printf("filtering %s\n", name) ;*/ \ - if (db->filtering) \ - croak("recursion detected in %s", name) ; \ - db->filtering = TRUE ; \ - /* SAVE_DEFSV ;*/ /* save $_ */ \ - save_defsv = newSVsv(DEFSV) ; \ - sv_setsv(DEFSV, arg) ; \ - PUSHMARK(sp) ; \ - (void) perl_call_sv(db->type, G_DISCARD|G_NOARGS); \ - /* SPAGAIN ; */ \ - sv_setsv(arg, DEFSV) ; \ - sv_setsv(DEFSV, save_defsv) ; \ - SvREFCNT_dec(save_defsv) ; \ - /* PUTBACK ; */ \ - db->filtering = FALSE ; \ - /*printf("end of filtering %s\n", name) ;*/ \ - } - #define sdbm_TIEHASH(dbtype,filename,flags,mode) sdbm_open(filename,flags,mode) #define sdbm_FETCH(db,key) sdbm_fetch(db->dbp,key) #define sdbm_STORE(db,key,value,flags) sdbm_store(db->dbp,key,value,flags) @@ -59,7 +39,7 @@ sdbm_TIEHASH(dbtype, filename, flags, mode) DBM * dbp ; RETVAL = NULL ; - if (dbp = sdbm_open(filename,flags,mode) ) { + if ((dbp = sdbm_open(filename,flags,mode))) { RETVAL = (SDBM_File)safemalloc(sizeof(SDBM_File_type)) ; Zero(RETVAL, 1, SDBM_File_type) ; RETVAL->dbp = dbp ; @@ -73,16 +53,18 @@ void sdbm_DESTROY(db) SDBM_File db CODE: - sdbm_close(db->dbp); - if (db->filter_fetch_key) - SvREFCNT_dec(db->filter_fetch_key) ; - if (db->filter_store_key) - SvREFCNT_dec(db->filter_store_key) ; - if (db->filter_fetch_value) - SvREFCNT_dec(db->filter_fetch_value) ; - if (db->filter_store_value) - SvREFCNT_dec(db->filter_store_value) ; - Safefree(db) ; + if (db) { + sdbm_close(db->dbp); + if (db->filter_fetch_key) + SvREFCNT_dec(db->filter_fetch_key) ; + if (db->filter_store_key) + SvREFCNT_dec(db->filter_store_key) ; + if (db->filter_fetch_value) + SvREFCNT_dec(db->filter_fetch_value) ; + if (db->filter_store_value) + SvREFCNT_dec(db->filter_store_value) ; + safefree(db) ; + } datum_value sdbm_FETCH(db, key) @@ -107,7 +89,7 @@ sdbm_STORE(db, key, value, flags = DBM_REPLACE) int sdbm_DELETE(db, key) SDBM_File db - datum key + datum_key key int sdbm_EXISTS(db,key) @@ -121,7 +103,7 @@ sdbm_FIRSTKEY(db) datum_key sdbm_NEXTKEY(db, key) SDBM_File db - datum_key key + datum_key key; int sdbm_error(db) @@ -140,33 +122,13 @@ sdbm_clearerr(db) RETVAL -#define setFilter(type) \ - { \ - if (db->type) \ - RETVAL = newSVsv(db->type) ; \ - if (db->type && (code == &PL_sv_undef)) { \ - SvREFCNT_dec(db->type) ; \ - db->type = NULL ; \ - } \ - else if (code) { \ - if (db->type) \ - sv_setsv(db->type, code) ; \ - else \ - db->type = newSVsv(code) ; \ - } \ - } - - - SV * filter_fetch_key(db, code) SDBM_File db SV * code SV * RETVAL = &PL_sv_undef ; CODE: - setFilter(filter_fetch_key) ; - OUTPUT: - RETVAL + DBM_setFilter(db->filter_fetch_key, code) ; SV * filter_store_key(db, code) @@ -174,9 +136,7 @@ filter_store_key(db, code) SV * code SV * RETVAL = &PL_sv_undef ; CODE: - setFilter(filter_store_key) ; - OUTPUT: - RETVAL + DBM_setFilter(db->filter_store_key, code) ; SV * filter_fetch_value(db, code) @@ -184,9 +144,7 @@ filter_fetch_value(db, code) SV * code SV * RETVAL = &PL_sv_undef ; CODE: - setFilter(filter_fetch_value) ; - OUTPUT: - RETVAL + DBM_setFilter(db->filter_fetch_value, code) ; SV * filter_store_value(db, code) @@ -194,7 +152,5 @@ filter_store_value(db, code) SV * code SV * RETVAL = &PL_sv_undef ; CODE: - setFilter(filter_store_value) ; - OUTPUT: - RETVAL + DBM_setFilter(db->filter_store_value, code) ;