-/* Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2016 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
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, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
#include <errno.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
#include <unistd.h>
+#include <setxid.h>
-#include <sysdep.h>
-#include "kernel-features.h"
-
-#if defined __NR_setresuid || __ASSUME_SETRESUID_SYSCALL > 0
-
-extern int __setresuid (uid_t ruid, uid_t euid, uid_t suid);
int
seteuid (uid_t uid)
return -1;
}
-# if __ASSUME_32BITUIDS > 0 && defined __NR_setresuid32
- return INLINE_SYSCALL (setresuid32, 3, -1, uid, -1);
-# else
- /* First try the syscall. */
- result = __setresuid (-1, uid, -1);
-# if __ASSUME_SETRESUID_SYSCALL == 0
- if (result == -1 && errno == ENOSYS)
- /* No system call available. Use emulation. This may not work
- since `setreuid' also sets the saved user ID when UID is not
- equal to the real user ID, making it impossible to switch back. */
- result = __setreuid (-1, uid);
-# endif
+#ifdef __NR_setresuid32
+ result = INLINE_SETXID_SYSCALL (setresuid32, 3, -1, uid, -1);
+#else
+ result = INLINE_SETXID_SYSCALL (setresuid, 3, -1, uid, -1);
+#endif
return result;
-# endif
}
+#ifndef seteuid
libc_hidden_def (seteuid)
-#else
-# include <sysdeps/unix/bsd/seteuid.c>
#endif