+Thu Aug 31 23:06:06 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
+
+ First official release Storable 1.0, for inclusion in perl 5.7.0.
+ The license scheme is now compatible with Perl's.
+
Thu Aug 24 01:02:02 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
. Description:
-# $Id: Makefile.PL,v 0.7.1.1 2000/08/23 22:49:18 ram Exp $
+# $Id: Makefile.PL,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: Makefile.PL,v $
-# Revision 0.7.1.1 2000/08/23 22:49:18 ram
-# patch3: added MAN3PODS
-#
-# Revision 0.7 2000/08/03 22:04:44 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'Storable',
'DISTNAME' => "Storable",
- 'MAN3PODS' => {},
+ 'MAN3PODS' => {},
'VERSION_FROM' => 'Storable.pm',
'dist' => { SUFFIX => 'gz', COMPRESS => 'gzip -f' },
'clean' => {'FILES' => '*%'},
- Storable 0.7
+ Storable 1.0
Copyright (c) 1995-2000, Raphael Manfredi
------------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
- it under the terms of the Artistic License, a copy of which can be
- found with perl.
+ it under the same terms as Perl 5 itself.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- Artistic License for more details.
+ Perl 5 License schemes for more details.
------------------------------------------------------------------------
- *** This is beta software -- use at your own risks ***
-
+=======================================================================
-| PLEASE NOTE CAREFULLY
-|
-| The serialization format changed between 0.5 and 0.6, and the module
-| is NOT backward compatible. Think about it when upgrading from a
-| pre-0.5@9 version -- images from versions 0.5@9 could still be read
-| by 0.6, but have not been tested with 0.7.
-|
-| The next release (0.8 or 1.0) will DROP support for pre-0.6 format.
-|
-| The serialization format changed between 0.6 and 0.7, and the module
-| is fully backward compatible, meaning 0.7 can read binary images from
-| 0.6, although it only generates new ones. If you encounter a situation
-| where it is not AND can duplicate it via a small test case, please
-| send it to me, along with a patch to fix the problem if you can.
+| Storable is distributed as a module, but is also part of the official
+| Perl core distribution. Maintenance is still done by the Author,
+| whilst the perl5-porters ensure that no change to the Perl internals
+| can break the version of Storable distributed with it.
+=======================================================================
The Storable extension brings persistency to your data.
Raphael Manfredi <Raphael_Manfredi@pobox.com>
------------------------------------------------------------------------
-Thanks to:
+Thanks to (in chronological order):
Jarkko Hietaniemi <jhi@iki.fi>
Ulrich Pfeifer <pfeifer@charly.informatik.uni-dortmund.de>
Murray Nesbitt <murray@activestate.com>
Albert N. Micheev <Albert.N.Micheev@f80.n5049.z2.fidonet.org>
Marc Lehmann <pcg@opengroup.org>
+ Justin Banks <justinb@wamnet.com>
+ Jarkko Hietaniemi <jhi@iki.fi> (AGAIN, as perl 5.7.0 Pumpkin!)
for their contributions.
-;# $Id: Storable.pm,v 0.7.1.3 2000/08/23 22:49:25 ram Exp $
+;# $Id: Storable.pm,v 1.0 2000/09/01 19:40:41 ram Exp $
;#
;# Copyright (c) 1995-2000, Raphael Manfredi
;#
-;# You may redistribute only under the terms of the Artistic License,
-;# as specified in the README file that comes with the distribution.
+;# You may redistribute only under the same terms as Perl 5, as specified
+;# in the README file that comes with the distribution.
;#
;# $Log: Storable.pm,v $
-;# Revision 0.7.1.3 2000/08/23 22:49:25 ram
-;# patch3: updated version number
-;#
-;# Revision 0.7.1.2 2000/08/14 07:18:40 ram
-;# patch2: increased version number
-;#
-;# Revision 0.7.1.1 2000/08/13 20:08:58 ram
-;# patch1: mention new Clone(3) extension in SEE ALSO
-;# patch1: contributor Marc Lehmann added overloading and ref to tied items
-;# patch1: updated e-mail from Benjamin Holzman
-;#
-;# Revision 0.7 2000/08/03 22:04:44 ram
-;# Baseline for second beta release.
+;# Revision 1.0 2000/09/01 19:40:41 ram
+;# Baseline for first official release.
;#
require DynaLoader;
@EXPORT = qw(store retrieve);
@EXPORT_OK = qw(
- nstore store_fd nstore_fd retrieve_fd
+ nstore store_fd nstore_fd fd_retrieve
freeze nfreeze thaw
dclone
+ retrieve_fd
);
use AutoLoader;
use vars qw($forgive_me $VERSION);
-$VERSION = '0.703';
+$VERSION = '1.000';
*AUTOLOAD = \&AutoLoader::AUTOLOAD; # Grrr...
#
sub logcroak;
-# 8.3 limitation avoidance trickery. --mjtguy
-sub retrieve_fd { goto &fdretrieve };
+sub retrieve_fd { &fd_retrieve } # Backward compatibility
bootstrap Storable;
1;
}
#
-# fdretrieve
+# fd_retrieve
#
# Same as retrieve, but perform from an already opened file descriptor instead.
#
-sub fdretrieve {
+sub fd_retrieve {
my ($file) = @_;
my $fd = fileno($file);
logcroak "not a valid file descriptor" unless defined $fd;
# Storing to and retrieving from an already opened file
store_fd \@array, \*STDOUT;
nstore_fd \%table, \*STDOUT;
- $aryref = retrieve_fd(\*SOCKET);
- $hashref = retrieve_fd(\*SOCKET);
+ $aryref = fd_retrieve(\*SOCKET);
+ $hashref = fd_retrieve(\*SOCKET);
# Serializing to memory
$serialized = freeze \%table;
At the cost of a slight header overhead, you may store to an already
opened file descriptor using the C<store_fd> routine, and retrieve
-from a file via C<retrieve_fd>. Those names aren't imported by default,
+from a file via C<fd_retrieve>. Those names aren't imported by default,
so you will have to do that explicitely if you need those routines.
The file descriptor you supply must be already opened, for read
if you're going to retrieve and for write if you wish to store.
store_fd(\%table, *STDOUT) || die "can't store to stdout\n";
- $hashref = retrieve_fd(*STDIN);
+ $hashref = fd_retrieve(*STDIN);
You can also store data in network order to allow easy sharing across
multiple platforms, or when storing on a socket known to be remotely
correctly restored so you don't have to know whether you're restoring
from native or network ordered data.
-When using C<retrieve_fd>, objects are retrieved in sequence, one
+When using C<fd_retrieve>, objects are retrieved in sequence, one
object (i.e. one recursive tree) per associated C<store_fd>.
If you're more from the object-oriented camp, you can inherit from
operations on the same data structures, you will get different
results.
-Due to the aforementionned optimizations, Storable is at the mercy
-of perl's internal redesign or structure changes. If that bothers
-you, you can try convincing Larry that what is used in Storable
-should be documented and consistently kept in future revisions.
-
=head1 CREDITS
Thank you to (in chronological order):
Jeff Gresham <gresham_jeffrey@jpmorgan.com>
Murray Nesbitt <murray@activestate.com>
Marc Lehmann <pcg@opengroup.org>
+ Justin Banks <justinb@wamnet.com>
+ Jarkko Hietaniemi <jhi@iki.fi> (AGAIN, as perl 5.7.0 Pumpkin!)
for their bug reports, suggestions and contributions.
*/
/*
- * $Id: Storable.xs,v 0.7.1.3 2000/08/23 23:00:41 ram Exp $
+ * $Id: Storable.xs,v 1.0 2000/09/01 19:40:41 ram Exp $
*
* Copyright (c) 1995-2000, Raphael Manfredi
*
- * You may redistribute only under the terms of the Artistic License,
- * as specified in the README file that comes with the distribution.
+ * You may redistribute only under the same terms as Perl 5, as specified
+ * in the README file that comes with the distribution.
*
* $Log: Storable.xs,v $
- * Revision 0.7.1.3 2000/08/23 23:00:41 ram
- * patch3: ANSI-fied most of the code, preparing for Perl core integration
- * patch3: dispatch tables moved upfront to relieve some compilers
- * patch3: merged 64-bit fixes from perl5-porters
- *
- * Revision 0.7.1.2 2000/08/14 07:19:27 ram
- * patch2: added a refcnt dec in retrieve_tied_key()
- *
- * Revision 0.7.1.1 2000/08/13 20:10:06 ram
- * patch1: was wrongly optimizing for "undef" values in hashes
- * patch1: added support for ref to tied items in hash/array
- * patch1: added overloading support
- *
- * Revision 0.7 2000/08/03 22:04:44 ram
- * Baseline for second beta release.
+ * Revision 1.0 2000/09/01 19:40:41 ram
+ * Baseline for first official release.
*
*/
#include <patchlevel.h> /* Perl's one, needed since 5.6 */
#include <XSUB.h>
-/*#define DEBUGME /* Debug mode, turns assertions on as well */
-/*#define DASSERT /* Assertion mode */
+#if 0
+#define DEBUGME /* Debug mode, turns assertions on as well */
+#define DASSERT /* Assertion mode */
+#endif
/*
* Pre PerlIO time when none of USE_PERLIO and PERLIO_IS_STDIO is defined
#endif /* PERL_VERSION -- perls < 5.6 */
#ifndef NVef /* The following were not part of perl 5.6 */
-#if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
-#define NVef PERL_PRIeldbl
-#define NVff PERL_PRIfldbl
-#define NVgf PERL_PRIgldbl
-#endif
-#ifndef NVef
+#if defined(USE_LONG_DOUBLE) && \
+ defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
+#define NVef PERL_PRIeldbl
+#define NVff PERL_PRIfldbl
+#define NVgf PERL_PRIgldbl
+#else
#define NVef "e"
#define NVff "f"
#define NVgf "g"
#endif /* < perl5.004_68 */
#define dSTCXT_PTR(T,name) \
- T name = (T)(perinterp_sv && SvIOK(perinterp_sv)\
- ? INT2PTR(T, SvIVX(perinterp_sv)) : NULL)
+ T name = (perinterp_sv && SvIOK(perinterp_sv) \
+ ? INT2PTR(T, SvIVX(perinterp_sv)) : (T) 0)
#define dSTCXT \
dSTCXT_SV; \
dSTCXT_PTR(stcxt_t *, cxt)
*/
/*
+ * LOW_32BITS
+ *
+ * Keep only the low 32 bits of a pointer (used for tags, which are not
+ * really pointers).
+ */
+
+#if PTRSIZE <= 4
+#define LOW_32BITS(x) ((I32) (x))
+#else
+#define LOW_32BITS(x) ((I32) ((unsigned long) (x) & 0xffffffffUL))
+#endif
+
+/*
+ * oI, oS, oC
+ *
+ * Hack for Crays, where sizeof(I32) == 8, and which are big-endians.
+ * Used in the WLEN and RLEN macros.
+ */
+
+#if INTSIZE > 4
+#define oI(x) ((I32 *) ((char *) (x) + 4))
+#define oS(x) ((x) - 4)
+#define oC(x) (x = 0)
+#define CRAY_HACK
+#else
+#define oI(x) (x)
+#define oS(x) (x)
+#define oC(x)
+#endif
+
+/*
* key buffer handling
*/
#define kbuf (cxt->keybuf).arena
return (SV *) 0; \
} while (0)
+#ifdef CRAY_HACK
+#define MBUF_GETINT(x) do { \
+ oC(x); \
+ if ((mptr + 4) <= mend) { \
+ memcpy(oI(&x), mptr, 4); \
+ mptr += 4; \
+ } else \
+ return (SV *) 0; \
+} while (0)
+#else
#define MBUF_GETINT(x) do { \
if ((mptr + sizeof(int)) <= mend) { \
if (int_aligned(mptr)) \
} else \
return (SV *) 0; \
} while (0)
+#endif
#define MBUF_READ(x,s) do { \
if ((mptr + (s)) <= mend) { \
} \
} while (0)
+#ifdef CRAY_HACK
+#define MBUF_PUTINT(i) do { \
+ MBUF_CHK(4); \
+ memcpy(mptr, oI(&i), 4); \
+ mptr += 4; \
+} while (0)
+#else
#define MBUF_PUTINT(i) do { \
MBUF_CHK(sizeof(int)); \
if (int_aligned(mptr)) \
memcpy(mptr, &i, sizeof(int)); \
mptr += sizeof(int); \
} while (0)
+#endif
#define MBUF_WRITE(x,s) do { \
MBUF_CHK(s); \
} while (0)
/*
- * LOW_32BITS
- *
- * Keep only the low 32 bits of a pointer (used for tags, which are not
- * really pointers).
- */
-
-#if PTRSIZE <= 4
-#define LOW_32BITS(x) ((I32) (x))
-#else
-#define LOW_32BITS(x) ((I32) ((unsigned long) (x) & 0xffffffffUL))
-#endif
-
-/*
* Possible return values for sv_type().
*/
static char magicstr[] = "pst0"; /* Used as a magic number */
#define STORABLE_BIN_MAJOR 2 /* Binary major "version" */
-#define STORABLE_BIN_MINOR 1 /* Binary minor "version" */
+#define STORABLE_BIN_MINOR 2 /* Binary minor "version" */
/*
* Useful store shortcuts...
return -1; \
} while (0)
+#define WRITE_I32(x) do { \
+ ASSERT(sizeof(x) == sizeof(I32), ("writing an I32")); \
+ if (!cxt->fio) \
+ MBUF_PUTINT(x); \
+ else if (PerlIO_write(cxt->fio, oI(&x), oS(sizeof(x))) != oS(sizeof(x))) \
+ return -1; \
+ } while (0)
+
#ifdef HAS_HTONL
#define WLEN(x) do { \
if (cxt->netorder) { \
int y = (int) htonl(x); \
if (!cxt->fio) \
MBUF_PUTINT(y); \
- else if (PerlIO_write(cxt->fio, &y, sizeof(y)) != sizeof(y)) \
+ else if (PerlIO_write(cxt->fio,oI(&y),oS(sizeof(y))) != oS(sizeof(y))) \
return -1; \
} else { \
if (!cxt->fio) \
MBUF_PUTINT(x); \
- else if (PerlIO_write(cxt->fio, &x, sizeof(x)) != sizeof(x)) \
+ else if (PerlIO_write(cxt->fio,oI(&x),oS(sizeof(x))) != oS(sizeof(x))) \
return -1; \
} \
} while (0)
#else
-#define WLEN(x) do { \
- if (!cxt->fio) \
- MBUF_PUTINT(x); \
- else if (PerlIO_write(cxt->fio, &x, sizeof(x)) != sizeof(x)) \
- return -1; \
- } while (0)
+#define WLEN(x) WRITE_I32(x)
#endif
#define WRITE(x,y) do { \
return (SV *) 0; \
} while (0)
-#ifdef HAS_NTOHL
-#define RLEN(x) do { \
+#define READ_I32(x) do { \
+ ASSERT(sizeof(x) == sizeof(I32), ("reading an I32")); \
+ oC(x); \
if (!cxt->fio) \
MBUF_GETINT(x); \
- else if (PerlIO_read(cxt->fio, &x, sizeof(x)) != sizeof(x)) \
+ else if (PerlIO_read(cxt->fio, oI(&x), oS(sizeof(x))) != oS(sizeof(x))) \
return (SV *) 0; \
- if (cxt->netorder) \
- x = (int) ntohl(x); \
} while (0)
-#else
+
+#ifdef HAS_NTOHL
#define RLEN(x) do { \
+ oC(x); \
if (!cxt->fio) \
MBUF_GETINT(x); \
- else if (PerlIO_read(cxt->fio, &x, sizeof(x)) != sizeof(x)) \
+ else if (PerlIO_read(cxt->fio, oI(&x), oS(sizeof(x))) != oS(sizeof(x))) \
return (SV *) 0; \
+ if (cxt->netorder) \
+ x = (int) ntohl(x); \
} while (0)
+#else
+#define RLEN(x) READ_I32(x)
#endif
#define READ(x,y) do { \
gv = gv_fetchmethod_autoload(pkg, method, FALSE);
if (gv && isGV(gv)) {
sv = newRV((SV*) GvCV(gv));
- TRACEME(("%s->%s: 0x%"UVxf,
- HvNAME(pkg), method,
- PTR2UV(sv)));
+ TRACEME(("%s->%s: 0x%"UVxf, HvNAME(pkg), method, PTR2UV(sv)));
} else {
sv = newSVsv(&PL_sv_undef);
TRACEME(("%s->%s: not found", HvNAME(pkg), method));
return (SV *) 0;
} else {
TRACEME(("cached %s->%s: 0x%"UVxf,
- HvNAME(pkg), method,
- PTR2UV(sv)));
+ HvNAME(pkg), method, PTR2UV(sv)));
return sv;
}
}
if (SvOBJECT(sv)) {
HV *stash = (HV *) SvSTASH(sv);
if (stash && Gv_AMG(stash)) {
- TRACEME(("ref (0x%"UVxf") is overloaded",
- PTR2UV(sv)));
+ TRACEME(("ref (0x%"UVxf") is overloaded", PTR2UV(sv)));
PUTMARK(SX_OVERLOAD);
} else
PUTMARK(SX_REF);
*/
string:
- STORE_SCALAR(pv, len);
+ wlen = (I32) len; /* WLEN via STORE_SCALAR expects I32 */
+ STORE_SCALAR(pv, wlen);
TRACEME(("ok (scalar 0x%"UVxf" '%s', length = %"IVdf")",
PTR2UV(sv), SvPVX(sv), (IV)len));
* Watch for number being an integer in disguise.
*/
if (nv == (NV) (iv = I_V(nv))) {
- TRACEME(("double %"NVff" is actually integer %"IVdf,
- nv, iv));
+ TRACEME(("double %"NVff" is actually integer %"IVdf, nv, iv));
goto integer; /* Share code below */
}
PUTMARK(SX_DOUBLE);
WRITE(&nv, sizeof(nv));
- TRACEME(("ok (double 0x%"UVxf", value = %"NVff")",
- PTR2UV(sv), nv));
+ TRACEME(("ok (double 0x%"UVxf", value = %"NVff")", PTR2UV(sv), nv));
} else if (flags & SVp_IOK) { /* SvIOKp(sv) => integer */
iv = SvIV(sv);
PUTMARK(siv);
TRACEME(("small integer stored as %d", siv));
} else if (cxt->netorder) {
- int niv;
+ I32 niv;
#ifdef HAS_HTONL
- niv = (int) htonl(iv);
+ niv = (I32) htonl(iv);
TRACEME(("using network order"));
#else
- niv = (int) iv;
+ niv = (I32) iv;
TRACEME(("as-is for network order"));
#endif
PUTMARK(SX_NETINT);
- WRITE(&niv, sizeof(niv));
+ WRITE_I32(niv);
} else {
PUTMARK(SX_INTEGER);
WRITE(&iv, sizeof(iv));
}
- TRACEME(("ok (integer 0x%"UVxf", value = %"IVdf")",
- PTR2UV(sv), iv));
+ TRACEME(("ok (integer 0x%"UVxf", value = %"IVdf")", PTR2UV(sv), iv));
} else
CROAK(("Can't determine type of %s(0x%"UVxf")",
* Store value first.
*/
- TRACEME(("(#%d) value 0x%"UVxf,
- i, PTR2UV(val)));
+ TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val)));
if (ret = store(cxt, val))
goto out;
* Store value first.
*/
- TRACEME(("(#%d) value 0x%"UVxf,
- i, PTR2UV(val)));
+ TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val)));
if (ret = store(cxt, val))
goto out;
if (mg->mg_ptr) {
TRACEME(("store_tied_item: storing a ref to a tied hash item"));
PUTMARK(SX_TIED_KEY);
- TRACEME(("store_tied_item: storing OBJ 0x%"UVxf,
- PTR2UV(mg->mg_obj)));
+ TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj)));
if (ret = store(cxt, mg->mg_obj))
return ret;
- TRACEME(("store_tied_item: storing PTR 0x%"UVxf,
- PTR2UV(mg->mg_ptr)));
+ TRACEME(("store_tied_item: storing PTR 0x%"UVxf, PTR2UV(mg->mg_ptr)));
if (ret = store(cxt, (SV *) mg->mg_ptr))
return ret;
TRACEME(("store_tied_item: storing a ref to a tied array item "));
PUTMARK(SX_TIED_IDX);
- TRACEME(("store_tied_item: storing OBJ 0x%"UVxf,
- PTR2UV(mg->mg_obj)));
+ TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj)));
if (ret = store(cxt, mg->mg_obj))
return ret;
if (svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE))
goto sv_seen; /* Avoid moving code too far to the right */
- TRACEME(("listed object %d at 0x%"UVxf" is unknown",
- i-1, PTR2UV(xsv)));
+ TRACEME(("listed object %d at 0x%"UVxf" is unknown", i-1, PTR2UV(xsv)));
/*
* We need to recurse to store that object and get it to be known
* If we recursed, the SX_HOOK has already been emitted.
*/
- TRACEME(("SX_HOOK (recursed=%d) flags=0x%x class=%"IVdf" len=%"IVdf" len2=%"IVdf" len3=%d",
+ TRACEME(("SX_HOOK (recursed=%d) flags=0x%x "
+ "class=%"IVdf" len=%"IVdf" len2=%"IVdf" len3=%d",
recursed, flags, (IV)classnum, (IV)len, (IV)len2, count-1));
/* SX_HOOK <flags> */
for (i = 1; i < count; i++) {
I32 tagval = htonl(LOW_32BITS(ary[i]));
- WRITE(&tagval, sizeof(I32));
+ WRITE_I32(tagval);
TRACEME(("object %d, tag #%d", i-1, ntohl(tagval)));
}
}
if (svh) {
I32 tagval = htonl(LOW_32BITS(*svh));
- TRACEME(("object 0x%"UVxf" seen as #%d",
- PTR2UV(sv), ntohl(tagval)));
+ TRACEME(("object 0x%"UVxf" seen as #%d", PTR2UV(sv), ntohl(tagval)));
PUTMARK(SX_OBJECT);
- WRITE(&tagval, sizeof(I32));
+ WRITE_I32(tagval);
return 0;
}
PUTMARK((unsigned char) sizeof(int));
PUTMARK((unsigned char) sizeof(long));
PUTMARK((unsigned char) sizeof(char *));
+ PUTMARK((unsigned char) sizeof(NV));
- TRACEME(("ok (magic_write byteorder = 0x%lx [%d], I%d L%d P%d)",
+ TRACEME(("ok (magic_write byteorder = 0x%lx [%d], I%d L%d P%d D%d)",
(unsigned long) BYTEORDER, (int) c,
- (int) sizeof(int), (int) sizeof(long), (int) sizeof(char *)));
+ (int) sizeof(int), (int) sizeof(long),
+ (int) sizeof(char *), (int) sizeof(NV)));
return 0;
}
SV **svh;
SV *xsv;
- READ(&tag, sizeof(I32));
+ READ_I32(tag);
tag = ntohl(tag);
svh = av_fetch(cxt->aseen, tag, FALSE);
if (!svh)
*/
static SV *retrieve_lscalar(stcxt_t *cxt)
{
- STRLEN len;
+ I32 len;
SV *sv;
RLEN(len);
static SV *retrieve_netint(stcxt_t *cxt)
{
SV *sv;
- int iv;
+ I32 iv;
TRACEME(("retrieve_netint (#%d)", cxt->tagnum));
- READ(&iv, sizeof(iv));
+ READ_I32(iv);
#ifdef HAS_NTOHL
sv = newSViv((int) ntohl(iv));
TRACEME(("network integer %d", (int) ntohl(iv)));
if ((int) c != sizeof(char *))
CROAK(("Pointer integer size is not compatible"));
+ if (version_major >= 2 && version_minor >= 2) {
+ GETMARK(c); /* sizeof(NV) */
+ if ((int) c != sizeof(NV))
+ CROAK(("Double size is not compatible"));
+ }
+
return &PL_sv_undef; /* OK */
}
if (type == SX_OBJECT) {
I32 tag;
- READ(&tag, sizeof(I32));
+ READ_I32(tag);
tag = ntohl(tag);
svh = av_fetch(cxt->aseen, tag, FALSE);
if (!svh)
#!./perl
-# $Id: compat-0.6.t,v 0.7 2000/08/03 22:04:44 ram Exp $
+# $Id: compat-0.6.t,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: compat-0.6.t,v $
-# Revision 0.7 2000/08/03 22:04:44 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
BEGIN {
#!./perl
-# $Id: blessed.t,v 0.7 2000/08/03 22:04:44 ram Exp $
+# $Id: blessed.t,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: blessed.t,v $
-# Revision 0.7 2000/08/03 22:04:44 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: canonical.t,v 0.7 2000/08/03 22:04:44 ram Exp $
+# $Id: canonical.t,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: canonical.t,v $
-# Revision 0.7 2000/08/03 22:04:44 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: dclone.t,v 0.7 2000/08/03 22:04:44 ram Exp $
+# $Id: dclone.t,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: dclone.t,v $
-# Revision 0.7 2000/08/03 22:04:44 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
sub BEGIN {
-;# $Id: dump.pl,v 0.7 2000/08/03 22:04:45 ram Exp $
+;# $Id: dump.pl,v 1.0 2000/09/01 19:40:41 ram Exp $
;#
;# Copyright (c) 1995-2000, Raphael Manfredi
;#
-;# You may redistribute only under the terms of the Artistic License,
-;# as specified in the README file that comes with the distribution.
+;# You may redistribute only under the same terms as Perl 5, as specified
+;# in the README file that comes with the distribution.
;#
;# $Log: dump.pl,v $
-;# Revision 0.7 2000/08/03 22:04:45 ram
-;# Baseline for second beta release.
+;# Revision 1.0 2000/09/01 19:40:41 ram
+;# Baseline for first official release.
;#
sub ok {
#!./perl
-# $Id: forgive.t,v 0.7.1.1 2000/08/03 22:04:45 ram Exp $
+# $Id: forgive.t,v 1.0.1.1 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# Original Author: Ulrich Pfeifer
# (C) Copyright 1997, Universitat Dortmund, all rights reserved.
#
# $Log: forgive.t,v $
-# Revision 0.7.1.1 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0.1.1 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: freeze.t,v 0.7 2000/08/03 22:04:45 ram Exp $
+# $Id: freeze.t,v 1.0 2000/09/01 19:40:41 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: freeze.t,v $
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:41 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: overload.t,v 0.7.1.1 2000/08/13 20:10:10 ram Exp $
+# $Id: overload.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: overload.t,v $
-# Revision 0.7.1.1 2000/08/13 20:10:10 ram
-# patch1: created
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: recurse.t,v 0.7 2000/08/03 22:04:45 ram Exp $
+# $Id: recurse.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: recurse.t,v $
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: retrieve.t,v 0.7 2000/08/03 22:04:45 ram Exp $
+# $Id: retrieve.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: retrieve.t,v $
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: store.t,v 0.7 2000/08/03 22:04:45 ram Exp $
+# $Id: store.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: store.t,v $
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
require 'lib/st-dump.pl';
}
-
-use Storable qw(store retrieve store_fd nstore_fd retrieve_fd);
+use Storable qw(store retrieve store_fd nstore_fd fd_retrieve);
print "1..20\n";
print "not " unless open(OUT, 'store');
binmode OUT;
-$r = retrieve_fd(::OUT);
+$r = fd_retrieve(::OUT);
print "not " unless defined $r;
print "ok 12\n";
print "not " unless &dump($foo) eq &dump($r);
print "ok 13\n";
-$r = retrieve_fd(::OUT);
+$r = fd_retrieve(::OUT);
print "not " unless defined $r;
print "ok 14\n";
print "not " unless &dump(\@a) eq &dump($r);
print "ok 15\n";
-$r = retrieve_fd(main::OUT);
+$r = fd_retrieve(main::OUT);
print "not " unless defined $r;
print "ok 16\n";
print "not " unless &dump($foo) eq &dump($r);
print "ok 17\n";
-$r = retrieve_fd(::OUT);
+$r = fd_retrieve(::OUT);
print "not " unless defined $r;
print "ok 18\n";
print "not " unless &dump(\%a) eq &dump($r);
print "ok 19\n";
-eval { $r = retrieve_fd(::OUT); };
+eval { $r = fd_retrieve(::OUT); };
print "not " unless $@;
print "ok 20\n";
#!./perl
-# $Id: tied.t,v 0.7.1.1 2000/08/13 20:10:27 ram Exp $
+# $Id: tied.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: tied.t,v $
-# Revision 0.7.1.1 2000/08/13 20:10:27 ram
-# patch1: added test case for "undef" in hashes
-#
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: tied_hook.t,v 0.7 2000/08/03 22:04:45 ram Exp $
+# $Id: tied_hook.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: tied_hook.t,v $
-# Revision 0.7 2000/08/03 22:04:45 ram
-# Baseline for second beta release.
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
sub BEGIN {
#!./perl
-# $Id: tied_items.t,v 0.7.1.2 2000/08/14 07:20:35 ram Exp $
+# $Id: tied_items.t,v 1.0 2000/09/01 19:40:42 ram Exp $
#
# Copyright (c) 1995-2000, Raphael Manfredi
#
-# You may redistribute only under the terms of the Artistic License,
-# as specified in the README file that comes with the distribution.
+# You may redistribute only under the same terms as Perl 5, as specified
+# in the README file that comes with the distribution.
#
# $Log: tied_items.t,v $
-# Revision 0.7.1.2 2000/08/14 07:20:35 ram
-# patch2: removed spurious dependency to Devel::Peek, used for testing only
-#
-# Revision 0.7.1.1 2000/08/13 20:10:31 ram
-# patch1: created
+# Revision 1.0 2000/09/01 19:40:42 ram
+# Baseline for first official release.
#
#