* [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09)
@ 2015-09-14 14:33 Paolo Bonzini
2015-09-14 14:33 ` [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull} Paolo Bonzini
2015-09-14 17:02 ` [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Peter Maydell
0 siblings, 2 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-09-14 14:33 UTC (permalink / raw)
To: qemu-devel
The following changes since commit 090d0bfd948343d522cd20bc634105b5cfe2483b:
s390: fix softmmu compilation (2015-08-28 16:05:24 +0100)
are available in the git repository at:
git://github.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to 47d4be12c3997343e436c6cca89aefbbbeb70863:
cutils: work around platform differences in strto{l,ul,ll,ull} (2015-09-10 10:02:00 +0200)
----------------------------------------------------------------
* Support for jemalloc
* qemu_mutex_lock_iothread "No such process" fix
* cutils: qemu_strto* wrappers
* iohandler.c simplification
* Many other fixes and misc patches.
And some MTTCG work (with Emilio's fixes squashed):
* Signal-free TCG kick
* Removing spinlock in favor of QemuMutex
* User-mode emulation multi-threading fixes/docs
----------------------------------------------------------------
Alexandre Derumier (1):
configure: Add support for jemalloc
Andrey Smetanin (1):
Added generic panic handler qemu_system_guest_panicked()
Aníbal Limón (1):
cpus.c: qemu_mutex_lock_iothread fix race condition at cpu thread init
Carlos L. Torres (5):
cutils: Add qemu_strtol() wrapper
cutils: Add qemu_strtoul() wrapper
cutils: Add qemu_strtoll() wrapper
cutils: Add qemu_strtoull() wrapper
qmp: Add example usage of strto*l() qemu wrapper
Dr. David Alan Gilbert (1):
Move RAMBlock and ram_list to ram_addr.h
Emilio G. Cota (7):
qemu-thread: handle spurious futex_wait wakeups
seqlock: add missing 'inline' to seqlock_read_retry
seqlock: read sequence number atomically
rcu: init rcu_registry_lock after fork
rcu: fix comment with s/rcu_gp_lock/rcu_registry_lock/
linux-user: call rcu_(un)register_thread on pthread_(exit|create)
translate-all: remove obsolete comment about l1_map
Fam Zheng (1):
iohandler: Use aio API
Gonglei (1):
vhost-scsi: fix wrong vhost-scsi firmware path
KONRAD Frederic (3):
cpus: remove tcg_halt_cond and tcg_cpu_thread globals
replace spinlock by QemuMutex.
remove unused spinlock.
Michael Marineau (1):
Makefile.target: include top level build dir in vpath
Michael S. Tsirkin (1):
scripts/dump-guest-memory.py: fix after RAMBlock change
Paolo Bonzini (19):
i8257: rewrite DMA_schedule to avoid hooking into the CPU loop
i8257: remove cpu_request_exit irq
tcg: introduce tcg_current_cpu
remove qemu/tls.h
tcg: assign cpu->current_tb in a simpler place
tcg: synchronize cpu->exit_request and cpu->tcg_exit_req accesses
tcg: synchronize exit_request and tcg_current_cpu accesses
use qemu_cpu_kick instead of cpu_exit or qemu_cpu_kick_thread
tcg: signal-free qemu_cpu_kick
CODING_STYLE: update mixed declaration rules
checkpatch: adapt some tests to QEMU
checkpatch: remove tests that are not relevant outside the kernel
add macro file for coccinelle
cpus: protect work list with work_mutex
tcg: add memory barriers in page_find_alloc accesses
tcg: comment on which functions have to be called with mmap_lock held
exec: make mmap_lock/mmap_unlock globally available
cpu-exec: fix lock hierarchy for user-mode emulation
cutils: work around platform differences in strto{l,ul,ll,ull}
Peter Crosthwaite (1):
configure: factor out adding disas configure
Peter Lieven (1):
block/iscsi: validate block size returned from target
CODING_STYLE | 13 +-
Makefile.target | 2 +-
block/iscsi.c | 4 +
bsd-user/qemu.h | 2 -
configure | 93 ++--
cpu-exec.c | 119 ++--
cpus.c | 130 ++---
exec.c | 2 +-
gdbstub.c | 2 +-
hw/block/fdc.c | 2 +-
hw/dma/i82374.c | 5 +-
hw/dma/i8257.c | 31 +-
hw/i386/pc.c | 13 +-
hw/isa/i82378.c | 3 +-
hw/mips/mips_fulong2e.c | 13 +-
hw/mips/mips_jazz.c | 13 +-
hw/mips/mips_malta.c | 13 +-
hw/misc/pvpanic.c | 3 +-
hw/ppc/prep.c | 11 -
hw/ppc/spapr_rtas.c | 2 +-
hw/scsi/vhost-scsi.c | 2 +-
hw/sparc/sun4m.c | 4 +-
hw/sparc64/sun4u.c | 4 +-
include/exec/cpu-all.h | 41 --
include/exec/exec-all.h | 15 +-
include/exec/ram_addr.h | 40 ++
include/exec/spinlock.h | 49 --
include/hw/isa/isa.h | 4 +-
include/qemu-common.h | 8 +
include/qemu/main-loop.h | 3 +-
include/qemu/rcu.h | 2 +-
include/qemu/seqlock.h | 8 +-
include/qemu/tls.h | 52 --
include/qom/cpu.h | 14 +-
include/sysemu/sysemu.h | 1 +
iohandler.c | 111 +---
linux-user/main.c | 6 +-
linux-user/qemu.h | 2 -
linux-user/syscall.c | 2 +
main-loop.c | 5 +-
qmp.c | 14 +-
qom/cpu.c | 3 +
scripts/checkpatch.pl | 540 +++---------------
scripts/cocci-macro-file.h | 119 ++++
scripts/dump-guest-memory.py | 2 +-
target-i386/cpu.h | 3 +
target-i386/mem_helper.c | 25 +-
target-i386/translate.c | 2 +
target-s390x/kvm.c | 11 +-
tcg/tcg.h | 4 +
tests/test-cutils.c | 1255 ++++++++++++++++++++++++++++++++++++++++++
translate-all.c | 85 ++-
util/cutils.c | 150 +++++
util/qemu-thread-posix.c | 11 +-
util/rcu.c | 7 +-
vl.c | 6 +
56 files changed, 2046 insertions(+), 1040 deletions(-)
delete mode 100644 include/exec/spinlock.h
delete mode 100644 include/qemu/tls.h
create mode 100644 scripts/cocci-macro-file.h
--
2.5.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull}
2015-09-14 14:33 [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Paolo Bonzini
@ 2015-09-14 14:33 ` Paolo Bonzini
2015-09-14 14:47 ` Peter Maydell
2015-09-14 17:02 ` [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Peter Maydell
1 sibling, 1 reply; 6+ messages in thread
From: Paolo Bonzini @ 2015-09-14 14:33 UTC (permalink / raw)
To: qemu-devel
Linux returns 0 if no conversion was made, while OS X and presumably
the BSDs return EINVAL. The OS X convention rejects more invalid
inputs, so convert to it and adjust the test case.
Windows returns 1 from strtoul and strtoull (instead of -1) for
negative out-of-range input; fix it up.
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/test-cutils.c | 57 +++++++++++++++--------------------------------------
util/cutils.c | 24 +++++++++++++++++-----
2 files changed, 35 insertions(+), 46 deletions(-)
diff --git a/tests/test-cutils.c b/tests/test-cutils.c
index a7a15a5..0046c61 100644
--- a/tests/test-cutils.c
+++ b/tests/test-cutils.c
@@ -264,9 +264,7 @@ static void test_qemu_strtol_empty(void)
err = qemu_strtol(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtol_whitespace(void)
@@ -279,9 +277,7 @@ static void test_qemu_strtol_whitespace(void)
err = qemu_strtol(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtol_invalid(void)
@@ -294,9 +290,7 @@ static void test_qemu_strtol_invalid(void)
err = qemu_strtol(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtol_trailing(void)
@@ -478,8 +472,7 @@ static void test_qemu_strtol_full_empty(void)
err = qemu_strtol(str, NULL, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtol_full_negative(void)
@@ -555,9 +548,7 @@ static void test_qemu_strtoul_empty(void)
err = qemu_strtoul(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoul_whitespace(void)
@@ -570,9 +561,7 @@ static void test_qemu_strtoul_whitespace(void)
err = qemu_strtoul(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoul_invalid(void)
@@ -585,8 +574,7 @@ static void test_qemu_strtoul_invalid(void)
err = qemu_strtoul(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoul_trailing(void)
@@ -765,8 +753,7 @@ static void test_qemu_strtoul_full_empty(void)
err = qemu_strtoul(str, NULL, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoul_full_negative(void)
{
@@ -840,9 +827,7 @@ static void test_qemu_strtoll_empty(void)
err = qemu_strtoll(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoll_whitespace(void)
@@ -855,9 +840,7 @@ static void test_qemu_strtoll_whitespace(void)
err = qemu_strtoll(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoll_invalid(void)
@@ -870,8 +853,7 @@ static void test_qemu_strtoll_invalid(void)
err = qemu_strtoll(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoll_trailing(void)
@@ -1050,8 +1032,7 @@ static void test_qemu_strtoll_full_empty(void)
err = qemu_strtoll(str, NULL, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoll_full_negative(void)
@@ -1128,9 +1109,7 @@ static void test_qemu_strtoull_empty(void)
err = qemu_strtoull(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoull_whitespace(void)
@@ -1143,9 +1122,7 @@ static void test_qemu_strtoull_whitespace(void)
err = qemu_strtoull(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoull_invalid(void)
@@ -1158,8 +1135,7 @@ static void test_qemu_strtoull_invalid(void)
err = qemu_strtoull(str, &endptr, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert(endptr == str);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoull_trailing(void)
@@ -1338,8 +1314,7 @@ static void test_qemu_strtoull_full_empty(void)
err = qemu_strtoull(str, NULL, 0, &res);
- g_assert_cmpint(err, ==, 0);
- g_assert_cmpint(res, ==, 0);
+ g_assert_cmpint(err, ==, -EINVAL);
}
static void test_qemu_strtoull_full_negative(void)
diff --git a/util/cutils.c b/util/cutils.c
index 67c50e5..84ceaff 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -361,9 +361,15 @@ int64_t strtosz(const char *nptr, char **end)
/**
* Helper function for qemu_strto*l() functions.
*/
-static int check_strtox_error(const char **next, char *endptr,
+static int check_strtox_error(const char *p, char *endptr, const char **next,
int err)
{
+ /* If no conversion was performed, prefer BSD behavior over glibc
+ * behavior.
+ */
+ if (err == 0 && endptr == p) {
+ err = EINVAL;
+ }
if (!next && *endptr) {
return -EINVAL;
}
@@ -412,7 +418,7 @@ int qemu_strtol(const char *nptr, const char **endptr, int base,
} else {
errno = 0;
*result = strtol(nptr, &p, base);
- err = check_strtox_error(endptr, p, errno);
+ err = check_strtox_error(nptr, p, endptr, errno);
}
return err;
}
@@ -443,7 +449,11 @@ int qemu_strtoul(const char *nptr, const char **endptr, int base,
} else {
errno = 0;
*result = strtoul(nptr, &p, base);
- err = check_strtox_error(endptr, p, errno);
+ /* Windows returns 1 for negative out-of-range values. */
+ if (errno == ERANGE) {
+ *result = -1;
+ }
+ err = check_strtox_error(nptr, p, endptr, errno);
}
return err;
}
@@ -466,7 +476,7 @@ int qemu_strtoll(const char *nptr, const char **endptr, int base,
} else {
errno = 0;
*result = strtoll(nptr, &p, base);
- err = check_strtox_error(endptr, p, errno);
+ err = check_strtox_error(nptr, p, endptr, errno);
}
return err;
}
@@ -489,7 +499,11 @@ int qemu_strtoull(const char *nptr, const char **endptr, int base,
} else {
errno = 0;
*result = strtoull(nptr, &p, base);
- err = check_strtox_error(endptr, p, errno);
+ /* Windows returns 1 for negative out-of-range values. */
+ if (errno == ERANGE) {
+ *result = -1;
+ }
+ err = check_strtox_error(nptr, p, endptr, errno);
}
return err;
}
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull}
2015-09-14 14:33 ` [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull} Paolo Bonzini
@ 2015-09-14 14:47 ` Peter Maydell
2015-09-14 14:48 ` Peter Maydell
0 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2015-09-14 14:47 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU Developers
On 14 September 2015 at 15:33, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Linux returns 0 if no conversion was made, while OS X and presumably
> the BSDs return EINVAL. The OS X convention rejects more invalid
> inputs, so convert to it and adjust the test case.
>
> Windows returns 1 from strtoul and strtoull (instead of -1) for
> negative out-of-range input; fix it up.
>
> Reported-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> tests/test-cutils.c | 57 +++++++++++++++--------------------------------------
> util/cutils.c | 24 +++++++++++++++++-----
> 2 files changed, 35 insertions(+), 46 deletions(-)
>
> diff --git a/tests/test-cutils.c b/tests/test-cutils.c
> index a7a15a5..0046c61 100644
> --- a/tests/test-cutils.c
> +++ b/tests/test-cutils.c
> @@ -264,9 +264,7 @@ static void test_qemu_strtol_empty(void)
>
> err = qemu_strtol(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtol_whitespace(void)
> @@ -279,9 +277,7 @@ static void test_qemu_strtol_whitespace(void)
>
> err = qemu_strtol(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtol_invalid(void)
> @@ -294,9 +290,7 @@ static void test_qemu_strtol_invalid(void)
>
> err = qemu_strtol(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtol_trailing(void)
> @@ -478,8 +472,7 @@ static void test_qemu_strtol_full_empty(void)
>
> err = qemu_strtol(str, NULL, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtol_full_negative(void)
> @@ -555,9 +548,7 @@ static void test_qemu_strtoul_empty(void)
>
> err = qemu_strtoul(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoul_whitespace(void)
> @@ -570,9 +561,7 @@ static void test_qemu_strtoul_whitespace(void)
>
> err = qemu_strtoul(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoul_invalid(void)
> @@ -585,8 +574,7 @@ static void test_qemu_strtoul_invalid(void)
>
> err = qemu_strtoul(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoul_trailing(void)
> @@ -765,8 +753,7 @@ static void test_qemu_strtoul_full_empty(void)
>
> err = qemu_strtoul(str, NULL, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
> static void test_qemu_strtoul_full_negative(void)
> {
> @@ -840,9 +827,7 @@ static void test_qemu_strtoll_empty(void)
>
> err = qemu_strtoll(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoll_whitespace(void)
> @@ -855,9 +840,7 @@ static void test_qemu_strtoll_whitespace(void)
>
> err = qemu_strtoll(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoll_invalid(void)
> @@ -870,8 +853,7 @@ static void test_qemu_strtoll_invalid(void)
>
> err = qemu_strtoll(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoll_trailing(void)
> @@ -1050,8 +1032,7 @@ static void test_qemu_strtoll_full_empty(void)
>
> err = qemu_strtoll(str, NULL, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoll_full_negative(void)
> @@ -1128,9 +1109,7 @@ static void test_qemu_strtoull_empty(void)
>
> err = qemu_strtoull(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoull_whitespace(void)
> @@ -1143,9 +1122,7 @@ static void test_qemu_strtoull_whitespace(void)
>
> err = qemu_strtoull(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoull_invalid(void)
> @@ -1158,8 +1135,7 @@ static void test_qemu_strtoull_invalid(void)
>
> err = qemu_strtoull(str, &endptr, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert(endptr == str);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoull_trailing(void)
> @@ -1338,8 +1314,7 @@ static void test_qemu_strtoull_full_empty(void)
>
> err = qemu_strtoull(str, NULL, 0, &res);
>
> - g_assert_cmpint(err, ==, 0);
> - g_assert_cmpint(res, ==, 0);
> + g_assert_cmpint(err, ==, -EINVAL);
> }
>
> static void test_qemu_strtoull_full_negative(void)
> diff --git a/util/cutils.c b/util/cutils.c
> index 67c50e5..84ceaff 100644
> --- a/util/cutils.c
> +++ b/util/cutils.c
> @@ -361,9 +361,15 @@ int64_t strtosz(const char *nptr, char **end)
> /**
> * Helper function for qemu_strto*l() functions.
> */
> -static int check_strtox_error(const char **next, char *endptr,
> +static int check_strtox_error(const char *p, char *endptr, const char **next,
> int err)
> {
> + /* If no conversion was performed, prefer BSD behavior over glibc
> + * behavior.
> + */
> + if (err == 0 && endptr == p) {
> + err = EINVAL;
> + }
> if (!next && *endptr) {
> return -EINVAL;
> }
> @@ -412,7 +418,7 @@ int qemu_strtol(const char *nptr, const char **endptr, int base,
> } else {
> errno = 0;
> *result = strtol(nptr, &p, base);
> - err = check_strtox_error(endptr, p, errno);
> + err = check_strtox_error(nptr, p, endptr, errno);
> }
> return err;
> }
> @@ -443,7 +449,11 @@ int qemu_strtoul(const char *nptr, const char **endptr, int base,
> } else {
> errno = 0;
> *result = strtoul(nptr, &p, base);
> - err = check_strtox_error(endptr, p, errno);
> + /* Windows returns 1 for negative out-of-range values. */
> + if (errno == ERANGE) {
> + *result = -1;
> + }
> + err = check_strtox_error(nptr, p, endptr, errno);
> }
> return err;
> }
> @@ -466,7 +476,7 @@ int qemu_strtoll(const char *nptr, const char **endptr, int base,
> } else {
> errno = 0;
> *result = strtoll(nptr, &p, base);
> - err = check_strtox_error(endptr, p, errno);
> + err = check_strtox_error(nptr, p, endptr, errno);
> }
> return err;
> }
> @@ -489,7 +499,11 @@ int qemu_strtoull(const char *nptr, const char **endptr, int base,
> } else {
> errno = 0;
> *result = strtoull(nptr, &p, base);
> - err = check_strtox_error(endptr, p, errno);
> + /* Windows returns 1 for negative out-of-range values. */
> + if (errno == ERANGE) {
> + *result = -1;
> + }
> + err = check_strtox_error(nptr, p, endptr, errno);
> }
> return err;
> }
> --
> 2.5.0
>
>
--
12345678901234567890123456789012345678901234567890123456789012345678901234567890
1 2 3 4 5 6 7 8
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull}
2015-09-14 14:47 ` Peter Maydell
@ 2015-09-14 14:48 ` Peter Maydell
2015-09-14 15:00 ` Paolo Bonzini
0 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2015-09-14 14:48 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU Developers
On 14 September 2015 at 15:47, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 14 September 2015 at 15:33, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> Windows returns 1 from strtoul and strtoull (instead of -1) for
>> negative out-of-range input; fix it up.
No problem with this patch, just wanted to say 'wat?' at this.
(and then fumbled a blank reply with my mail client, oh well)
-- PMM
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull}
2015-09-14 14:48 ` Peter Maydell
@ 2015-09-14 15:00 ` Paolo Bonzini
0 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2015-09-14 15:00 UTC (permalink / raw)
To: Peter Maydell; +Cc: QEMU Developers
On 14/09/2015 16:48, Peter Maydell wrote:
>>> Windows returns 1 from strtoul and strtoull (instead of -1) for
>>> >> negative out-of-range input; fix it up.
> No problem with this patch, just wanted to say 'wat?' at this.
Indeed. I only tested with Wine, but it cannot be a mistake:
http://marc.info/?l=wine-patches&m=138011287312090&w=2
There are even test cases. :-)
Paolo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09)
2015-09-14 14:33 [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Paolo Bonzini
2015-09-14 14:33 ` [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull} Paolo Bonzini
@ 2015-09-14 17:02 ` Peter Maydell
1 sibling, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2015-09-14 17:02 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU Developers
On 14 September 2015 at 15:33, Paolo Bonzini <pbonzini@redhat.com> wrote:
> The following changes since commit 090d0bfd948343d522cd20bc634105b5cfe2483b:
>
> s390: fix softmmu compilation (2015-08-28 16:05:24 +0100)
>
> are available in the git repository at:
>
> git://github.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to 47d4be12c3997343e436c6cca89aefbbbeb70863:
>
> cutils: work around platform differences in strto{l,ul,ll,ull} (2015-09-10 10:02:00 +0200)
>
> ----------------------------------------------------------------
> * Support for jemalloc
> * qemu_mutex_lock_iothread "No such process" fix
> * cutils: qemu_strto* wrappers
> * iohandler.c simplification
> * Many other fixes and misc patches.
>
> And some MTTCG work (with Emilio's fixes squashed):
> * Signal-free TCG kick
> * Removing spinlock in favor of QemuMutex
> * User-mode emulation multi-threading fixes/docs
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-09-14 17:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-14 14:33 [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Paolo Bonzini
2015-09-14 14:33 ` [Qemu-devel] [PULL 44/44] cutils: work around platform differences in strto{l, ul, ll, ull} Paolo Bonzini
2015-09-14 14:47 ` Peter Maydell
2015-09-14 14:48 ` Peter Maydell
2015-09-14 15:00 ` Paolo Bonzini
2015-09-14 17:02 ` [Qemu-devel] [PULL v2 00/44] First batch of misc changes for 2.5 (2015-09-09) Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).