1 /* Wrapper for the mlock2 system call with fallback to mlock.
2    Copyright (C) 2017-2022 Free Software Foundation, Inc.
3 
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8 
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <https://www.gnu.org/licenses/>.  */
17 
18 #include <sys/mman.h>
19 #include <errno.h>
20 #include <sysdep.h>
21 
22 int
mlock2(const void * addr,size_t length,unsigned int flags)23 mlock2 (const void *addr, size_t length, unsigned int flags)
24 {
25 #ifdef __ASSUME_MLOCK2
26   return INLINE_SYSCALL_CALL (mlock2, addr, length, flags);
27 #else
28   if (flags == 0)
29     return INLINE_SYSCALL_CALL (mlock, addr, length);
30   int ret = INLINE_SYSCALL_CALL (mlock2, addr, length, flags);
31   if (ret == 0 || errno != ENOSYS)
32     return ret;
33   /* Treat the missing system call as an invalid (non-zero) flag
34      argument.  */
35   __set_errno (EINVAL);
36   return -1;
37 #endif /* __ASSUME_MLOCK2 */
38 }
39