This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In perl.c, change S_open_script() to return rsfp.
authorNicholas Clark <nick@ccl4.org>
Thu, 23 Feb 2012 14:44:33 +0000 (15:44 +0100)
committerNicholas Clark <nick@ccl4.org>
Mon, 27 Feb 2012 10:31:48 +0000 (11:31 +0100)
Previously it was being passed &rsfp as a parameter, because it was
returning another value, fdscript. However, the return value has been
ignored since commit cc69b689ee7c2745 removed suidperl in January 2009.

embed.fnc
embed.h
perl.c
proto.h

index a7e004f..5c380ff 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1784,8 +1784,8 @@ s |void   |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
 s      |void   |init_predump_symbols
 rs     |void   |my_exit_jump
 s      |void   |nuke_stacks
-s      |int    |open_script    |NN const char *scriptname|bool dosearch \
-                               |NN bool *suidscript|NN PerlIO **rsfpp
+s      |PerlIO *|open_script   |NN const char *scriptname|bool dosearch \
+                               |NN bool *suidscript
 sr     |void   |usage
 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
 so     |void   |validate_suid  |NN PerlIO *rsfp
diff --git a/embed.h b/embed.h
index 541309e..9fdf91b 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define minus_v()              S_minus_v(aTHX)
 #define my_exit_jump()         S_my_exit_jump(aTHX)
 #define nuke_stacks()          S_nuke_stacks(aTHX)
-#define open_script(a,b,c,d)   S_open_script(aTHX_ a,b,c,d)
+#define open_script(a,b,c)     S_open_script(aTHX_ a,b,c)
 #define parse_body(a,b)                S_parse_body(aTHX_ a,b)
 #define run_body(a)            S_run_body(aTHX_ a)
 #define usage()                        S_usage(aTHX)
diff --git a/perl.c b/perl.c
index 5518675..2385f89 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2073,7 +2073,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
     {
        bool suidscript = FALSE;
 
-       open_script(scriptname, dosearch, &suidscript, &rsfp);
+       rsfp = open_script(scriptname, dosearch, &suidscript);
 
        validate_suid(validarg, scriptname, fdscript, suidscript,
                      linestr_sv, rsfp);
@@ -3614,11 +3614,11 @@ S_init_main_stash(pTHX)
     sv_setpvs(get_sv("/", GV_ADD), "\n");
 }
 
-STATIC int
-S_open_script(pTHX_ const char *scriptname, bool dosearch,
-             bool *suidscript, PerlIO **rsfpp)
+STATIC PerlIO *
+S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
 {
     int fdscript = -1;
+    PerlIO *rsfp = NULL;
     dVAR;
 
     PERL_ARGS_ASSERT_OPEN_SCRIPT;
@@ -3668,16 +3668,16 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch,
     if (*PL_origfilename == '-' && PL_origfilename[1] == '\0')
        scriptname = (char *)"";
     if (fdscript >= 0) {
-       *rsfpp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE);
+       rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE);
 #       if defined(HAS_FCNTL) && defined(F_SETFD)
-           if (*rsfpp)
+           if (rsfp)
                 /* ensure close-on-exec */
-               fcntl(PerlIO_fileno(*rsfpp),F_SETFD,1);
+               fcntl(PerlIO_fileno(rsfp),F_SETFD,1);
 #       endif
     }
     else if (!*scriptname) {
        forbid_setid(0, *suidscript);
-       *rsfpp = PerlIO_stdin();
+       rsfp = PerlIO_stdin();
     }
     else {
 #ifdef FAKE_BIT_BUCKET
@@ -3712,7 +3712,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch,
 #endif
        }
 #endif
-       *rsfpp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
+       rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
 #ifdef FAKE_BIT_BUCKET
        if (memEQ(scriptname, FAKE_BIT_BUCKET_PREFIX,
                  sizeof(FAKE_BIT_BUCKET_PREFIX) - 1)
@@ -3722,12 +3722,12 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch,
        scriptname = BIT_BUCKET;
 #endif
 #       if defined(HAS_FCNTL) && defined(F_SETFD)
-           if (*rsfpp)
+           if (rsfp)
                 /* ensure close-on-exec */
-               fcntl(PerlIO_fileno(*rsfpp),F_SETFD,1);
+               fcntl(PerlIO_fileno(rsfp),F_SETFD,1);
 #       endif
     }
-    if (!*rsfpp) {
+    if (!rsfp) {
        /* PSz 16 Sep 03  Keep neat error message */
        if (PL_e_script)
            Perl_croak(aTHX_ "Can't open "BIT_BUCKET": %s\n", Strerror(errno));
@@ -3735,7 +3735,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch,
            Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
                    CopFILE(PL_curcop), Strerror(errno));
     }
-    return fdscript;
+    return rsfp;
 }
 
 /* Mention
diff --git a/proto.h b/proto.h
index f01e7c3..dd3fd58 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -5925,12 +5925,11 @@ STATIC void     S_my_exit_jump(pTHX)
                        __attribute__noreturn__;
 
 STATIC void    S_nuke_stacks(pTHX);
-STATIC int     S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript, PerlIO **rsfpp)
+STATIC PerlIO *        S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
                        __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_4);
+                       __attribute__nonnull__(pTHX_3);
 #define PERL_ARGS_ASSERT_OPEN_SCRIPT   \
-       assert(scriptname); assert(suidscript); assert(rsfpp)
+       assert(scriptname); assert(suidscript)
 
 STATIC void*   S_parse_body(pTHX_ char **env, XSINIT_t xsinit);
 STATIC void    S_run_body(pTHX_ I32 oldscope)