summaryrefslogtreecommitdiff
path: root/doio.c
diff options
context:
space:
mode:
authorLarry Wall <larry@netlabs.com>1993-12-10 00:00:00 +0000
committerLarry Wall <larry@netlabs.com>1993-12-10 00:00:00 +0000
commited6116ce9b9d13712ea252ee248b0400653db7f9 (patch)
tree348e8de37401fa4381f6bfe0989abef2e3b409e0 /doio.c
parent9bbf408117c16189b372e6657c9e5a15d01ea504 (diff)
downloadperl-ed6116ce9b9d13712ea252ee248b0400653db7f9.tar.gz
perl 5.0 alpha 5
[editor's note: the sparc executables have not been included, and emacs backup files and other cruft such as patch backup files have been removed. This was reconstructed from a tarball found on the September 1994 InfoMagic CD]
Diffstat (limited to 'doio.c')
-rw-r--r--doio.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/doio.c b/doio.c
index 2b8bbf9fd3..d76cefa6a5 100644
--- a/doio.c
+++ b/doio.c
@@ -867,9 +867,6 @@ FILE *fp;
switch (SvTYPE(sv)) {
case SVt_NULL:
return TRUE;
- case SVt_REF:
- fprintf(fp, "%s", sv_2pv(sv, &na));
- return !ferror(fp);
case SVt_IV:
if (SvMAGICAL(sv))
mg_get(sv);
@@ -1378,8 +1375,12 @@ SV **sp;
{
if (getinfo)
{
- if (SvREADONLY(astr))
- croak("Can't %s to readonly var", op_name[optype]);
+ if (SvTHINKFIRST(astr)) {
+ if (SvREADONLY(astr))
+ croak("Can't %s to readonly var", op_name[optype]);
+ if (SvROK(astr))
+ sv_unref(astr);
+ }
SvGROW(astr, infosize+1);
a = SvPV(astr, na);
}
@@ -1464,8 +1465,12 @@ SV **sp;
msize = SvIVx(*++mark);
mtype = (long)SvIVx(*++mark);
flags = SvIVx(*++mark);
- if (SvREADONLY(mstr))
- croak("Can't msgrcv to readonly var");
+ if (SvTHINKFIRST(mstr)) {
+ if (SvREADONLY(mstr))
+ croak("Can't msgrcv to readonly var");
+ if (SvROK(mstr))
+ sv_unref(mstr);
+ }
mbuf = SvPV(mstr, len);
if (len < sizeof(long)+msize+1) {
SvGROW(mstr, sizeof(long)+msize+1);
@@ -1541,8 +1546,12 @@ SV **sp;
return -1;
mbuf = SvPV(mstr, len);
if (optype == OP_SHMREAD) {
- if (SvREADONLY(mstr))
- croak("Can't shmread to readonly var");
+ if (SvTHINKFIRST(mstr)) {
+ if (SvREADONLY(mstr))
+ croak("Can't shmread to readonly var");
+ if (SvROK(mstr))
+ sv_unref(mstr);
+ }
if (len < msize) {
SvGROW(mstr, msize+1);
mbuf = SvPV(mstr, len);