Download raw body.
file: use better imsg API
On Wed, Aug 21, 2024 at 07:17:27PM +0200, Florian Obser wrote:
> Hang on, there is an imsg_get_data?! Why do I only learn about this now?
> I see a flurry of commits in my future...
You should read imsg_init.3 and ibuf_add.3 I added a lot of good stuff
over the last year. bgpd(8) is using most of this already.
> Anyway, this reads OK florian
> On 2024-08-21 17:44 +02, Claudio Jeker <cjeker@diehard.n-r-g.com> wrote:
> > 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);
> >
>
> --
> In my defence, I have been left unsupervised.
>
--
:wq Claudio
file: use better imsg API