Make gethostbyaddr() test in above work.
p4raw-id: //depot/perlio@9042
Pops an SV off the stack.
=for apidoc Amn|char*|POPp
+Pops a string off the stack. Deprecated. New code should provide
+a STRLEN n_a and use POPpx.
+
+=for apidoc Amn|char*|POPpx
Pops a string off the stack.
+Requires a variable STRLEN n_a in scope.
+
+=for apidoc Amn|char*|POPpbytex
+Pops a string off the stack which must consist of bytes i.e. characters < 256.
+Requires a variable STRLEN n_a in scope.
=for apidoc Amn|NV|POPn
Pops a double off the stack.
#define POPs (*sp--)
#define POPp (SvPVx(POPs, PL_na)) /* deprecated */
#define POPpx (SvPVx(POPs, n_a))
+#define POPpbytex (SvPVbytex(POPs, n_a))
#define POPn (SvNVx(POPs))
#define POPi ((IV)SvIVx(POPs))
#define POPu ((UV)SvUVx(POPs))
EXTEND(SP, 10);
if (which == OP_GHBYNAME)
#ifdef HAS_GETHOSTBYNAME
- hent = PerlSock_gethostbyname(POPpx);
+ hent = PerlSock_gethostbyname(POPpbytex);
#else
DIE(aTHX_ PL_no_sock_func, "gethostbyname");
#endif
int addrtype = POPi;
SV *addrsv = POPs;
STRLEN addrlen;
- Netdb_host_t addr = (Netdb_host_t) SvPV(addrsv, addrlen);
+ Netdb_host_t addr = (Netdb_host_t) SvPVbyte(addrsv, addrlen);
hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
#else
if ($#ARGV == -1) {
@ARGV = split(/[ \n]/,
- `echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t pod/*.t`);
+ `echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t pod/*.t camel-III/*.t`);
}
-# %infinite = ( 'comp/require.t', 1, 'op/bop.t', 1, 'lib/hostname.t', 1 );
+# %infinite = ( 'comp/require.t', 1, 'op/bop.t', 1, 'lib/hostname.t', 1 );
_testprogs('perl', @ARGV);
-_testprogs('compile', @ARGV) if (-e "../testcompile");
+_testprogs('compile', @ARGV) if (-e "../testcompile");
sub _testprogs {
$type = shift @_;
--------------------------------------------------------------------------------
EOT
- $ENV{PERLCC_TIMEOUT} = 120
+ $ENV{PERLCC_TIMEOUT} = 120
if ($type eq 'compile' && !$ENV{PERLCC_TIMEOUT});
$bad = 0;
while ($test = shift @tests) {
if ( $infinite{$test} && $type eq 'compile' ) {
- print STDERR "$test creates infinite loop! Skipping.\n";
+ print STDERR "$test creates infinite loop! Skipping.\n";
next;
}
if ($test =~ /^$/) {
: '';
my $testswitch = '-I. -MTestInit'; # -T will strict . from @INC
if ($type eq 'perl') {
- my $run = "./perl $testswitch $switch $utf $test |";
+ my $run = "./perl $testswitch $switch $utf $test |";
open(RESULTS,$run) or print "can't run '$run': $!.\n";
}
else {
}
else {
if (/^(not )?ok (\d+)(\s*#.*)?/ &&
- $2 == $next)
+ $2 == $next)
{
my($not, $num, $extra) = ($1, $2, $3);
my($istodo) = $extra =~ /^\s*#\s*TODO/ if $extra;
### Since not all tests were successful, you may want to run some
### of them individually and examine any diagnostic messages they
### produce. See the INSTALL document's section on "make test".
- ### If you are testing the compiler, then ignore this message
- ### and run
+ ### If you are testing the compiler, then ignore this message
+ ### and run
### ./perl harness
### in the directory ./t.
SHRDLU
###
### Since most tests were successful, you have a good chance to
### get information with better granularity by running
- ### ./perl harness
+ ### ./perl harness
### in directory ./t.
SHRDLU
}
--- /dev/null
+# See if the things Camel-III says are true.
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+use Test;
+plan test => 6;
+# Error messages may have wide chars, say that is okay - if we can.
+eval { binmode STDOUT,":utf8" };
+
+# Chapter 2 pp67/68
+my $vs = v1.20.300.4000;
+ok($vs,"\x{1}\x{14}\x{12c}\x{fa0}","v-string ne \\x{}");
+ok($vs,chr(1).chr(20).chr(300).chr(4000),"v-string ne chr()");
+ok('foo',v102.111.111,"v-string ne ''");
+
+# Chapter 15, pp403
+
+# See if sane addr and gethostbyaddr() work
+eval { require Socket; gethostbyaddr(v127.0.0.1,Socket::AF_INET()) };
+if ($@)
+ {
+ # No - so don't test insane fails.
+ skip("No Socket",'');
+ }
+else
+ {
+ my $ip = v2004.148.0.1;
+ my $host;
+ eval { $host = gethostbyaddr($ip,Socket::AF_INET()) };
+ ok($@ =~ /Wide character/,1,"Non-bytes leak to gethostbyaddr");
+ }
+
+# Chapter 28, pp671
+ok(v5.6.0 lt v5.7.0,1,"v5.6.0 lt v5.7.0 fails");
+# Some floating-point risk here ...
+my $v = ord($^V)+ord(substr($^V,1,1))/1000+ord(substr($^V,2,1))/1000000;
+ok($v,$],"\$^V and \$] do not match");
}
@tests = @ARGV;
-@tests = <base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t lib/*.t> unless @tests;
+@tests = <base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t lib/*.t camel-III/*.t> unless @tests;
Test::Harness::runtests @tests;
exit(0) unless -e "../testcompile";
# op/bop.t 1
# lib/hostname.t 1
# op/lex_assign.t 1
-# lib/ph.t 1
+# lib/ph.t 1
# );
my $dhwrapper = <<'EOT';
print "The tests ", join(' ', keys(%infinite)),
" generate infinite loops! Skipping!\n";
-$ENV{'HARNESS_COMPILE_TEST'} = 1;
+$ENV{'HARNESS_COMPILE_TEST'} = 1;
$ENV{'PERLCC_TIMEOUT'} = 120 unless $ENV{'PERLCC_TIMEOUT'};
-Test::Harness::runtests @tests;
+Test::Harness::runtests @tests;
foreach (keys %datahandle) {
unlink "$_.t";
}