On Sun, Aug 31, 2014 at 10:46:50PM +0200, Alexander Bluhm wrote:
> On Fri, Aug 29, 2014 at 11:25:52PM +0200, Alexander Bluhm wrote:
> > I will try to pull parts of the diff into separate changes to
> > make review easier.
>
> Move the handlers for the poll events into separate functions. They
> will become the libevent callbacks later.
>
> ok?
anyone?
> bluhm
>
> Index: usr.sbin/syslogd/syslogd.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v
> retrieving revision 1.119
> diff -u -p -r1.119 syslogd.c
> --- usr.sbin/syslogd/syslogd.c 25 Aug 2014 18:19:18 -0000 1.119
> +++ usr.sbin/syslogd/syslogd.c 31 Aug 2014 20:34:01 -0000
> @@ -245,6 +245,13 @@ char *reply_text; /* Start of reply tex
> size_t ctl_reply_size = 0; /* Number of bytes used in reply */
> size_t ctl_reply_offset = 0; /* Number of bytes of reply written so
> far */
>
> +char *linebuf;
> +int linesize;
> +
> +void klog_read_handler(int);
> +void udp_read_handler(int);
> +void unix_read_handler(int);
> +
> struct pollfd pfd[N_PFD];
>
> volatile sig_atomic_t MarkSet;
> @@ -283,12 +290,8 @@ void logto_ctlconn(char *);
> int
> main(int argc, char *argv[])
> {
> - int ch, i, linesize, fd;
> - struct sockaddr_un fromunix;
> - struct sockaddr_storage from;
> - socklen_t len;
> - char *p, *line;
> - char resolve[MAXHOSTNAMELEN];
> + int ch, i, fd;
> + char *p;
> int lockpipe[2] = { -1, -1}, pair[2], nullfd;
> struct addrinfo hints, *res, *res0;
> FILE *fp;
> @@ -368,7 +371,7 @@ main(int argc, char *argv[])
> if (linesize < MAXLINE)
> linesize = MAXLINE;
> linesize++;
> - if ((line = malloc(linesize)) == NULL) {
> + if ((linebuf = malloc(linesize)) == NULL) {
> logerror("Couldn't allocate line buffer");
> die(0);
> }
> @@ -586,41 +589,13 @@ main(int argc, char *argv[])
> }
>
> if ((pfd[PFD_KLOG].revents & POLLIN) != 0) {
> - i = read(pfd[PFD_KLOG].fd, line, linesize - 1);
> - if (i > 0) {
> - line[i] = '\0';
> - printsys(line);
> - } else if (i < 0 && errno != EINTR) {
> - logerror("klog");
> - pfd[PFD_KLOG].fd = -1;
> - pfd[PFD_KLOG].events = 0;
> - }
> + klog_read_handler(pfd[PFD_KLOG].fd);
> }
> if ((pfd[PFD_INET].revents & POLLIN) != 0) {
> - len = sizeof(from);
> - i = recvfrom(pfd[PFD_INET].fd, line, MAXLINE, 0,
> - (struct sockaddr *)&from, &len);
> - if (i > 0) {
> - line[i] = '\0';
> - cvthname((struct sockaddr *)&from, resolve,
> - sizeof(resolve));
> - dprintf("cvthname res: %s\n", resolve);
> - printline(resolve, line);
> - } else if (i < 0 && errno != EINTR)
> - logerror("recvfrom inet");
> + udp_read_handler(pfd[PFD_INET].fd);
> }
> if ((pfd[PFD_INET6].revents & POLLIN) != 0) {
> - len = sizeof(from);
> - i = recvfrom(pfd[PFD_INET6].fd, line, MAXLINE, 0,
> - (struct sockaddr *)&from, &len);
> - if (i > 0) {
> - line[i] = '\0';
> - cvthname((struct sockaddr *)&from, resolve,
> - sizeof(resolve));
> - dprintf("cvthname res: %s\n", resolve);
> - printline(resolve, line);
> - } else if (i < 0 && errno != EINTR)
> - logerror("recvfrom inet6");
> + udp_read_handler(pfd[PFD_INET6].fd);
> }
> if ((pfd[PFD_CTLSOCK].revents & POLLIN) != 0)
> ctlsock_accept_handler();
> @@ -631,23 +606,65 @@ main(int argc, char *argv[])
>
> for (i = 0; i < nfunix; i++) {
> if ((pfd[PFD_UNIX_0 + i].revents & POLLIN) != 0) {
> - ssize_t rlen;
> -
> - len = sizeof(fromunix);
> - rlen = recvfrom(pfd[PFD_UNIX_0 + i].fd, line,
> - MAXLINE, 0, (struct sockaddr *)&fromunix,
> - &len);
> - if (rlen > 0) {
> - line[rlen] = '\0';
> - printline(LocalHostName, line);
> - } else if (rlen == -1 && errno != EINTR)
> - logerror("recvfrom unix");
> + udp_read_handler(pfd[PFD_UNIX_0 + i].fd);
> }
> }
> }
> /* NOTREACHED */
> free(pfd);
> return (0);
> +}
> +
> +void
> +klog_read_handler(int fd)
> +{
> + ssize_t n;
> +
> + n = read(fd, linebuf, linesize - 1);
> + if (n > 0) {
> + linebuf[n] = '\0';
> + printsys(linebuf);
> + } else if (n < 0 && errno != EINTR) {
> + logerror("klog");
> + pfd[PFD_KLOG].fd = -1;
> + pfd[PFD_KLOG].events = 0;
> + }
> +}
> +
> +void
> +udp_read_handler(int fd)
> +{
> + struct sockaddr_storage sa;
> + socklen_t salen;
> + ssize_t n;
> +
> + salen = sizeof(sa);
> + n = recvfrom(fd, linebuf, MAXLINE, 0, (struct sockaddr *)&sa, &salen);
> + if (n > 0) {
> + char resolve[MAXHOSTNAMELEN];
> +
> + linebuf[n] = '\0';
> + cvthname((struct sockaddr *)&sa, resolve, sizeof(resolve));
> + dprintf("cvthname res: %s\n", resolve);
> + printline(resolve, linebuf);
> + } else if (n < 0 && errno != EINTR)
> + logerror("recvfrom udp");
> +}
> +
> +void
> +unix_read_handler(int fd)
> +{
> + struct sockaddr_un sa;
> + socklen_t salen;
> + ssize_t n;
> +
> + salen = sizeof(sa);
> + n = recvfrom(fd, linebuf, MAXLINE, 0, (struct sockaddr *)&sa, &salen);
> + if (n > 0) {
> + linebuf[n] = '\0';
> + printline(LocalHostName, linebuf);
> + } else if (n == -1 && errno != EINTR)
> + logerror("recvfrom unix");
> }
>
> void