Craig Rodrigues wrote:
> Recently, I imported imsg.c from OpenBSD to the
> FreeBSD base system's libopenbsd:
> 
> https://svnweb.freebsd.org/changeset/base/290375
> 
> When compiling on FreeBSD, we get a compiler warning with clang:
> 
> cc  -O2 -pipe   -I/opt2/branches/head2/lib/libopenbsd -std=gnu99
> -fstack-protector-strong -Wsystem-headers -Wall -Wno-format-y2k -W
> -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Wno-uninitialized -Wno-pointer-sign -Wno-empty-body
> -Wno-string-plus-int -Wno-unused-const-variable -Wno-tautological-compare
> -Wno-unused-value -Wno-parentheses-equality -Wno-unused-function
> -Wno-enum-conversion -Wno-unused-local-typedef -Qunused-arguments -c
> /opt2/branches/head2/lib/libopenbsd/imsg.c -o imsg.o
> /opt2/branches/head2/lib/libopenbsd/imsg.c:78:6: warning: comparison of
> integers of different signs: 'unsigned long' and 'int' [-Wsign-compare]
>             >= getdtablesize()) {
>             ^  ~~~~~~~~~~~~~~~
> 1 warning generated.
> 
> I can certainly patch the code with a cast on FreeBSD to get rid of
> the compiler warning.  However, I was wondering if there is a good fix
> that we can share between OpenBSD and FreeBSD?

Both OSs define getdtablesize() as sysconf(_SC_OPEN_MAX). sysconf(3)
returns a long, so it seems more correct to make getdtablesize(3) return
a long or ssize_t. The return value has to be signed because sysconf(3)
is specified by POSIX to return -1 and set errno on failure.

Reply via email to