summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/ext/GDBM_File
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2002-03-16 20:14:30 +0000
committermarkm <markm@FreeBSD.org>2002-03-16 20:14:30 +0000
commit3eac21f49bc763a6c0044b4afbc0c7ece760144f (patch)
tree4cf1274fa3ca68f7ecf6a3051e0c2243e378afc5 /contrib/perl5/ext/GDBM_File
parent259bd53c06712c4ffb0ab7e06898c19ebf221b21 (diff)
downloadFreeBSD-src-3eac21f49bc763a6c0044b4afbc0c7ece760144f.zip
FreeBSD-src-3eac21f49bc763a6c0044b4afbc0c7ece760144f.tar.gz
Vendor import Perl 5.6.1
Diffstat (limited to 'contrib/perl5/ext/GDBM_File')
-rw-r--r--contrib/perl5/ext/GDBM_File/GDBM_File.pm4
-rw-r--r--contrib/perl5/ext/GDBM_File/GDBM_File.xs12
-rw-r--r--contrib/perl5/ext/GDBM_File/typemap10
3 files changed, 21 insertions, 5 deletions
diff --git a/contrib/perl5/ext/GDBM_File/GDBM_File.pm b/contrib/perl5/ext/GDBM_File/GDBM_File.pm
index ab866ee..310243c 100644
--- a/contrib/perl5/ext/GDBM_File/GDBM_File.pm
+++ b/contrib/perl5/ext/GDBM_File/GDBM_File.pm
@@ -40,6 +40,7 @@ L<perl(1)>, L<DB_File(3)>, L<perldbmfilter>.
package GDBM_File;
use strict;
+use warnings;
our($VERSION, @ISA, @EXPORT, $AUTOLOAD);
require Carp;
@@ -53,13 +54,14 @@ use XSLoader ();
GDBM_FAST
GDBM_INSERT
GDBM_NEWDB
+ GDBM_NOLOCK
GDBM_READER
GDBM_REPLACE
GDBM_WRCREAT
GDBM_WRITER
);
-$VERSION = "1.03";
+$VERSION = "1.05";
sub AUTOLOAD {
my($constname);
diff --git a/contrib/perl5/ext/GDBM_File/GDBM_File.xs b/contrib/perl5/ext/GDBM_File/GDBM_File.xs
index 870f056..5e426f9 100644
--- a/contrib/perl5/ext/GDBM_File/GDBM_File.xs
+++ b/contrib/perl5/ext/GDBM_File/GDBM_File.xs
@@ -42,12 +42,14 @@ typedef datum datum_value ;
typedef void (*FATALFUNC)();
+#ifndef GDBM_FAST
static int
not_here(char *s)
{
croak("GDBM_File::%s not implemented on this architecture", s);
return -1;
}
+#endif
/* GDBM allocates the datum with system malloc() and expects the user
* to free() it. So we either have to free() it immediately, or have
@@ -56,7 +58,7 @@ not_here(char *s)
static void
output_datum(pTHX_ SV *arg, char *str, int size)
{
-#if !defined(MYMALLOC) || (defined(MYMALLOC) && defined(PERL_POLLUTE_MALLOC))
+#if !defined(MYMALLOC) || (defined(MYMALLOC) && defined(PERL_POLLUTE_MALLOC) && !defined(LEAKTEST))
sv_usepvn(arg, str, size);
#else
sv_setpvn(arg, str, size);
@@ -122,6 +124,12 @@ constant(char *name, int arg)
#else
goto not_there;
#endif
+ if (strEQ(name, "GDBM_NOLOCK"))
+#ifdef GDBM_NOLOCK
+ return GDBM_NOLOCK;
+#else
+ goto not_there;
+#endif
if (strEQ(name, "GDBM_READER"))
#ifdef GDBM_READER
return GDBM_READER;
@@ -214,7 +222,7 @@ gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak)
GDBM_FILE dbp ;
RETVAL = NULL ;
- if (dbp = gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func)) {
+ 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->dbp = dbp ;
diff --git a/contrib/perl5/ext/GDBM_File/typemap b/contrib/perl5/ext/GDBM_File/typemap
index 4f79ae3..1dd0630 100644
--- a/contrib/perl5/ext/GDBM_File/typemap
+++ b/contrib/perl5/ext/GDBM_File/typemap
@@ -19,8 +19,14 @@ T_DATUM_K
$var.dsize = (int)PL_na;
T_DATUM_V
ckFilter($arg, filter_store_value, \"filter_store_value\");
- $var.dptr = SvPV($arg, PL_na);
- $var.dsize = (int)PL_na;
+ if (SvOK($arg)) {
+ $var.dptr = SvPV($arg, PL_na);
+ $var.dsize = (int)PL_na;
+ }
+ else {
+ $var.dptr = \"\";
+ $var.dsize = 0;
+ }
OUTPUT
T_DATUM_K
output_datum(aTHX_ $arg, $var.dptr, $var.dsize);
OpenPOWER on IntegriCloud