Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
file: use better imsg API
To:
tech@openbsd.org
Date:
Wed, 21 Aug 2024 17:44:58 +0200

Download raw body.

Thread
Tired of old crufty imsg fiddling. Lets use the real deal.

-- 
:wq Claudio

Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/file/file.c,v
diff -u -p -r1.70 file.c
--- file.c	16 Jan 2024 13:07:29 -0000	1.70
+++ file.c	21 Aug 2024 15:41:10 -0000
@@ -125,7 +125,7 @@ main(int argc, char **argv)
 	struct imsgbuf		 ibuf;
 	struct imsg		 imsg;
 	struct input_msg	 msg;
-	struct input_ack	*ack;
+	struct input_ack	 ack;
 	pid_t			 pid, parent;
 
 	tzset();
@@ -223,10 +223,9 @@ main(int argc, char **argv)
 
 		if (read_message(&ibuf, &imsg, pid) == 0)
 			break;
-		if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof *ack)
-			errx(1, "message too small");
-		ack = imsg.data;
-		if (ack->idx != idx)
+		if (imsg_get_data(&imsg, &ack, sizeof ack) == -1)
+			err(1, "bad message");
+		if (ack.idx != idx)
 			errx(1, "index not expected");
 		imsg_free(&imsg);
 	}
@@ -365,7 +364,7 @@ child(int fd, pid_t parent, int argc, ch
 	struct magic		*m;
 	struct imsgbuf		 ibuf;
 	struct imsg		 imsg;
-	struct input_msg	*msg;
+	struct input_msg	 msg;
 	struct input_ack	 ack;
 	struct input_file	 inf;
 	int			 i, idx;
@@ -405,17 +404,16 @@ child(int fd, pid_t parent, int argc, ch
 	for (;;) {
 		if (read_message(&ibuf, &imsg, parent) == 0)
 			break;
-		if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof *msg)
-			errx(1, "message too small");
-		msg = imsg.data;
+		if (imsg_get_data(&imsg, &msg, sizeof msg) == -1)
+			err(1, "bad message");
 
-		idx = msg->idx;
+		idx = msg.idx;
 		if (idx < 0 || idx >= argc)
 			errx(1, "index out of range");
 
 		memset(&inf, 0, sizeof inf);
 		inf.m = m;
-		inf.msg = msg;
+		inf.msg = &msg;
 
 		inf.path = argv[idx];
 		inf.fd = imsg_get_fd(&imsg);