OSDN Git Service

* sysv_shm.cc (shmget): Allow to retrieve shared memory segments
authorcorinna <corinna>
Tue, 30 Mar 2004 15:21:18 +0000 (15:21 +0000)
committercorinna <corinna>
Tue, 30 Mar 2004 15:21:18 +0000 (15:21 +0000)
by shmid when IPC_KEY_IS_SHMID is set.

winsup/cygserver/ChangeLog
winsup/cygserver/sysv_shm.cc

index 761056a..8af654c 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-30  Corinna Vinschen  <corinna@vinschen.de>
+
+       * sysv_shm.cc (shmget): Allow to retrieve shared memory segments
+       by shmid when IPC_KEY_IS_SHMID is set.
+
 2004-03-02  Corinna Vinschen  <corinna@vinschen.de>
 
        * sysv_sem.cc (semundo_adjust): Check for process id instead of
index 70ed1a3..7d038f0 100644 (file)
@@ -808,6 +808,12 @@ shmget(struct thread *td, struct shmget_args *uap)
        mode = uap->shmflg & ACCESSPERMS;
        if (uap->key != IPC_PRIVATE) {
        again:
+#ifdef __CYGWIN__
+               if (uap->shmflg & IPC_KEY_IS_SHMID)
+                 segnum = shm_find_segment_by_shmid ((int) uap->key) ?
+                          IPCID_TO_IX((int) uap->key) : -1;
+               else
+#endif
                segnum = shm_find_segment_by_key(uap->key);
                if (segnum >= 0) {
                        error = shmget_existing(td, uap, mode, segnum);