From 901b3f9b6747eca8893ecaae824be396a6a4b5db Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Tue, 13 Dec 2022 15:37:15 +0100 Subject: [PATCH] gps2udp: leave argv untouched Rebase of leave-argv-untouched.patch we carried. Doesn't seem important, but to keep the behavior consistent. Originally added with the following commit message to meta-sysmocom-bsp.git: commit 26d74189eb2023ce14af8dd41b36cd388ab8bebb Author: Holger Hans Peter Freyther Date: Tue Jul 15 08:28:42 2014 +0200 gpsd: Do not mess with the argv of the process Henning got really confused that the "a.b.c:1234" he passed to gps2udp showed up as "a.b.c 1234" in the kernel cmdline. Use strdup to take a copy of it. Fixes: SYS#424 --- clients/gps2udp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clients/gps2udp.c b/clients/gps2udp.c index d27814f24..81d141fa2 100644 --- a/clients/gps2udp.c +++ b/clients/gps2udp.c @@ -436,6 +436,7 @@ static unsigned int AISGetInt(unsigned char *bitbytes, unsigned int sp, int main(int argc, char **argv) { + int i; bool daemonize = false; long count = -1; char *udphostport[MAX_UDP_DEST]; @@ -526,7 +527,7 @@ int main(int argc, char **argv) "gps2udp: too many UDP destinations (max=%d).\n", MAX_UDP_DEST); } else { - udphostport[udpchannel++] = optarg; + udphostport[udpchannel++] = strdup(optarg); if (0 < debug) { (void)fprintf(stdout, "UDP %s added.\n", optarg); } @@ -686,6 +687,9 @@ int main(int argc, char **argv) } // end len > 3 } // end for (;;) + for (i = 0; i < udpchannel; ++i) + free(udphostport[i]); + // This is an infinite loop, should never be here (void)fprintf (stderr, "gpsd2udp ERROR abnormal exit\n"); exit (-1); -- 2.34.1