The inclusion of <sys/cygwin.h> by <sys/shm.h>, besides causing namespace pollution, also makes it very difficult to get the WINVER-dependent parts of the former. This affects code (such as x11vnc -unixpw_nis) which use both SysV shared memory (e.g. the X11 MIT-SHM extension) and user password authentication.
getpagesize is the simplest function to retreive this information, but it is a legacy function and would also pollute the global namespace. The LSB lists another form which is in the implementation-reserved namespace: http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/baselib---getpagesize.html Signed-off-by: Yaakov Selkowitz <yselk...@redhat.com> --- winsup/cygwin/common.din | 1 + winsup/cygwin/include/cygwin/shm.h | 5 +++-- winsup/cygwin/include/cygwin/version.h | 3 ++- winsup/cygwin/shm.cc | 4 ++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din index fe714d8..7e72abe 100644 --- a/winsup/cygwin/common.din +++ b/winsup/cygwin/common.din @@ -60,6 +60,7 @@ __freading NOSIGFE __fsetlocking SIGFE __fwritable NOSIGFE __fwriting NOSIGFE +__getpagesize = getpagesize SIGFE __getreent NOSIGFE __gnu_basename NOSIGFE __infinity NOSIGFE diff --git a/winsup/cygwin/include/cygwin/shm.h b/winsup/cygwin/include/cygwin/shm.h index c585993..5fbfb11 100644 --- a/winsup/cygwin/include/cygwin/shm.h +++ b/winsup/cygwin/include/cygwin/shm.h @@ -13,7 +13,6 @@ details. */ #define _CYGWIN_SHM_H #include <cygwin/ipc.h> -#include <sys/cygwin.h> #ifdef __cplusplus extern "C" @@ -24,7 +23,9 @@ extern "C" * * 64 Kb was hardcoded for x86. MS states this may change so the constant * expression is replaced by a function call returning the correct value. */ -#define SHMLBA (cygwin_internal (CW_GET_SHMLBA)) +#define SHMLBA (__getpagesize ()) +/* internal alias of legacy getpagesize to avoid polluting global namespace */ +int __getpagesize (void); /* Shared memory operation flags: */ diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index 4edb8db..ee7c4ff 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -477,13 +477,14 @@ details. */ 293: Convert utmpname/utmpxname to int. 294: Export clog10, clog10f. 295: Export POSIX ACL functions. + 296: Export __getpagesize. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull, sigaltstack, sethostname. */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 295 +#define CYGWIN_VERSION_API_MINOR 296 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/shm.cc b/winsup/cygwin/shm.cc index e209346..1d3200c 100644 --- a/winsup/cygwin/shm.cc +++ b/winsup/cygwin/shm.cc @@ -21,6 +21,10 @@ details. */ #include "sync.h" #include "ntdll.h" +/* __getpagesize is only available from libcygwin.a */ +#undef SHMLBA +#define SHMLBA (wincap.allocation_granularity ()) + /* * client_request_shm Constructors */ -- 2.7.4