strcat(mode, "t");
if (*type == '&') {
- name = type;
duplicity:
dodup = 1;
- name++;
- if (*name == '=') {
+ type++;
+ if (*type == '=') {
dodup = 0;
- name++;
- }
- if (num_svs) {
- goto unknown_desr;
+ type++;
}
- if (!*name && supplied_fp)
+ if (!num_svs && !*type && supplied_fp)
/* "<+&" etc. is used by typemaps */
fp = supplied_fp;
else {
- /*SUPPRESS 530*/
- for (; isSPACE(*name); name++) ;
- if (isDIGIT(*name))
- fd = atoi(name);
+ if (num_svs > 1) {
+ Perl_croak(aTHX_ "More than one argument to '%c&' open",IoTYPE(io));
+ }
+ if (num_svs && SvIOK(*svp))
+ fd = SvUV(*svp);
+ else if (isDIGIT(*type)) {
+ /*SUPPRESS 530*/
+ for (; isSPACE(*type); type++) ;
+ fd = atoi(type);
+ }
else {
IO* thatio;
- gv = gv_fetchpv(name,FALSE,SVt_PVIO);
- thatio = GvIO(gv);
+ if (num_svs) {
+ thatio = sv_2io(*svp);
+ }
+ else {
+ GV *thatgv;
+ /*SUPPRESS 530*/
+ for (; isSPACE(*type); type++) ;
+ thatgv = gv_fetchpv(type,FALSE,SVt_PVIO);
+ thatio = GvIO(thatgv);
+ }
if (!thatio) {
#ifdef EINVAL
SETERRNO(EINVAL,SS$_IVCHAN);
strcat(mode, "t");
if (*type == '&') {
- name = type;
goto duplicity;
}
if (*type == IoTYPE_STD && (!type[1] || isSPACE(type[1]) || type[1] == ':')) {
if (num_svs > 1) {
fp = PerlProc_popen_list(mode,num_svs,svp);
}
- else
- {
+ else {
fp = PerlProc_popen(name,mode);
}
IoTYPE(io) = IoTYPE_PIPE;
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
-}
+}
-# $RCSfile$
+# $RCSfile$
$| = 1;
use warnings;
$Is_VMS = $^O eq 'VMS';
# 1..9
{
- unlink("afile") if -f "afile";
+ unlink("afile") if -f "afile";
print "$!\nnot " unless open(my $f,"+>afile");
ok;
binmode $f;
- print "not " unless -f "afile";
+ print "not " unless -f "afile";
ok;
print "not " unless print $f "SomeData\n";
ok;
$b = <$f>;
print "not " unless $b eq "SomeData\n";
ok;
- print "not " unless -f $f;
+ print "not " unless -f $f;
ok;
- eval { die "Message" };
+ eval { die "Message" };
# warn $@;
print "not " unless $@ =~ /<\$f> line 1/;
ok;
print "not " unless close($f);
ok;
- unlink("afile");
+ unlink("afile");
}
# 10..12
print "not " unless -s 'afile' > 20;
ok;
- unlink("afile");
+ unlink("afile");
}
# 24..26
1;
EOE
ok;
-$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
+$@ =~ /Bad filehandle:\s+afile/ or print "not ($@)";
ok;
# local $file tests
# 33..41
{
- unlink("afile") if -f "afile";
+ unlink("afile") if -f "afile";
print "$!\nnot " unless open(local $f,"+>afile");
ok;
binmode $f;
- print "not " unless -f "afile";
+ print "not " unless -f "afile";
ok;
print "not " unless print $f "SomeData\n";
ok;
$b = <$f>;
print "not " unless $b eq "SomeData\n";
ok;
- print "not " unless -f $f;
+ print "not " unless -f $f;
ok;
- eval { die "Message" };
+ eval { die "Message" };
# warn $@;
print "not " unless $@ =~ /<\$f> line 1/;
ok;
print "not " unless close($f);
ok;
- unlink("afile");
+ unlink("afile");
}
# 42..44
print "not " unless -s 'afile' > 20;
ok;
- unlink("afile");
+ unlink("afile");
}
# 56..58
1;
EOE
ok;
-$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
+$@ =~ /Bad filehandle:\s+afile/ or print "not ($@) ";
ok;
# 65..66