Drop another redundant field from virStorageFileMetadata.
* src/util/virstoragefile.h (_virStorageFileMetadata): Drop
field.
* src/util/virstoragefile.c
(virStorageFileGetMetadataFromFDInternal)
(virStorageFileGetMetadataFromFD)
(virStorageFileGetMetadataRecurse): Adjust callers.
* tests/virstoragetest.c (_testFileData, testStorageChain)
(mymain): Simplify test.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
src/util/virstoragefile.c | 39 ++++++++++++++++++---------------------
src/util/virstoragefile.h | 1 -
tests/virstoragetest.c | 22 ++--------------------
3 files changed, 20 insertions(+), 42 deletions(-)
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index c509a9a..3645abb 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1035,13 +1035,19 @@ virStorageFileGetMetadataFromFDInternal(const char *path,
const char *directory,
int fd,
int format,
- virStorageFileMetadataPtr meta)
+ virStorageFileMetadataPtr meta,
+ int *backingFormat)
{
char *buf = NULL;
ssize_t len = VIR_STORAGE_MAX_HEADER;
struct stat sb;
int ret = -1;
+ int dummy;
+ if (backingFormat)
+ *backingFormat = VIR_STORAGE_FILE_NONE;
+ else
+ backingFormat = &dummy;
if (fstat(fd, &sb) < 0) {
virReportSystemError(errno,
_("cannot stat file '%s'"),
@@ -1074,7 +1080,7 @@ virStorageFileGetMetadataFromFDInternal(const char *path,
ret = virStorageFileGetMetadataInternal(path, canonPath, directory,
buf, len, format, meta,
&meta->backingStoreRaw,
- &meta->backingStoreFormat);
+ backingFormat);
if (ret == 0) {
if (S_ISREG(sb.st_mode))
@@ -1099,11 +1105,6 @@ virStorageFileGetMetadataFromFDInternal(const char *path,
* format, since a malicious guest can turn a raw file into any
* other non-raw format at will.
*
- * If the returned meta.backingStoreFormat is VIR_STORAGE_FILE_AUTO
- * it indicates the image didn't specify an explicit format for its
- * backing store. Callers are advised against probing for the
- * backing store format in this case.
- *
* Caller MUST free the result after use via virStorageFileFreeMetadata.
*/
virStorageFileMetadataPtr
@@ -1121,7 +1122,7 @@ virStorageFileGetMetadataFromFD(const char *path,
if (VIR_ALLOC(ret) < 0)
goto cleanup;
if (virStorageFileGetMetadataFromFDInternal(path, canonPath, ".",
- fd, format, ret) < 0) {
+ fd, format, ret, NULL) < 0) {
virStorageFileFreeMetadata(ret);
ret = NULL;
}
@@ -1142,6 +1143,8 @@ virStorageFileGetMetadataRecurse(const char *path, const char
*canonPath,
{
int fd;
int ret = -1;
+ int backingFormat;
+
VIR_DEBUG("path=%s canonPath=%s dir=%s format=%d uid=%d gid=%d probe=%d",
path, canonPath, NULLSTR(directory), format,
(int)uid, (int)gid, allow_probe);
@@ -1163,7 +1166,8 @@ virStorageFileGetMetadataRecurse(const char *path, const char
*canonPath,
ret = virStorageFileGetMetadataFromFDInternal(path, canonPath,
directory,
- fd, format, meta);
+ fd, format, meta,
+ &backingFormat);
if (VIR_CLOSE(fd) < 0)
VIR_WARN("could not close file %s", path);
@@ -1183,19 +1187,17 @@ virStorageFileGetMetadataRecurse(const char *path, const char
*canonPath,
if (ret == 0 && meta->backingStore) {
virStorageFileMetadataPtr backing;
- if (meta->backingStoreFormat == VIR_STORAGE_FILE_AUTO &&
!allow_probe)
- meta->backingStoreFormat = VIR_STORAGE_FILE_RAW;
- else if (meta->backingStoreFormat == VIR_STORAGE_FILE_AUTO_SAFE)
- meta->backingStoreFormat = VIR_STORAGE_FILE_AUTO;
- format = meta->backingStoreFormat;
+ if (backingFormat == VIR_STORAGE_FILE_AUTO && !allow_probe)
+ backingFormat = VIR_STORAGE_FILE_RAW;
+ else if (backingFormat == VIR_STORAGE_FILE_AUTO_SAFE)
+ backingFormat = VIR_STORAGE_FILE_AUTO;
if (VIR_ALLOC(backing) < 0 ||
virStorageFileGetMetadataRecurse(meta->backingStoreRaw,
meta->backingStore,
- meta->directory, format,
+ meta->directory, backingFormat,
uid, gid, allow_probe,
cycle, backing) < 0) {
/* If we failed to get backing data, mark the chain broken */
- meta->backingStoreFormat = VIR_STORAGE_FILE_NONE;
VIR_FREE(meta->backingStore);
virStorageFileFreeMetadata(backing);
} else {
@@ -1220,11 +1222,6 @@ virStorageFileGetMetadataRecurse(const char *path, const char
*canonPath,
* format, since a malicious guest can turn a raw file into any
* other non-raw format at will.
*
- * If the returned meta.backingStoreFormat is VIR_STORAGE_FILE_AUTO
- * it indicates the image didn't specify an explicit format for its
- * backing store. Callers are advised against using ALLOW_PROBE, as
- * it would probe the backing store format in this case.
- *
* Caller MUST free result after use via virStorageFileFreeMetadata.
*/
virStorageFileMetadataPtr
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index edfe9eb..c747f20 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -147,7 +147,6 @@ struct _virStorageFileMetadata {
* store. */
char *backingStore; /* Canonical name (absolute file, or protocol). Should be same as
backingMeta->canonPath */
char *directory; /* The directory containing basename of backingStoreRaw. Should be
same as backingMeta->relDir */
- int backingStoreFormat; /* enum virStorageFileFormat. Should be same as
backingMeta->format */
};
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 846d130..13b5032 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -232,7 +232,6 @@ struct _testFileData
const char *expBackingStoreRaw;
const char *expBackingDirRel;
const char *expBackingDirAbs;
- enum virStorageFileFormat expBackingFormat;
unsigned long long expCapacity;
bool expEncrypted;
const char *pathRel;
@@ -325,12 +324,11 @@ testStorageChain(const void *args)
expRelDir = isAbs ? data->files[i]->relDirAbs
: data->files[i]->relDirRel;
if (virAsprintf(&expect,
- "store:%s\nraw:%s\ndirectory:%s\nother:%d %lld %d\n"
+ "store:%s\nraw:%s\ndirectory:%s\nother:%lld %d\n"
"path:%s\ncanon:%s\nrelDir:%s\ntype:%d %d\n",
NULLSTR(data->files[i]->expBackingStore),
NULLSTR(data->files[i]->expBackingStoreRaw),
NULLSTR(expBackingDirectory),
- data->files[i]->expBackingFormat,
data->files[i]->expCapacity,
data->files[i]->expEncrypted,
NULLSTR(expPath),
@@ -339,12 +337,11 @@ testStorageChain(const void *args)
data->files[i]->type,
data->files[i]->format) < 0 ||
virAsprintf(&actual,
- "store:%s\nraw:%s\ndirectory:%s\nother:%d %lld %d\n"
+ "store:%s\nraw:%s\ndirectory:%s\nother:%lld %d\n"
"path:%s\ncanon:%s\nrelDir:%s\ntype:%d %d\n",
NULLSTR(elt->backingStore),
NULLSTR(elt->backingStoreRaw),
NULLSTR(elt->directory),
- elt->backingStoreFormat,
elt->capacity, !!elt->encryption,
NULLSTR(elt->path),
NULLSTR(elt->canonPath),
@@ -428,7 +425,6 @@ mymain(void)
/* Raw image, whether with right format or no specified format */
testFileData raw = {
- .expBackingFormat = VIR_STORAGE_FILE_NONE,
.pathRel = "raw",
.pathAbs = canonraw,
.canonPath = canonraw,
@@ -455,7 +451,6 @@ mymain(void)
.expBackingStoreRaw = "raw",
.expBackingDirRel = ".",
.expBackingDirAbs = datadir,
- .expBackingFormat = VIR_STORAGE_FILE_RAW,
.expCapacity = 1024,
.pathRel = "qcow2",
.pathAbs = canonqcow2,
@@ -466,7 +461,6 @@ mymain(void)
.format = VIR_STORAGE_FILE_QCOW2,
};
testFileData qcow2_as_raw = {
- .expBackingFormat = VIR_STORAGE_FILE_NONE,
.pathRel = "qcow2",
.pathAbs = canonqcow2,
.canonPath = canonqcow2,
@@ -516,7 +510,6 @@ mymain(void)
.expBackingStoreRaw = absqcow2,
.expBackingDirRel = datadir,
.expBackingDirAbs = datadir,
- .expBackingFormat = VIR_STORAGE_FILE_QCOW2,
.expCapacity = 1024,
.pathRel = "wrap",
.pathAbs = abswrap,
@@ -546,8 +539,6 @@ mymain(void)
"-b", absqcow2, "wrap", NULL);
if (virCommandRun(cmd, NULL) < 0)
ret = -1;
- wrap.expBackingFormat = VIR_STORAGE_FILE_AUTO;
- qcow2.expBackingFormat = VIR_STORAGE_FILE_AUTO;
qcow2_as_raw.pathRel = absqcow2;
qcow2_as_raw.relDirRel = datadir;
@@ -557,7 +548,6 @@ mymain(void)
.expBackingStoreRaw = absqcow2,
.expBackingDirRel = datadir,
.expBackingDirAbs = datadir,
- .expBackingFormat = VIR_STORAGE_FILE_RAW,
.expCapacity = 1024,
.pathRel = "wrap",
.pathAbs = abswrap,
@@ -582,7 +572,6 @@ mymain(void)
ret = -1;
qcow2.expBackingStore = NULL;
qcow2.expBackingStoreRaw = datadir "/bogus";
- qcow2.expBackingFormat = VIR_STORAGE_FILE_NONE;
qcow2.pathRel = "qcow2";
qcow2.relDirRel = ".";
@@ -618,7 +607,6 @@ mymain(void)
qcow2.expBackingStoreRaw = "nbd:example.org:6000";
qcow2.expBackingDirRel = NULL;
qcow2.expBackingDirAbs = NULL;
- qcow2.expBackingFormat = VIR_STORAGE_FILE_RAW;
/* Qcow2 file with backing protocol instead of file */
testFileData nbd = {
@@ -640,7 +628,6 @@ mymain(void)
.expBackingStoreRaw = absraw,
.expBackingDirRel = datadir,
.expBackingDirAbs = datadir,
- .expBackingFormat = VIR_STORAGE_FILE_RAW,
.expCapacity = 1024,
.pathRel = "qed",
.pathAbs = absqed,
@@ -651,7 +638,6 @@ mymain(void)
.format = VIR_STORAGE_FILE_QED,
};
testFileData qed_as_raw = {
- .expBackingFormat = VIR_STORAGE_FILE_NONE,
.pathRel = "qed",
.pathAbs = absqed,
.canonPath = canonqed,
@@ -706,7 +692,6 @@ mymain(void)
.expBackingStoreRaw = "../raw",
.expBackingDirRel = "sub/../sub/..",
.expBackingDirAbs = datadir "/sub/../sub/..",
- .expBackingFormat = VIR_STORAGE_FILE_RAW,
.expCapacity = 1024,
.pathRel = "../sub/link1",
.pathAbs = "../sub/link1",
@@ -721,7 +706,6 @@ mymain(void)
.expBackingStoreRaw = "../sub/link1",
.expBackingDirRel = "sub/../sub",
.expBackingDirAbs = datadir "/sub/../sub",
- .expBackingFormat = VIR_STORAGE_FILE_QCOW2,
.expCapacity = 1024,
.pathRel = "sub/link2",
.pathAbs = abslink2,
@@ -752,7 +736,6 @@ mymain(void)
qcow2.expBackingStoreRaw = "qcow2";
qcow2.expBackingDirRel = ".";
qcow2.expBackingDirAbs = datadir;
- qcow2.expBackingFormat= VIR_STORAGE_FILE_NONE;
/* Behavior of an infinite loop chain */
TEST_CHAIN(16, "qcow2", absqcow2, VIR_STORAGE_FILE_QCOW2,
@@ -777,7 +760,6 @@ mymain(void)
qcow2.expBackingDirRel = datadir;
qcow2.pathRel = absqcow2;
qcow2.relDirRel = datadir;
- wrap.expBackingFormat = VIR_STORAGE_FILE_QCOW2;
/* Behavior of an infinite loop chain */
TEST_CHAIN(17, "wrap", abswrap, VIR_STORAGE_FILE_QCOW2,
--
1.9.0