Re: syslogd comparison between signed and unsigned
On Fri, Aug 22, 2014 at 09:14:33PM +0200, Alexander Bluhm wrote: Hi, When compiling syslogd with WARNINGS=yes gcc complains with many warning: comparison between signed and unsigned. I would like to fix them. ok? I still need an ok. Note that some checks got stricter. The (size_t) cast is only done, if the argument is not negative. I have another bugfix on top of this diff. bluhm bluhm Index: usr.sbin/syslogd/privsep.c === RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/privsep.c,v retrieving revision 1.40 diff -u -p -r1.40 privsep.c --- usr.sbin/syslogd/privsep.c21 Aug 2014 17:00:34 - 1.40 +++ usr.sbin/syslogd/privsep.c22 Aug 2014 18:52:12 - @@ -330,7 +330,7 @@ priv_init(char *conf, int numeric, int l errx(1, rejected attempt to getnameinfo); /* Expecting: length, sockaddr */ must_read(socks[0], addr_len, sizeof(int)); - if (addr_len = 0 || addr_len sizeof(addr)) + if (addr_len = 0 || (size_t)addr_len sizeof(addr)) _exit(1); must_read(socks[0], addr, addr_len); if (getnameinfo((struct sockaddr *)addr, addr_len, @@ -459,7 +459,7 @@ check_tty_name(char *tty, size_t ttylen) char *p; /* Any path containing '..' is invalid. */ - for (p = tty; *p (p - tty) ttylen; p++) + for (p = tty; *p p tty + ttylen; p++) if (*p == '.' *(p + 1) == '.') goto bad_path; @@ -484,7 +484,7 @@ check_log_name(char *lognam, size_t logl char *p; /* Any path containing '..' is invalid. */ - for (p = lognam; *p (p - lognam) loglen; p++) + for (p = lognam; *p p lognam + loglen; p++) if (*p == '.' *(p + 1) == '.') goto bad_path; @@ -693,7 +693,7 @@ priv_getaddrinfo(char *host, char *serv, return (-1); /* Make sure we aren't overflowing the passed in buffer */ - if (addr_len ret_len) + if (ret_len 0 || (size_t)ret_len addr_len) errx(1, %s: overflow attempt in return, __func__); /* Read the resolved address and make sure we got all of it */ @@ -727,7 +727,7 @@ priv_getnameinfo(struct sockaddr *sa, so return (-1); /* Check we don't overflow the passed in buffer */ - if (hostlen ret_len) + if (ret_len 0 || (size_t)ret_len hostlen) errx(1, %s: overflow attempt in return, __func__); /* Read the resolved hostname */ @@ -767,7 +767,8 @@ static int may_read(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = read(fd, s + pos, n - pos); @@ -790,7 +791,8 @@ static void must_read(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = read(fd, s + pos, n - pos); @@ -812,7 +814,8 @@ static void must_write(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = write(fd, s + pos, n - pos); Index: usr.sbin/syslogd/syslogd.c === RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v retrieving revision 1.117 diff -u -p -r1.117 syslogd.c --- usr.sbin/syslogd/syslogd.c22 Aug 2014 16:14:11 - 1.117 +++ usr.sbin/syslogd/syslogd.c22 Aug 2014 18:42:59 - @@ -868,10 +868,10 @@ fprintlog(struct filed *f, int flags, ch v = iov; if (f-f_type == F_WALL) { - if ((l = snprintf(greetings, sizeof(greetings), + l = snprintf(greetings, sizeof(greetings), \r\n\7Message from syslogd@%s at %.24s ...\r\n, - f-f_prevhost, ctime(now))) = sizeof(greetings) || - l == -1) + f-f_prevhost, ctime(now)); + if (l 0 || (size_t)l = sizeof(greetings)) l = strlen(greetings); v-iov_base = greetings; v-iov_len = l; @@ -898,9 +898,9 @@ fprintlog(struct filed *f, int flags, ch v-iov_base = msg; v-iov_len = strlen(msg); } else if (f-f_prevcount 1) { - if ((l = snprintf(repbuf, sizeof(repbuf), - last message repeated %d times, f-f_prevcount)) = - sizeof(repbuf) || l == -1) + l = snprintf(repbuf, sizeof(repbuf), + last message repeated %d times, f-f_prevcount); + if (l 0 || (size_t)l = sizeof(repbuf))
syslogd comparison between signed and unsigned
Hi, When compiling syslogd with WARNINGS=yes gcc complains with many warning: comparison between signed and unsigned. I would like to fix them. ok? bluhm Index: usr.sbin/syslogd/privsep.c === RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/privsep.c,v retrieving revision 1.40 diff -u -p -r1.40 privsep.c --- usr.sbin/syslogd/privsep.c 21 Aug 2014 17:00:34 - 1.40 +++ usr.sbin/syslogd/privsep.c 22 Aug 2014 18:52:12 - @@ -330,7 +330,7 @@ priv_init(char *conf, int numeric, int l errx(1, rejected attempt to getnameinfo); /* Expecting: length, sockaddr */ must_read(socks[0], addr_len, sizeof(int)); - if (addr_len = 0 || addr_len sizeof(addr)) + if (addr_len = 0 || (size_t)addr_len sizeof(addr)) _exit(1); must_read(socks[0], addr, addr_len); if (getnameinfo((struct sockaddr *)addr, addr_len, @@ -459,7 +459,7 @@ check_tty_name(char *tty, size_t ttylen) char *p; /* Any path containing '..' is invalid. */ - for (p = tty; *p (p - tty) ttylen; p++) + for (p = tty; *p p tty + ttylen; p++) if (*p == '.' *(p + 1) == '.') goto bad_path; @@ -484,7 +484,7 @@ check_log_name(char *lognam, size_t logl char *p; /* Any path containing '..' is invalid. */ - for (p = lognam; *p (p - lognam) loglen; p++) + for (p = lognam; *p p lognam + loglen; p++) if (*p == '.' *(p + 1) == '.') goto bad_path; @@ -693,7 +693,7 @@ priv_getaddrinfo(char *host, char *serv, return (-1); /* Make sure we aren't overflowing the passed in buffer */ - if (addr_len ret_len) + if (ret_len 0 || (size_t)ret_len addr_len) errx(1, %s: overflow attempt in return, __func__); /* Read the resolved address and make sure we got all of it */ @@ -727,7 +727,7 @@ priv_getnameinfo(struct sockaddr *sa, so return (-1); /* Check we don't overflow the passed in buffer */ - if (hostlen ret_len) + if (ret_len 0 || (size_t)ret_len hostlen) errx(1, %s: overflow attempt in return, __func__); /* Read the resolved hostname */ @@ -767,7 +767,8 @@ static int may_read(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = read(fd, s + pos, n - pos); @@ -790,7 +791,8 @@ static void must_read(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = read(fd, s + pos, n - pos); @@ -812,7 +814,8 @@ static void must_write(int fd, void *buf, size_t n) { char *s = buf; - ssize_t res, pos = 0; + ssize_t res; + size_t pos = 0; while (n pos) { res = write(fd, s + pos, n - pos); Index: usr.sbin/syslogd/syslogd.c === RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v retrieving revision 1.117 diff -u -p -r1.117 syslogd.c --- usr.sbin/syslogd/syslogd.c 22 Aug 2014 16:14:11 - 1.117 +++ usr.sbin/syslogd/syslogd.c 22 Aug 2014 18:42:59 - @@ -868,10 +868,10 @@ fprintlog(struct filed *f, int flags, ch v = iov; if (f-f_type == F_WALL) { - if ((l = snprintf(greetings, sizeof(greetings), + l = snprintf(greetings, sizeof(greetings), \r\n\7Message from syslogd@%s at %.24s ...\r\n, - f-f_prevhost, ctime(now))) = sizeof(greetings) || - l == -1) + f-f_prevhost, ctime(now)); + if (l 0 || (size_t)l = sizeof(greetings)) l = strlen(greetings); v-iov_base = greetings; v-iov_len = l; @@ -898,9 +898,9 @@ fprintlog(struct filed *f, int flags, ch v-iov_base = msg; v-iov_len = strlen(msg); } else if (f-f_prevcount 1) { - if ((l = snprintf(repbuf, sizeof(repbuf), - last message repeated %d times, f-f_prevcount)) = - sizeof(repbuf) || l == -1) + l = snprintf(repbuf, sizeof(repbuf), + last message repeated %d times, f-f_prevcount); + if (l 0 || (size_t)l = sizeof(repbuf)) l = strlen(repbuf); v-iov_base = repbuf; v-iov_len = l; @@ -931,11 +931,12 @@ fprintlog(struct filed *f, int flags, ch fd = -1; break; } -