savevm: Generate a name when run without one
When savevm is run without a name, the name stays blank and the snapshot is saved anyway. The new behavior is when savevm is run without parameters a name will be created automaticaly, so the snapshot is accessible to the user without needing the id when loadvm is run. (qemu) savevm (qemu) info snapshots ID TAG VM SIZE DATE VM CLOCK 1 vm-20100728134640 978K 2010-07-28 13:46:40 00:00:08.603 We use a name with the format 'vm-YYYYMMDDHHMMSS'. This is a first step to hide the internal id, because I don't see a reason to expose this kind of internals to the user. Signed-off-by: Miguel Di Ciurcio Filho <miguel.filho@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f920991574
commit
7d631a116a
29
savevm.c
29
savevm.c
@ -1837,8 +1837,10 @@ void do_savevm(Monitor *mon, const QDict *qdict)
|
||||
uint32_t vm_state_size;
|
||||
#ifdef _WIN32
|
||||
struct _timeb tb;
|
||||
struct tm *ptm;
|
||||
#else
|
||||
struct timeval tv;
|
||||
struct tm tm;
|
||||
#endif
|
||||
const char *name = qdict_get_try_str(qdict, "name");
|
||||
|
||||
@ -1869,15 +1871,6 @@ void do_savevm(Monitor *mon, const QDict *qdict)
|
||||
vm_stop(0);
|
||||
|
||||
memset(sn, 0, sizeof(*sn));
|
||||
if (name) {
|
||||
ret = bdrv_snapshot_find(bs, old_sn, name);
|
||||
if (ret >= 0) {
|
||||
pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
|
||||
pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
|
||||
} else {
|
||||
pstrcpy(sn->name, sizeof(sn->name), name);
|
||||
}
|
||||
}
|
||||
|
||||
/* fill auxiliary fields */
|
||||
#ifdef _WIN32
|
||||
@ -1891,6 +1884,24 @@ void do_savevm(Monitor *mon, const QDict *qdict)
|
||||
#endif
|
||||
sn->vm_clock_nsec = qemu_get_clock(vm_clock);
|
||||
|
||||
if (name) {
|
||||
ret = bdrv_snapshot_find(bs, old_sn, name);
|
||||
if (ret >= 0) {
|
||||
pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
|
||||
pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
|
||||
} else {
|
||||
pstrcpy(sn->name, sizeof(sn->name), name);
|
||||
}
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
ptm = localtime(&tb.time);
|
||||
strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", ptm);
|
||||
#else
|
||||
localtime_r(&tv.tv_sec, &tm);
|
||||
strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Delete old snapshots of the same name */
|
||||
if (name && del_existing_snapshots(mon, name) < 0) {
|
||||
goto the_end;
|
||||
|
Loading…
Reference in New Issue
Block a user