mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 19:49:43 +00:00
trivial patches for 2014-05-26
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAABAgAGBQJTgup0AAoJEL7lnXSkw9fb2z0IAJVnjV1b2xGqWrbBFPvm1zdT 8vSKdW77kvtL1Usx2xLLqjn+xfJsmDwiIfEZvAEsma2s8ubVkz9hiQylq9jdSxGi YR0i8xUeqeF6n2RttzEw9rENHa9qZllxGpBQyIcjxo+7hcgVkj0r15x+JAIkeIpV 6iCx1mqAC5QJbHrIN1eO5ymDZvsq37Q8S9jRU0hJ18MwFfKc1z9T38D+VytnW9xK l5Qg3JEf9HBI9zTChfRDImTDXNV2Ehm0nK5/8noD0mjp06p/DF/HN+BDsXM/0cPc aWmoVNa0KGCqXvmI+F/7RWBzxaOkH9UXDrf1ed10Io6Nsp0nGfxWJHEA9to/fyo= =86oR -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mjt/tags/trivial-patches-2014-05-26' into staging trivial patches for 2014-05-26 # gpg: Signature made Mon 26 May 2014 08:17:08 BST using RSA key ID A4C3D7DB # gpg: Can't check signature: public key not found * remotes/mjt/tags/trivial-patches-2014-05-26: (23 commits) libcacard: remove useless initializers net: cadence_gem: Fix top comment bsd-user: replace fprintf(stderr, ...) with error_report() audio: replace fprintf(stderr, ...) with error_report() in audio libcacard: fix wrong array expansion logic libcacard/vcard_emul_nss: Drop a redundant conditional libcacard: Convert two leftover realloc() to GLib libcacard/vreader: Tighten assertion to clarify intent libcacard/vreader: Drop broken recovery from failed assertion libcacard: Plug memory leaks around vreader_get_reader_list() libcacard/vscclient: Bury some dead code vl: fix 'name' option to work with -readconfig configure: Put tempfiles in a subdir of the build directory dma-helpers: avoid calling dma_bdrv_unmap() twice arch_init: replace fprintf(stderr, ...) with error_report() pci: move dereferencing of root only after verifying valid root pointer jazz_led: Add missing break in switch case bswap.h: Rename ldl_p, stl_p, etc to ldl_he_p, stl_he_p, etc configure: Automatically select GTK+ 3.0 if GTK+ 2.0 is unavailable nbd: Miscellaneous typo fixes. ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
9474ab1487
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,6 +4,7 @@
|
||||
/config-host.*
|
||||
/config-target.*
|
||||
/config.status
|
||||
/config-temp
|
||||
/trace/generated-tracers.h
|
||||
/trace/generated-tracers.c
|
||||
/trace/generated-tracers-dtrace.h
|
||||
|
32
arch_init.c
32
arch_init.c
@ -975,12 +975,12 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
|
||||
xh_len = qemu_get_be16(f);
|
||||
|
||||
if (xh_flags != ENCODING_FLAG_XBZRLE) {
|
||||
fprintf(stderr, "Failed to load XBZRLE page - wrong compression!\n");
|
||||
error_report("Failed to load XBZRLE page - wrong compression!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (xh_len > TARGET_PAGE_SIZE) {
|
||||
fprintf(stderr, "Failed to load XBZRLE page - len overflow!\n");
|
||||
error_report("Failed to load XBZRLE page - len overflow!");
|
||||
return -1;
|
||||
}
|
||||
/* load data and decode */
|
||||
@ -989,7 +989,7 @@ static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
|
||||
/* decode RLE */
|
||||
if (xbzrle_decode_buffer(xbzrle_decoded_buf, xh_len, host,
|
||||
TARGET_PAGE_SIZE) == -1) {
|
||||
fprintf(stderr, "Failed to load XBZRLE page - decode error!\n");
|
||||
error_report("Failed to load XBZRLE page - decode error!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1006,7 +1006,7 @@ static inline void *host_from_stream_offset(QEMUFile *f,
|
||||
|
||||
if (flags & RAM_SAVE_FLAG_CONTINUE) {
|
||||
if (!block) {
|
||||
fprintf(stderr, "Ack, bad migration stream!\n");
|
||||
error_report("Ack, bad migration stream!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1022,7 +1022,7 @@ static inline void *host_from_stream_offset(QEMUFile *f,
|
||||
return memory_region_get_ram_ptr(block->mr) + offset;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Can't find block %s!\n", id);
|
||||
error_report("Can't find block %s!", id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -1075,10 +1075,9 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
|
||||
QTAILQ_FOREACH(block, &ram_list.blocks, next) {
|
||||
if (!strncmp(id, block->idstr, sizeof(id))) {
|
||||
if (block->length != length) {
|
||||
fprintf(stderr,
|
||||
"Length mismatch: %s: " RAM_ADDR_FMT
|
||||
" in != " RAM_ADDR_FMT "\n", id, length,
|
||||
block->length);
|
||||
error_report("Length mismatch: %s: " RAM_ADDR_FMT
|
||||
" in != " RAM_ADDR_FMT, id, length,
|
||||
block->length);
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
@ -1087,8 +1086,8 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
|
||||
}
|
||||
|
||||
if (!block) {
|
||||
fprintf(stderr, "Unknown ramblock \"%s\", cannot "
|
||||
"accept migration\n", id);
|
||||
error_report("Unknown ramblock \"%s\", cannot "
|
||||
"accept migration", id);
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
@ -1243,12 +1242,11 @@ void select_soundhw(const char *optarg)
|
||||
|
||||
if (!c->name) {
|
||||
if (l > 80) {
|
||||
fprintf(stderr,
|
||||
"Unknown sound card name (too big to show)\n");
|
||||
error_report("Unknown sound card name (too big to show)");
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "Unknown sound card name `%.*s'\n",
|
||||
(int) l, p);
|
||||
error_report("Unknown sound card name `%.*s'",
|
||||
(int) l, p);
|
||||
}
|
||||
bad_card = 1;
|
||||
}
|
||||
@ -1271,13 +1269,13 @@ void audio_init(void)
|
||||
if (c->enabled) {
|
||||
if (c->isa) {
|
||||
if (!isa_bus) {
|
||||
fprintf(stderr, "ISA bus not available for %s\n", c->name);
|
||||
error_report("ISA bus not available for %s", c->name);
|
||||
exit(1);
|
||||
}
|
||||
c->init.init_isa(isa_bus);
|
||||
} else {
|
||||
if (!pci_bus) {
|
||||
fprintf(stderr, "PCI bus not available for %s\n", c->name);
|
||||
error_report("PCI bus not available for %s", c->name);
|
||||
exit(1);
|
||||
}
|
||||
c->init.init_pci(pci_bus);
|
||||
|
@ -105,7 +105,7 @@ static int rate_get_samples (struct audio_pcm_info *info, SpiceRateCtl *rate)
|
||||
bytes = muldiv64 (ticks, info->bytes_per_second, get_ticks_per_sec ());
|
||||
samples = (bytes - rate->bytes_sent) >> info->shift;
|
||||
if (samples < 0 || samples > 65536) {
|
||||
fprintf (stderr, "Resetting rate control (%" PRId64 " samples)\n", samples);
|
||||
error_report("Resetting rate control (%" PRId64 " samples)", samples);
|
||||
rate_start (rate);
|
||||
samples = 0;
|
||||
}
|
||||
|
@ -63,8 +63,7 @@ static void wav_destroy (void *opaque)
|
||||
}
|
||||
doclose:
|
||||
if (fclose (wav->f)) {
|
||||
fprintf (stderr, "wav_destroy: fclose failed: %s",
|
||||
strerror (errno));
|
||||
error_report("wav_destroy: fclose failed: %s", strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,8 +27,8 @@ static void nbd_accept(void *opaque)
|
||||
socklen_t addr_len = sizeof(addr);
|
||||
|
||||
int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len);
|
||||
if (fd >= 0) {
|
||||
nbd_client_new(NULL, fd, nbd_client_put);
|
||||
if (fd >= 0 && !nbd_client_new(NULL, fd, nbd_client_put)) {
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -183,7 +183,7 @@ int loader_exec(const char * filename, char ** argv, char ** envp,
|
||||
&& bprm.buf[3] == 'F') {
|
||||
retval = load_elf_binary(&bprm,regs,infop);
|
||||
} else {
|
||||
fprintf(stderr, "Unknown binary format\n");
|
||||
error_report("Unknown binary format");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -628,7 +628,7 @@ static abi_ulong copy_elf_strings(int argc,char ** argv, void **page,
|
||||
while (argc-- > 0) {
|
||||
tmp = argv[argc];
|
||||
if (!tmp) {
|
||||
fprintf(stderr, "VFS: argc is wrong");
|
||||
error_report("VFS: argc is wrong");
|
||||
exit(-1);
|
||||
}
|
||||
tmp1 = tmp;
|
||||
|
@ -378,8 +378,8 @@ void cpu_loop(CPUX86State *env)
|
||||
#endif
|
||||
default:
|
||||
pc = env->segs[R_CS].base + env->eip;
|
||||
fprintf(stderr, "qemu: 0x%08lx: unhandled CPU exception 0x%x - aborting\n",
|
||||
(long)pc, trapnr);
|
||||
error_report("qemu: 0x%08lx: unhandled CPU exception 0x%x"
|
||||
" - aborting", (long)pc, trapnr);
|
||||
abort();
|
||||
}
|
||||
process_pending_signals(env);
|
||||
@ -752,7 +752,7 @@ int main(int argc, char **argv)
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
|
||||
if ((envlist = envlist_create()) == NULL) {
|
||||
(void) fprintf(stderr, "Unable to allocate envlist\n");
|
||||
error_report("Unable to allocate envlist");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -794,7 +794,7 @@ int main(int argc, char **argv)
|
||||
} else if (!strcmp(r, "ignore-environment")) {
|
||||
envlist_free(envlist);
|
||||
if ((envlist = envlist_create()) == NULL) {
|
||||
(void) fprintf(stderr, "Unable to allocate envlist\n");
|
||||
error_report("Unable to allocate envlist");
|
||||
exit(1);
|
||||
}
|
||||
} else if (!strcmp(r, "U")) {
|
||||
@ -816,7 +816,7 @@ int main(int argc, char **argv)
|
||||
qemu_host_page_size = atoi(argv[optind++]);
|
||||
if (qemu_host_page_size == 0 ||
|
||||
(qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
|
||||
fprintf(stderr, "page size must be a power of two\n");
|
||||
error_report("page size must be a power of two");
|
||||
exit(1);
|
||||
}
|
||||
} else if (!strcmp(r, "g")) {
|
||||
@ -910,7 +910,7 @@ int main(int argc, char **argv)
|
||||
qemu_host_page_size */
|
||||
env = cpu_init(cpu_model);
|
||||
if (!env) {
|
||||
fprintf(stderr, "Unable to find CPU definition\n");
|
||||
error_report("Unable to find CPU definition");
|
||||
exit(1);
|
||||
}
|
||||
cpu = ENV_GET_CPU(env);
|
||||
@ -1012,7 +1012,7 @@ int main(int argc, char **argv)
|
||||
#ifndef TARGET_ABI32
|
||||
/* enable 64 bit mode if possible */
|
||||
if (!(env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM)) {
|
||||
fprintf(stderr, "The selected x86 CPU does not support 64 bit mode\n");
|
||||
error_report("The selected x86 CPU does not support 64 bit mode");
|
||||
exit(1);
|
||||
}
|
||||
env->cr[4] |= CR4_PAE_MASK;
|
||||
|
51
configure
vendored
51
configure
vendored
@ -2,26 +2,28 @@
|
||||
#
|
||||
# qemu configure script (c) 2003 Fabrice Bellard
|
||||
#
|
||||
# set temporary file name
|
||||
if test ! -z "$TMPDIR" ; then
|
||||
TMPDIR1="${TMPDIR}"
|
||||
elif test ! -z "$TEMPDIR" ; then
|
||||
TMPDIR1="${TEMPDIR}"
|
||||
else
|
||||
TMPDIR1="/tmp"
|
||||
|
||||
# Temporary directory used for files created while
|
||||
# configure runs. Since it is in the build directory
|
||||
# we can safely blow away any previous version of it
|
||||
# (and we need not jump through hoops to try to delete
|
||||
# it when configure exits.)
|
||||
TMPDIR1="config-temp"
|
||||
rm -rf "${TMPDIR1}"
|
||||
mkdir -p "${TMPDIR1}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: failed to create temporary directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
|
||||
TMPB="qemu-conf-${RANDOM}-$$-${RANDOM}"
|
||||
TMPB="qemu-conf"
|
||||
TMPC="${TMPDIR1}/${TMPB}.c"
|
||||
TMPO="${TMPDIR1}/${TMPB}.o"
|
||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||
TMPL="${TMPDIR1}/${TMPB}.lo"
|
||||
TMPA="${TMPDIR1}/lib${TMPB}.la"
|
||||
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe"
|
||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||
|
||||
# NB: do not call "exit" in the trap handler; this is buggy with some shells;
|
||||
# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org>
|
||||
trap "rm -f $TMPC $TMPO $TMPCXX $TMPE" EXIT INT QUIT TERM
|
||||
rm -f config.log
|
||||
|
||||
# Print a helpful header at the top of config.log
|
||||
@ -317,7 +319,7 @@ glusterfs_discard="no"
|
||||
glusterfs_zerofill="no"
|
||||
virtio_blk_data_plane=""
|
||||
gtk=""
|
||||
gtkabi="2.0"
|
||||
gtkabi=""
|
||||
vte=""
|
||||
tpm="no"
|
||||
libssh2=""
|
||||
@ -1970,6 +1972,18 @@ fi
|
||||
##########################################
|
||||
# GTK probe
|
||||
|
||||
if test "$gtkabi" = ""; then
|
||||
# The GTK ABI was not specified explicitly, so try whether 2.0 is available.
|
||||
# Use 3.0 as a fallback if that is available.
|
||||
if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
|
||||
gtkabi=2.0
|
||||
elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
|
||||
gtkabi=3.0
|
||||
else
|
||||
gtkabi=2.0
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$gtk" != "no"; then
|
||||
gtkpackage="gtk+-$gtkabi"
|
||||
if test "$gtkabi" = "3.0" ; then
|
||||
@ -1983,7 +1997,7 @@ if test "$gtk" != "no"; then
|
||||
libs_softmmu="$gtk_libs $libs_softmmu"
|
||||
gtk="yes"
|
||||
elif test "$gtk" = "yes"; then
|
||||
feature_not_found "gtk" "Install gtk2 or gtk3 (requires --with-gtkabi=3.0 option to configure) devel"
|
||||
feature_not_found "gtk" "Install gtk2 or gtk3 devel"
|
||||
else
|
||||
gtk="no"
|
||||
fi
|
||||
@ -2006,7 +2020,11 @@ if test "$vte" != "no"; then
|
||||
libs_softmmu="$vte_libs $libs_softmmu"
|
||||
vte="yes"
|
||||
elif test "$vte" = "yes"; then
|
||||
feature_not_found "vte" "Install libvte or libvte-2.90 (requires --with-gtkabi=3.0 option to configure) devel"
|
||||
if test "$gtkabi" = "3.0"; then
|
||||
feature_not_found "vte" "Install libvte-2.90 devel"
|
||||
else
|
||||
feature_not_found "vte" "Install libvte devel"
|
||||
fi
|
||||
else
|
||||
vte="no"
|
||||
fi
|
||||
@ -5222,3 +5240,4 @@ printf " '%s'" "$0" "$@" >>config.status
|
||||
echo >>config.status
|
||||
chmod +x config.status
|
||||
|
||||
rm -r "$TMPDIR1"
|
||||
|
@ -143,12 +143,12 @@ static void dma_bdrv_cb(void *opaque, int ret)
|
||||
|
||||
dbs->acb = NULL;
|
||||
dbs->sector_num += dbs->iov.size / 512;
|
||||
dma_bdrv_unmap(dbs);
|
||||
|
||||
if (dbs->sg_cur_index == dbs->sg->nsg || ret < 0) {
|
||||
dma_complete(dbs, ret);
|
||||
return;
|
||||
}
|
||||
dma_bdrv_unmap(dbs);
|
||||
|
||||
while (dbs->sg_cur_index < dbs->sg->nsg) {
|
||||
cur_addr = dbs->sg->sg[dbs->sg_cur_index].base + dbs->sg_cur_byte;
|
||||
|
@ -173,6 +173,7 @@ static void jazz_led_update_display(void *opaque)
|
||||
case 16:
|
||||
color_segment = rgb_to_pixel16(0xaa, 0xaa, 0xaa);
|
||||
color_led = rgb_to_pixel16(0x00, 0xff, 0x00);
|
||||
break;
|
||||
case 24:
|
||||
color_segment = rgb_to_pixel24(0xaa, 0xaa, 0xaa);
|
||||
color_led = rgb_to_pixel24(0x00, 0xff, 0x00);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* QEMU Xilinx GEM emulation
|
||||
* QEMU Cadence GEM emulation
|
||||
*
|
||||
* Copyright (c) 2011 Xilinx, Inc.
|
||||
*
|
||||
|
@ -605,13 +605,13 @@ PCIBus *pci_get_bus_devfn(int *devfnp, PCIBus *root, const char *devaddr)
|
||||
int dom, bus;
|
||||
unsigned slot;
|
||||
|
||||
assert(!root->parent_dev);
|
||||
|
||||
if (!root) {
|
||||
fprintf(stderr, "No primary PCI bus\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
assert(!root->parent_dev);
|
||||
|
||||
if (!devaddr) {
|
||||
*devfnp = -1;
|
||||
return pci_find_bus_nr(root, 0);
|
||||
|
@ -215,9 +215,10 @@ typedef union {
|
||||
* q: 64 bits
|
||||
*
|
||||
* endian is:
|
||||
* (empty): host endian
|
||||
* he : host endian
|
||||
* be : big endian
|
||||
* le : little endian
|
||||
* (except for byte accesses, which have no endian infix).
|
||||
*/
|
||||
|
||||
static inline int ldub_p(const void *ptr)
|
||||
@ -239,82 +240,82 @@ static inline void stb_p(void *ptr, uint8_t v)
|
||||
operations. Thus we don't need to play games with packed attributes, or
|
||||
inline byte-by-byte stores. */
|
||||
|
||||
static inline int lduw_p(const void *ptr)
|
||||
static inline int lduw_he_p(const void *ptr)
|
||||
{
|
||||
uint16_t r;
|
||||
memcpy(&r, ptr, sizeof(r));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline int ldsw_p(const void *ptr)
|
||||
static inline int ldsw_he_p(const void *ptr)
|
||||
{
|
||||
int16_t r;
|
||||
memcpy(&r, ptr, sizeof(r));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline void stw_p(void *ptr, uint16_t v)
|
||||
static inline void stw_he_p(void *ptr, uint16_t v)
|
||||
{
|
||||
memcpy(ptr, &v, sizeof(v));
|
||||
}
|
||||
|
||||
static inline int ldl_p(const void *ptr)
|
||||
static inline int ldl_he_p(const void *ptr)
|
||||
{
|
||||
int32_t r;
|
||||
memcpy(&r, ptr, sizeof(r));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline void stl_p(void *ptr, uint32_t v)
|
||||
static inline void stl_he_p(void *ptr, uint32_t v)
|
||||
{
|
||||
memcpy(ptr, &v, sizeof(v));
|
||||
}
|
||||
|
||||
static inline uint64_t ldq_p(const void *ptr)
|
||||
static inline uint64_t ldq_he_p(const void *ptr)
|
||||
{
|
||||
uint64_t r;
|
||||
memcpy(&r, ptr, sizeof(r));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline void stq_p(void *ptr, uint64_t v)
|
||||
static inline void stq_he_p(void *ptr, uint64_t v)
|
||||
{
|
||||
memcpy(ptr, &v, sizeof(v));
|
||||
}
|
||||
|
||||
static inline int lduw_le_p(const void *ptr)
|
||||
{
|
||||
return (uint16_t)le_bswap(lduw_p(ptr), 16);
|
||||
return (uint16_t)le_bswap(lduw_he_p(ptr), 16);
|
||||
}
|
||||
|
||||
static inline int ldsw_le_p(const void *ptr)
|
||||
{
|
||||
return (int16_t)le_bswap(lduw_p(ptr), 16);
|
||||
return (int16_t)le_bswap(lduw_he_p(ptr), 16);
|
||||
}
|
||||
|
||||
static inline int ldl_le_p(const void *ptr)
|
||||
{
|
||||
return le_bswap(ldl_p(ptr), 32);
|
||||
return le_bswap(ldl_he_p(ptr), 32);
|
||||
}
|
||||
|
||||
static inline uint64_t ldq_le_p(const void *ptr)
|
||||
{
|
||||
return le_bswap(ldq_p(ptr), 64);
|
||||
return le_bswap(ldq_he_p(ptr), 64);
|
||||
}
|
||||
|
||||
static inline void stw_le_p(void *ptr, uint16_t v)
|
||||
{
|
||||
stw_p(ptr, le_bswap(v, 16));
|
||||
stw_he_p(ptr, le_bswap(v, 16));
|
||||
}
|
||||
|
||||
static inline void stl_le_p(void *ptr, uint32_t v)
|
||||
{
|
||||
stl_p(ptr, le_bswap(v, 32));
|
||||
stl_he_p(ptr, le_bswap(v, 32));
|
||||
}
|
||||
|
||||
static inline void stq_le_p(void *ptr, uint64_t v)
|
||||
{
|
||||
stq_p(ptr, le_bswap(v, 64));
|
||||
stq_he_p(ptr, le_bswap(v, 64));
|
||||
}
|
||||
|
||||
/* float access */
|
||||
@ -349,37 +350,37 @@ static inline void stfq_le_p(void *ptr, float64 v)
|
||||
|
||||
static inline int lduw_be_p(const void *ptr)
|
||||
{
|
||||
return (uint16_t)be_bswap(lduw_p(ptr), 16);
|
||||
return (uint16_t)be_bswap(lduw_he_p(ptr), 16);
|
||||
}
|
||||
|
||||
static inline int ldsw_be_p(const void *ptr)
|
||||
{
|
||||
return (int16_t)be_bswap(lduw_p(ptr), 16);
|
||||
return (int16_t)be_bswap(lduw_he_p(ptr), 16);
|
||||
}
|
||||
|
||||
static inline int ldl_be_p(const void *ptr)
|
||||
{
|
||||
return be_bswap(ldl_p(ptr), 32);
|
||||
return be_bswap(ldl_he_p(ptr), 32);
|
||||
}
|
||||
|
||||
static inline uint64_t ldq_be_p(const void *ptr)
|
||||
{
|
||||
return be_bswap(ldq_p(ptr), 64);
|
||||
return be_bswap(ldq_he_p(ptr), 64);
|
||||
}
|
||||
|
||||
static inline void stw_be_p(void *ptr, uint16_t v)
|
||||
{
|
||||
stw_p(ptr, be_bswap(v, 16));
|
||||
stw_he_p(ptr, be_bswap(v, 16));
|
||||
}
|
||||
|
||||
static inline void stl_be_p(void *ptr, uint32_t v)
|
||||
{
|
||||
stl_p(ptr, be_bswap(v, 32));
|
||||
stl_he_p(ptr, be_bswap(v, 32));
|
||||
}
|
||||
|
||||
static inline void stq_be_p(void *ptr, uint64_t v)
|
||||
{
|
||||
stq_p(ptr, be_bswap(v, 64));
|
||||
stq_he_p(ptr, be_bswap(v, 64));
|
||||
}
|
||||
|
||||
/* float access */
|
||||
|
@ -191,6 +191,7 @@ static void qemu_init_child_watch(void)
|
||||
struct sigaction act;
|
||||
sigchld_bh = qemu_bh_new(sigchld_bh_handler, NULL);
|
||||
|
||||
memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = sigchld_handler;
|
||||
act.sa_flags = SA_NOCLDSTOP;
|
||||
sigaction(SIGCHLD, &act, NULL);
|
||||
|
@ -93,8 +93,8 @@ cac_common_process_apdu(VCard *card, VCardAPDU *apdu, VCardResponse **response)
|
||||
static VCardStatus
|
||||
cac_applet_pki_reset(VCard *card, int channel)
|
||||
{
|
||||
VCardAppletPrivate *applet_private = NULL;
|
||||
CACPKIAppletData *pki_applet = NULL;
|
||||
VCardAppletPrivate *applet_private;
|
||||
CACPKIAppletData *pki_applet;
|
||||
applet_private = vcard_get_current_applet_private(card, channel);
|
||||
assert(applet_private);
|
||||
pki_applet = &(applet_private->u.pki_data);
|
||||
@ -113,8 +113,8 @@ static VCardStatus
|
||||
cac_applet_pki_process_apdu(VCard *card, VCardAPDU *apdu,
|
||||
VCardResponse **response)
|
||||
{
|
||||
CACPKIAppletData *pki_applet = NULL;
|
||||
VCardAppletPrivate *applet_private = NULL;
|
||||
CACPKIAppletData *pki_applet;
|
||||
VCardAppletPrivate *applet_private;
|
||||
int size, next;
|
||||
unsigned char *sign_buffer;
|
||||
vcard_7816_status_t status;
|
||||
@ -169,17 +169,8 @@ cac_applet_pki_process_apdu(VCard *card, VCardAPDU *apdu,
|
||||
}
|
||||
size = apdu->a_Lc;
|
||||
|
||||
sign_buffer = realloc(pki_applet->sign_buffer,
|
||||
pki_applet->sign_buffer_len+size);
|
||||
if (sign_buffer == NULL) {
|
||||
g_free(pki_applet->sign_buffer);
|
||||
pki_applet->sign_buffer = NULL;
|
||||
pki_applet->sign_buffer_len = 0;
|
||||
*response = vcard_make_response(
|
||||
VCARD7816_STATUS_EXC_ERROR_MEMORY_FAILURE);
|
||||
ret = VCARD_DONE;
|
||||
break;
|
||||
}
|
||||
sign_buffer = g_realloc(pki_applet->sign_buffer,
|
||||
pki_applet->sign_buffer_len + size);
|
||||
memcpy(sign_buffer+pki_applet->sign_buffer_len, apdu->a_body, size);
|
||||
size += pki_applet->sign_buffer_len;
|
||||
switch (apdu->a_p1) {
|
||||
@ -288,7 +279,7 @@ cac_applet_container_process_apdu(VCard *card, VCardAPDU *apdu,
|
||||
static void
|
||||
cac_delete_pki_applet_private(VCardAppletPrivate *applet_private)
|
||||
{
|
||||
CACPKIAppletData *pki_applet_data = NULL;
|
||||
CACPKIAppletData *pki_applet_data;
|
||||
|
||||
if (applet_private == NULL) {
|
||||
return;
|
||||
@ -310,16 +301,11 @@ static VCardAppletPrivate *
|
||||
cac_new_pki_applet_private(const unsigned char *cert,
|
||||
int cert_len, VCardKey *key)
|
||||
{
|
||||
CACPKIAppletData *pki_applet_data = NULL;
|
||||
VCardAppletPrivate *applet_private = NULL;
|
||||
applet_private = (VCardAppletPrivate *)g_malloc(sizeof(VCardAppletPrivate));
|
||||
CACPKIAppletData *pki_applet_data;
|
||||
VCardAppletPrivate *applet_private;
|
||||
|
||||
applet_private = g_new0(VCardAppletPrivate, 1);
|
||||
pki_applet_data = &(applet_private->u.pki_data);
|
||||
pki_applet_data->cert_buffer = NULL;
|
||||
pki_applet_data->cert_buffer_len = 0;
|
||||
pki_applet_data->sign_buffer = NULL;
|
||||
pki_applet_data->sign_buffer_len = 0;
|
||||
pki_applet_data->key = NULL;
|
||||
pki_applet_data->cert = (unsigned char *)g_malloc(cert_len+1);
|
||||
/*
|
||||
* if we want to support compression, then we simply change the 0 to a 1
|
||||
@ -341,8 +327,8 @@ static VCardApplet *
|
||||
cac_new_pki_applet(int i, const unsigned char *cert,
|
||||
int cert_len, VCardKey *key)
|
||||
{
|
||||
VCardAppletPrivate *applet_private = NULL;
|
||||
VCardApplet *applet = NULL;
|
||||
VCardAppletPrivate *applet_private;
|
||||
VCardApplet *applet;
|
||||
unsigned char pki_aid[] = { 0xa0, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00 };
|
||||
int pki_aid_len = sizeof(pki_aid);
|
||||
|
||||
|
@ -51,7 +51,7 @@ vcard_response_new_data(unsigned char *buf, int len)
|
||||
{
|
||||
VCardResponse *new_response;
|
||||
|
||||
new_response = (VCardResponse *)g_malloc(sizeof(VCardResponse));
|
||||
new_response = g_new(VCardResponse, 1);
|
||||
new_response->b_data = g_malloc(len + 2);
|
||||
memcpy(new_response->b_data, buf, len);
|
||||
new_response->b_total_len = len+2;
|
||||
@ -132,7 +132,7 @@ vcard_response_new_status(vcard_7816_status_t status)
|
||||
{
|
||||
VCardResponse *new_response;
|
||||
|
||||
new_response = (VCardResponse *)g_malloc(sizeof(VCardResponse));
|
||||
new_response = g_new(VCardResponse, 1);
|
||||
new_response->b_data = &new_response->b_sw1;
|
||||
new_response->b_len = 0;
|
||||
new_response->b_total_len = 2;
|
||||
@ -149,7 +149,7 @@ vcard_response_new_status_bytes(unsigned char sw1, unsigned char sw2)
|
||||
{
|
||||
VCardResponse *new_response;
|
||||
|
||||
new_response = (VCardResponse *)g_malloc(sizeof(VCardResponse));
|
||||
new_response = g_new(VCardResponse, 1);
|
||||
new_response->b_data = &new_response->b_sw1;
|
||||
new_response->b_len = 0;
|
||||
new_response->b_total_len = 2;
|
||||
@ -336,9 +336,8 @@ vcard_apdu_new(unsigned char *raw_apdu, int len, vcard_7816_status_t *status)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
new_apdu = (VCardAPDU *)g_malloc(sizeof(VCardAPDU));
|
||||
new_apdu->a_data = g_malloc(len);
|
||||
memcpy(new_apdu->a_data, raw_apdu, len);
|
||||
new_apdu = g_new(VCardAPDU, 1);
|
||||
new_apdu->a_data = g_memdup(raw_apdu, len);
|
||||
new_apdu->a_len = len;
|
||||
*status = vcard_apdu_set_class(new_apdu);
|
||||
if (*status != VCARD7816_STATUS_SUCCESS) {
|
||||
@ -417,7 +416,7 @@ VCARD_RESPONSE_NEW_STATIC_STATUS(VCARD7816_STATUS_ERROR_GENERAL)
|
||||
VCardResponse *
|
||||
vcard_make_response(vcard_7816_status_t status)
|
||||
{
|
||||
VCardResponse *response = NULL;
|
||||
VCardResponse *response;
|
||||
|
||||
switch (status) {
|
||||
/* known 7816 response codes */
|
||||
@ -544,9 +543,8 @@ vcard_make_response(vcard_7816_status_t status)
|
||||
return VCARD_RESPONSE_GET_STATIC(
|
||||
VCARD7816_STATUS_EXC_ERROR_MEMORY_FAILURE);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
assert(response);
|
||||
return response;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -17,7 +17,7 @@ vevent_new(VEventType type, VReader *reader, VCard *card)
|
||||
{
|
||||
VEvent *new_vevent;
|
||||
|
||||
new_vevent = (VEvent *)g_malloc(sizeof(VEvent));
|
||||
new_vevent = g_new(VEvent, 1);
|
||||
new_vevent->next = NULL;
|
||||
new_vevent->type = type;
|
||||
new_vevent->reader = vreader_reference(reader);
|
||||
|
@ -37,9 +37,8 @@ vcard_buffer_response_new(unsigned char *buffer, int size)
|
||||
{
|
||||
VCardBufferResponse *new_buffer;
|
||||
|
||||
new_buffer = (VCardBufferResponse *)g_malloc(sizeof(VCardBufferResponse));
|
||||
new_buffer->buffer = (unsigned char *)g_malloc(size);
|
||||
memcpy(new_buffer->buffer, buffer, size);
|
||||
new_buffer = g_new(VCardBufferResponse, 1);
|
||||
new_buffer->buffer = (unsigned char *)g_memdup(buffer, size);
|
||||
new_buffer->buffer_len = size;
|
||||
new_buffer->current = new_buffer->buffer;
|
||||
new_buffer->len = size;
|
||||
@ -102,15 +101,11 @@ vcard_new_applet(VCardProcessAPDU applet_process_function,
|
||||
{
|
||||
VCardApplet *applet;
|
||||
|
||||
applet = (VCardApplet *)g_malloc(sizeof(VCardApplet));
|
||||
applet->next = NULL;
|
||||
applet->applet_private = NULL;
|
||||
applet->applet_private_free = NULL;
|
||||
applet = g_new0(VCardApplet, 1);
|
||||
applet->process_apdu = applet_process_function;
|
||||
applet->reset_applet = applet_reset_function;
|
||||
|
||||
applet->aid = g_malloc(aid_len);
|
||||
memcpy(applet->aid, aid, aid_len);
|
||||
applet->aid = g_memdup(aid, aid_len);
|
||||
applet->aid_len = aid_len;
|
||||
return applet;
|
||||
}
|
||||
@ -149,18 +144,11 @@ VCard *
|
||||
vcard_new(VCardEmul *private, VCardEmulFree private_free)
|
||||
{
|
||||
VCard *new_card;
|
||||
int i;
|
||||
|
||||
new_card = (VCard *)g_malloc(sizeof(VCard));
|
||||
new_card->applet_list = NULL;
|
||||
for (i = 0; i < MAX_CHANNEL; i++) {
|
||||
new_card->current_applet[i] = NULL;
|
||||
}
|
||||
new_card->vcard_buffer_response = NULL;
|
||||
new_card = g_new0(VCard, 1);
|
||||
new_card->type = VCARD_VM;
|
||||
new_card->vcard_private = private;
|
||||
new_card->vcard_private_free = private_free;
|
||||
new_card->vcard_get_atr = NULL;
|
||||
new_card->reference_count = 1;
|
||||
return new_card;
|
||||
}
|
||||
@ -178,8 +166,8 @@ vcard_reference(VCard *vcard)
|
||||
void
|
||||
vcard_free(VCard *vcard)
|
||||
{
|
||||
VCardApplet *current_applet = NULL;
|
||||
VCardApplet *next_applet = NULL;
|
||||
VCardApplet *current_applet;
|
||||
VCardApplet *next_applet;
|
||||
|
||||
if (vcard == NULL) {
|
||||
return;
|
||||
|
@ -94,9 +94,9 @@ static void
|
||||
vcard_emul_alloc_arrays(unsigned char ***certsp, int **cert_lenp,
|
||||
VCardKey ***keysp, int cert_count)
|
||||
{
|
||||
*certsp = (unsigned char **)g_malloc(sizeof(unsigned char *)*cert_count);
|
||||
*cert_lenp = (int *)g_malloc(sizeof(int)*cert_count);
|
||||
*keysp = (VCardKey **)g_malloc(sizeof(VCardKey *)*cert_count);
|
||||
*certsp = g_new(unsigned char *, cert_count);
|
||||
*cert_lenp = g_new(int, cert_count);
|
||||
*keysp = g_new(VCardKey *, cert_count);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -139,7 +139,7 @@ vcard_emul_make_key(PK11SlotInfo *slot, CERTCertificate *cert)
|
||||
{
|
||||
VCardKey *key;
|
||||
|
||||
key = (VCardKey *)g_malloc(sizeof(VCardKey));
|
||||
key = g_new(VCardKey, 1);
|
||||
key->slot = PK11_ReferenceSlot(slot);
|
||||
key->cert = CERT_DupCertificate(cert);
|
||||
/* NOTE: if we aren't logged into the token, this could return NULL */
|
||||
@ -367,7 +367,7 @@ vcard_7816_status_t
|
||||
vcard_emul_login(VCard *card, unsigned char *pin, int pin_len)
|
||||
{
|
||||
PK11SlotInfo *slot;
|
||||
unsigned char *pin_string = NULL;
|
||||
unsigned char *pin_string;
|
||||
int i;
|
||||
SECStatus rv;
|
||||
|
||||
@ -423,7 +423,7 @@ static VReader *
|
||||
vcard_emul_find_vreader_from_slot(PK11SlotInfo *slot)
|
||||
{
|
||||
VReaderList *reader_list = vreader_get_reader_list();
|
||||
VReaderListEntry *current_entry = NULL;
|
||||
VReaderListEntry *current_entry;
|
||||
|
||||
if (reader_list == NULL) {
|
||||
return NULL;
|
||||
@ -433,11 +433,13 @@ vcard_emul_find_vreader_from_slot(PK11SlotInfo *slot)
|
||||
VReader *reader = vreader_list_get_reader(current_entry);
|
||||
VReaderEmul *reader_emul = vreader_get_private(reader);
|
||||
if (reader_emul->slot == slot) {
|
||||
vreader_list_delete(reader_list);
|
||||
return reader;
|
||||
}
|
||||
vreader_free(reader);
|
||||
}
|
||||
|
||||
vreader_list_delete(reader_list);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -449,7 +451,7 @@ vreader_emul_new(PK11SlotInfo *slot, VCardEmulType type, const char *params)
|
||||
{
|
||||
VReaderEmul *new_reader_emul;
|
||||
|
||||
new_reader_emul = (VReaderEmul *)g_malloc(sizeof(VReaderEmul));
|
||||
new_reader_emul = g_new(VReaderEmul, 1);
|
||||
|
||||
new_reader_emul->slot = PK11_ReferenceSlot(slot);
|
||||
new_reader_emul->default_type = type;
|
||||
@ -616,11 +618,6 @@ vcard_emul_mirror_card(VReader *vreader)
|
||||
cert_count++;
|
||||
}
|
||||
|
||||
if (cert_count == 0) {
|
||||
PK11_DestroyGenericObjects(firstObj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* allocate the arrays */
|
||||
vcard_emul_alloc_arrays(&certs, &cert_len, &keys, cert_count);
|
||||
|
||||
@ -1050,7 +1047,7 @@ void
|
||||
vcard_emul_replay_insertion_events(void)
|
||||
{
|
||||
VReaderListEntry *current_entry;
|
||||
VReaderListEntry *next_entry = NULL;
|
||||
VReaderListEntry *next_entry;
|
||||
VReaderList *list = vreader_get_reader_list();
|
||||
|
||||
for (current_entry = vreader_list_get_first(list); current_entry;
|
||||
@ -1059,6 +1056,8 @@ vcard_emul_replay_insertion_events(void)
|
||||
next_entry = vreader_list_get_next(current_entry);
|
||||
vreader_queue_card_event(vreader);
|
||||
}
|
||||
|
||||
vreader_list_delete(list);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1150,7 +1149,7 @@ vcard_emul_options(const char *args)
|
||||
char type_str[100];
|
||||
VCardEmulType type;
|
||||
int count, i;
|
||||
VirtualReaderOptions *vreaderOpt = NULL;
|
||||
VirtualReaderOptions *vreaderOpt;
|
||||
|
||||
args = strip(args + 5);
|
||||
if (*args != '(') {
|
||||
@ -1174,14 +1173,10 @@ vcard_emul_options(const char *args)
|
||||
|
||||
if (opts->vreader_count >= reader_count) {
|
||||
reader_count += READER_STEP;
|
||||
vreaderOpt = realloc(opts->vreader,
|
||||
reader_count * sizeof(*vreaderOpt));
|
||||
if (vreaderOpt == NULL) {
|
||||
return opts; /* we're done */
|
||||
}
|
||||
opts->vreader = g_renew(VirtualReaderOptions, opts->vreader,
|
||||
reader_count);
|
||||
}
|
||||
opts->vreader = vreaderOpt;
|
||||
vreaderOpt = &vreaderOpt[opts->vreader_count];
|
||||
vreaderOpt = &opts->vreader[opts->vreader_count];
|
||||
vreaderOpt->name = g_strndup(name, name_length);
|
||||
vreaderOpt->vname = g_strndup(vname, vname_length);
|
||||
vreaderOpt->card_type = type;
|
||||
@ -1189,7 +1184,7 @@ vcard_emul_options(const char *args)
|
||||
g_strndup(type_params, type_params_length);
|
||||
count = count_tokens(args, ',', ')') + 1;
|
||||
vreaderOpt->cert_count = count;
|
||||
vreaderOpt->cert_name = (char **)g_malloc(count*sizeof(char *));
|
||||
vreaderOpt->cert_name = g_new(char *, count);
|
||||
for (i = 0; i < count; i++) {
|
||||
const char *cert = args;
|
||||
args = strpbrk(args, ",)");
|
||||
|
@ -115,7 +115,7 @@ vreader_new(const char *name, VReaderEmul *private,
|
||||
{
|
||||
VReader *reader;
|
||||
|
||||
reader = (VReader *)g_malloc(sizeof(VReader));
|
||||
reader = g_new(VReader, 1);
|
||||
qemu_mutex_init(&reader->lock);
|
||||
reader->reference_count = 1;
|
||||
reader->name = g_strdup(name);
|
||||
@ -283,12 +283,10 @@ vreader_xfr_bytes(VReader *reader,
|
||||
response->b_sw2, response->b_len, response->b_total_len);
|
||||
}
|
||||
}
|
||||
assert(card_status == VCARD_DONE);
|
||||
if (card_status == VCARD_DONE) {
|
||||
int size = MIN(*receive_buf_len, response->b_total_len);
|
||||
memcpy(receive_buf, response->b_data, size);
|
||||
*receive_buf_len = size;
|
||||
}
|
||||
assert(card_status == VCARD_DONE && response);
|
||||
int size = MIN(*receive_buf_len, response->b_total_len);
|
||||
memcpy(receive_buf, response->b_data, size);
|
||||
*receive_buf_len = size;
|
||||
vcard_response_delete(response);
|
||||
vcard_apdu_delete(apdu);
|
||||
vcard_free(card); /* free our reference */
|
||||
@ -312,10 +310,7 @@ vreader_list_entry_new(VReader *reader)
|
||||
{
|
||||
VReaderListEntry *new_reader_list_entry;
|
||||
|
||||
new_reader_list_entry = (VReaderListEntry *)
|
||||
g_malloc(sizeof(VReaderListEntry));
|
||||
new_reader_list_entry->next = NULL;
|
||||
new_reader_list_entry->prev = NULL;
|
||||
new_reader_list_entry = g_new0(VReaderListEntry, 1);
|
||||
new_reader_list_entry->reader = vreader_reference(reader);
|
||||
return new_reader_list_entry;
|
||||
}
|
||||
@ -336,9 +331,7 @@ vreader_list_new(void)
|
||||
{
|
||||
VReaderList *new_reader_list;
|
||||
|
||||
new_reader_list = (VReaderList *)g_malloc(sizeof(VReaderList));
|
||||
new_reader_list->head = NULL;
|
||||
new_reader_list->tail = NULL;
|
||||
new_reader_list = g_new0(VReaderList, 1);
|
||||
return new_reader_list;
|
||||
}
|
||||
|
||||
@ -346,7 +339,7 @@ void
|
||||
vreader_list_delete(VReaderList *list)
|
||||
{
|
||||
VReaderListEntry *current_entry;
|
||||
VReaderListEntry *next_entry = NULL;
|
||||
VReaderListEntry *next_entry;
|
||||
for (current_entry = vreader_list_get_first(list); current_entry;
|
||||
current_entry = next_entry) {
|
||||
next_entry = vreader_list_get_next(current_entry);
|
||||
@ -437,8 +430,8 @@ vreader_list_unlock(void)
|
||||
static VReaderList *
|
||||
vreader_copy_list(VReaderList *list)
|
||||
{
|
||||
VReaderList *new_list = NULL;
|
||||
VReaderListEntry *current_entry = NULL;
|
||||
VReaderList *new_list;
|
||||
VReaderListEntry *current_entry;
|
||||
|
||||
new_list = vreader_list_new();
|
||||
if (new_list == NULL) {
|
||||
@ -470,7 +463,7 @@ VReader *
|
||||
vreader_get_reader_by_id(vreader_id_t id)
|
||||
{
|
||||
VReader *reader = NULL;
|
||||
VReaderListEntry *current_entry = NULL;
|
||||
VReaderListEntry *current_entry;
|
||||
|
||||
if (id == (vreader_id_t) -1) {
|
||||
return NULL;
|
||||
@ -494,7 +487,7 @@ VReader *
|
||||
vreader_get_reader_by_name(const char *name)
|
||||
{
|
||||
VReader *reader = NULL;
|
||||
VReaderListEntry *current_entry = NULL;
|
||||
VReaderListEntry *current_entry;
|
||||
|
||||
vreader_list_lock();
|
||||
for (current_entry = vreader_list_get_first(vreader_list); current_entry;
|
||||
|
@ -131,8 +131,8 @@ static void *
|
||||
event_thread(void *arg)
|
||||
{
|
||||
unsigned char atr[MAX_ATR_LEN];
|
||||
int atr_len = MAX_ATR_LEN;
|
||||
VEvent *event = NULL;
|
||||
int atr_len;
|
||||
VEvent *event;
|
||||
unsigned int reader_id;
|
||||
|
||||
|
||||
@ -502,8 +502,7 @@ do_command(GIOChannel *source,
|
||||
if (reader != NULL) {
|
||||
error = vcard_emul_force_card_insert(reader);
|
||||
printf("insert %s, returned %d\n",
|
||||
reader ? vreader_get_name(reader)
|
||||
: "invalid reader", error);
|
||||
vreader_get_name(reader), error);
|
||||
} else {
|
||||
printf("no reader by id %u found\n", reader_id);
|
||||
}
|
||||
@ -515,8 +514,7 @@ do_command(GIOChannel *source,
|
||||
if (reader != NULL) {
|
||||
error = vcard_emul_force_card_remove(reader);
|
||||
printf("remove %s, returned %d\n",
|
||||
reader ? vreader_get_name(reader)
|
||||
: "invalid reader", error);
|
||||
vreader_get_name(reader), error);
|
||||
} else {
|
||||
printf("no reader by id %u found\n", reader_id);
|
||||
}
|
||||
@ -572,6 +570,7 @@ do_command(GIOChannel *source,
|
||||
"CARD_PRESENT" : " ",
|
||||
vreader_get_name(reader));
|
||||
}
|
||||
vreader_list_delete(list);
|
||||
} else if (*string != 0) {
|
||||
printf("valid commands:\n");
|
||||
printf("insert [reader_id]\n");
|
||||
|
2
nbd.c
2
nbd.c
@ -306,7 +306,7 @@ static int nbd_send_negotiate(NBDClient *client)
|
||||
[ 8 .. 15] magic (NBD_CLIENT_MAGIC)
|
||||
[16 .. 23] size
|
||||
[24 .. 25] server flags (0)
|
||||
[24 .. 27] export flags
|
||||
[26 .. 27] export flags
|
||||
[28 .. 151] reserved (0)
|
||||
|
||||
Negotiation header with options, part 1:
|
||||
|
@ -294,7 +294,7 @@ static void *nbd_client_thread(void *arg)
|
||||
fd = open(device, O_RDWR);
|
||||
if (fd < 0) {
|
||||
/* Linux-only, we can use %m in printf. */
|
||||
fprintf(stderr, "Failed to open %s: %m", device);
|
||||
fprintf(stderr, "Failed to open %s: %m\n", device);
|
||||
goto out_socket;
|
||||
}
|
||||
|
||||
@ -369,8 +369,10 @@ static void nbd_accept(void *opaque)
|
||||
return;
|
||||
}
|
||||
|
||||
if (fd >= 0 && nbd_client_new(exp, fd, nbd_client_closed)) {
|
||||
if (nbd_client_new(exp, fd, nbd_client_closed)) {
|
||||
nb_fds++;
|
||||
} else {
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ Export QEMU disk image using NBD protocol.
|
||||
@item @var{filename}
|
||||
is a disk image filename
|
||||
@item -p, --port=@var{port}
|
||||
port to listen on (default @samp{1024})
|
||||
port to listen on (default @samp{10809})
|
||||
@item -o, --offset=@var{offset}
|
||||
offset into the image
|
||||
@item -b, --bind=@var{iface}
|
||||
|
9
vl.c
9
vl.c
@ -965,7 +965,7 @@ static int parse_sandbox(QemuOpts *opts, void *opaque)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void parse_name(QemuOpts *opts)
|
||||
static int parse_name(QemuOpts *opts, void *opaque)
|
||||
{
|
||||
const char *proc_name;
|
||||
|
||||
@ -978,6 +978,8 @@ static void parse_name(QemuOpts *opts)
|
||||
if (proc_name) {
|
||||
os_set_proc_name(proc_name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool usb_enabled(bool default_usb)
|
||||
@ -3796,7 +3798,6 @@ int main(int argc, char **argv, char **envp)
|
||||
if (!opts) {
|
||||
exit(1);
|
||||
}
|
||||
parse_name(opts);
|
||||
break;
|
||||
case QEMU_OPTION_prom_env:
|
||||
if (nb_prom_envs >= MAX_PROM_ENVS) {
|
||||
@ -3971,6 +3972,10 @@ int main(int argc, char **argv, char **envp)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (qemu_opts_foreach(qemu_find_opts("name"), parse_name, NULL, 1)) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
if (qemu_opts_foreach(qemu_find_opts("add-fd"), parse_add_fd, NULL, 1)) {
|
||||
exit(1);
|
||||
|
Loading…
Reference in New Issue
Block a user