trivial patches for 2014-08-09
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJT5TTcAAoJEL7lnXSkw9fbc9oH/082XjCS7XlejxJ6mi6yn90/ W5FcV/jJBRWATWIIOc03VXmODnQVOfYwTDrgkm7fo/x3EJeREMX2u7QaNV8Cdq+H gWwtLupSYYkUIZ3VNjRjrslHnIcyvmPcN/fRHaFHG78Yz69LpJW+h1iCWeR9VN2T huAIX0fWJ0Swh3j8pF9h5vKrWmsvGs8woIRC/EAVKutFTjTZuycWuDVmpiqtkQWk gq1yAxHe9i+AYkXS5qPfDGKEYM7F1xUgA4FwIgLKyFRcbeQ1XUmGS+iicr2wIpYB tGzS+U/LInHnKAtlHfxV7DbI12xtaLxtMq5NeUPZcU50xgvYRtTXoRlI+0cetUA= =g0fX -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mjt/tags/trivial-patches-2014-08-09' into staging trivial patches for 2014-08-09 # gpg: Signature made Fri 08 Aug 2014 21:36:44 BST using RSA key ID A4C3D7DB # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>" # gpg: aka "Michael Tokarev <mjt@corpit.ru>" # gpg: aka "Michael Tokarev <mjt@debian.org>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6EE1 95D1 886E 8FFB 810D 4324 457C E0A0 8044 65C5 # Subkey fingerprint: 6F67 E18E 7C91 C5B1 5514 66A7 BEE5 9D74 A4C3 D7DB * remotes/mjt/tags/trivial-patches-2014-08-09: build-sys: Move qapi-{types, visit, event}.o into util-obj-y po: Add Chinese translation qemu-img: Check getchar() return value in read_password() for WIN32 hw/timer: Move extern declaration from .c to .h file virtio: Move extern declaration to header file Show length mismatch error is hex target-i386/cpu.c: Fix two error output indentation l2tpv3 (configure): it is linux-specific hw/timer/imx_*: fix TIMER_MAX clash with system symbol Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
f083201667
2
Makefile
2
Makefile
|
@ -202,7 +202,7 @@ Makefile: $(version-obj-y) $(version-lobj-y)
|
||||||
# Build libraries
|
# Build libraries
|
||||||
|
|
||||||
libqemustub.a: $(stub-obj-y)
|
libqemustub.a: $(stub-obj-y)
|
||||||
libqemuutil.a: $(util-obj-y) qapi-types.o qapi-visit.o qapi-event.o
|
libqemuutil.a: $(util-obj-y)
|
||||||
|
|
||||||
block-modules = $(foreach o,$(block-obj-m),"$(basename $(subst /,-,$o))",) NULL
|
block-modules = $(foreach o,$(block-obj-m),"$(basename $(subst /,-,$o))",) NULL
|
||||||
util/module.o-cflags = -D'CONFIG_BLOCK_MODULES=$(block-modules)'
|
util/module.o-cflags = -D'CONFIG_BLOCK_MODULES=$(block-modules)'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# Common libraries for tools and emulators
|
# Common libraries for tools and emulators
|
||||||
stub-obj-y = stubs/
|
stub-obj-y = stubs/
|
||||||
util-obj-y = util/ qobject/ qapi/ trace/
|
util-obj-y = util/ qobject/ qapi/ trace/ qapi-types.o qapi-visit.o qapi-event.o
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# block-obj-y is code used by both qemu system emulation and qemu-img
|
# block-obj-y is code used by both qemu system emulation and qemu-img
|
||||||
|
@ -12,7 +12,6 @@ block-obj-y += main-loop.o iohandler.o qemu-timer.o
|
||||||
block-obj-$(CONFIG_POSIX) += aio-posix.o
|
block-obj-$(CONFIG_POSIX) += aio-posix.o
|
||||||
block-obj-$(CONFIG_WIN32) += aio-win32.o
|
block-obj-$(CONFIG_WIN32) += aio-win32.o
|
||||||
block-obj-y += block/
|
block-obj-y += block/
|
||||||
block-obj-y += qapi-types.o qapi-visit.o qapi-event.o
|
|
||||||
block-obj-y += qemu-io-cmds.o
|
block-obj-y += qemu-io-cmds.o
|
||||||
|
|
||||||
block-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
|
block-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
|
||||||
|
@ -88,11 +87,6 @@ common-obj-y += qmp-marshal.o
|
||||||
common-obj-y += qmp.o hmp.o
|
common-obj-y += qmp.o hmp.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
######################################################################
|
|
||||||
# some qapi visitors are used by both system and user emulation:
|
|
||||||
|
|
||||||
common-obj-y += qapi-visit.o qapi-types.o
|
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# Target-independent parts used in system and user emulation
|
# Target-independent parts used in system and user emulation
|
||||||
common-obj-y += qemu-log.o
|
common-obj-y += qemu-log.o
|
||||||
|
@ -111,5 +105,5 @@ version-lobj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.lo
|
||||||
|
|
||||||
# FIXME: a few definitions from qapi-types.o/qapi-visit.o are needed
|
# FIXME: a few definitions from qapi-types.o/qapi-visit.o are needed
|
||||||
# by libqemuutil.a. These should be moved to a separate .json schema.
|
# by libqemuutil.a. These should be moved to a separate .json schema.
|
||||||
qga-obj-y = qga/ qapi-types.o qapi-visit.o
|
qga-obj-y = qga/
|
||||||
qga-vss-dll-obj-y = qga/
|
qga-vss-dll-obj-y = qga/
|
||||||
|
|
|
@ -1072,8 +1072,8 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
|
||||||
QTAILQ_FOREACH(block, &ram_list.blocks, next) {
|
QTAILQ_FOREACH(block, &ram_list.blocks, next) {
|
||||||
if (!strncmp(id, block->idstr, sizeof(id))) {
|
if (!strncmp(id, block->idstr, sizeof(id))) {
|
||||||
if (block->length != length) {
|
if (block->length != length) {
|
||||||
error_report("Length mismatch: %s: " RAM_ADDR_FMT
|
error_report("Length mismatch: %s: 0x" RAM_ADDR_FMT
|
||||||
" in != " RAM_ADDR_FMT, id, length,
|
" in != 0x" RAM_ADDR_FMT, id, length,
|
||||||
block->length);
|
block->length);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1723,6 +1723,7 @@ fi
|
||||||
|
|
||||||
cat > $TMPC <<EOF
|
cat > $TMPC <<EOF
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <linux/ip.h>
|
||||||
int main(void) { return sizeof(struct mmsghdr); }
|
int main(void) { return sizeof(struct mmsghdr); }
|
||||||
EOF
|
EOF
|
||||||
if compile_prog "" "" ; then
|
if compile_prog "" "" ; then
|
||||||
|
|
|
@ -83,7 +83,7 @@ static char const *imx_epit_reg_name(uint32_t reg)
|
||||||
#define CR_CLKSRC_SHIFT (24)
|
#define CR_CLKSRC_SHIFT (24)
|
||||||
#define CR_CLKSRC_MASK (0x3 << CR_CLKSRC_SHIFT)
|
#define CR_CLKSRC_MASK (0x3 << CR_CLKSRC_SHIFT)
|
||||||
|
|
||||||
#define TIMER_MAX 0XFFFFFFFFUL
|
#define EPIT_TIMER_MAX 0XFFFFFFFFUL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Exact clock frequencies vary from board to board.
|
* Exact clock frequencies vary from board to board.
|
||||||
|
@ -155,7 +155,7 @@ static void imx_epit_reset(DeviceState *dev)
|
||||||
*/
|
*/
|
||||||
s->cr &= (CR_EN|CR_ENMOD|CR_STOPEN|CR_DOZEN|CR_WAITEN|CR_DBGEN);
|
s->cr &= (CR_EN|CR_ENMOD|CR_STOPEN|CR_DOZEN|CR_WAITEN|CR_DBGEN);
|
||||||
s->sr = 0;
|
s->sr = 0;
|
||||||
s->lr = TIMER_MAX;
|
s->lr = EPIT_TIMER_MAX;
|
||||||
s->cmp = 0;
|
s->cmp = 0;
|
||||||
s->cnt = 0;
|
s->cnt = 0;
|
||||||
/* stop both timers */
|
/* stop both timers */
|
||||||
|
@ -163,9 +163,9 @@ static void imx_epit_reset(DeviceState *dev)
|
||||||
ptimer_stop(s->timer_reload);
|
ptimer_stop(s->timer_reload);
|
||||||
/* compute new frequency */
|
/* compute new frequency */
|
||||||
imx_epit_set_freq(s);
|
imx_epit_set_freq(s);
|
||||||
/* init both timers to TIMER_MAX */
|
/* init both timers to EPIT_TIMER_MAX */
|
||||||
ptimer_set_limit(s->timer_cmp, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer_cmp, EPIT_TIMER_MAX, 1);
|
||||||
ptimer_set_limit(s->timer_reload, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer_reload, EPIT_TIMER_MAX, 1);
|
||||||
if (s->freq && (s->cr & CR_EN)) {
|
if (s->freq && (s->cr & CR_EN)) {
|
||||||
/* if the timer is still enabled, restart it */
|
/* if the timer is still enabled, restart it */
|
||||||
ptimer_run(s->timer_reload, 0);
|
ptimer_run(s->timer_reload, 0);
|
||||||
|
@ -227,7 +227,7 @@ static void imx_epit_reload_compare_timer(IMXEPITState *s)
|
||||||
/* It'll fire in this round of the timer */
|
/* It'll fire in this round of the timer */
|
||||||
next = tmp - s->cmp;
|
next = tmp - s->cmp;
|
||||||
} else { /* catch it next time around */
|
} else { /* catch it next time around */
|
||||||
next = tmp - s->cmp + ((s->cr & CR_RLD) ? TIMER_MAX : s->lr);
|
next = tmp - s->cmp + ((s->cr & CR_RLD) ? EPIT_TIMER_MAX : s->lr);
|
||||||
}
|
}
|
||||||
ptimer_set_count(s->timer_cmp, next);
|
ptimer_set_count(s->timer_cmp, next);
|
||||||
}
|
}
|
||||||
|
@ -260,8 +260,8 @@ static void imx_epit_write(void *opaque, hwaddr offset, uint64_t value,
|
||||||
ptimer_set_limit(s->timer_reload, s->lr, 1);
|
ptimer_set_limit(s->timer_reload, s->lr, 1);
|
||||||
ptimer_set_limit(s->timer_cmp, s->lr, 1);
|
ptimer_set_limit(s->timer_cmp, s->lr, 1);
|
||||||
} else {
|
} else {
|
||||||
ptimer_set_limit(s->timer_reload, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer_reload, EPIT_TIMER_MAX, 1);
|
||||||
ptimer_set_limit(s->timer_cmp, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer_cmp, EPIT_TIMER_MAX, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,11 +80,11 @@ static char const *imx_gpt_reg_name(uint32_t reg)
|
||||||
* GPT : General purpose timer
|
* GPT : General purpose timer
|
||||||
*
|
*
|
||||||
* This timer counts up continuously while it is enabled, resetting itself
|
* This timer counts up continuously while it is enabled, resetting itself
|
||||||
* to 0 when it reaches TIMER_MAX (in freerun mode) or when it
|
* to 0 when it reaches GPT_TIMER_MAX (in freerun mode) or when it
|
||||||
* reaches the value of one of the ocrX (in periodic mode).
|
* reaches the value of one of the ocrX (in periodic mode).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define TIMER_MAX 0XFFFFFFFFUL
|
#define GPT_TIMER_MAX 0XFFFFFFFFUL
|
||||||
|
|
||||||
/* Control register. Not all of these bits have any effect (yet) */
|
/* Control register. Not all of these bits have any effect (yet) */
|
||||||
#define GPT_CR_EN (1 << 0) /* GPT Enable */
|
#define GPT_CR_EN (1 << 0) /* GPT Enable */
|
||||||
|
@ -218,7 +218,7 @@ static inline uint32_t imx_gpt_find_limit(uint32_t count, uint32_t reg,
|
||||||
|
|
||||||
static void imx_gpt_compute_next_timeout(IMXGPTState *s, bool event)
|
static void imx_gpt_compute_next_timeout(IMXGPTState *s, bool event)
|
||||||
{
|
{
|
||||||
uint32_t timeout = TIMER_MAX;
|
uint32_t timeout = GPT_TIMER_MAX;
|
||||||
uint32_t count = 0;
|
uint32_t count = 0;
|
||||||
long long limit;
|
long long limit;
|
||||||
|
|
||||||
|
@ -230,10 +230,10 @@ static void imx_gpt_compute_next_timeout(IMXGPTState *s, bool event)
|
||||||
if (event) {
|
if (event) {
|
||||||
/* This is a timer event */
|
/* This is a timer event */
|
||||||
|
|
||||||
if ((s->cr & GPT_CR_FRR) && (s->next_timeout != TIMER_MAX)) {
|
if ((s->cr & GPT_CR_FRR) && (s->next_timeout != GPT_TIMER_MAX)) {
|
||||||
/*
|
/*
|
||||||
* if we are in free running mode and we have not reached
|
* if we are in free running mode and we have not reached
|
||||||
* the TIMER_MAX limit, then update the count
|
* the GPT_TIMER_MAX limit, then update the count
|
||||||
*/
|
*/
|
||||||
count = imx_gpt_update_count(s);
|
count = imx_gpt_update_count(s);
|
||||||
}
|
}
|
||||||
|
@ -267,7 +267,7 @@ static void imx_gpt_compute_next_timeout(IMXGPTState *s, bool event)
|
||||||
if ((s->ir & GPT_IR_OF3IE) && (timeout == s->ocr3)) {
|
if ((s->ir & GPT_IR_OF3IE) && (timeout == s->ocr3)) {
|
||||||
s->next_int |= GPT_SR_OF3;
|
s->next_int |= GPT_SR_OF3;
|
||||||
}
|
}
|
||||||
if ((s->ir & GPT_IR_ROVIE) && (timeout == TIMER_MAX)) {
|
if ((s->ir & GPT_IR_ROVIE) && (timeout == GPT_TIMER_MAX)) {
|
||||||
s->next_int |= GPT_SR_ROV;
|
s->next_int |= GPT_SR_ROV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,20 +370,20 @@ static void imx_gpt_reset(DeviceState *dev)
|
||||||
s->pr = 0;
|
s->pr = 0;
|
||||||
s->ir = 0;
|
s->ir = 0;
|
||||||
s->cnt = 0;
|
s->cnt = 0;
|
||||||
s->ocr1 = TIMER_MAX;
|
s->ocr1 = GPT_TIMER_MAX;
|
||||||
s->ocr2 = TIMER_MAX;
|
s->ocr2 = GPT_TIMER_MAX;
|
||||||
s->ocr3 = TIMER_MAX;
|
s->ocr3 = GPT_TIMER_MAX;
|
||||||
s->icr1 = 0;
|
s->icr1 = 0;
|
||||||
s->icr2 = 0;
|
s->icr2 = 0;
|
||||||
|
|
||||||
s->next_timeout = TIMER_MAX;
|
s->next_timeout = GPT_TIMER_MAX;
|
||||||
s->next_int = 0;
|
s->next_int = 0;
|
||||||
|
|
||||||
/* compute new freq */
|
/* compute new freq */
|
||||||
imx_gpt_set_freq(s);
|
imx_gpt_set_freq(s);
|
||||||
|
|
||||||
/* reset the limit to TIMER_MAX */
|
/* reset the limit to GPT_TIMER_MAX */
|
||||||
ptimer_set_limit(s->timer, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer, GPT_TIMER_MAX, 1);
|
||||||
|
|
||||||
/* if the timer is still enabled, restart it */
|
/* if the timer is still enabled, restart it */
|
||||||
if (s->freq && (s->cr & GPT_CR_EN)) {
|
if (s->freq && (s->cr & GPT_CR_EN)) {
|
||||||
|
@ -415,8 +415,8 @@ static void imx_gpt_write(void *opaque, hwaddr offset, uint64_t value,
|
||||||
if ((oldreg ^ s->cr) & GPT_CR_EN) {
|
if ((oldreg ^ s->cr) & GPT_CR_EN) {
|
||||||
if (s->cr & GPT_CR_EN) {
|
if (s->cr & GPT_CR_EN) {
|
||||||
if (s->cr & GPT_CR_ENMOD) {
|
if (s->cr & GPT_CR_ENMOD) {
|
||||||
s->next_timeout = TIMER_MAX;
|
s->next_timeout = GPT_TIMER_MAX;
|
||||||
ptimer_set_count(s->timer, TIMER_MAX);
|
ptimer_set_count(s->timer, GPT_TIMER_MAX);
|
||||||
imx_gpt_compute_next_timeout(s, false);
|
imx_gpt_compute_next_timeout(s, false);
|
||||||
}
|
}
|
||||||
ptimer_run(s->timer, 1);
|
ptimer_run(s->timer, 1);
|
||||||
|
@ -451,8 +451,8 @@ static void imx_gpt_write(void *opaque, hwaddr offset, uint64_t value,
|
||||||
|
|
||||||
/* In non-freerun mode, reset count when this register is written */
|
/* In non-freerun mode, reset count when this register is written */
|
||||||
if (!(s->cr & GPT_CR_FRR)) {
|
if (!(s->cr & GPT_CR_FRR)) {
|
||||||
s->next_timeout = TIMER_MAX;
|
s->next_timeout = GPT_TIMER_MAX;
|
||||||
ptimer_set_limit(s->timer, TIMER_MAX, 1);
|
ptimer_set_limit(s->timer, GPT_TIMER_MAX, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compute the new timeout */
|
/* compute the new timeout */
|
||||||
|
|
|
@ -282,9 +282,6 @@ static void tusb_gpio_intr_update(TUSBState *s)
|
||||||
/* TODO: How is this signalled? */
|
/* TODO: How is this signalled? */
|
||||||
}
|
}
|
||||||
|
|
||||||
extern CPUReadMemoryFunc * const musb_read[];
|
|
||||||
extern CPUWriteMemoryFunc * const musb_write[];
|
|
||||||
|
|
||||||
static uint32_t tusb_async_readb(void *opaque, hwaddr addr)
|
static uint32_t tusb_async_readb(void *opaque, hwaddr addr)
|
||||||
{
|
{
|
||||||
TUSBState *s = (TUSBState *) opaque;
|
TUSBState *s = (TUSBState *) opaque;
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
extern const VhostOps user_ops;
|
|
||||||
|
|
||||||
static int vhost_kernel_call(struct vhost_dev *dev, unsigned long int request,
|
static int vhost_kernel_call(struct vhost_dev *dev, unsigned long int request,
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -475,7 +475,8 @@ void usb_host_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#define VM_USB_HUB_SIZE 8
|
#define VM_USB_HUB_SIZE 8
|
||||||
|
|
||||||
/* usb-musb.c */
|
/* hw/usb/hdc-musb.c */
|
||||||
|
|
||||||
enum musb_irq_source_e {
|
enum musb_irq_source_e {
|
||||||
musb_irq_suspend = 0,
|
musb_irq_suspend = 0,
|
||||||
musb_irq_resume,
|
musb_irq_resume,
|
||||||
|
@ -494,6 +495,10 @@ enum musb_irq_source_e {
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct MUSBState MUSBState;
|
typedef struct MUSBState MUSBState;
|
||||||
|
|
||||||
|
extern CPUReadMemoryFunc * const musb_read[];
|
||||||
|
extern CPUWriteMemoryFunc * const musb_write[];
|
||||||
|
|
||||||
MUSBState *musb_init(DeviceState *parent_device, int gpio_base);
|
MUSBState *musb_init(DeviceState *parent_device, int gpio_base);
|
||||||
void musb_reset(MUSBState *s);
|
void musb_reset(MUSBState *s);
|
||||||
uint32_t musb_core_intr_get(MUSBState *s);
|
uint32_t musb_core_intr_get(MUSBState *s);
|
||||||
|
|
|
@ -32,6 +32,8 @@ typedef struct VhostOps {
|
||||||
vhost_backend_cleanup vhost_backend_cleanup;
|
vhost_backend_cleanup vhost_backend_cleanup;
|
||||||
} VhostOps;
|
} VhostOps;
|
||||||
|
|
||||||
|
extern const VhostOps user_ops;
|
||||||
|
|
||||||
int vhost_set_backend_type(struct vhost_dev *dev,
|
int vhost_set_backend_type(struct vhost_dev *dev,
|
||||||
VhostBackendType backend_type);
|
VhostBackendType backend_type);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
# Chinese translation for QEMU.
|
||||||
|
# This file is put in the public domain.
|
||||||
|
#
|
||||||
|
# Fam Zheng <famz@redhat.com>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: QEMU 2.2\n"
|
||||||
|
"Report-Msgid-Bugs-To: qemu-devel@nongnu.org\n"
|
||||||
|
"POT-Creation-Date: 2014-07-31 10:03+0800\n"
|
||||||
|
"PO-Revision-Date: 2014-07-31 10:00+0800\n"
|
||||||
|
"Last-Translator: Fam Zheng <famz@redhat.com>\n"
|
||||||
|
"Language-Team: Chinese <zh@li.org>\n"
|
||||||
|
"Language: zh\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 1.4\n"
|
||||||
|
|
||||||
|
#: ui/gtk.c:321
|
||||||
|
msgid " - Press Ctrl+Alt+G to release grab"
|
||||||
|
msgstr " - 按下 Ctrl+Alt+G 取消捕获"
|
||||||
|
|
||||||
|
#: ui/gtk.c:325
|
||||||
|
msgid " [Paused]"
|
||||||
|
msgstr " [已暂停]"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1601
|
||||||
|
msgid "_Pause"
|
||||||
|
msgstr "暂停(_P)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1607
|
||||||
|
msgid "_Reset"
|
||||||
|
msgstr "重置(_R)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1610
|
||||||
|
msgid "Power _Down"
|
||||||
|
msgstr "关闭电源(_D)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1616
|
||||||
|
msgid "_Quit"
|
||||||
|
msgstr "退出(_Q)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1692
|
||||||
|
msgid "_Fullscreen"
|
||||||
|
msgstr "全屏(_F)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1702
|
||||||
|
msgid "Zoom _In"
|
||||||
|
msgstr "放大(_I)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1709
|
||||||
|
msgid "Zoom _Out"
|
||||||
|
msgstr "缩小(_O)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1716
|
||||||
|
msgid "Best _Fit"
|
||||||
|
msgstr "最合适大小(_F)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1723
|
||||||
|
msgid "Zoom To _Fit"
|
||||||
|
msgstr "缩放以适应大小(_F)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1729
|
||||||
|
msgid "Grab On _Hover"
|
||||||
|
msgstr "鼠标经过时捕获(_H)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1732
|
||||||
|
msgid "_Grab Input"
|
||||||
|
msgstr "捕获输入(_G)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1761
|
||||||
|
msgid "Show _Tabs"
|
||||||
|
msgstr "显示标签页(_T)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1764
|
||||||
|
msgid "Detach Tab"
|
||||||
|
msgstr "分离标签页"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1778
|
||||||
|
msgid "_Machine"
|
||||||
|
msgstr "虚拟机(_M)"
|
||||||
|
|
||||||
|
#: ui/gtk.c:1783
|
||||||
|
msgid "_View"
|
||||||
|
msgstr "视图(_V)"
|
|
@ -185,16 +185,21 @@ static int GCC_FMT_ATTR(2, 3) qprintf(bool quiet, const char *fmt, ...)
|
||||||
static int read_password(char *buf, int buf_size)
|
static int read_password(char *buf, int buf_size)
|
||||||
{
|
{
|
||||||
int c, i;
|
int c, i;
|
||||||
|
|
||||||
printf("Password: ");
|
printf("Password: ");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
i = 0;
|
i = 0;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
c = getchar();
|
c = getchar();
|
||||||
if (c == '\n')
|
if (c < 0) {
|
||||||
|
buf[i] = '\0';
|
||||||
|
return -1;
|
||||||
|
} else if (c == '\n') {
|
||||||
break;
|
break;
|
||||||
if (i < (buf_size - 1))
|
} else if (i < (buf_size - 1)) {
|
||||||
buf[i++] = c;
|
buf[i++] = c;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
buf[i] = '\0';
|
buf[i] = '\0';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,7 +282,7 @@ tests/test-qmp-event$(EXESUF): tests/test-qmp-event.o $(test-qapi-obj-y) libqemu
|
||||||
tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
tests/test-qmp-output-visitor$(EXESUF): tests/test-qmp-output-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
tests/test-qmp-input-visitor$(EXESUF): tests/test-qmp-input-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
tests/test-qmp-input-strict$(EXESUF): tests/test-qmp-input-strict.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) qapi-types.o qapi-visit.o libqemuutil.a libqemustub.a
|
tests/test-qmp-commands$(EXESUF): tests/test-qmp-commands.o tests/test-qmp-marshal.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
tests/test-visitor-serialization$(EXESUF): tests/test-visitor-serialization.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
tests/test-opts-visitor$(EXESUF): tests/test-opts-visitor.o $(test-qapi-obj-y) libqemuutil.a libqemustub.a
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue