Message ID | 52864A3A.4030601@gmail.com |
---|---|
State | New |
Headers | show |
On 11/15/2013 09:22 AM, lijun wrote: > From: Jun Li <junmuzi@gmail.com> > > Hi all, > > snapshot_blkdev can not consider //root/sn1 and /root/sn1 as the same > file. When file /root/sn1 is the base file, do snapshot using file > //root/sn1, qemu consider it as a new file. So this will rewrite the > base file. Careful. On cygwin, /root and //root are two different files (and POSIX allows this). While qemu hasn't yet been ported to cygwin, we should not make the task harder by using incorrect ad-hoc normalization. > + /* Delete duplicate '/' in filename. */ > + while (*p != '\0') { Rather than hand-rolling a loop, you should use realpath() (guaranteed by POSIX, but not always portable) or its appropriate glib wrapper, where we can assume that glib will properly account for // being distinct on platforms where it matters.
--- a/hmp.c 2013-11-15 23:15:46.733361130 +0800 +++ b/hmp.c 2013-11-16 00:20:23.972248509 +0800 @@ -957,10 +957,12 @@ void hmp_snapshot_blkdev(Monitor *mon, c { const char *device = qdict_get_str(qdict, "device"); const char *filename = qdict_get_try_str(qdict, "snapshot-file"); + const char *p = filename; const char *format = qdict_get_try_str(qdict, "format"); int reuse = qdict_get_try_bool(qdict, "reuse", 0); enum NewImageMode mode; Error *errp = NULL; + int count = 1; if (!filename) { /* In the future, if 'snapshot-file' is not specified, the