[exim-cvs] tidying: formatted listmaker

Αρχική Σελίδα
Delete this message
Reply to this message
Συντάκτης: Exim Git Commits Mailing List
Ημερομηνία:  
Προς: exim-cvs
Αντικείμενο: [exim-cvs] tidying: formatted listmaker
Gitweb: https://git.exim.org/exim.git/commitdiff/db1d45ff1e5f3d83d24e75400a157d5fbc86d1c7
Commit:     db1d45ff1e5f3d83d24e75400a157d5fbc86d1c7
Parent:     2484552ee924d5e5a30d4c41be365a19cdd48ed5
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Sat Sep 7 15:36:23 2024 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Sat Sep 7 16:34:14 2024 +0100


    tidying: formatted listmaker
---
 src/src/daemon.c          | 11 ++++++-----
 src/src/expand.c          |  8 +++-----
 src/src/functions.h       |  2 +-
 src/src/miscmods/arc.c    |  3 ++-
 src/src/string.c          | 31 +++++++++++++++++++++++++++----
 src/src/tlscert-gnu.c     |  5 +++--
 src/src/tlscert-openssl.c |  5 +++--
 7 files changed, 45 insertions(+), 20 deletions(-)


diff --git a/src/src/daemon.c b/src/src/daemon.c
index fc8c7fdd2..20e6bc05d 100644
--- a/src/src/daemon.c
+++ b/src/src/daemon.c
@@ -1976,16 +1976,17 @@ if (f.daemon_listen && !f.inetd_wait_mode)
       tls_in.on_connect_ports = NULL;
       sep = 0;
       while ((s = string_nextinlist(&list, &sep, big_buffer, big_buffer_size)))
-    {
-        if (!isdigit(*s))
+        if (isdigit(*s))
+      g = string_append_listele(g, ':', s);
+    else
       {
       struct servent * smtp_service = getservbyname(CS s, "tcp");
       if (!smtp_service)
         log_write(0, LOG_PANIC_DIE|LOG_CONFIG, "TCP port \"%s\" not found", s);
-      s = string_sprintf("%d", (int)ntohs(smtp_service->s_port));
+      g = string_append_listele_fmt(g, ':', FALSE, "%d",
+                          (int)ntohs(smtp_service->s_port));
       }
-    g = string_append_listele(g, ':', s);
-    }
+
       if (g)
     tls_in.on_connect_ports = g->s;
       break;
diff --git a/src/src/expand.c b/src/src/expand.c
index 521a30d49..cdfe93cdc 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -5535,8 +5535,7 @@ while (*s)


       /* First option has no tag and is timeout */
       if ((item = string_nextinlist(&list, &sep, NULL, 0)))
-        g = string_append_listele(g, ',',
-          string_sprintf("timeout=%s", item));
+        g = string_append_listele_fmt(g, ',', TRUE, "timeout=%s", item);


       /* The rest of the options from the expansion */
       while ((item = string_nextinlist(&list, &sep, NULL, 0)))
@@ -5547,9 +5546,8 @@ while (*s)
       options is the readsock expansion. */


       if (sub_arg[3] && *sub_arg[3])
-        g = string_append_listele(g, ',',
-          string_sprintf("eol=%s",
-            string_printing2(sub_arg[3], SP_TAB|SP_SPACE)));
+        g = string_append_listele_fmt(g, ',', TRUE, 
+          "eol=%s", string_printing2(sub_arg[3], SP_TAB|SP_SPACE));
       }


     /* Gat a (possibly cached) handle for the connection */
diff --git a/src/src/functions.h b/src/src/functions.h
index ac0c31097..493b2287e 100644
--- a/src/src/functions.h
+++ b/src/src/functions.h
@@ -555,7 +555,7 @@ extern void    store_writeprotect(int);
 extern gstring *string_append(gstring *, int, ...) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele(gstring *, uschar, const uschar *) WARN_UNUSED_RESULT;
 extern gstring *string_append_listele_n(gstring *, uschar, const uschar *, unsigned) WARN_UNUSED_RESULT;
-extern gstring *string_append_listele_fmt(gstring *, uschar, const char *, ...) WARN_UNUSED_RESULT;
+extern gstring *string_append_listele_fmt(gstring *, uschar, BOOL, const char *, ...) WARN_UNUSED_RESULT;
 extern gstring *string_append2_listele_n(gstring *, const uschar *, const uschar *, unsigned) WARN_UNUSED_RESULT;
 extern uschar *string_base62_32(unsigned long int);
 extern uschar *string_base62_64(unsigned long int);
diff --git a/src/src/miscmods/arc.c b/src/src/miscmods/arc.c
index a48d1987b..b35c17277 100644
--- a/src/src/miscmods/arc.c
+++ b/src/src/miscmods/arc.c
@@ -2105,7 +2105,8 @@ if (arc_state)
     arc_line * line = as->hdr_as;
     if (line)
       {
-      g = string_append_listele_fmt(g, ',', " (\"i\":%u"                 /*)*/
+      g = string_append_listele_fmt(g, ',', FALSE,
+                        " (\"i\":%u"                 /*)*/
                         ", \"d\":\"%#b\""
                         ", \"s\":\"%#b\"",
           as->instance, &line->d, &line->s);
diff --git a/src/src/string.c b/src/src/string.c
index 33c0332aa..1169f0e2c 100644
--- a/src/src/string.c
+++ b/src/src/string.c
@@ -1093,22 +1093,45 @@ return list;



/* Listmaker that takes a format string and args for the element.
-Currently no checking of the element content for sep chars */
+A flag arg is required to handle embedded sep chars in the (expanded) element;
+if false then no check is done */

gstring *
-string_append_listele_fmt(gstring * list, uschar sep, const char * fmt, ...)
+string_append_listele_fmt(gstring * list, uschar sep, BOOL check,
+ const char * fmt, ...)
{
+va_list ap;
+unsigned start;
+gstring * g;
+
if (list && list->ptr)
+ {
list = string_catn(list, &sep, 1);
+ start = list->ptr;
+ }
+else
+ start = 0;

-va_list ap;
 va_start(ap, fmt);
 list = string_vformat_trc(list, US __FUNCTION__, __LINE__,
       STRING_SPRINTF_BUFFER_SIZE, SVFMT_REBUFFER|SVFMT_EXTEND, fmt, ap);
 va_end(ap);


 (void) string_from_gstring(list);
-return list;
+
+/* if the appended element turns out to have an embedded sep char, rewind
+and do the lazy-coded separate string method */
+
+if (!check || !Ustrchr(&list->s[start], sep))
+  return list;
+
+va_start(ap, fmt);
+g = string_vformat_trc(NULL, US __FUNCTION__, __LINE__,
+    STRING_SPRINTF_BUFFER_SIZE, SVFMT_REBUFFER|SVFMT_EXTEND, fmt, ap);
+va_end(ap);
+
+list->ptr = start;
+return string_append_listele_n(list, sep, g->s, g->ptr);
 }



diff --git a/src/src/tlscert-gnu.c b/src/src/tlscert-gnu.c
index a3f6d4434..b130ef06f 100644
--- a/src/src/tlscert-gnu.c
+++ b/src/src/tlscert-gnu.c
@@ -334,8 +334,9 @@ for (int index = 0;; index++)
     case GNUTLS_SAN_RFC822NAME: tag = US"MAIL"; break;
     default: continue;        /* ignore unrecognised types */
     }
-  list = string_append_listele(list, sep,
-          match == -1 ? string_sprintf("%s=%s", tag, ele) : ele);
+  list = match == -1
+    ? string_append_listele_fmt(list, sep, TRUE, "%s=%s", tag, ele)
+    : string_append_listele(list, sep, ele);
   }
 /*NOTREACHED*/
 }
diff --git a/src/src/tlscert-openssl.c b/src/src/tlscert-openssl.c
index 343f3d3fc..d4b9de359 100644
--- a/src/src/tlscert-openssl.c
+++ b/src/src/tlscert-openssl.c
@@ -411,8 +411,9 @@ while (sk_GENERAL_NAME_num(san) > 0)
     ele = string_copyn(ele, len);


   if (Ustrlen(ele) == len)    /* ignore any with embedded nul */
-    list = string_append_listele(list, osep,
-      match == -1 ? string_sprintf("%s=%s", tag, ele) : ele);
+    list = match == -1
+      ? string_append_listele_fmt(list, osep, TRUE, "%s=%s", tag, ele)
+      : string_append_listele(list, osep, ele);
   }


sk_GENERAL_NAME_free(san);

--
## subscription configuration (requires account):
## https://lists.exim.org/mailman3/postorius/lists/exim-cvs.lists.exim.org/
## unsubscribe (doesn't require an account):
## exim-cvs-unsubscribe@???
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/