[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