mirror of
https://git.proxmox.com/git/qemu
synced 2025-07-17 22:30:20 +00:00
fcntl flags convertion (Jocelyn Mayer)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@538 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2d603d2216
commit
ffa65c3b70
@ -1130,6 +1130,24 @@ static bitmask_transtbl mmap_flags_tbl[] = {
|
|||||||
{ 0, 0, 0, 0 }
|
{ 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bitmask_transtbl fcntl_flags_tbl[] = {
|
||||||
|
{ TARGET_O_ACCMODE, TARGET_O_WRONLY, O_ACCMODE, O_WRONLY, },
|
||||||
|
{ TARGET_O_ACCMODE, TARGET_O_RDWR, O_ACCMODE, O_RDWR, },
|
||||||
|
{ TARGET_O_CREAT, TARGET_O_CREAT, O_CREAT, O_CREAT, },
|
||||||
|
{ TARGET_O_EXCL, TARGET_O_EXCL, O_EXCL, O_EXCL, },
|
||||||
|
{ TARGET_O_NOCTTY, TARGET_O_NOCTTY, O_NOCTTY, O_NOCTTY, },
|
||||||
|
{ TARGET_O_TRUNC, TARGET_O_TRUNC, O_TRUNC, O_TRUNC, },
|
||||||
|
{ TARGET_O_APPEND, TARGET_O_APPEND, O_APPEND, O_APPEND, },
|
||||||
|
{ TARGET_O_NONBLOCK, TARGET_O_NONBLOCK, O_NONBLOCK, O_NONBLOCK, },
|
||||||
|
{ TARGET_O_SYNC, TARGET_O_SYNC, O_SYNC, O_SYNC, },
|
||||||
|
{ TARGET_FASYNC, TARGET_FASYNC, FASYNC, FASYNC, },
|
||||||
|
{ TARGET_O_DIRECTORY, TARGET_O_DIRECTORY, O_DIRECTORY, O_DIRECTORY, },
|
||||||
|
{ TARGET_O_NOFOLLOW, TARGET_O_NOFOLLOW, O_NOFOLLOW, O_NOFOLLOW, },
|
||||||
|
{ TARGET_O_LARGEFILE, TARGET_O_LARGEFILE, O_LARGEFILE, O_LARGEFILE, },
|
||||||
|
{ TARGET_O_DIRECT, TARGET_O_DIRECT, O_DIRECT, O_DIRECT, },
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
#if defined(TARGET_I386)
|
#if defined(TARGET_I386)
|
||||||
|
|
||||||
/* NOTE: there is really one LDT for all the threads */
|
/* NOTE: there is really one LDT for all the threads */
|
||||||
@ -1353,6 +1371,15 @@ static long do_fcntl(int fd, int cmd, unsigned long arg)
|
|||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case F_GETFL:
|
||||||
|
ret = fcntl(fd, cmd, arg);
|
||||||
|
ret = host_to_target_bitmask(ret, fcntl_flags_tbl);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_SETFL:
|
||||||
|
ret = fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = fcntl(fd, cmd, arg);
|
ret = fcntl(fd, cmd, arg);
|
||||||
break;
|
break;
|
||||||
@ -1464,7 +1491,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
|
|||||||
ret = get_errno(write(arg1, (void *)arg2, arg3));
|
ret = get_errno(write(arg1, (void *)arg2, arg3));
|
||||||
break;
|
break;
|
||||||
case TARGET_NR_open:
|
case TARGET_NR_open:
|
||||||
ret = get_errno(open(path((const char *)arg1), arg2, arg3));
|
ret = get_errno(open(path((const char *)arg1),
|
||||||
|
target_to_host_bitmask(arg2, fcntl_flags_tbl),
|
||||||
|
arg3));
|
||||||
break;
|
break;
|
||||||
case TARGET_NR_close:
|
case TARGET_NR_close:
|
||||||
ret = get_errno(close(arg1));
|
ret = get_errno(close(arg1));
|
||||||
@ -2750,10 +2779,14 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
|
|||||||
|
|
||||||
case TARGET_NR_pivot_root:
|
case TARGET_NR_pivot_root:
|
||||||
goto unimplemented;
|
goto unimplemented;
|
||||||
|
#ifdef TARGET_NR_mincore
|
||||||
case TARGET_NR_mincore:
|
case TARGET_NR_mincore:
|
||||||
goto unimplemented;
|
goto unimplemented;
|
||||||
|
#endif
|
||||||
|
#ifdef TARGET_NR_madvise
|
||||||
case TARGET_NR_madvise:
|
case TARGET_NR_madvise:
|
||||||
goto unimplemented;
|
goto unimplemented;
|
||||||
|
#endif
|
||||||
#if TARGET_LONG_BITS == 32
|
#if TARGET_LONG_BITS == 32
|
||||||
case TARGET_NR_fcntl64:
|
case TARGET_NR_fcntl64:
|
||||||
{
|
{
|
||||||
|
@ -414,7 +414,14 @@ typedef struct target_siginfo {
|
|||||||
/*
|
/*
|
||||||
* SIGILL si_codes
|
* SIGILL si_codes
|
||||||
*/
|
*/
|
||||||
|
#define TARGET_ILL_ILLOPC (1) /* illegal opcode */
|
||||||
#define TARGET_ILL_ILLOPN (2) /* illegal operand */
|
#define TARGET_ILL_ILLOPN (2) /* illegal operand */
|
||||||
|
#define TARGET_ILL_ILLADR (3) /* illegal addressing mode */
|
||||||
|
#define TARGET_ILL_ILLTRP (4) /* illegal trap */
|
||||||
|
#define TARGET_ILL_PRVOPC (5) /* privileged opcode */
|
||||||
|
#define TARGET_ILL_PRVREG (6) /* privileged register */
|
||||||
|
#define TARGET_ILL_COPROC (7) /* coprocessor error */
|
||||||
|
#define TARGET_ILL_BADSTK (8) /* internal stack error */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SIGFPE si_codes
|
* SIGFPE si_codes
|
||||||
@ -435,6 +442,13 @@ typedef struct target_siginfo {
|
|||||||
#define TARGET_SEGV_MAPERR (1) /* address not mapped to object */
|
#define TARGET_SEGV_MAPERR (1) /* address not mapped to object */
|
||||||
#define TARGET_SEGV_ACCERR (2) /* invalid permissions for mapped object */
|
#define TARGET_SEGV_ACCERR (2) /* invalid permissions for mapped object */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SIGBUS si_codes
|
||||||
|
*/
|
||||||
|
#define TARGET_BUS_ADRALN (1) /* invalid address alignment */
|
||||||
|
#define TARGET_BUS_ADRERR (2) /* non-existant physical address */
|
||||||
|
#define TARGET_BUS_OBJERR (3) /* object specific hardware error */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SIGTRAP si_codes
|
* SIGTRAP si_codes
|
||||||
*/
|
*/
|
||||||
@ -891,6 +905,44 @@ struct target_stat64 {
|
|||||||
#define TARGET_F_SETLK64 13
|
#define TARGET_F_SETLK64 13
|
||||||
#define TARGET_F_SETLKW64 14
|
#define TARGET_F_SETLKW64 14
|
||||||
|
|
||||||
|
#if defined (TARGET_PPC)
|
||||||
|
#define TARGET_O_ACCMODE 0003
|
||||||
|
#define TARGET_O_RDONLY 00
|
||||||
|
#define TARGET_O_WRONLY 01
|
||||||
|
#define TARGET_O_RDWR 02
|
||||||
|
#define TARGET_O_CREAT 0100 /* not fcntl */
|
||||||
|
#define TARGET_O_EXCL 0200 /* not fcntl */
|
||||||
|
#define TARGET_O_NOCTTY 0400 /* not fcntl */
|
||||||
|
#define TARGET_O_TRUNC 01000 /* not fcntl */
|
||||||
|
#define TARGET_O_APPEND 02000
|
||||||
|
#define TARGET_O_NONBLOCK 04000
|
||||||
|
#define TARGET_O_NDELAY O_NONBLOCK
|
||||||
|
#define TARGET_O_SYNC 010000
|
||||||
|
#define TARGET_FASYNC 020000 /* fcntl, for BSD compatibility */
|
||||||
|
#define TARGET_O_DIRECTORY 040000 /* must be a directory */
|
||||||
|
#define TARGET_O_NOFOLLOW 0100000 /* don't follow links */
|
||||||
|
#define TARGET_O_LARGEFILE 0200000
|
||||||
|
#define TARGET_O_DIRECT 0400000 /* direct disk access hint */
|
||||||
|
#else
|
||||||
|
#define TARGET_O_ACCMODE 0003
|
||||||
|
#define TARGET_O_RDONLY 00
|
||||||
|
#define TARGET_O_WRONLY 01
|
||||||
|
#define TARGET_O_RDWR 02
|
||||||
|
#define TARGET_O_CREAT 0100 /* not fcntl */
|
||||||
|
#define TARGET_O_EXCL 0200 /* not fcntl */
|
||||||
|
#define TARGET_O_NOCTTY 0400 /* not fcntl */
|
||||||
|
#define TARGET_O_TRUNC 01000 /* not fcntl */
|
||||||
|
#define TARGET_O_APPEND 02000
|
||||||
|
#define TARGET_O_NONBLOCK 04000
|
||||||
|
#define TARGET_O_NDELAY O_NONBLOCK
|
||||||
|
#define TARGET_O_SYNC 010000
|
||||||
|
#define TARGET_FASYNC 020000 /* fcntl, for BSD compatibility */
|
||||||
|
#define TARGET_O_DIRECT 040000 /* direct disk access hint */
|
||||||
|
#define TARGET_O_LARGEFILE 0100000
|
||||||
|
#define TARGET_O_DIRECTORY 0200000 /* must be a directory */
|
||||||
|
#define TARGET_O_NOFOLLOW 0400000 /* don't follow links */
|
||||||
|
#endif
|
||||||
|
|
||||||
struct target_flock {
|
struct target_flock {
|
||||||
short l_type;
|
short l_type;
|
||||||
short l_whence;
|
short l_whence;
|
||||||
|
Loading…
Reference in New Issue
Block a user