From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46521) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZN5gQ-0001LC-An for qemu-devel@nongnu.org; Wed, 05 Aug 2015 16:53:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZN5gP-0003hG-0N for qemu-devel@nongnu.org; Wed, 05 Aug 2015 16:53:06 -0400 From: Max Reitz Date: Wed, 5 Aug 2015 22:52:45 +0200 Message-Id: <1438807969-9723-2-git-send-email-mreitz@redhat.com> In-Reply-To: <1438807969-9723-1-git-send-email-mreitz@redhat.com> References: <1438807969-9723-1-git-send-email-mreitz@redhat.com> Subject: [Qemu-devel] [PATCH v2 1/5] block: Change bdrv_get_encrypted_filename() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Max Reitz Instead of returning a pointer to the filename, copy it into a buffer specified by the caller. Signed-off-by: Max Reitz --- block.c | 24 +++++++++++++++++------- include/block/block.h | 2 +- monitor.c | 4 +++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/block.c b/block.c index d088ee0..e7dd2f1 100644 --- a/block.c +++ b/block.c @@ -2760,10 +2760,12 @@ void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp) } } else { if (bdrv_key_required(bs)) { + char enc_filename[PATH_MAX]; + bdrv_get_encrypted_filename(bs, enc_filename, sizeof(enc_filename)); error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED, "'%s' (%s) is encrypted", bdrv_get_device_or_node_name(bs), - bdrv_get_encrypted_filename(bs)); + enc_filename); } } } @@ -2980,14 +2982,22 @@ bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs) return false; } -const char *bdrv_get_encrypted_filename(BlockDriverState *bs) +char *bdrv_get_encrypted_filename(BlockDriverState *bs, char *dest, size_t sz) { - if (bs->backing_hd && bs->backing_hd->encrypted) - return bs->backing_file; - else if (bs->encrypted) - return bs->filename; - else + if (sz > INT_MAX) { + sz = INT_MAX; + } + + if (bs->backing_hd && bs->backing_hd->encrypted) { + pstrcpy(dest, sz, bs->backing_file); + return dest; + } else if (bs->encrypted) { + pstrcpy(dest, sz, bs->filename); + return dest; + } else { + dest[0] = '\0'; return NULL; + } } void bdrv_get_backing_filename(BlockDriverState *bs, diff --git a/include/block/block.h b/include/block/block.h index 37916f7..a78e4f1 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -430,7 +430,7 @@ void bdrv_round_to_clusters(BlockDriverState *bs, int64_t *cluster_sector_num, int *cluster_nb_sectors); -const char *bdrv_get_encrypted_filename(BlockDriverState *bs); +char *bdrv_get_encrypted_filename(BlockDriverState *bs, char *dest, size_t sz); void bdrv_get_backing_filename(BlockDriverState *bs, char *filename, int filename_size); void bdrv_get_full_backing_filename(BlockDriverState *bs, diff --git a/monitor.c b/monitor.c index aeea2b5..cfdf781 100644 --- a/monitor.c +++ b/monitor.c @@ -5292,10 +5292,12 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs, BlockCompletionFunc *completion_cb, void *opaque) { + char enc_filename[PATH_MAX]; int err; + bdrv_get_encrypted_filename(bs, enc_filename, sizeof(enc_filename)); monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs), - bdrv_get_encrypted_filename(bs)); + enc_filename); mon->password_completion_cb = completion_cb; mon->password_opaque = opaque; -- 2.4.6