From patchwork Fri Nov 15 16:22:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: lijun X-Patchwork-Id: 291611 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id E90622C00A6 for ; Sat, 16 Nov 2013 03:23:09 +1100 (EST) Received: from localhost ([::1]:60975 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhMAk-0001PT-Vb for incoming@patchwork.ozlabs.org; Fri, 15 Nov 2013 11:23:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59048) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhMAM-0001O5-J8 for qemu-devel@nongnu.org; Fri, 15 Nov 2013 11:22:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VhMAE-000776-5g for qemu-devel@nongnu.org; Fri, 15 Nov 2013 11:22:42 -0500 Received: from mail-pb0-x22e.google.com ([2607:f8b0:400e:c01::22e]:35493) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VhMAD-00076P-Tt for qemu-devel@nongnu.org; Fri, 15 Nov 2013 11:22:34 -0500 Received: by mail-pb0-f46.google.com with SMTP id un15so3795439pbc.33 for ; Fri, 15 Nov 2013 08:22:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:content-transfer-encoding; bh=uSvEJ559iLdRbMhhbtfy9fhScx20QQxFqwQe62//5qg=; b=pH7ueX9NvE99LZNv8XFrJ16ZdcS0FZnsj9+aujMLCI36QdEJMk1b8KPYecY9FdJD9L QgARN4UWI2y62upZMdaQFA19C767FOjBOR2RqIPfYzEpafEhNaN/EtRP09dJxKgNGrOT 4WWPhRRQTOn4Kv26n2FgJpMqeYMF61bfCx+VSU6WLmUHbZs4ZUUh5CkbpYx3Kl3TvUPx N/qBp86cefA6UQaJk43d4Rk2Coe33NNzJ8ZNqfa2Jdz0NfSGh40jW02D0ajU1yfQxQKW iZA75fkCngRPnhSOMYvQ83a+b0Id8rgoq7frDl90S3nKTqly3qy5or5DOhnzSVswPFKY AnRQ== X-Received: by 10.66.144.102 with SMTP id sl6mr7670517pab.96.1384532552358; Fri, 15 Nov 2013 08:22:32 -0800 (PST) Received: from localhost.localdomain ([211.155.113.164]) by mx.google.com with ESMTPSA id py4sm5411220pbb.33.2013.11.15.08.22.28 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 15 Nov 2013 08:22:31 -0800 (PST) Message-ID: <52864A3A.4030601@gmail.com> Date: Sat, 16 Nov 2013 00:22:18 +0800 From: lijun User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0 MIME-Version: 1.0 To: qemu-devel@nongnu.org X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c01::22e Cc: lcapitulino@redhat.com Subject: [Qemu-devel] [PATCH] HMP: snapshot_blkdev can not consider //root/sn1 and /root/sn1 as the same file X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Jun Li 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. Signed-off-by: Jun Li snapshot @@ -970,6 +972,18 @@ void hmp_snapshot_blkdev(Monitor *mon, c return; } + /* Delete duplicate '/' in filename. */ + while (*p != '\0') { + if (*p == '/') { + while (*(p + count++) == '/') { + /* do null. */ + } + strcpy((char *)(p + 1), (char *)(p + count - 1)); + count = 1; + } + p++; + } + mode = reuse ? NEW_IMAGE_MODE_EXISTING : NEW_IMAGE_MODE_ABSOLUTE_PATHS; qmp_blockdev_snapshot_sync(device, filename, !!format, format, true, mode, &errp); --- 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