[PATCH] Core: use sysconf(_SC_PAGESIZE) instead of getpagesize()
piotrsikora at google.com
Fri Dec 4 22:43:11 UTC 2015
> So the real reason for the change is that you are trying to define
> _POSIX_C_SOURCE for some unknown reason, and it breaks things,
> I suspect there are lots of things that will be broken by defining
> _POSIX_C_SOURCE, and there should be really good reason to define
I want to be able to compile nginx as a strictly conforming POSIX
application, which doesn't depend on any GNU-ism and/or BSD-ism. For
me, this is a really good reason, especially when virtually all
operating systems support defining _POSIX_C_SOURCE and/or
_XOPEN_SOURCE for exactly this purpose.
Yes, getpagesize() isn't the only thing that breaks when enforcing
strict POSIX compliance, but it's a low-hanging fruit and it's the
only thing that breaks build on OS X when compiling with
> AFAIK, _SC_PAGESIZE is not available on HP-UX. Though I have no
> access to one now to test.
I would be surprised if that's the case, considering that HP-UX is one
of the few UNIX03-certified operating systems.
> Signed-to-unsigned conversion is perfectly defined in C for all
> possible values. The cast below is unknown-to-signed, which can
> overflow with undefined result, and thus in some cases causes
> warnings. General approach is to only add casts where they are
> needed, that is, where otherwise the behaviour will be wrong
> and/or a warning will be generated.
I never said it's undefined. However, it's an error, when you try to
be strict enough:
error: implicit conversion changes signedness: 'long' to 'ngx_uint_t'
(aka 'unsigned long') [-Werror,-Wsign-conversion]
ngx_pagesize = value;
1 error generated.
(But that's a moot point, since nginx breaks all over the place with
Feel free to drop the cast from the change, if you ever decide it's
More information about the nginx-devel