chiark / gitweb /
[PATCH] volume-id build fix and update
[elogind.git] / klibc / klibc / setresuid.c
1 /*
2  * setresuid.c
3  */
4
5 #include <unistd.h>
6 #include <sys/syscall.h>
7
8 #ifdef __NR_setresuid
9
10 _syscall3(int,setresuid,uid_t,a0,uid_t,a1,uid_t,a2);
11
12 #elif defined(__NR_setresuid32)
13
14 static inline _syscall3(int,setresuid32,uid_t,a0,uid_t,a1,uid_t,a2);
15
16 int setresuid(uid_t a0, uid_t a1, uid_t a2)
17 {
18   if ( sizeof(uid_t) == sizeof(uint32_t) ) {
19     return setresuid32(a0,a1,a2);
20   } else {
21     uint32_t x0 = (a0 == (uid_t)-1) ? (uint32_t)-1 : a0;
22     uint32_t x1 = (a1 == (uid_t)-1) ? (uint32_t)-1 : a1;
23     uint32_t x2 = (a2 == (uid_t)-1) ? (uint32_t)-1 : a2;
24     
25     return setresuid32(x0,x1,x2);
26   }
27 }
28
29 #endif
30