summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/shm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/shm.cc')
-rw-r--r--winsup/cygwin/shm.cc26
1 files changed, 4 insertions, 22 deletions
diff --git a/winsup/cygwin/shm.cc b/winsup/cygwin/shm.cc
index 89846914a..f6cc30baf 100644
--- a/winsup/cygwin/shm.cc
+++ b/winsup/cygwin/shm.cc
@@ -22,6 +22,7 @@ details. */
#include "cygserver_ipc.h"
#include "cygserver_shm.h"
+#include "cygtls.h"
/*
* client_request_shm Constructors
@@ -244,28 +245,9 @@ shmctl (int shmid, int cmd, struct shmid_ds *buf)
#ifdef USE_SERVER
syscall_printf ("shmctl (shmid = %d, cmd = %d, buf = 0x%x)",
shmid, cmd, buf);
- switch (cmd)
- {
- case IPC_STAT:
- case IPC_SET:
- if (__check_null_invalid_struct_errno (buf, sizeof (struct shmid_ds)))
- return -1;
- break;
- case IPC_INFO:
- /* shmid == 0: Request for shminfo struct. */
- if (!shmid
- && __check_null_invalid_struct_errno (buf, sizeof (struct shminfo)))
- return -1;
- /* Otherwise, request shmid entries from internal shmid_ds array. */
- if (shmid)
- if (__check_null_invalid_struct_errno (buf, shmid * sizeof (struct shmid_ds)))
- return -1;
- break;
- case SHM_INFO:
- if (__check_null_invalid_struct_errno (buf, sizeof (struct shm_info)))
- return -1;
- break;
- }
+ myfault efault;
+ if (efault.faulted (EFAULT))
+ return -1;
client_request_shm request (shmid, cmd, buf);
if (request.make_request () == -1 || request.retval () == -1)
{