This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
refactor pp_socket, pp_socketpair, pp_bind
authorDaniel Dragan <bulk88@hotmail.com>
Sun, 22 Dec 2013 06:39:09 +0000 (01:39 -0500)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 23 Dec 2013 16:25:08 +0000 (08:25 -0800)
pp_socket: remove unreachable made by commit 9c9f25b8ce

pp_socketpair: increase locality, now gv2/io2 is tested before gv1 is
    processed, *v1 vars become non-const to avoid large WS changes in
    opening new scope

pp_bind: move op_type's init so it isn't saved by CC across a func call

pp_sys.c

index 74b65f7..aba3b14 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2379,8 +2379,6 @@ PP(pp_socket)
 
     if (!io) {
        report_evil_fh(gv);
-       if (io && IoIFP(io))
-           do_close(gv, FALSE);
        SETERRNO(EBADF,LIB_INVARG);
        RETPUSHUNDEF;
     }
@@ -2413,19 +2411,22 @@ PP(pp_sockpair)
 {
 #if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
     dVAR; dSP;
+    int fd[2];
     const int protocol = POPi;
     const int type = POPi;
     const int domain = POPi;
+    GV * gv1;
+    IO * io1;
+
     GV * const gv2 = MUTABLE_GV(POPs);
-    GV * const gv1 = MUTABLE_GV(POPs);
-    IO * const io1 = gv1 ? GvIOn(gv1) : NULL;
     IO * const io2 = gv2 ? GvIOn(gv2) : NULL;
-    int fd[2];
+    if (!io2)
+        report_evil_fh(gv2);
 
+    gv1 = MUTABLE_GV(POPs);
+    io1 = gv1 ? GvIOn(gv1) : NULL;
     if (!io1)
        report_evil_fh(gv1);
-    if (!io2)
-       report_evil_fh(gv2);
 
     if (io1 && IoIFP(io1))
        do_close(gv1, FALSE);
@@ -2475,12 +2476,13 @@ PP(pp_bind)
     GV * const gv = MUTABLE_GV(POPs);
     IO * const io = GvIOn(gv);
     STRLEN len;
-    const int op_type = PL_op->op_type;
+    int op_type;
 
     if (!io || !IoIFP(io))
        goto nuts;
 
     addr = SvPV_const(addrsv, len);
+    op_type = PL_op->op_type;
     TAINT_PROPER(PL_op_desc[op_type]);
     if ((op_type == OP_BIND
         ? PerlSock_bind(PerlIO_fileno(IoIFP(io)), (struct sockaddr *)addr, len)