[exim-cvs] Lose more string-copy operations

Inizio della pagina
Delete this message
Reply to this message
Autore: Exim Git Commits Mailing List
Data:  
To: exim-cvs
Oggetto: [exim-cvs] Lose more string-copy operations
Gitweb: https://git.exim.org/exim.git/commitdiff/52f12a7cec769b679305bb9ba23534dfd155d46a
Commit:     52f12a7cec769b679305bb9ba23534dfd155d46a
Parent:     1100a343aead3a686a31652d78e4b64dc5e982e5
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Sat Nov 17 19:40:01 2018 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Sat Nov 17 21:36:13 2018 +0000


    Lose more string-copy operations
---
 src/src/arc.c             | 26 ++++++-----------
 src/src/daemon.c          | 12 ++++----
 src/src/dkim.c            | 23 ++++++++-------
 src/src/expand.c          | 72 ++++++++++++++++-------------------------------
 src/src/lookups/redis.c   |  4 +--
 src/src/receive.c         |  7 ++---
 src/src/smtp_in.c         | 16 +++--------
 src/src/transports/smtp.c | 16 +++++------
 8 files changed, 66 insertions(+), 110 deletions(-)


diff --git a/src/src/arc.c b/src/src/arc.c
index aa0d1c9..6c4bcc6 100644
--- a/src/src/arc.c
+++ b/src/src/arc.c
@@ -1194,7 +1194,7 @@ arc_line * al = (arc_line *)(as+1);
header_line * h = (header_line *)(al+1);

g = string_catn(g, ARC_HDR_AAR, ARC_HDRLEN_AAR);
-g = string_cat(g, string_sprintf(" i=%d; %s;\r\n\t", instance, identity));
+g = string_fmt_append(g, " i=%d; %s;\r\n\t", instance, identity);
g = string_catn(g, US ar->data, ar->len);

h->slen = g->ptr - aar_off;
@@ -1307,20 +1307,14 @@ header_line * h = (header_line *)(al+1);
/* Construct the to-be-signed AMS pseudo-header: everything but the sig. */

 ams_off = g->ptr;
-g = string_append(g, 7,
-      ARC_HDR_AMS,
-      US" i=", string_sprintf("%d", instance),
-      US"; a=rsa-sha256; c=relaxed; d=", identity,        /*XXX hardwired */
-      US"; s=", selector);
+g = string_fmt_append(g, "%s i=%d; a=rsa-sha256; c=relaxed; d=%s; s=%s",
+      ARC_HDR_AMS, instance, identity, selector);    /*XXX hardwired a= */
 if (options & ARC_SIGN_OPT_TSTAMP)
-  g = string_append(g, 2,
-      US"; t=", string_sprintf("%lu", (u_long)now));
+  g = string_fmt_append(g, "; t=%lu", (u_long)now);
 if (options & ARC_SIGN_OPT_EXPIRE)
-  g = string_append(g, 2,
-      US"; x=", string_sprintf("%lu", (u_long)expire));
-g = string_append(g, 3,
-      US";\r\n\tbh=", pdkim_encode_base64(bodyhash),
-      US";\r\n\th=");
+  g = string_fmt_append(g, "; x=%lu", (u_long)expire);
+g = string_fmt_append(g, ";\r\n\tbh=%s;\r\n\th=",
+      pdkim_encode_base64(bodyhash));


 for(col = 3; rheaders; rheaders = rheaders->prev)
   {
@@ -1828,16 +1822,14 @@ if (arc_state)
   g = string_append(g, 2, US";\n\tarc=", arc_state);
   if (arc_received_instance > 0)
     {
-    g = string_append(g, 3, US" (i=",
-      string_sprintf("%d", arc_received_instance), US")");
+    g = string_fmt_append(g, " (i=%d)", arc_received_instance);
     if (arc_state_reason)
       g = string_append(g, 3, US"(", arc_state_reason, US")");
     g = string_catn(g, US" header.s=", 10);
     highest_ams = arc_received->hdr_ams;
     g = string_catn(g, highest_ams->s.data, highest_ams->s.len);


-    g = string_append(g, 2,
-      US" arc.oldest-pass=", string_sprintf("%d", arc_oldest_pass));
+    g = string_fmt_append(g, " arc.oldest-pass=%d", arc_oldest_pass);


     if (sender_host_address)
       g = string_append(g, 2, US" smtp.remote-ip=", sender_host_address);
diff --git a/src/src/daemon.c b/src/src/daemon.c
index 1a15d46..a852192 100644
--- a/src/src/daemon.c
+++ b/src/src/daemon.c
@@ -106,10 +106,10 @@ Returns:         nothing
 static void
 never_error(uschar *log_msg, uschar *smtp_msg, int was_errno)
 {
-uschar *emsg = (was_errno <= 0)? US"" :
-  string_sprintf(": %s", strerror(was_errno));
+uschar *emsg = was_errno <= 0
+  ? US"" : string_sprintf(": %s", strerror(was_errno));
 log_write(0, LOG_MAIN|LOG_PANIC, "%s%s", log_msg, emsg);
-if (smtp_out != NULL) smtp_printf("421 %s\r\n", FALSE, smtp_msg);
+if (smtp_out) smtp_printf("421 %s\r\n", FALSE, smtp_msg);
 }



@@ -202,11 +202,11 @@ memory is reclaimed. */
whofrom = string_append(NULL, 3, "[", sender_host_address, "]");

if (LOGGING(incoming_port))
- whofrom = string_append(whofrom, 2, ":", string_sprintf("%d", sender_host_port));
+ whofrom = string_fmt_append(whofrom, ":%d", sender_host_port);

 if (LOGGING(incoming_interface))
-  whofrom = string_append(whofrom, 4, " I=[",
-    interface_address, "]:", string_sprintf("%d", interface_port));
+  whofrom = string_fmt_append(whofrom, " I=[%s]:%d",
+    interface_address, interface_port);


 (void) string_from_gstring(whofrom);    /* Terminate the newly-built string */


diff --git a/src/src/dkim.c b/src/src/dkim.c
index 4d1822e..5209cd9 100644
--- a/src/src/dkim.c
+++ b/src/src/dkim.c
@@ -192,19 +192,18 @@ if (!(s = sig->domain)) s = US"<UNSET>";
 logmsg = string_append(logmsg, 2, "d=", s);
 if (!(s = sig->selector)) s = US"<UNSET>";
 logmsg = string_append(logmsg, 2, " s=", s);
-logmsg = string_append(logmsg, 7,
-  " c=", sig->canon_headers == PDKIM_CANON_SIMPLE ? "simple" : "relaxed",
-  "/",   sig->canon_body    == PDKIM_CANON_SIMPLE ? "simple" : "relaxed",
-  " a=", dkim_sig_to_a_tag(sig),
-string_sprintf(" b=" SIZE_T_FMT,
-        (int)sig->sighash.len > -1 ? sig->sighash.len * 8 : 0));
+logmsg = string_fmt_append(logmsg, " c=%s/%s a=%s b=" SIZE_T_FMT,
+      sig->canon_headers == PDKIM_CANON_SIMPLE ? "simple" : "relaxed",
+      sig->canon_body    == PDKIM_CANON_SIMPLE ? "simple" : "relaxed",
+      dkim_sig_to_a_tag(sig),
+      (int)sig->sighash.len > -1 ? sig->sighash.len * 8 : (size_t)0);
 if ((s= sig->identity)) logmsg = string_append(logmsg, 2, " i=", s);
-if (sig->created > 0) logmsg = string_cat(logmsg,
-                  string_sprintf(" t=%lu", sig->created));
-if (sig->expires > 0) logmsg = string_cat(logmsg,
-                  string_sprintf(" x=%lu", sig->expires));
-if (sig->bodylength > -1) logmsg = string_cat(logmsg,
-                  string_sprintf(" l=%lu", sig->bodylength));
+if (sig->created > 0) logmsg = string_fmt_append(logmsg, " t=%lu",
+                    sig->created);
+if (sig->expires > 0) logmsg = string_fmt_append(logmsg, " x=%lu",
+                    sig->expires);
+if (sig->bodylength > -1) logmsg = string_fmt_append(logmsg, " l=%lu",
+                    sig->bodylength);


if (sig->verify_status & PDKIM_VERIFY_POLICY)
logmsg = string_append(logmsg, 5,
diff --git a/src/src/expand.c b/src/src/expand.c
index fcf170d..0edd95d 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -6674,7 +6674,6 @@ while (*s != 0)

       case EOP_BASE62D:
         {
-        uschar buf[16];
         uschar *tt = sub;
         unsigned long int n = 0;
         while (*tt != 0)
@@ -6689,8 +6688,7 @@ while (*s != 0)
             }
           n = n * BASE_62 + (t - base62_chars);
           }
-        (void)sprintf(CS buf, "%ld", n);
-        yield = string_cat(yield, buf);
+        yield = string_fmt_append(yield, "%ld", n);
         continue;
         }


@@ -6739,11 +6737,10 @@ while (*s != 0)
       md5 base;
       uschar digest[16];
       int j;
-      char st[33];
       md5_start(&base);
       md5_end(&base, sub, Ustrlen(sub), digest);
-      for(j = 0; j < 16; j++) sprintf(st+2*j, "%02x", digest[j]);
-      yield = string_cat(yield, US st);
+      for (j = 0; j < 16; j++)
+        yield = string_fmt_append(yield, "%02x", digest[j]);
       }
         continue;


@@ -6760,11 +6757,10 @@ while (*s != 0)
       hctx h;
       uschar digest[20];
       int j;
-      char st[41];
       sha1_start(&h);
       sha1_end(&h, sub, Ustrlen(sub), digest);
-      for(j = 0; j < 20; j++) sprintf(st+2*j, "%02X", digest[j]);
-      yield = string_catn(yield, US st, 40);
+      for (j = 0; j < 20; j++)
+        yield = string_fmt_append(yield, "%02X", digest[j]);
       }
         continue;


@@ -6779,7 +6775,6 @@ while (*s != 0)
       {
       hctx h;
       blob b;
-      char st[3];


       if (!exim_sha_init(&h, HASH_SHA2_256))
         {
@@ -6789,10 +6784,7 @@ while (*s != 0)
       exim_sha_update(&h, sub, Ustrlen(sub));
       exim_sha_finish(&h, &b);
       while (b.len-- > 0)
-        {
-        sprintf(st, "%02X", *b.data++);
-        yield = string_catn(yield, US st, 2);
-        }
+        yield = string_fmt_append(yield, "%02X", *b.data++);
       }
 #else
       expand_string_message = US"sha256 only supported with TLS";
@@ -6804,7 +6796,6 @@ while (*s != 0)
     {
     hctx h;
     blob b;
-    char st[3];
     hashmethod m = !arg ? HASH_SHA3_256
       : Ustrcmp(arg, "224") == 0 ? HASH_SHA3_224
       : Ustrcmp(arg, "256") == 0 ? HASH_SHA3_256
@@ -6821,10 +6812,7 @@ while (*s != 0)
     exim_sha_update(&h, sub, Ustrlen(sub));
     exim_sha_finish(&h, &b);
     while (b.len-- > 0)
-      {
-      sprintf(st, "%02X", *b.data++);
-      yield = string_catn(yield, US st, 2);
-      }
+      yield = string_fmt_append(yield, "%02X", *b.data++);
     }
         continue;
 #else
@@ -6888,7 +6876,7 @@ while (*s != 0)
         while (*(++t) != 0)
           {
           if (*t < 0x21 || 0x7E < *t)
-            yield = string_catn(yield, string_sprintf("\\x%02x", *t), 4);
+            yield = string_fmt_append(yield, "\\x%02x", *t);
       else
         yield = string_catn(yield, t, 1);
           }
@@ -6901,12 +6889,10 @@ while (*s != 0)
         {
     int cnt = 0;
     int sep = 0;
-    uschar * cp;
     uschar buffer[256];


     while (string_nextinlist(CUSS &sub, &sep, buffer, sizeof(buffer)) != NULL) cnt++;
-    cp = string_sprintf("%d", cnt);
-        yield = string_cat(yield, cp);
+    yield = string_fmt_append(yield, "%d", cnt);
         continue;
         }


@@ -7481,7 +7467,7 @@ while (*s != 0)
     for (s = sub; (c = *s); s++)
       yield = c < 127 && c != '\\'
         ? string_catn(yield, s, 1)
-        : string_catn(yield, string_sprintf("\\%03o", c), 4);
+        : string_fmt_append(yield, "\\%03o", c);
     continue;
     }


@@ -7493,15 +7479,14 @@ while (*s != 0)
         uschar *save_sub = sub;
         uschar *error = NULL;
         int_eximarith_t n = eval_expr(&sub, (c == EOP_EVAL10), &error, FALSE);
-        if (error != NULL)
+        if (error)
           {
           expand_string_message = string_sprintf("error in expression "
             "evaluation: %s (after processing \"%.*s\")", error,
         (int)(sub-save_sub), save_sub);
           goto EXPAND_FAILED;
           }
-        sprintf(CS var_buffer, PR_EXIM_ARITH, n);
-        yield = string_cat(yield, var_buffer);
+        yield = string_fmt_append(yield, PR_EXIM_ARITH, n);
         continue;
         }


@@ -7516,8 +7501,7 @@ while (*s != 0)
             "Exim time interval in \"%s\" operator", sub, name);
           goto EXPAND_FAILED;
           }
-        sprintf(CS var_buffer, "%d", n);
-        yield = string_cat(yield, var_buffer);
+        yield = string_fmt_append(yield, "%d", n);
         continue;
         }


@@ -7569,12 +7553,8 @@ while (*s != 0)
       /* strlen returns the length of the string */


       case EOP_STRLEN:
-        {
-        uschar buff[24];
-        (void)sprintf(CS buff, "%d", Ustrlen(sub));
-        yield = string_cat(yield, buff);
+        yield = string_fmt_append(yield, "%d", Ustrlen(sub));
         continue;
-        }


       /* length_n or l_n takes just the first n characters or the whole string,
       whichever is the shorter;
@@ -7607,7 +7587,7 @@ while (*s != 0)
         int len;
         uschar *ret;


-        if (arg == NULL)
+        if (!arg)
           {
           expand_string_message = string_sprintf("missing values after %s",
             name);
@@ -7671,14 +7651,13 @@ while (*s != 0)


       case EOP_STAT:
         {
-        uschar *s;
         uschar smode[12];
         uschar **modetable[3];
         int i;
         mode_t mode;
         struct stat st;


-        if ((expand_forbid & RDO_EXISTS) != 0)
+        if (expand_forbid & RDO_EXISTS)
           {
           expand_string_message = US"Use of the stat() expansion is not permitted";
           goto EXPAND_FAILED;
@@ -7712,13 +7691,13 @@ while (*s != 0)
           }


         smode[10] = 0;
-        s = string_sprintf("mode=%04lo smode=%s inode=%ld device=%ld links=%ld "
+        yield = string_fmt_append(yield,
+      "mode=%04lo smode=%s inode=%ld device=%ld links=%ld "
           "uid=%ld gid=%ld size=" OFF_T_FMT " atime=%ld mtime=%ld ctime=%ld",
           (long)(st.st_mode & 077777), smode, (long)st.st_ino,
           (long)st.st_dev, (long)st.st_nlink, (long)st.st_uid,
           (long)st.st_gid, st.st_size, (long)st.st_atime,
           (long)st.st_mtime, (long)st.st_ctime);
-        yield = string_cat(yield, s);
         continue;
         }


@@ -7726,14 +7705,11 @@ while (*s != 0)

       case EOP_RANDINT:
         {
-        int_eximarith_t max;
-        uschar *s;
+        int_eximarith_t max = expanded_string_integer(sub, TRUE);


-        max = expanded_string_integer(sub, TRUE);
-        if (expand_string_message != NULL)
+        if (expand_string_message)
           goto EXPAND_FAILED;
-        s = string_sprintf("%d", vaguely_random_number((int)max));
-        yield = string_cat(yield, s);
+        yield = string_fmt_append(yield, "%d", vaguely_random_number((int)max));
         continue;
         }


@@ -7759,9 +7735,9 @@ while (*s != 0)
       /* Unknown operator */


       default:
-      expand_string_message =
-        string_sprintf("unknown expansion operator \"%s\"", name);
-      goto EXPAND_FAILED;
+    expand_string_message =
+      string_sprintf("unknown expansion operator \"%s\"", name);
+    goto EXPAND_FAILED;
       }
     }


diff --git a/src/src/lookups/redis.c b/src/src/lookups/redis.c
index e9ddf88..a4b672a 100644
--- a/src/src/lookups/redis.c
+++ b/src/src/lookups/redis.c
@@ -291,7 +291,7 @@ switch (redis_reply->type)
       switch (entry->type)
     {
     case REDIS_REPLY_INTEGER:
-      result = string_cat(result, string_sprintf("%d", entry->integer));
+      result = string_fmt_append(result, "%d", entry->integer);
       break;
     case REDIS_REPLY_STRING:
       result = string_catn(result, US entry->str, entry->len);
@@ -307,7 +307,7 @@ switch (redis_reply->type)
         switch (tentry->type)
           {
           case REDIS_REPLY_INTEGER:
-        result = string_cat(result, string_sprintf("%d", tentry->integer));
+        result = string_fmt_append(result, "%d", tentry->integer);
         break;
           case REDIS_REPLY_STRING:
         result = string_catn(result, US tentry->str, tentry->len);
diff --git a/src/src/receive.c b/src/src/receive.c
index c86ad2f..e9877d3 100644
--- a/src/src/receive.c
+++ b/src/src/receive.c
@@ -1306,11 +1306,8 @@ if (sender_fullhost)
   if (LOGGING(dnssec) && sender_host_dnssec)    /*XXX sender_helo_dnssec? */
     g = string_catn(g, US" DS", 3);
   g = string_append(g, 2, US" H=", sender_fullhost);
-  if (LOGGING(incoming_interface) && interface_address != NULL)
-    {
-    g = string_cat(g,
-      string_sprintf(" I=[%s]:%d", interface_address, interface_port));
-    }
+  if (LOGGING(incoming_interface) && interface_address)
+    g = string_fmt_append(g, " I=[%s]:%d", interface_address, interface_port);
   }
 if (f.tcp_in_fastopen && !f.tcp_in_fastopen_logged)
   {
diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c
index 54ebf36..dbd4280 100644
--- a/src/src/smtp_in.c
+++ b/src/src/smtp_in.c
@@ -1777,7 +1777,7 @@ if (f.sender_host_unknown || f.sender_host_notsocket)
 if (f.is_inetd)
   return string_sprintf("SMTP connection from %s (via inetd)", hostname);


-if (LOGGING(incoming_interface) && interface_address != NULL)
+if (LOGGING(incoming_interface) && interface_address)
   return string_sprintf("SMTP connection from %s I=[%s]:%d", hostname,
     interface_address, interface_port);


@@ -4262,20 +4262,15 @@ while (done <= 0)
       smtp_code = US"250 ";        /* Default response code plus space*/
       if (!user_msg)
     {
-    s = string_sprintf("%.3s %s Hello %s%s%s",
+    g = string_fmt_append(NULL, "%.3s %s Hello %s%s%s",
       smtp_code,
       smtp_active_hostname,
       sender_ident ? sender_ident : US"",
       sender_ident ? US" at " : US"",
       sender_host_name ? sender_host_name : sender_helo_name);
-    g = string_cat(NULL, s);


     if (sender_host_address)
-      {
-      g = string_catn(g, US" [", 2);
-      g = string_cat (g, sender_host_address);
-      g = string_catn(g, US"]", 1);
-      }
+      g = string_fmt_append(g, " [%s]", sender_host_address);
     }


       /* A user-supplied EHLO greeting may not contain more than one line. Note
@@ -4313,11 +4308,8 @@ while (done <= 0)
     till then, VRFY and EXPN can be used after EHLO when space is short. */


     if (thismessage_size_limit > 0)
-      {
-      sprintf(CS big_buffer, "%.3s-SIZE %d\r\n", smtp_code,
+      g = string_fmt_append(g, "%.3s-SIZE %d\r\n", smtp_code,
         thismessage_size_limit);
-      g = string_cat(g, big_buffer);
-      }
     else
       {
       g = string_catn(g, smtp_code, 3);
diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c
index 7eb6aba..1e4cd2c 100644
--- a/src/src/transports/smtp.c
+++ b/src/src/transports/smtp.c
@@ -668,22 +668,22 @@ Returns:   nothing
 static void
 write_logs(const host_item *host, const uschar *suffix, int basic_errno)
 {
-uschar *message = LOGGING(outgoing_port)
-  ? string_sprintf("H=%s [%s]:%d", host->name, host->address,
+gstring * message = LOGGING(outgoing_port)
+  ? string_fmt_append(NULL, "H=%s [%s]:%d", host->name, host->address,
             host->port == PORT_NONE ? 25 : host->port)
-  : string_sprintf("H=%s [%s]", host->name, host->address);
+  : string_fmt_append(NULL, "H=%s [%s]", host->name, host->address);


 if (suffix)
   {
-  message = string_sprintf("%s: %s", message, suffix);
+  message = string_fmt_append(message, ": %s", suffix);
   if (basic_errno > 0)
-    message = string_sprintf("%s: %s", message, strerror(basic_errno));
+    message = string_fmt_append(message, ": %s", strerror(basic_errno));
   }
 else
-  message = string_sprintf("%s %s", message, exim_errstr(basic_errno));
+  message = string_fmt_append(message, " %s", exim_errstr(basic_errno));


-log_write(0, LOG_MAIN, "%s", message);
-deliver_msglog("%s %s\n", tod_stamp(tod_log), message);
+log_write(0, LOG_MAIN, "%s", string_from_gstring(message));
+deliver_msglog("%s %s\n", tod_stamp(tod_log), message->s);
}

static void