[PATCH] Core: use sysconf(_SC_PAGESIZE) instead of getpagesize()

Maxim Dounin mdounin at mdounin.ru
Fri Dec 4 12:19:37 UTC 2015


On Thu, Dec 03, 2015 at 07:24:51PM -0800, Piotr Sikora wrote:

> Hey Maxim,
> > Any practical reasons for the change?
> Kind of... OS X doesn't expose getpagesize() when it's compiled with
> _POSIX_C_SOURCE >= 200112L and no other define (not even
> _DARWIN_C_SOURCE) can change that.
> Side note: I considered adding _DARWIN_C_SOURCE to
> ngx_darwin_config.h, like it's done for _GNU_SOURCE, but I decided
> against it, because I found the ability to enforce strict POSIX
> interface (even if it doesn't really work right now) quite handy...
> and it's off by default, so someone needs to force it anyway.

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 

> > While getpagesize() isn't required by the current issue of POSIX,
> > it is easier to use and used to be more widely available than
> > sysconf(_SC_PAGESIZE).
> Considering that sysconf(_SC_PAGESIZE) is part of POSIX and
> getpagesize() isn't, I don't believe this is true anymore.

AFAIK, _SC_PAGESIZE is not available on HP-UX.  Though I have no 
access to one now to test.

> > The cast looks unneeded.
> It's signed-to-unsigned conversion... it's a little bit on the
> pedantic side, but I wouldn't say it's unneeded... and it follows
> style from similar cast just few lines below.

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.

Maxim Dounin

More information about the nginx-devel mailing list