64435eabdc
Update to v4.1.0. Also includes other major packaging changes as follows: There is a new package maintenance workflow - see README.PACKAGING for details. The sibling packages qemu-linux-user and qemu-testsuite are now created with the Build Service's MultiBuild feature. This also necessitates combining the qemu-linux-user changelog content back into qemu's. Luckily the delta there is quite small. Note that the qemu spec file is now that much busier, but added section markers should help reduce the confusion. Also qemu is being enabled for RISCV host compatibility, so some changes are related to that as well. OBS-URL: https://build.opensuse.org/request/show/730437 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=487
37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
From: Alexander Graf <agraf@suse.de>
|
|
Date: Thu, 13 Dec 2012 14:29:22 +0100
|
|
Subject: linux-user: lseek: explicitly cast non-set offsets to signed
|
|
|
|
When doing lseek, SEEK_SET indicates that the offset is an unsigned variable.
|
|
Other seek types have parameters that can be negative.
|
|
|
|
When converting from 32bit to 64bit parameters, we need to take this into
|
|
account and enable SEEK_END and SEEK_CUR to be negative, while SEEK_SET stays
|
|
absolute positioned which we need to maintain as unsigned.
|
|
|
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
|
---
|
|
linux-user/syscall.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
index 8aa653262154326beced64bbe782..5360786be3466c44554b373b4238 100644
|
|
--- a/linux-user/syscall.c
|
|
+++ b/linux-user/syscall.c
|
|
@@ -7619,8 +7619,13 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_ulong arg1,
|
|
return ret;
|
|
#endif
|
|
#ifdef TARGET_NR_lseek
|
|
- case TARGET_NR_lseek:
|
|
- return get_errno(lseek(arg1, arg2, arg3));
|
|
+ case TARGET_NR_lseek: {
|
|
+ off_t off = arg2;
|
|
+ if (arg3 != SEEK_SET) {
|
|
+ off = (abi_long)arg2;
|
|
+ }
|
|
+ return get_errno(lseek(arg1, off, arg3));
|
|
+ }
|
|
#endif
|
|
#if defined(TARGET_NR_getxpid) && defined(TARGET_ALPHA)
|
|
/* Alpha specific */
|