aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Iakovlev <eiakovlev@linux.microsoft.com>2023-01-24 18:01:16 +0000
committerAlex Bennée <alex.bennee@linaro.org>2023-02-02 11:48:20 +0000
commit0bccdb42df66b697e0a4681c2ad4f10eccef5330 (patch)
treeb9dbdff111ba365ffc3441e00324bce0f0c73c92
parent978c2bf97b2f8b0938dc6570c46275ed8d8e96f8 (diff)
downloadqemu-0bccdb42df66b697e0a4681c2ad4f10eccef5330.zip
qemu-0bccdb42df66b697e0a4681c2ad4f10eccef5330.tar.gz
qemu-0bccdb42df66b697e0a4681c2ad4f10eccef5330.tar.bz2
semihosting: add O_BINARY flag in host_open for NT compatibility
Windows open(2) implementation opens files in text mode by default and needs a Windows-only O_BINARY flag to open files as binary. QEMU already knows about that flag in osdep and it is defined to 0 on non-Windows, so we can just add it to the host_flags for better compatibility. Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Message-Id: <20230106102018.20520-1-eiakovlev@linux.microsoft.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230124180127.1881110-25-alex.bennee@linaro.org>
-rw-r--r--semihosting/syscalls.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/semihosting/syscalls.c b/semihosting/syscalls.c
index ba28194..e89992c 100644
--- a/semihosting/syscalls.c
+++ b/semihosting/syscalls.c
@@ -253,7 +253,7 @@ static void host_open(CPUState *cs, gdb_syscall_complete_cb complete,
{
CPUArchState *env G_GNUC_UNUSED = cs->env_ptr;
char *p;
- int ret, host_flags;
+ int ret, host_flags = O_BINARY;
ret = validate_lock_user_string(&p, cs, fname, fname_len);
if (ret < 0) {
@@ -262,11 +262,11 @@ static void host_open(CPUState *cs, gdb_syscall_complete_cb complete,
}
if (gdb_flags & GDB_O_WRONLY) {
- host_flags = O_WRONLY;
+ host_flags |= O_WRONLY;
} else if (gdb_flags & GDB_O_RDWR) {
- host_flags = O_RDWR;
+ host_flags |= O_RDWR;
} else {
- host_flags = O_RDONLY;
+ host_flags |= O_RDONLY;
}
if (gdb_flags & GDB_O_CREAT) {
host_flags |= O_CREAT;