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