summaryrefslogtreecommitdiffstats
path: root/modules/ssl/ssl_engine_io.c
diff options
context:
space:
mode:
authorChristophe Jaillet <jailletc36@apache.org>2020-08-01 12:42:57 +0200
committerChristophe Jaillet <jailletc36@apache.org>2020-08-01 12:42:57 +0200
commitbafd7197724eb98b81975aa60f35f1e5dbe520eb (patch)
treed47f03e83b93ff677f80b0f73effed36437c3351 /modules/ssl/ssl_engine_io.c
parentdon't try to load modules from a NULL path (diff)
downloadapache2-bafd7197724eb98b81975aa60f35f1e5dbe520eb.tar.xz
apache2-bafd7197724eb98b81975aa60f35f1e5dbe520eb.zip
Simplify and speed-up ssl_io_data_dump().
Instead of using a temp buffer for each byte or char written, and calling strlen over and over again to find the place where to copy this buffer, write directly at the correct place in the final buffer, and take advantage of 'apr_snprintf' returning the number of bytes copied. This looks like a hot path when running the test framework (because of TRACE7), so it could be slighly useful in this use case :) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1880500 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--modules/ssl/ssl_engine_io.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c
index 9ea36a5658..835cbe4b01 100644
--- a/modules/ssl/ssl_engine_io.c
+++ b/modules/ssl/ssl_engine_io.c
@@ -2332,19 +2332,18 @@ static void ssl_io_data_dump(conn_rec *c, server_rec *s,
const char *b, long len)
{
char buf[256];
- char tmp[64];
- int i, j, rows, trunc;
+ int i, j, rows, trunc, pos;
unsigned char ch;
trunc = 0;
- for(; (len > 0) && ((b[len-1] == ' ') || (b[len-1] == '\0')); len--)
+ for (; (len > 0) && ((b[len-1] == ' ') || (b[len-1] == '\0')); len--)
trunc++;
rows = (len / DUMP_WIDTH);
if ((rows * DUMP_WIDTH) < len)
rows++;
ap_log_cserror(APLOG_MARK, APLOG_TRACE7, 0, c, s,
"+-------------------------------------------------------------------------+");
- for(i = 0 ; i< rows; i++) {
+ for (i = 0 ; i < rows; i++) {
#if APR_CHARSET_EBCDIC
char ebcdic_text[DUMP_WIDTH];
j = DUMP_WIDTH;
@@ -2355,32 +2354,30 @@ static void ssl_io_data_dump(conn_rec *c, server_rec *s,
memcpy(ebcdic_text,(char *)(b) + i * DUMP_WIDTH, j);
ap_xlate_proto_from_ascii(ebcdic_text, j);
#endif /* APR_CHARSET_EBCDIC */
- apr_snprintf(tmp, sizeof(tmp), "| %04x: ", i * DUMP_WIDTH);
- apr_cpystrn(buf, tmp, sizeof(buf));
+ pos = 0;
+ pos += apr_snprintf(buf, sizeof(buf)-pos, "| %04x: ", i * DUMP_WIDTH);
for (j = 0; j < DUMP_WIDTH; j++) {
if (((i * DUMP_WIDTH) + j) >= len)
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, " ");
else {
ch = ((unsigned char)*((char *)(b) + i * DUMP_WIDTH + j)) & 0xff;
- apr_snprintf(tmp, sizeof(tmp), "%02x%c", ch , j==7 ? '-' : ' ');
- apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, "%02x%c", ch , j==7 ? '-' : ' ');
}
}
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, " ");
for (j = 0; j < DUMP_WIDTH; j++) {
if (((i * DUMP_WIDTH) + j) >= len)
- apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf));
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, " ");
else {
ch = ((unsigned char)*((char *)(b) + i * DUMP_WIDTH + j)) & 0xff;
#if APR_CHARSET_EBCDIC
- apr_snprintf(tmp, sizeof(tmp), "%c", (ch >= 0x20 && ch <= 0x7F) ? ebcdic_text[j] : '.');
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, "%c", (ch >= 0x20 && ch <= 0x7F) ? ebcdic_text[j] : '.');
#else /* APR_CHARSET_EBCDIC */
- apr_snprintf(tmp, sizeof(tmp), "%c", ((ch >= ' ') && (ch <= '~')) ? ch : '.');
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, "%c", ((ch >= ' ') && (ch <= '~')) ? ch : '.');
#endif /* APR_CHARSET_EBCDIC */
- apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf));
}
}
- apr_cpystrn(buf+strlen(buf), " |", sizeof(buf)-strlen(buf));
+ pos += apr_snprintf(buf+pos, sizeof(buf)-pos, " |");
ap_log_cserror(APLOG_MARK, APLOG_TRACE7, 0, c, s, "%s", buf);
}
if (trunc > 0)
@@ -2388,7 +2385,6 @@ static void ssl_io_data_dump(conn_rec *c, server_rec *s,
"| %04ld - <SPACES/NULS>", len + trunc);
ap_log_cserror(APLOG_MARK, APLOG_TRACE7, 0, c, s,
"+-------------------------------------------------------------------------+");
- return;
}
long ssl_io_data_cb(BIO *bio, int cmd,