Change 11693 by gsar@latte-gsar on 2001/08/17 01:07:21

        change#10334 leaks memory, copies string when it doesn't
        need to

Affected files ...

... //depot/perl/perl.c#359 edit

Differences ...

==== //depot/perl/perl.c#359 (text) ====
Index: perl/perl.c
--- perl/perl.c.~1~     Thu Aug 16 19:15:05 2001
+++ perl/perl.c Thu Aug 16 19:15:05 2001
@@ -1041,7 +1041,7 @@
     AV* comppadlist;
     register SV *sv;
     register char *s;
-    char *popts, *cddir = Nullch;
+    char *cddir = Nullch;
 
     sv_setpvn(PL_linestr,"",0);
     sv = newSVpvn("",0);               /* first used for -I flags */
@@ -1271,14 +1271,15 @@
 #ifndef SECURE_INTERNAL_GETENV
         !PL_tainting &&
 #endif
-       (popts = PerlEnv_getenv("PERL5OPT")))
+       (s = PerlEnv_getenv("PERL5OPT")))
     {
-       s = savepv(popts);
+       char *popt = s;
        while (isSPACE(*s))
            s++;
        if (*s == '-' && *(s+1) == 'T')
            PL_tainting = TRUE;
        else {
+           char *popt_copy = Nullch;
            while (s && *s) {
                char *d;
                while (isSPACE(*s))
@@ -1295,6 +1296,11 @@
                    Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
                while (++s && *s) {
                    if (isSPACE(*s)) {
+                       if (!popt_copy) {
+                           popt_copy = SvPVX(sv_2mortal(newSVpv(popt,0)));
+                           s = popt_copy + (s - popt);
+                           d = popt_copy + (d - popt);
+                       }
                        *s++ = '\0';
                        break;
                    }
End of Patch.

Reply via email to