diff options
author | 2013-03-25 20:06:16 +0000 | |
---|---|---|
committer | 2013-03-25 20:06:16 +0000 | |
commit | 898184e3e61f9129feb5978fad5a8c6865f00b92 (patch) | |
tree | 56f32aefc1eed60b534611007c7856f82697a205 /gnu/usr.bin/perl/ext/GDBM_File | |
parent | PGSHIFT -> PAGE_SHIFT (diff) | |
download | wireguard-openbsd-898184e3e61f9129feb5978fad5a8c6865f00b92.tar.xz wireguard-openbsd-898184e3e61f9129feb5978fad5a8c6865f00b92.zip |
import perl 5.16.3 from CPAN - worked on by Andrew Fresh and myself
Diffstat (limited to 'gnu/usr.bin/perl/ext/GDBM_File')
-rw-r--r-- | gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs | 53 | ||||
-rw-r--r-- | gnu/usr.bin/perl/ext/GDBM_File/Makefile.PL | 1 |
2 files changed, 22 insertions, 32 deletions
diff --git a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs index d1f99e2d9ef..afb361ca978 100644 --- a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs +++ b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.xs @@ -1,3 +1,5 @@ +#define PERL_NO_GET_CONTEXT + #include "EXTERN.h" #include "perl.h" #include "XSUB.h" @@ -5,12 +7,14 @@ #include <gdbm.h> #include <fcntl.h> +#define fetch_key 0 +#define store_key 1 +#define fetch_value 2 +#define store_value 3 + typedef struct { GDBM_FILE dbp ; - SV * filter_fetch_key ; - SV * filter_store_key ; - SV * filter_fetch_value ; - SV * filter_store_value ; + SV * filter[4]; int filtering ; } GDBM_File_type; @@ -73,8 +77,7 @@ gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak) RETVAL = NULL ; if ((dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func))) { - RETVAL = (GDBM_File)safemalloc(sizeof(GDBM_File_type)) ; - Zero(RETVAL, 1, GDBM_File_type) ; + RETVAL = (GDBM_File)safecalloc(1, sizeof(GDBM_File_type)) ; RETVAL->dbp = dbp ; } @@ -92,8 +95,14 @@ gdbm_close(db) void gdbm_DESTROY(db) GDBM_File db + PREINIT: + int i = store_value; CODE: gdbm_close(db); + do { + if (db->filter[i]) + SvREFCNT_dec(db->filter[i]); + } while (i-- > 0); safefree(db); #define gdbm_FETCH(db,key) gdbm_fetch(db->dbp,key) @@ -165,30 +174,10 @@ filter_fetch_key(db, code) GDBM_File db SV * code SV * RETVAL = &PL_sv_undef ; + ALIAS: + GDBM_File::filter_fetch_key = fetch_key + GDBM_File::filter_store_key = store_key + GDBM_File::filter_fetch_value = fetch_value + GDBM_File::filter_store_value = store_value CODE: - DBM_setFilter(db->filter_fetch_key, code) ; - -SV * -filter_store_key(db, code) - GDBM_File db - SV * code - SV * RETVAL = &PL_sv_undef ; - CODE: - DBM_setFilter(db->filter_store_key, code) ; - -SV * -filter_fetch_value(db, code) - GDBM_File db - SV * code - SV * RETVAL = &PL_sv_undef ; - CODE: - DBM_setFilter(db->filter_fetch_value, code) ; - -SV * -filter_store_value(db, code) - GDBM_File db - SV * code - SV * RETVAL = &PL_sv_undef ; - CODE: - DBM_setFilter(db->filter_store_value, code) ; - + DBM_setFilter(db->filter[ix], code); diff --git a/gnu/usr.bin/perl/ext/GDBM_File/Makefile.PL b/gnu/usr.bin/perl/ext/GDBM_File/Makefile.PL index 24e6ee4cb5b..2a44d3e1d89 100644 --- a/gnu/usr.bin/perl/ext/GDBM_File/Makefile.PL +++ b/gnu/usr.bin/perl/ext/GDBM_File/Makefile.PL @@ -12,6 +12,7 @@ WriteConstants( NAME => 'GDBM_File', DEFAULT_TYPE => 'IV', BREAKOUT_AT => 8, + PROXYSUBS => {autoload => 1}, NAMES => [qw(GDBM_CACHESIZE GDBM_CENTFREE GDBM_COALESCEBLKS GDBM_FAST GDBM_FASTMODE GDBM_INSERT GDBM_NEWDB GDBM_NOLOCK GDBM_OPENMASK GDBM_READER GDBM_REPLACE GDBM_SYNC GDBM_SYNCMODE |