diff options
author | Roland McGrath <roland@hack.frob.com> | 2014-06-12 13:48:47 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2014-06-12 13:48:47 -0700 |
commit | 463dc947b4f9bc4137c9919ee72b896403926474 (patch) | |
tree | aaade6746cade247ea83c99c3057f6f08e1eb6a9 /sysdeps/nptl/setxid.h | |
parent | e876b09076d859836f948691dee5a1e3b956256e (diff) | |
download | glibc-463dc947b4f9bc4137c9919ee72b896403926474.zip glibc-463dc947b4f9bc4137c9919ee72b896403926474.tar.gz glibc-463dc947b4f9bc4137c9919ee72b896403926474.tar.bz2 |
Get rid of nptl/sysdeps/pthread/ subdirectory
Diffstat (limited to 'sysdeps/nptl/setxid.h')
-rw-r--r-- | sysdeps/nptl/setxid.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/sysdeps/nptl/setxid.h b/sysdeps/nptl/setxid.h new file mode 100644 index 0000000..76c88e0 --- /dev/null +++ b/sysdeps/nptl/setxid.h @@ -0,0 +1,62 @@ +/* Copyright (C) 2004-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <pthreadP.h> +#include <sysdep.h> + +#define __SETXID_1(cmd, arg1) \ + cmd.id[0] = (long int) arg1 +#define __SETXID_2(cmd, arg1, arg2) \ + __SETXID_1 (cmd, arg1); cmd.id[1] = (long int) arg2 +#define __SETXID_3(cmd, arg1, arg2, arg3) \ + __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3 + +#ifdef SINGLE_THREAD +# define INLINE_SETXID_SYSCALL(name, nr, args...) \ + INLINE_SYSCALL (name, nr, args) +#elif defined SHARED +# define INLINE_SETXID_SYSCALL(name, nr, args...) \ + ({ \ + int __result; \ + if (__builtin_expect (__libc_pthread_functions_init, 0)) \ + { \ + struct xid_command __cmd; \ + __cmd.syscall_no = __NR_##name; \ + __SETXID_##nr (__cmd, args); \ + __result = PTHFCT_CALL (ptr__nptl_setxid, (&__cmd)); \ + } \ + else \ + __result = INLINE_SYSCALL (name, nr, args); \ + __result; \ + }) +#else +# define INLINE_SETXID_SYSCALL(name, nr, args...) \ + ({ \ + extern __typeof (__nptl_setxid) __nptl_setxid __attribute__((weak));\ + int __result; \ + if (__glibc_unlikely (__nptl_setxid != NULL)) \ + { \ + struct xid_command __cmd; \ + __cmd.syscall_no = __NR_##name; \ + __SETXID_##nr (__cmd, args); \ + __result =__nptl_setxid (&__cmd); \ + } \ + else \ + __result = INLINE_SYSCALL (name, nr, args); \ + __result; \ + }) +#endif |