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?
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