]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/commitdiff
sem* and msg* for qemu, part2, by Kirill Shutemov.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 2 Feb 2007 22:05:44 +0000 (22:05 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 2 Feb 2007 22:05:44 +0000 (22:05 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2383 c046a42c-6fe2-441c-8c8c-71466251a162

linux-user/syscall.c

index 2b37aa809c97495e0a92244bdf3a6bbe3469e71f..45c8f2939765c701086481bbee53381cf2264677 100644 (file)
@@ -1152,6 +1152,35 @@ static long do_ipc(long call, long first, long second, long third,
         gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version);
         ret = -ENOSYS;
         break;
+
+       case IPCOP_msgget:
+               ret = get_errno(msgget(first, second));
+               break;
+
+       case IPCOP_msgsnd:
+               ret = get_errno(msgsnd(first, (struct msgbuf *) ptr, second, third));
+               break;
+
+       case IPCOP_msgctl:
+               ret = get_errno(msgctl(first, second, (struct msqid_ds *) ptr));
+               break;
+
+       case IPCOP_msgrcv:
+               {
+                       struct ipc_kludge
+                       {
+                               void *__unbounded msgp;
+                               long int msgtyp;
+                       };
+
+                       struct ipc_kludge *foo = (struct ipc_kludge *) ptr;
+                       struct msgbuf *msgp = (struct msgbuf *) foo->msgp;
+
+                       ret = get_errno(msgrcv(first, msgp, second, 0, third));
+
+               }
+               break;
+
     case IPCOP_shmat:
        /* SHM_* flags are the same on all linux platforms */
        ret = get_errno((long) shmat(first, (void *) ptr, second));