mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 20:45:18 +00:00
util: storage: Inline use of virStorageFileGetMetadataFromFDInternal
There was just one callsite left. Integrate the body to the only calling function.
This commit is contained in:
parent
c5aaf0b456
commit
d3047061d0
@ -973,63 +973,6 @@ virStorageFileGetMetadataFromBuf(const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Internal version that also supports a containing directory name. */
|
|
||||||
static int
|
|
||||||
virStorageFileGetMetadataFromFDInternal(virStorageSourcePtr meta,
|
|
||||||
int fd,
|
|
||||||
int *backingFormat)
|
|
||||||
{
|
|
||||||
char *buf = NULL;
|
|
||||||
ssize_t len = VIR_STORAGE_MAX_HEADER;
|
|
||||||
struct stat sb;
|
|
||||||
int ret = -1;
|
|
||||||
int dummy;
|
|
||||||
|
|
||||||
if (!backingFormat)
|
|
||||||
backingFormat = &dummy;
|
|
||||||
|
|
||||||
*backingFormat = VIR_STORAGE_FILE_NONE;
|
|
||||||
|
|
||||||
if (fstat(fd, &sb) < 0) {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("cannot stat file '%s'"),
|
|
||||||
meta->relPath);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (S_ISDIR(sb.st_mode)) {
|
|
||||||
/* No header to probe for directories, but also no backing file. Just
|
|
||||||
* update the metadata.*/
|
|
||||||
meta->type = VIR_STORAGE_TYPE_DIR;
|
|
||||||
meta->format = VIR_STORAGE_FILE_DIR;
|
|
||||||
ret = 0;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
|
|
||||||
virReportSystemError(errno, _("cannot seek to start of '%s'"), meta->relPath);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((len = virFileReadHeaderFD(fd, len, &buf)) < 0) {
|
|
||||||
virReportSystemError(errno, _("cannot read header '%s'"), meta->relPath);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = virStorageFileGetMetadataInternal(meta, buf, len, backingFormat);
|
|
||||||
|
|
||||||
if (ret == 0) {
|
|
||||||
if (S_ISREG(sb.st_mode))
|
|
||||||
meta->type = VIR_STORAGE_TYPE_FILE;
|
|
||||||
else if (S_ISBLK(sb.st_mode))
|
|
||||||
meta->type = VIR_STORAGE_TYPE_BLOCK;
|
|
||||||
}
|
|
||||||
cleanup:
|
|
||||||
VIR_FREE(buf);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virStorageFileGetMetadataFromFD:
|
* virStorageFileGetMetadataFromFD:
|
||||||
*
|
*
|
||||||
@ -1050,17 +993,61 @@ virStorageFileGetMetadataFromFD(const char *path,
|
|||||||
int *backingFormat)
|
int *backingFormat)
|
||||||
|
|
||||||
{
|
{
|
||||||
virStorageSourcePtr ret;
|
virStorageSourcePtr ret = NULL;
|
||||||
|
virStorageSourcePtr meta = NULL;
|
||||||
|
char *buf = NULL;
|
||||||
|
ssize_t len = VIR_STORAGE_MAX_HEADER;
|
||||||
|
struct stat sb;
|
||||||
|
int dummy;
|
||||||
|
|
||||||
if (!(ret = virStorageFileMetadataNew(path, format)))
|
if (!backingFormat)
|
||||||
return NULL;
|
backingFormat = &dummy;
|
||||||
|
|
||||||
|
*backingFormat = VIR_STORAGE_FILE_NONE;
|
||||||
|
|
||||||
if (virStorageFileGetMetadataFromFDInternal(ret, fd, backingFormat) < 0) {
|
if (fstat(fd, &sb) < 0) {
|
||||||
virStorageSourceFree(ret);
|
virReportSystemError(errno,
|
||||||
|
_("cannot stat file '%s'"), path);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(meta = virStorageFileMetadataNew(path, format)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (S_ISDIR(sb.st_mode)) {
|
||||||
|
/* No header to probe for directories, but also no backing file. Just
|
||||||
|
* update the metadata.*/
|
||||||
|
meta->type = VIR_STORAGE_TYPE_DIR;
|
||||||
|
meta->format = VIR_STORAGE_FILE_DIR;
|
||||||
|
ret = meta;
|
||||||
|
meta = NULL;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
|
||||||
|
virReportSystemError(errno, _("cannot seek to start of '%s'"), meta->relPath);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((len = virFileReadHeaderFD(fd, len, &buf)) < 0) {
|
||||||
|
virReportSystemError(errno, _("cannot read header '%s'"), meta->relPath);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (virStorageFileGetMetadataInternal(meta, buf, len, backingFormat) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (S_ISREG(sb.st_mode))
|
||||||
|
meta->type = VIR_STORAGE_TYPE_FILE;
|
||||||
|
else if (S_ISBLK(sb.st_mode))
|
||||||
|
meta->type = VIR_STORAGE_TYPE_BLOCK;
|
||||||
|
|
||||||
|
ret = meta;
|
||||||
|
meta = NULL;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virStorageSourceFree(meta);
|
||||||
|
VIR_FREE(buf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user