Hi there, This is a new version of the QError framework.
I've been through the last QError thread and tried to collect the best suggestions. The important changes are: - Dropped the .user_print function - Added Paolo's suggestion on having a printf-like format for 'desc' - Line number and filename are also stored in the QError object - Uses QJSon Now, a call like: monitor_printf(mon, "husb: host usb device %d.%d is already open\n", bus_num, addr); Would become: qemu_error_structed("{ 'bus_num': %d, 'addr': %d }", bus_num, addr); Its error table entry should be: { .code = QERR_USB_EOPEN, .desc = "husb: host usb device %(bus_num)d.%(addr)d is already open", } Finally, on the wire we'd have: { "error": { "code": 45, "data": { "bus_num": 1, "addr": 0xff } } } As the previous version, qemu_error_structed() builds on top of Gerd's QemuErrorSink API. Besides introducing QError, this series also has simple usage examples for qdev_device_add() and do_info_balloon(). A last note: this series is on top of the (to be merged) QJSon module, that's why it's a RFC and.. I didn't test it too much. :) Thanks.