@@ -72,6 +72,7 @@ static BdrvProbeFunc *format_probes[] = {
bdrv_raw_probe,
bdrv_vdi_probe,
bdrv_vhdx_probe,
+ bdrv_vmdk_probe,
};
static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
@@ -3,17 +3,22 @@
#include "block/probe.h"
#include "vmdk.h"
-int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
+const char *bdrv_vmdk_probe(const uint8_t *buf, int buf_size,
+ const char *filename, int *score)
{
+ const char *format = "vmdk";
uint32_t magic;
+ assert(score);
+ *score = 0;
if (buf_size < 4) {
- return 0;
+ return format;
}
magic = be32_to_cpu(*(uint32_t *)buf);
if (magic == VMDK3_MAGIC ||
magic == VMDK4_MAGIC) {
- return 100;
+ *score = 100;
+ return format;
} else {
const char *p = (const char *)buf;
const char *end = p + buf_size;
@@ -36,7 +41,7 @@ int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
}
/* only accept blank lines before 'version=' line */
if (p == end || *p != '\n') {
- return 0;
+ return format;
}
p++;
continue;
@@ -44,17 +49,19 @@ int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
if (end - p >= strlen("version=X\n")) {
if (strncmp("version=1\n", p, strlen("version=1\n")) == 0 ||
strncmp("version=2\n", p, strlen("version=2\n")) == 0) {
- return 100;
+ *score = 100;
+ return format;
}
}
if (end - p >= strlen("version=X\r\n")) {
if (strncmp("version=1\r\n", p, strlen("version=1\r\n")) == 0 ||
strncmp("version=2\r\n", p, strlen("version=2\r\n")) == 0) {
- return 100;
+ *score = 100;
+ return format;
}
}
- return 0;
+ return format;
}
- return 0;
+ return format;
}
}
@@ -2331,7 +2331,6 @@ static QemuOptsList vmdk_create_opts = {
static BlockDriver bdrv_vmdk = {
.format_name = "vmdk",
.instance_size = sizeof(BDRVVmdkState),
- .bdrv_probe = vmdk_probe,
.bdrv_open = vmdk_open,
.bdrv_check = vmdk_check,
.bdrv_reopen_prepare = vmdk_reopen_prepare,
@@ -1,7 +1,6 @@
#ifndef PROBE_H
#define PROBE_H
-int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename);
int vpc_probe(const uint8_t *buf, int buf_size, const char *filename);
const char *bdrv_bochs_probe(const uint8_t *buf, int buf_size,
const char *filename, int *score);
@@ -25,5 +24,7 @@ const char *bdrv_vdi_probe(const uint8_t *buf, int buf_size,
const char *filename, int *score);
const char *bdrv_vhdx_probe(const uint8_t *buf, int buf_size,
const char *filename, int *score);
+const char *bdrv_vmdk_probe(const uint8_t *buf, int buf_size,
+ const char *filename, int *score);
#endif