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