Use close_range when available

This fixes the FreeBSD build of nix-util
This commit is contained in:
Robert Hensing 2024-09-18 22:42:44 +02:00
parent 59acf3b75c
commit 5c87c40a5e
3 changed files with 6 additions and 2 deletions

View file

@ -86,7 +86,7 @@ static char buf[1024];]],
AC_LANG_POP(C++) AC_LANG_POP(C++)
AC_CHECK_FUNCS([statvfs pipe2]) AC_CHECK_FUNCS([statvfs pipe2 close_range])
# Check for lutimes, optionally used for changing the mtime of # Check for lutimes, optionally used for changing the mtime of

View file

@ -28,6 +28,7 @@ subdir('build-utils-meson/subprojects')
# HAVE_LUTIMES 1`. The `#define` is unconditional, 0 for not found and 1 # HAVE_LUTIMES 1`. The `#define` is unconditional, 0 for not found and 1
# for found. One therefore uses it with `#if` not `#ifdef`. # for found. One therefore uses it with `#if` not `#ifdef`.
check_funcs = [ check_funcs = [
'close_range',
# Optionally used for changing the mtime of symlinks. # Optionally used for changing the mtime of symlinks.
'lutimes', 'lutimes',
# Optionally used for creating pipes on Unix # Optionally used for creating pipes on Unix

View file

@ -121,10 +121,13 @@ void Pipe::create()
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
#if __linux__ || __FreeBSD__ #if __linux__ || __FreeBSD__
// In future we can use a syscall wrapper, but at the moment musl and older glibc version don't support it.
static int unix_close_range(unsigned int first, unsigned int last, int flags) static int unix_close_range(unsigned int first, unsigned int last, int flags)
{ {
#if !HAVE_CLOSE_RANGE
return syscall(SYS_close_range, first, last, (unsigned int)flags); return syscall(SYS_close_range, first, last, (unsigned int)flags);
#else
return close_range(first, last, flags);
#endif
} }
#endif #endif