We don't need Error **, as all callers pass local Error object, which isn't used after the call. Use Error * instead. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20191205174635.18758-5-vsementsov@virtuozzo.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Human Monitor Interface commands
 | 
						|
 *
 | 
						|
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 | 
						|
 * See the COPYING file in the top-level directory.
 | 
						|
 */
 | 
						|
 | 
						|
#include "qemu/osdep.h"
 | 
						|
#include "monitor/hmp.h"
 | 
						|
#include "monitor/monitor.h"
 | 
						|
#include "qapi/error.h"
 | 
						|
#include "qapi/qapi-commands-dump.h"
 | 
						|
#include "qapi/qmp/qdict.h"
 | 
						|
 | 
						|
void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict)
 | 
						|
{
 | 
						|
    Error *err = NULL;
 | 
						|
    bool win_dmp = qdict_get_try_bool(qdict, "windmp", false);
 | 
						|
    bool paging = qdict_get_try_bool(qdict, "paging", false);
 | 
						|
    bool zlib = qdict_get_try_bool(qdict, "zlib", false);
 | 
						|
    bool lzo = qdict_get_try_bool(qdict, "lzo", false);
 | 
						|
    bool snappy = qdict_get_try_bool(qdict, "snappy", false);
 | 
						|
    const char *file = qdict_get_str(qdict, "filename");
 | 
						|
    bool has_begin = qdict_haskey(qdict, "begin");
 | 
						|
    bool has_length = qdict_haskey(qdict, "length");
 | 
						|
    bool has_detach = qdict_haskey(qdict, "detach");
 | 
						|
    int64_t begin = 0;
 | 
						|
    int64_t length = 0;
 | 
						|
    bool detach = false;
 | 
						|
    enum DumpGuestMemoryFormat dump_format = DUMP_GUEST_MEMORY_FORMAT_ELF;
 | 
						|
    char *prot;
 | 
						|
 | 
						|
    if (zlib + lzo + snappy + win_dmp > 1) {
 | 
						|
        error_setg(&err, "only one of '-z|-l|-s|-w' can be set");
 | 
						|
        hmp_handle_error(mon, err);
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    if (win_dmp) {
 | 
						|
        dump_format = DUMP_GUEST_MEMORY_FORMAT_WIN_DMP;
 | 
						|
    }
 | 
						|
 | 
						|
    if (zlib) {
 | 
						|
        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB;
 | 
						|
    }
 | 
						|
 | 
						|
    if (lzo) {
 | 
						|
        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO;
 | 
						|
    }
 | 
						|
 | 
						|
    if (snappy) {
 | 
						|
        dump_format = DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY;
 | 
						|
    }
 | 
						|
 | 
						|
    if (has_begin) {
 | 
						|
        begin = qdict_get_int(qdict, "begin");
 | 
						|
    }
 | 
						|
    if (has_length) {
 | 
						|
        length = qdict_get_int(qdict, "length");
 | 
						|
    }
 | 
						|
    if (has_detach) {
 | 
						|
        detach = qdict_get_bool(qdict, "detach");
 | 
						|
    }
 | 
						|
 | 
						|
    prot = g_strconcat("file:", file, NULL);
 | 
						|
 | 
						|
    qmp_dump_guest_memory(paging, prot, true, detach, has_begin, begin,
 | 
						|
                          has_length, length, true, dump_format, &err);
 | 
						|
    hmp_handle_error(mon, err);
 | 
						|
    g_free(prot);
 | 
						|
}
 | 
						|
 | 
						|
void hmp_info_dump(Monitor *mon, const QDict *qdict)
 | 
						|
{
 | 
						|
    DumpQueryResult *result = qmp_query_dump(NULL);
 | 
						|
 | 
						|
    assert(result && result->status < DUMP_STATUS__MAX);
 | 
						|
    monitor_printf(mon, "Status: %s\n", DumpStatus_str(result->status));
 | 
						|
 | 
						|
    if (result->status == DUMP_STATUS_ACTIVE) {
 | 
						|
        float percent = 0;
 | 
						|
        assert(result->total != 0);
 | 
						|
        percent = 100.0 * result->completed / result->total;
 | 
						|
        monitor_printf(mon, "Finished: %.2f %%\n", percent);
 | 
						|
    }
 | 
						|
 | 
						|
    qapi_free_DumpQueryResult(result);
 | 
						|
}
 |