Re: [PATCH] Cygwin: Fix error return for madvise()

Takashi Yano <[email protected]> Tue, 7 Jul 2026 09:45:51 +0900
Newsgroups gmane.os.cygwin.patches
Message-ID <[email protected]>
Hi Mark,

On Mon,  6 Jul 2026 16:47:43 -0700
Mark Geisert wrote:
> Currently madvise() and posix_madvise() are wired together as one
> function: the latter.  But their error returns should be different.
> Make madvise a first-class export in cygwin.din; code a new madvise()
> that calls posix_madvise() and massages any error return.
> 
> Reported-by: Christian Franke <[email protected]>
> Addresses: https://cygwin.com/pipermail/cygwin/2026-July/259872.html
> Signed-off-by: Mark Geisert <[email protected]>
> Fixes: 61522196c715 (* Merge in cygwin-64bit-branch.)
> 
> ---
>  winsup/cygwin/cygwin.din               |  2 +-
>  winsup/cygwin/include/cygwin/version.h |  3 ++-
>  winsup/cygwin/mm/mmap.cc               | 12 ++++++++++++
>  3 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
> index 2e53bc819..937eacdaf 100644
> --- a/winsup/cygwin/cygwin.din
> +++ b/winsup/cygwin/cygwin.din
> @@ -951,7 +951,7 @@ lseek SIGFE
>  lsetxattr SIGFE
>  lstat SIGFE
>  lutimes SIGFE
> -madvise = posix_madvise SIGFE
> +madvise SIGFE
>  makecontext NOSIGFE
>  mallinfo SIGFE
>  malloc SIGFE
> diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
> index 71ac5282b..fc838e23e 100644
> --- a/winsup/cygwin/include/cygwin/version.h
> +++ b/winsup/cygwin/include/cygwin/version.h
> @@ -502,12 +502,13 @@ details. */
>    360: Add RLIMIT_NPROC.
>    361: Export _Fork.
>    362: Export C23 stdbit functions.
> +  363: Export madvise separately from posix_madvise.
>  
>    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 362
> +#define CYGWIN_VERSION_API_MINOR 363
>  
>  /* There is also a compatibity version number associated with the shared memory
>     regions.  It is incremented when incompatible changes are made to the shared

I don't think we should change CYGWIN_VERSION_API_MINOR value
because the API itself is not changed. This patch fixes a bug
in madvice() implementation.

> diff --git a/winsup/cygwin/mm/mmap.cc b/winsup/cygwin/mm/mmap.cc
> index 1416e4ddc..93db9e474 100644
> --- a/winsup/cygwin/mm/mmap.cc
> +++ b/winsup/cygwin/mm/mmap.cc
> @@ -1422,6 +1422,18 @@ munlock (const void *addr, size_t len)
>    return ret;
>  }
>  
> +extern "C" int
> +madvise (void *addr, size_t len, int advice)
> +{
> +  int ret = posix_madvise (addr, len, advice);
> +  if (ret > 0)
> +    {
> +      set_errno (ret);
> +      ret = -1;
> +    }
> +  return ret;
> +}
> +
>  extern "C" int
>  posix_madvise (void *addr, size_t len, int advice)
>  {
> -- 
> 2.51.0
> 

Patch itself LGTM. Thanks!

-- 
Takashi Yano <[email protected]>