Module Name:    src
Committed By:   christos
Date:           Mon Jan 31 22:51:40 UTC 2011

Modified Files:
        src/lib/libc/compat/sys: compat___semctl13.c compat_semctl.c

Log Message:
Fix emulation issue of SETVAL, and make the code look the same between the
two different versions.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/sys/compat___semctl13.c \
    src/lib/libc/compat/sys/compat_semctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/compat/sys/compat___semctl13.c
diff -u src/lib/libc/compat/sys/compat___semctl13.c:1.2 src/lib/libc/compat/sys/compat___semctl13.c:1.3
--- src/lib/libc/compat/sys/compat___semctl13.c:1.2	Sat Jan 10 21:46:26 2009
+++ src/lib/libc/compat/sys/compat___semctl13.c	Mon Jan 31 17:51:39 2011
@@ -1,6 +1,6 @@
-/*	$NetBSD: compat___semctl13.c,v 1.2 2009/01/11 02:46:26 christos Exp $	*/
+/*	$NetBSD: compat___semctl13.c,v 1.3 2011/01/31 22:51:39 christos Exp $	*/
 
-/*	$NetBSD: compat___semctl13.c,v 1.2 2009/01/11 02:46:26 christos Exp $ */
+/*	$NetBSD: compat___semctl13.c,v 1.3 2011/01/31 22:51:39 christos Exp $ */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
  */
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: compat___semctl13.c,v 1.2 2009/01/11 02:46:26 christos Exp $");
+__RCSID("$NetBSD: compat___semctl13.c,v 1.3 2011/01/31 22:51:39 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -77,14 +77,25 @@
 #else
 		semun = va_arg(ap, union __semun);
 #endif
+		break;
+	default:
+		break;
 	}
 	va_end(ap);
 
-	ds13 = (struct semid_ds13 *)(void *)semun.buf;
-	semun.buf = &ds;
+	switch (cmd) {
+	case IPC_SET:
+	case IPC_STAT:
+		ds13 = (void *)semun.buf;
+		semun.buf = &ds;
+		if (cmd == IPC_SET)
+			__semid_ds13_to_native(ds13, &ds);
+		break;
+	default:
+		ds13 = NULL;
+		break;
+	}
 
-	if (cmd == IPC_SET)
-		__semid_ds13_to_native(ds13, &ds);
 
 	error = ____semctl50(semid, semnum, cmd, &semun);
 	if (error)
@@ -92,7 +103,5 @@
 
 	if (cmd == IPC_STAT)
 		__native_to_semid_ds13(&ds, ds13);
-
-	semun.buf = (struct semid_ds *)(void *)ds13;
 	return 0;
 }
Index: src/lib/libc/compat/sys/compat_semctl.c
diff -u src/lib/libc/compat/sys/compat_semctl.c:1.2 src/lib/libc/compat/sys/compat_semctl.c:1.3
--- src/lib/libc/compat/sys/compat_semctl.c:1.2	Sat Jan 10 21:46:26 2009
+++ src/lib/libc/compat/sys/compat_semctl.c	Mon Jan 31 17:51:39 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_semctl.c,v 1.2 2009/01/11 02:46:26 christos Exp $ */
+/* $NetBSD: compat_semctl.c,v 1.3 2011/01/31 22:51:39 christos Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Christopher G. Demetriou
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: compat_semctl.c,v 1.2 2009/01/11 02:46:26 christos Exp $");
+__RCSID("$NetBSD: compat_semctl.c,v 1.3 2011/01/31 22:51:39 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #define __LIBC12_SOURCE__
@@ -53,7 +53,7 @@
 	va_list ap;
 	union __semun semun;
 	struct semid_ds ds;
-	struct semid_ds14 *ds14 = NULL;
+	struct semid_ds14 *ds14;
 	int error;
 
 	va_start(ap, cmd);
@@ -68,27 +68,30 @@
 #else
 		semun = va_arg(ap, union __semun);
 #endif
+		break;
+	default:
+		break;
 	}
 	va_end(ap);
 
 	switch (cmd) {
 	case IPC_SET:
 	case IPC_STAT:
-		ds14 = (struct semid_ds14 *)(void *)semun.buf;
+		ds14 = (void *)semun.buf;
 		if (cmd == IPC_SET)
 			__semid_ds14_to_native(ds14, &ds);
 		semun.buf = &ds;
 		break;
+	default:
+		ds14 = NULL;
+		break;
 	}
 
 	error = __semctl50(semid, semnum, cmd, &semun);
-	switch (cmd) {
-	case IPC_SET:
-	case IPC_STAT:
-		semun.buf = (struct semid_ds *)(void *)ds14;
-		if (cmd == IPC_STAT && error == 0)
-			__native_to_semid_ds14(&ds, ds14);
-		break;
-	}
-	return error;
+	if (error)
+		return error;
+
+	if (cmd == IPC_STAT)
+		__native_to_semid_ds14(&ds, ds14);
+	return 0;
 }

Reply via email to