1 /* 2 * setregid() for uClibc 3 * 4 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> 5 * 6 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. 7 */ 8 9 #include <sys/syscall.h> 10 #include <unistd.h> 11 #include <bits/wordsize.h> 12 13 14 #if (__WORDSIZE == 32 && defined(__NR_setregid32)) || __WORDSIZE == 64 15 # ifdef __NR_setregid32 16 # undef __NR_setregid 17 # define __NR_setregid __NR_setregid32 18 # endif 19 20 _syscall2(int, setregid, gid_t, rgid, gid_t, egid) 21 22 #else 23 24 # define __NR___syscall_setregid __NR_setregid 25 static __inline__ _syscall2(int, __syscall_setregid, 26 __kernel_gid_t, rgid, __kernel_gid_t, egid) 27 28 int setregid(gid_t rgid, gid_t egid) 29 { 30 if (((rgid + 1) > (gid_t) ((__kernel_gid_t) - 1U)) 31 || ((egid + 1) > (gid_t) ((__kernel_gid_t) - 1U))) { 32 __set_errno(EINVAL); 33 return -1; 34 } 35 return (__syscall_setregid(rgid, egid)); 36 } 37 #endif 38 39 libc_hidden_weak(setregid) 40