virStorageFileGetLVMKey;
virStorageFileGetMetadataFromBuf;
virStorageFileGetMetadataFromFD;
-virStorageFileGetMetadataFromFDInternal;
+virStorageFileGetMetadataInternal;
virStorageFileGetSCSIKey;
virStorageFileIsClusterFS;
virStorageFileParseChainIndex;
bool allow_probe,
virHashTablePtr cycle)
{
- int fd;
int ret = -1;
struct stat st;
const char *uniqueName;
+ char *buf = NULL;
+ ssize_t headerLen;
virStorageSourcePtr backingStore = NULL;
int backingFormat;
if (virHashAddEntry(cycle, uniqueName, (void *)1) < 0)
goto cleanup;
- if (virStorageSourceGetActualType(src) != VIR_STORAGE_TYPE_NETWORK) {
- if ((fd = virFileOpenAs(src->path, O_RDONLY, 0, uid, gid, 0)) < 0) {
- virReportSystemError(-fd, _("Failed to open file '%s'"),
- src->path);
- goto cleanup;
- }
-
- if (virStorageFileGetMetadataFromFDInternal(src, fd,
- &backingFormat) < 0) {
- VIR_FORCE_CLOSE(fd);
- goto cleanup;
- }
+ if ((headerLen = virStorageFileReadHeader(src, VIR_STORAGE_MAX_HEADER,
+ &buf)) < 0)
+ goto cleanup;
- if (VIR_CLOSE(fd) < 0)
- VIR_WARN("could not close file %s", src->path);
- } else {
- /* TODO: currently we call this only for local storage */
- ret = 0;
+ if (virStorageFileGetMetadataInternal(src, buf, headerLen,
+ &backingFormat) < 0)
goto cleanup;
- }
/* check whether we need to go deeper */
if (!src->backingStoreRaw) {
* with information about the file and its backing store. Return format
* of the backing store as BACKING_FORMAT. PATH and FORMAT have to be
* pre-populated in META */
-static int ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
-ATTRIBUTE_NONNULL(4)
+int
virStorageFileGetMetadataInternal(virStorageSourcePtr meta,
char *buf,
size_t len,
/* Internal version that also supports a containing directory name. */
-int
+static int
virStorageFileGetMetadataFromFDInternal(virStorageSourcePtr meta,
int fd,
int *backingFormat)
int virStorageFileProbeFormat(const char *path, uid_t uid, gid_t gid);
-int virStorageFileGetMetadataFromFDInternal(virStorageSourcePtr meta,
- int fd,
- int *backingFormat);
+int virStorageFileGetMetadataInternal(virStorageSourcePtr meta,
+ char *buf,
+ size_t len,
+ int *backingFormat)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
+
virStorageSourcePtr virStorageFileGetMetadataFromFD(const char *path,
int fd,
int format,