From 9cc9edaf291d32cb21bb0c2f156c62fbb06093ba Mon Sep 17 00:00:00 2001
From: Eli Ribble <eli@theribbles.org>
Date: Tue, 23 May 2023 17:06:40 -0700
Subject: [PATCH] Replace "slog" with printf-based logging.

I'm not sure what slog was supposed to do - I didn't take the time to
read it - but I do know it was causing a segfault before the program
made headway, so I removed it.
---
 aprs485.c | 86 ++++++++++++-------------------------------------------
 1 file changed, 19 insertions(+), 67 deletions(-)

diff --git a/aprs485.c b/aprs485.c
index e385e3a..3e711a9 100644
--- a/aprs485.c
+++ b/aprs485.c
@@ -9,8 +9,6 @@ typedef struct {	/* log entry */
 	tmv_t	tim;
 	char	buf[256-8];
 }	sle_t;
-void slog(char *fmt, ...);
-void slog_dump();
 
 typedef struct {
 	tmv_t	tim;	/* pwr on time */
@@ -49,50 +47,6 @@ static int tm2yymmdd(struct tm *tm)
 	return (tm->tm_year%100)*10000+(tm->tm_mon+1)*100+tm->tm_mday;
 }
 
-void slog(char *fmt, ...)
-{
-	sle_t	*se;
-	int	*a, i;
-
-	se = &gl.sles[gl.nsle++];
-	if (gl.nsle >= NEL(gl.sles)) return;
-	gettimeofday(&se->tim,0);
-	a = (int *)&fmt; a++;
-	i = snprintf(se->buf,NEL(se->buf)-1,fmt,a[0],a[1],a[2],a[3],a[4],a[5]);
-	se->buf[i] = 0;
-}
-
-void slog_dump()
-{
-	sle_t	*se;
-	int	ymd, lf, fd, k;
-	char	*p, buf[BUFSIZ], lfn[BUFSIZ];
-	struct tm tm;
-
-	fd = lf = -1;
-	for (se = gl.sles, k = MIN(NEL(gl.sles),gl.nsle); --k >= 0; se++) {
-		p = buf;
-		localtime_r(&se->tim.tv_sec,&tm);
-		ymd = tm2yymmdd(&tm);
-		p += sprintf(p,"%06d",ymd);
-		p += sprintf(p," %02d:%02d:%02d.%03lu",tm.tm_hour,tm.tm_min,tm.tm_sec,se->tim.tv_usec/1000);
-		p += sprintf(p," %.*s",NEL(se->buf),se->buf);
-		if (p[-1] != '\n' && p[-1] != '\r') *p++ = '\n';
-		if (gl.ldir) {
-			if (fd < 0 || lf != ymd) {
-				if (fd >= 0) close(fd);
-				lf = ymd;
-				sprintf(lfn,"%s/%06d.log",gl.ldir,lf);
-				fd = open(lfn,O_WRONLY|O_CREAT|O_APPEND,0644);
-			}
-			if (fd >= 0) write(fd,buf,p-buf);
-		}
-		if (gl.dbug) *p++ = '\r', write(1,buf,p-buf);
-	}
-	if (fd >= 0) close(fd);
-	gl.nsle = 0;
-}
-
 /*
  * tab management
  */
@@ -139,7 +93,7 @@ int tab_man(soa_t *sa, u08_t *pkb, int pks)
 					break;
 				}
 			if (n < 0) t = 0;
-			else slog("T __ add [%d]",t-gl.tabs);
+			else printf("T __ add [%d]\n",t-gl.tabs);
 		}
 		pkb[0] = t ? ACK : NAK;
 		pkb[1] = t ? (t-gl.tabs) : NEL(gl.tabs);
@@ -150,7 +104,7 @@ int tab_man(soa_t *sa, u08_t *pkb, int pks)
 			if (t == gl.tsnd) gl.tsnd = 0;
 			t->pwr = 0;
 			pkb[0] = ACK;
-			slog("T __ del [%d]",t-gl.tabs);
+			printf("T __ del [%d]\n",t-gl.tabs);
 		}
 		else pkb[0] = NAK;
 		return 2;
@@ -170,7 +124,7 @@ void snd2tabs(int sd, tab_t *ts, u08_t *pkb, int pks)
 			k = sendto(sd,pkb,pks,0,&t->adr.sa,sizeof(t->adr.sa));
 			if (k != pks) {
 				t->pwr = 0;
-				slog("T __ drop [%d] %s",t-gl.tabs,k<0?strerror(errno):"");
+				printf("T __ drop [%d] %s\n",t-gl.tabs,k<0?strerror(errno):"");
 			}
 		}
 }
@@ -197,14 +151,14 @@ void usr_in(fd)
 	char	buf[32];
 
 	if ((k = read(fd,buf,sizeof(buf))) != 1) {
-		slog("E __ term read()=%d %s",k,k<0?strerror(errno):"");
+		printf("E __ term read()=%d %s\n",k,k<0?strerror(errno):"");
 		gl.exit = 1;
 		return;
 	}
 	switch (buf[0]) {
-	default:  slog("D __ hit <Escape> to exit"); break;
+	default:  printf("D __ hit <Escape> to exit\n"); break;
 	case ESC: gl.exit  = 1; break;
-	case 'D': gl.lprd ^= 1; slog("D __ log partial read %d now",gl.lprd); break;
+	case 'D': gl.lprd ^= 1; printf("D __ log partial read %d now\n",gl.lprd); break;
 	}
 }
 
@@ -217,16 +171,16 @@ void bus_in(int bd)
 	char	hb[128];
 
 	if ((k = NEL(gl.brcv) - gl.nrcv) <= 0) {
-		slog("E __ bus buffer overrun drop %d bytes",gl.nrcv);
+		printf("E __ bus buffer overrun drop %d bytes\n",gl.nrcv);
 		gl.nrcv = 0; /* drop everything */
 		k = NEL(gl.brcv);
 	}
 	if ((k = read(bd,&gl.brcv[gl.nrcv],k)) <= 0) {
-		slog("E __ bus read()=%d %s",k,k<0?strerror(errno):"disconnect!");
+		printf("E __ bus read()=%d %s\n",k,k<0?strerror(errno):"disconnect!");
 		gl.exit = 1;
 		return;
 	}
-	if (gl.lprd) slog("r %2d %s",k,hex(&gl.brcv[gl.nrcv],k,hb,sizeof(hb)));
+	if (gl.lprd) printf("r %2d %s\n",k,hex(&gl.brcv[gl.nrcv],k,hb,sizeof(hb)));
 	gl.nrcv += k;
 }
 
@@ -237,9 +191,9 @@ void bus_out(int sd, int bd)
 	char	hb[UDPSIZ*2+4];
 
 	if ((t = gl.tsnd) == 0) return;
-	slog("S %2d %s",t->pks,hex(t->pkb,t->pks,hb,sizeof(hb)));
+	printf("S %2d %s\n", t->pks, hex(t->pkb, t->pks, hb, sizeof(hb)));
 	if ((k = write(bd,t->pkb,t->pks)) != t->pks) {
-		slog("E __ bus write(%d)=%d %s",t->pks,k,k<0?strerror(errno):"");
+		printf("E __ bus write(%d)=%d %s",t->pks,k,k<0?strerror(errno):"");
 		if (k < 0) gl.exit = 1;
 	}
 	else snd2tabs(sd,t,t->pkb,t->pks);
@@ -315,7 +269,7 @@ void srv_client(int sd, soa_t *fa, int na, char **av)
 			else {
 				sendto(sd,EOT_STR,2,0,&t->adr.sa,sizeof(t->adr.sa));
 				t->pwr = 0;
-				slog("T __ kill [%d]",t-gl.tabs);
+				printf("T __ kill [%d]\n",t-gl.tabs);
 				a += sprintf(a,"done");
 			}
 		}
@@ -347,7 +301,7 @@ void soc_in(int sd)
 	pks = recvfrom(sd,pkb,sizeof(pkb)-4,0,&fa.sa,&len);
 	if (pks <= 0) {
 		if (++gl.esin >= 3) gl.exit = 1;
-		slog("E __ socket read()=%d %s",pks,pks<0?strerror(errno):"");
+		printf("E __ socket read()=%d %s\n",pks,pks<0?strerror(errno):"");
 		return;
 	}
 	gl.esin = 0;
@@ -388,11 +342,11 @@ void soc_out(int sd)
 	if ((n = gl.nrcv) > 2) {
 		for (i = 0; i < n; i += k) {
 			k = a5end(gl.brcv+i,n-i);
-			slog("R %2d %s",k,hex(gl.brcv+i,k,hb,sizeof(hb)));
+			printf("R %2d %s\n", k, hex(gl.brcv+i, k, hb, sizeof(hb)));
 			snd2tabs(sd,0,gl.brcv+i,k);
 		}
 	}
-	else slog("E %2d %s noise?",n,hex(gl.brcv,n,hb,sizeof(hb)));
+	else printf("E %2d %s noise?\n",n,hex(gl.brcv,n,hb,sizeof(hb)));
 	gl.nrcv = 0;
 }
 
@@ -414,14 +368,13 @@ int bridge(int bd, int sd)
 	FD_SET(sd,&pfds);
 	md = MAX(bd,sd) + 1;
 	ct = lt = -1;
-	slog("B __ %s bus:%s",version+5,gl.bus);
+	printf("B __ %s bus:%s\n", version+5, gl.bus);
 	while (!gl.exit) {
 		gettimeofday(&tc,0);
 		if ((ct = (tc.tv_sec%(60*60))/MTICK) != lt) { /* mark tick */
-			if (lt >= 0) slog("M __ %s bus:%s",version+5,gl.bus);
+			if (lt >= 0) printf("M __ %s bus:%s\n", version+5, gl.bus);
 			lt = ct;
 		}
-		slog_dump();
 		tv.tv_sec = tv.tv_usec = 0;
 		if (gl.nrcv <= 0 && gl.tsnd == 0) {
 			tv.tv_sec = ((tc.tv_sec/MTICK)+1)*MTICK;
@@ -432,7 +385,7 @@ int bridge(int bd, int sd)
 		rfds = pfds;
 		if ((n = select(md,&rfds,0,0,&tv)) < 0) {
 			if (++gl.esel >= 3) gl.exit = 1;
-			slog("E __ select() %s",strerror(errno));
+			printf("E __ select() %s\n",strerror(errno));
 			continue;
 		}
 		gl.esel = 0;
@@ -447,8 +400,7 @@ int bridge(int bd, int sd)
 		}
 	}
 	snd2tabs(sd,0,(u08_t *)EOT_STR,2);
-	slog("X __ %s bus:%s",version+5,gl.bus);
-	slog_dump();
+	printf("X __ %s bus:%s\n",version+5,gl.bus);
 	return 0;
 }