code: plan9front

Download patch

ref: 25ad126d8cae11133d119f015ebe41e46d70f5b6
parent: a8bf0b365d4313847b4fc4b94383a996bc297d93
author: Jacob Moody <moody@posixcafe.org>
date: Fri May 20 00:05:49 EDT 2022

aux/listen: remove argument clutter

addr and proto are globals. protodir should be
a global. let's also avoid reading the remote
addr more then once.

--- a/sys/src/cmd/aux/listen.c
+++ b/sys/src/cmd/aux/listen.c
@@ -23,14 +23,14 @@
 };
 
 int	readstr(char*, char*, char*, int);
-void	dolisten(char*, char*, int, char*, char*, long*);
-void	newcall(int, char*, char*, Service*);
-int 	findserv(char*, char*, Service*, char*);
-int	getserv(char*, char*, Service*);
+void	dolisten(char*, int, char*, char*, long*);
+void	newcall(int, char*, Service*);
+int 	findserv(char*, Service*, char*);
+int	getserv(char*, Service*);
 void	error(char*);
-void	scandir(char*, char*, char*, char*);
+void	scandir(char*);
 void	becomenone(void);
-void	listendir(char*, char*, char*, int);
+void	listendir(char*, int);
 
 char	listenlog[] = "listen";
 
@@ -39,6 +39,7 @@
 int	quiet;
 int	immutable;
 char	*proto;
+char	*protodir;
 char	*addr;
 Announce *announcements;
 #define SEC 1000
@@ -56,7 +57,6 @@
 main(int argc, char *argv[])
 {
 	Service *s;
-	char *protodir;
 	char *trustdir;
 	char *servdir;
 
@@ -125,8 +125,8 @@
 		proto = protodir;
 	else
 		proto++;
-	listendir(protodir, addr, servdir, 0);
-	listendir(protodir, addr, trustdir, 1);
+	listendir(servdir, 0);
+	listendir(trustdir, 1);
 
 	/* command returns */
 	exits(0);
@@ -141,7 +141,7 @@
 }
 
 void
-listendir(char *protodir, char *addr, char *srvdir, int trusted)
+listendir(char *srvdir, int trusted)
 {
 	int ctl, pid, start;
 	char dir[40], err[128], ds[128];
@@ -174,7 +174,7 @@
 	notify(dingdong);
 
 	pid = getpid();
-	scandir(proto, protodir, addr, srvdir);
+	scandir(srvdir);
 	for(;;){
 		/*
 		 * loop through announcements and process trusted services in
@@ -211,7 +211,7 @@
 						else
 							exits("ctl");
 					}
-					dolisten(proto, dir, ctl, srvdir, ds, &childs);
+					dolisten(dir, ctl, srvdir, ds, &childs);
 					close(ctl);
 				}
 			default:
@@ -249,7 +249,7 @@
 		}
 		if(!immutable){
 			alarm(0);
-			scandir(proto, protodir, addr, srvdir);
+			scandir(srvdir);
 		}
 		start = 60 - (time(0)-start);
 		if(start > 0)
@@ -285,7 +285,7 @@
 }
 
 void
-scandir(char *proto, char *protodir, char *addr, char *dname)
+scandir(char *dname)
 {
 	Announce *a, **l;
 	int fd, i, n, nlen;
@@ -341,7 +341,7 @@
 }
 
 void
-dolisten(char *proto, char *dir, int ctl, char *srvdir, char *dialstr, long *pchilds)
+dolisten(char *dir, int ctl, char *srvdir, char *dialstr, long *pchilds)
 {
 	Service s;
 	char ndir[40], wbuf[64];
@@ -417,7 +417,7 @@
 			 *  see if we know the service requested
 			 */
 			memset(&s, 0, sizeof s);
-			if(!findserv(proto, ndir, &s, srvdir)){
+			if(!findserv(ndir, &s, srvdir)){
 				if(!quiet)
 					syslog(1, listenlog, "%s: unknown service '%s' from '%s': %r",
 						proto, s.serv, s.remote);
@@ -434,7 +434,7 @@
 			close(nctl);
 			if(wfd >= 0)
 				close(wfd);
-			newcall(data, proto, ndir, &s);
+			newcall(data, ndir, &s);
 			exits(0);
 		default:
 			close(nctl);
@@ -453,12 +453,12 @@
  * thus providing a way to disable a service with a bind.
  */
 int
-findserv(char *proto, char *dir, Service *s, char *srvdir)
+findserv(char *dir, Service *s, char *srvdir)
 {
 	int rv;
 	Dir *d;
 
-	if(!getserv(proto, dir, s))
+	if(!getserv(dir, s))
 		return 0;
 	snprint(s->prog, sizeof s->prog, "%s/%s", srvdir, s->serv);
 	d = dirstat(s->prog);
@@ -471,7 +471,7 @@
  *  get the service name out of the local address
  */
 int
-getserv(char *proto, char *dir, Service *s)
+getserv(char *dir, Service *s)
 {
 	char addr[128], *serv, *p;
 	long n;
@@ -479,6 +479,8 @@
 	readstr(dir, "remote", s->remote, sizeof(s->remote)-1);
 	if(p = utfrune(s->remote, '\n'))
 		*p = '\0';
+	if(p = utfrune(s->remote, '!'))
+		*p = '\0';
 
 	n = readstr(dir, "local", addr, sizeof(addr)-1);
 	if(n <= 0)
@@ -493,42 +495,13 @@
 	return 1;
 }
 
-char *
-remoteaddr(char *dir)
-{
-	char buf[128], *p;
-	int n, fd;
-
-	snprint(buf, sizeof buf, "%s/remote", dir);
-	fd = open(buf, OREAD);
-	if(fd < 0)
-		return strdup("");
-	n = read(fd, buf, sizeof(buf));
-	close(fd);
-	if(n > 0){
-		buf[n] = 0;
-		p = strchr(buf, '!');
-		if(p)
-			*p = 0;
-		return strdup(buf);
-	}
-	return strdup("");
-}
-
 void
-newcall(int fd, char *proto, char *dir, Service *s)
+newcall(int fd, char *dir, Service *s)
 {
 	char data[4*NAMELEN];
-	char *p;
 
-	if(!quiet){
-		if(dir != nil){
-			p = remoteaddr(dir);
-			syslog(0, listenlog, "%s call for %s on chan %s (%s)", proto, s->serv, dir, p);
-			free(p);
-		} else
-			syslog(0, listenlog, "%s call for %s on chan %s", proto, s->serv, dir);
-	}
+	if(!quiet)
+		syslog(0, listenlog, "%s call for %s on chan %s (%s)", proto, s->serv, dir, s->remote);
 
 	snprint(data, sizeof data, "%s/data", dir);
 	bind(data, "/dev/cons", MREPL);