Given that the buffer for mode in Perl_do_openn() has been initialised
Nicholas Clark [Tue, 16 Oct 2007 09:40:15 +0000 (09:40 +0000)]
to all NUL bytes, and the "string" being appended is one character,
it's way faster just to write the byte in question to the buffer.

p4raw-id: //depot/perl@32113

doio.c

diff --git a/doio.c b/doio.c
index 8d7c812..1c7eb52 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -259,9 +259,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
            mode[0] = 'w';
            writing = 1;
             if (out_raw)
-                my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+               mode[1] = 'b';
             else if (out_crlf)
-                my_strlcat(mode, "t", PERL_MODE_MAX - 1); 
+               mode[1] = 't';
            if (num_svs > 1) {
                fp = PerlProc_popen_list(mode, num_svs, svp);
            }
@@ -290,9 +290,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
            writing = 1;
 
             if (out_raw)
-                my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+               mode[1] = 'b';
             else if (out_crlf)
-                my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+               mode[1] = 't';
            if (*type == '&') {
              duplicity:
                dodup = PERLIO_DUP_FD;
@@ -416,9 +416,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
            } while (isSPACE(*type));
            mode[0] = 'r';
             if (in_raw)
-                my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+               mode[1] = 'b';
             else if (in_crlf)
-                my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+               mode[1] = 't';
            if (*type == '&') {
                goto duplicity;
            }
@@ -470,9 +470,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
            mode[0] = 'r';
 
             if (in_raw)
-                my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+               mode[1] = 'b';
             else if (in_crlf)
-                my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+               mode[1] = 't';
 
            if (num_svs > 1) {
                fp = PerlProc_popen_list(mode,num_svs,svp);
@@ -501,9 +501,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
            mode[0] = 'r';
 
             if (in_raw)
-                my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+               mode[1] = 'b';
             else if (in_crlf)
-                my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+               mode[1] = 't';
 
            if (*name == '-' && name[1] == '\0') {
                fp = PerlIO_stdin();