commit 403938d8e9cf85531c4c3860b42bf10df850c3ee
parent d0a6958747f34dace249561b97bf4efbdbae3850
Author: Joris Vink <joris@coders.se>
Date:   Mon, 29 Apr 2019 21:08:58 +0200
make native proctitle better.
count how much space is available for a mangled process title
only once, and use that as reference later.
Diffstat:
| src/kore.c |  |  | 37 | +++++++++++++++++++++++-------------- | 
1 file changed, 23 insertions(+), 14 deletions(-)
diff --git a/src/kore.c b/src/kore.c
@@ -63,10 +63,12 @@ char			*kore_tls_cipher_list = KORE_DEFAULT_CIPHER_LIST;
 
 extern char		**environ;
 extern char		*__progname;
+static size_t		proctitle_maxlen = 0;
 
 static void	usage(void);
 static void	version(void);
 static void	kore_write_kore_pid(void);
+static void	kore_proctitle_setup(void);
 static void	kore_server_sslstart(void);
 static void	kore_server_start(int, char *[]);
 
@@ -138,6 +140,7 @@ main(int argc, char *argv[])
 	int				ch, flags;
 
 	flags = 0;
+
 	kore_argc = argc;
 	kore_argv = argv;
 
@@ -183,6 +186,7 @@ main(int argc, char *argv[])
 
 	kore_mem_init();
 	kore_progname = kore_strdup(argv[0]);
+	kore_proctitle_setup();
 
 	argc -= optind;
 	argv += optind;
@@ -602,29 +606,34 @@ kore_shutdown(void)
 void
 kore_proctitle(const char *title)
 {
+	int	len;
+
+	kore_argv[1] = NULL;
+
+	len = snprintf(kore_argv[0], proctitle_maxlen, "%s %s",
+	    basename(kore_progname), title);
+	if (len == -1 || (size_t)len >= proctitle_maxlen)
+		fatal("proctitle '%s' too large", title);
+
+	memset(kore_argv[0] + len, 0, proctitle_maxlen - len);
+}
+
+static void
+kore_proctitle_setup(void)
+{
+	int		i;
 	char		*p;
-	size_t		len;
-	int		i, slen;
 
-	len = 0;
+	proctitle_maxlen = 0;
 
 	for (i = 0; environ[i] != NULL; i++) {
 		p = kore_strdup(environ[i]);
-		len += strlen(environ[i]) + 1;
+		proctitle_maxlen += strlen(environ[i]) + 1;
 		environ[i] = p;
 	}
 
 	for (i = 0; kore_argv[i] != NULL; i++)
-		len += strlen(kore_argv[i]) + 1;
-
-	kore_argv[1] = NULL;
-
-	slen = snprintf(kore_argv[0], len, "%s %s",
-	    basename(kore_progname), title);
-	if (slen == -1 || (size_t)slen >= len)
-		fatal("proctitle '%s' too large", title);
-
-	memset(kore_argv[0] + slen, 0, len - slen);
+		proctitle_maxlen += strlen(kore_argv[i]) + 1;
 }
 
 static void