[uClibc-cvs] CVS uClibc/libc/misc/sysvipc
CVS User jocke
jocke at codepoet.org
Tue Sep 28 13:13:44 UTC 2004
Update of /var/cvs/uClibc/libc/misc/sysvipc
In directory nail:/tmp/cvs-serv2420
Modified Files:
sem.c
Log Message:
Atsushi Nemoto writes:
Hi. I found a mismatch between uClibc and kernel in semctl definition.
In uClibc/libc/misc/sysvipc/sem.c:
static inline _syscall4(int, __semctl, int, semid, int, semnum, int, cmd, union semun *, arg);
...
int semctl(int semid, int semnum, int cmd, ...)
...
arg = va_arg (ap, union semun);
...
return __semctl(semid, semnum, cmd, &arg);
But kernel's semctl is:
asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg)
The last argument is an union semun itself, not a pointer to the
union.
Here is a patch.
--- /var/cvs/uClibc/libc/misc/sysvipc/sem.c 2004/01/21 23:27:39 1.5
+++ /var/cvs/uClibc/libc/misc/sysvipc/sem.c 2004/09/28 13:13:44 1.6
@@ -38,7 +38,7 @@
#ifdef __NR_semctl
#define __NR___semctl __NR_semctl
-static inline _syscall4(int, __semctl, int, semid, int, semnum, int, cmd, union semun *, arg);
+static inline _syscall4(int, __semctl, int, semid, int, semnum, int, cmd, void *, arg);
#endif
int semctl(int semid, int semnum, int cmd, ...)
@@ -51,7 +51,7 @@
arg = va_arg (ap, union semun);
va_end (ap);
#ifdef __NR_semctl
- return __semctl(semid, semnum, cmd, &arg);
+ return __semctl(semid, semnum, cmd, arg.__pad);
#else
return __syscall_ipc(IPCOP_semctl, semid, semnum, cmd, &arg);
#endif
More information about the uClibc-cvs
mailing list