mirror of https://github.com/xemu-project/xemu.git
sem* and msg* for qemu, part1, by Kirill Shutemov.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2382 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
b49d07ba03
commit
fa2948167f
|
@ -42,6 +42,7 @@
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
#include <sys/sem.h>
|
||||||
#include <sys/statfs.h>
|
#include <sys/statfs.h>
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
|
@ -1114,6 +1115,12 @@ static struct shm_region {
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
} shm_regions[N_SHM_REGIONS];
|
} shm_regions[N_SHM_REGIONS];
|
||||||
|
|
||||||
|
union semun {
|
||||||
|
int val;
|
||||||
|
struct senid_ds *buf;
|
||||||
|
unsigned short *array;
|
||||||
|
};
|
||||||
|
|
||||||
/* ??? This only works with linear mappings. */
|
/* ??? This only works with linear mappings. */
|
||||||
static long do_ipc(long call, long first, long second, long third,
|
static long do_ipc(long call, long first, long second, long third,
|
||||||
long ptr, long fifth)
|
long ptr, long fifth)
|
||||||
|
@ -1128,6 +1135,23 @@ static long do_ipc(long call, long first, long second, long third,
|
||||||
call &= 0xffff;
|
call &= 0xffff;
|
||||||
|
|
||||||
switch (call) {
|
switch (call) {
|
||||||
|
case IPCOP_semop:
|
||||||
|
ret = get_errno(semop(first,(struct sembuf *) ptr, second));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPCOP_semget:
|
||||||
|
ret = get_errno(semget(first, second, third));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPCOP_semctl:
|
||||||
|
ret = get_errno(semctl(first, second, third, ((union semun*)ptr)->val));
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IPCOP_semtimedop:
|
||||||
|
gemu_log("Unsupported ipc call: %ld (version %d)\n", call, version);
|
||||||
|
ret = -ENOSYS;
|
||||||
|
break;
|
||||||
case IPCOP_shmat:
|
case IPCOP_shmat:
|
||||||
/* SHM_* flags are the same on all linux platforms */
|
/* SHM_* flags are the same on all linux platforms */
|
||||||
ret = get_errno((long) shmat(first, (void *) ptr, second));
|
ret = get_errno((long) shmat(first, (void *) ptr, second));
|
||||||
|
|
Loading…
Reference in New Issue