* [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).