[hackers] [ii] [PATCH] ii: Add a die() function to replace fprintf(3) + exit(3) calls

From: Tom Schwindl <schwindl_AT_posteo.de>
Date: Tue, 9 Aug 2022 15:52:36 +0000

---
 ii.c | 92 +++++++++++++++++++++++++++---------------------------------
 1 file changed, 41 insertions(+), 51 deletions(-)
diff --git a/ii.c b/ii.c
index 2d485aa3e453..0c9ae74cb174 100644
--- a/ii.c
+++ b/ii.c
_AT_@ -56,6 +56,7 @@ static int       channel_reopen(Channel *);
 static void      channel_rm(Channel *);
 static void      create_dirtree(const char *);
 static void      create_filepath(char *, size_t, const char *, const char *, const char *);
+static void      die(const char *, ...);
 static void      ewritestr(int, const char *);
 static void      handle_channels_input(int, Channel *);
 static void      handle_server_output(int);
_AT_@ -83,13 +84,23 @@ static char     _nick[32];         /* nickname at startup */
 static char     ircpath[PATH_MAX]; /* irc dir (-i) */
 static char     msg[IRC_MSG_MAX];  /* message buf used for communication */
 
+static void
+die(const char *fmt, ...)
+{
+	va_list ap;
+
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+	va_end(ap);
+	exit(1);
+}
+
 static void
 usage(void)
 {
-	fprintf(stderr, "usage: %s <-s host> [-i <irc dir>] [-p <port>] "
+	die("usage: %s <-s host> [-i <irc dir>] [-p <port>] "
 	        "[-u <sockname>] [-n <nick>] [-k <password>] "
 	        "[-f <fullname>]\n", argv0);
-	exit(1);
 }
 
 static void
_AT_@ -103,10 +114,8 @@ ewritestr(int fd, const char *s)
 		if ((w = write(fd, s + off, len - off)) == -1)
 			break;
 	}
-	if (w == -1) {
-		fprintf(stderr, "%s: write: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if (w == -1)
+		die("%s: write: %s\n", argv0, strerror(errno));
 }
 
 /* creates directories bottom-up, if necessary */
_AT_@ -184,8 +193,7 @@ create_filepath(char *filepath, size_t len, const char *path,
 	return;
 
 error:
-	fprintf(stderr, "%s: path to irc directory too long\n", argv0);
-	exit(1);
+	die("%s: path to irc directory too long\n", argv0);
 }
 
 static int
_AT_@ -229,10 +237,8 @@ channel_new(const char *name)
 	strlcpy(channelpath, name, sizeof(channelpath));
 	channel_normalize_path(channelpath);
 
-	if (!(c = calloc(1, sizeof(Channel)))) {
-		fprintf(stderr, "%s: calloc: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if (!(c = calloc(1, sizeof(Channel))))
+		die("%s: calloc: %s\n", argv0, strerror(errno));
 
 	strlcpy(c->name, name, sizeof(c->name));
 	channel_normalize_name(c->name);
_AT_@ -341,21 +347,17 @@ udsopen(const char *uds)
 	size_t len;
 	int fd;
 
-	if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
-		fprintf(stderr, "%s: socket: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
+		die("%s: socket: %s\n", argv0, strerror(errno));
 
 	sun.sun_family = AF_UNIX;
-	if (strlcpy(sun.sun_path, uds, sizeof(sun.sun_path)) >= sizeof(sun.sun_path)) {
-		fprintf(stderr, "%s: UNIX domain socket path truncation\n", argv0);
-		exit(1);
-	}
+	if (strlcpy(sun.sun_path, uds, sizeof(sun.sun_path)) >= sizeof(sun.sun_path))
+		die("%s: UNIX domain socket path truncation\n", argv0);
+
 	len = strlen(sun.sun_path) + 1 + sizeof(sun.sun_family);
-	if (connect(fd, (struct sockaddr *)&sun, len) == -1) {
-		fprintf(stderr, "%s: connect: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if (connect(fd, (struct sockaddr *)&sun, len) == -1)
+		die("%s: connect: %s\n", argv0, strerror(errno));
+
 	return fd;
 }
 
_AT_@ -370,10 +372,8 @@ tcpopen(const char *host, const char *service)
 	hints.ai_flags = AI_NUMERICSERV; /* avoid name lookup for port */
 	hints.ai_socktype = SOCK_STREAM;
 
-	if ((e = getaddrinfo(host, service, &hints, &res))) {
-		fprintf(stderr, "%s: getaddrinfo: %s\n", argv0, gai_strerror(e));
-		exit(1);
-	}
+	if ((e = getaddrinfo(host, service, &hints, &res)))
+		die("%s: getaddrinfo: %s\n", argv0, gai_strerror(e));
 
 	for (rp = res; rp; rp = rp->ai_next) {
 		fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
_AT_@ -386,11 +386,9 @@ tcpopen(const char *host, const char *service)
 		}
 		break; /* success */
 	}
-	if (fd == -1) {
-		fprintf(stderr, "%s: could not connect to %s:%s: %s\n",
+	if (fd == -1)
+		die("%s: could not connect to %s:%s: %s\n",
 			argv0, host, service, strerror(errno));
-		exit(1);
-	}
 
 	freeaddrinfo(res);
 	return fd;
_AT_@ -705,11 +703,9 @@ handle_server_output(int ircfd)
 {
 	char buf[IRC_MSG_MAX];
 
-	if (read_line(ircfd, buf, sizeof(buf)) == -1) {
-		fprintf(stderr, "%s: remote host closed connection: %s\n",
-		        argv0, strerror(errno));
-		exit(1);
-	}
+	if (read_line(ircfd, buf, sizeof(buf)) == -1)
+		die("%s: remote host closed connection: %s\n", argv0, strerror(errno));
+
 	fprintf(stdout, "%lu %s\n", (unsigned long)time(NULL), buf);
 	fflush(stdout);
 	proc_server_cmd(ircfd, buf);
_AT_@ -758,8 +754,7 @@ run(int ircfd, const char *host)
 		if (r < 0) {
 			if (errno == EINTR)
 				continue;
-			fprintf(stderr, "%s: select: %s\n", argv0, strerror(errno));
-			exit(1);
+			die("%s: select: %s\n", argv0, strerror(errno));
 		} else if (r == 0) {
 			if (time(NULL) - last_response >= PING_TIMEOUT) {
 				channel_print(channelmaster, "-!- ii shutting down: ping timeout");
_AT_@ -791,10 +786,9 @@ main(int argc, char *argv[])
 	int ircfd, r;
 
 	/* use nickname and home dir of user by default */
-	if (!(spw = getpwuid(getuid()))) {
-		fprintf(stderr, "%s: getpwuid: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if (!(spw = getpwuid(getuid())))
+		die("%s: getpwuid: %s\n", argv0, strerror(errno));
+
 	strlcpy(nick, spw->pw_name, sizeof(nick));
 	snprintf(prefix, sizeof(prefix), "%s/irc", spw->pw_dir);
 
_AT_@ -835,17 +829,13 @@ main(int argc, char *argv[])
 
 #ifdef __OpenBSD__
 	/* OpenBSD pledge(2) support */
-	if (pledge("stdio rpath wpath cpath dpath", NULL) == -1) {
-		fprintf(stderr, "%s: pledge: %s\n", argv0, strerror(errno));
-		exit(1);
-	}
+	if (pledge("stdio rpath wpath cpath dpath", NULL) == -1)
+		die("%s: pledge: %s\n", argv0, strerror(errno));
 #endif
 
 	r = snprintf(ircpath, sizeof(ircpath), "%s/%s", prefix, host);
-	if (r < 0 || (size_t)r >= sizeof(ircpath)) {
-		fprintf(stderr, "%s: path to irc directory too long\n", argv0);
-		exit(1);
-	}
+	if (r < 0 || (size_t)r >= sizeof(ircpath))
+		die("%s: path to irc directory too long\n", argv0);
 	create_dirtree(ircpath);
 
 	channelmaster = channel_add(""); /* master channel */
-- 
2.37.1
Received on Tue Aug 09 2022 - 17:52:36 CEST

This archive was generated by hypermail 2.3.0 : Tue Aug 09 2022 - 18:00:38 CEST