mirror of https://github.com/xqemu/xqemu.git
error: Move qemu_error() & friends from monitor.c to own file
They're about reporting errors, not about the monitor.
This commit is contained in:
parent
d6f468337a
commit
b4a51f7f5d
|
@ -169,6 +169,7 @@ endif #CONFIG_BSD_USER
|
|||
ifdef CONFIG_SOFTMMU
|
||||
|
||||
obj-y = vl.o async.o monitor.o pci.o pci_host.o pcie_host.o machine.o gdbstub.o
|
||||
obj-y += qemu-error.o
|
||||
# virtio has to be here due to weird dependency between PCI and virtio-net.
|
||||
# need to fix this properly
|
||||
obj-y += virtio-blk.o virtio-balloon.o virtio-net.o virtio-pci.o virtio-serial-bus.o
|
||||
|
|
89
monitor.c
89
monitor.c
|
@ -4686,92 +4686,3 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
|
|||
|
||||
return err;
|
||||
}
|
||||
|
||||
typedef struct QemuErrorSink QemuErrorSink;
|
||||
struct QemuErrorSink {
|
||||
enum {
|
||||
ERR_SINK_FILE,
|
||||
ERR_SINK_MONITOR,
|
||||
} dest;
|
||||
union {
|
||||
FILE *fp;
|
||||
Monitor *mon;
|
||||
};
|
||||
QemuErrorSink *previous;
|
||||
};
|
||||
|
||||
static QemuErrorSink *qemu_error_sink;
|
||||
|
||||
void qemu_errors_to_file(FILE *fp)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
sink = qemu_mallocz(sizeof(*sink));
|
||||
sink->dest = ERR_SINK_FILE;
|
||||
sink->fp = fp;
|
||||
sink->previous = qemu_error_sink;
|
||||
qemu_error_sink = sink;
|
||||
}
|
||||
|
||||
void qemu_errors_to_mon(Monitor *mon)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
sink = qemu_mallocz(sizeof(*sink));
|
||||
sink->dest = ERR_SINK_MONITOR;
|
||||
sink->mon = mon;
|
||||
sink->previous = qemu_error_sink;
|
||||
qemu_error_sink = sink;
|
||||
}
|
||||
|
||||
void qemu_errors_to_previous(void)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
sink = qemu_error_sink;
|
||||
qemu_error_sink = sink->previous;
|
||||
qemu_free(sink);
|
||||
}
|
||||
|
||||
void qemu_error(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
switch (qemu_error_sink->dest) {
|
||||
case ERR_SINK_FILE:
|
||||
va_start(args, fmt);
|
||||
vfprintf(qemu_error_sink->fp, fmt, args);
|
||||
va_end(args);
|
||||
break;
|
||||
case ERR_SINK_MONITOR:
|
||||
va_start(args, fmt);
|
||||
monitor_vprintf(qemu_error_sink->mon, fmt, args);
|
||||
va_end(args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_error_internal(const char *file, int linenr, const char *func,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
QError *qerror;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
|
||||
va_start(va, fmt);
|
||||
qerror = qerror_from_info(file, linenr, func, fmt, &va);
|
||||
va_end(va);
|
||||
|
||||
switch (qemu_error_sink->dest) {
|
||||
case ERR_SINK_FILE:
|
||||
qerror_print(qerror);
|
||||
QDECREF(qerror);
|
||||
break;
|
||||
case ERR_SINK_MONITOR:
|
||||
monitor_set_error(qemu_error_sink->mon, qerror);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
#include <stdio.h>
|
||||
#include "monitor.h"
|
||||
#include "sysemu.h"
|
||||
|
||||
typedef struct QemuErrorSink QemuErrorSink;
|
||||
struct QemuErrorSink {
|
||||
enum {
|
||||
ERR_SINK_FILE,
|
||||
ERR_SINK_MONITOR,
|
||||
} dest;
|
||||
union {
|
||||
FILE *fp;
|
||||
Monitor *mon;
|
||||
};
|
||||
QemuErrorSink *previous;
|
||||
};
|
||||
|
||||
static QemuErrorSink *qemu_error_sink;
|
||||
|
||||
void qemu_errors_to_file(FILE *fp)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
sink = qemu_mallocz(sizeof(*sink));
|
||||
sink->dest = ERR_SINK_FILE;
|
||||
sink->fp = fp;
|
||||
sink->previous = qemu_error_sink;
|
||||
qemu_error_sink = sink;
|
||||
}
|
||||
|
||||
void qemu_errors_to_mon(Monitor *mon)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
sink = qemu_mallocz(sizeof(*sink));
|
||||
sink->dest = ERR_SINK_MONITOR;
|
||||
sink->mon = mon;
|
||||
sink->previous = qemu_error_sink;
|
||||
qemu_error_sink = sink;
|
||||
}
|
||||
|
||||
void qemu_errors_to_previous(void)
|
||||
{
|
||||
QemuErrorSink *sink;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
sink = qemu_error_sink;
|
||||
qemu_error_sink = sink->previous;
|
||||
qemu_free(sink);
|
||||
}
|
||||
|
||||
void qemu_error(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
switch (qemu_error_sink->dest) {
|
||||
case ERR_SINK_FILE:
|
||||
va_start(args, fmt);
|
||||
vfprintf(qemu_error_sink->fp, fmt, args);
|
||||
va_end(args);
|
||||
break;
|
||||
case ERR_SINK_MONITOR:
|
||||
va_start(args, fmt);
|
||||
monitor_vprintf(qemu_error_sink->mon, fmt, args);
|
||||
va_end(args);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_error_internal(const char *file, int linenr, const char *func,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
QError *qerror;
|
||||
|
||||
assert(qemu_error_sink != NULL);
|
||||
|
||||
va_start(va, fmt);
|
||||
qerror = qerror_from_info(file, linenr, func, fmt, &va);
|
||||
va_end(va);
|
||||
|
||||
switch (qemu_error_sink->dest) {
|
||||
case ERR_SINK_FILE:
|
||||
qerror_print(qerror);
|
||||
QDECREF(qerror);
|
||||
break;
|
||||
case ERR_SINK_MONITOR:
|
||||
monitor_set_error(qemu_error_sink->mon, qerror);
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue