diff --git a/hmp.c b/hmp.c index 9fdf1ce516..f6bb7675ba 100644 --- a/hmp.c +++ b/hmp.c @@ -677,21 +677,18 @@ void hmp_memchar_read(Monitor *mon, const QDict *qdict) { uint32_t size = qdict_get_int(qdict, "size"); const char *chardev = qdict_get_str(qdict, "device"); - MemCharRead *meminfo; + char *data; Error *errp = NULL; - meminfo = qmp_memchar_read(chardev, size, false, 0, &errp); + data = qmp_memchar_read(chardev, size, false, 0, &errp); if (errp) { monitor_printf(mon, "%s\n", error_get_pretty(errp)); error_free(errp); return; } - if (meminfo->count > 0) { - monitor_printf(mon, "%s\n", meminfo->data); - } - - qapi_free_MemCharRead(meminfo); + monitor_printf(mon, "%s\n", data); + g_free(data); } static void hmp_cont_cb(void *opaque, int err) diff --git a/qapi-schema.json b/qapi-schema.json index 9e2cbbd1ae..d8fa1c376a 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -360,20 +360,6 @@ 'data': {'device': 'str', 'data': 'str', '*format': 'DataFormat'} } -## -# @MemCharRead -# -# Result of QMP command memchar-read. -# -# @data: The data read from memchar as string. -# -# @count: The numbers of bytes read from. -# -# Since: 1.4 -## -{ 'type': 'MemCharRead', - 'data': { 'data': 'str', 'count': 'int' } } - ## # @memchar-read: # @@ -387,14 +373,14 @@ # @format: #optional the format of the data want to read from # memchardev, by default is 'utf8'. # -# Returns: @MemCharRead +# Returns: data read from the device # If @device is not a valid memchr device, DeviceNotFound # # Since: 1.4 ## { 'command': 'memchar-read', 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'}, - 'returns': 'MemCharRead' } + 'returns': 'str' } ## # @CommandInfo: diff --git a/qemu-char.c b/qemu-char.c index 9c1dd1326d..b593c50f20 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -2788,14 +2788,14 @@ void qmp_memchar_write(const char *device, const char *data, } } -MemCharRead *qmp_memchar_read(const char *device, int64_t size, - bool has_format, enum DataFormat format, - Error **errp) +char *qmp_memchar_read(const char *device, int64_t size, + bool has_format, enum DataFormat format, + Error **errp) { CharDriverState *chr; guchar *read_data; - MemCharRead *meminfo; size_t count; + char *data; chr = qemu_chr_find(device); if (!chr) { @@ -2813,26 +2813,23 @@ MemCharRead *qmp_memchar_read(const char *device, int64_t size, return NULL; } - meminfo = g_malloc0(sizeof(MemCharRead)); - count = qemu_chr_cirmem_count(chr); if (count == 0) { - meminfo->data = g_strdup(""); - return meminfo; + return g_strdup(""); } size = size > count ? count : size; read_data = g_malloc0(size + 1); - meminfo->count = cirmem_chr_read(chr, read_data, size); + cirmem_chr_read(chr, read_data, size); if (has_format && (format == DATA_FORMAT_BASE64)) { - meminfo->data = g_base64_encode(read_data, (size_t)meminfo->count); + data = g_base64_encode(read_data, size); } else { - meminfo->data = (char *)read_data; + data = (char *)read_data; } - return meminfo; + return data; } QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename) diff --git a/qmp-commands.hx b/qmp-commands.hx index 8468f1022d..51ce2e6b41 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -525,7 +525,7 @@ Example: "arguments": { "device": foo, "size": 1000, "format": "utf8" } } -<- { "return": { "data": "data string...", "count": 1000 } } +<- {"return": "abcdefgh"} EQMP