mirror of https://github.com/xqemu/xqemu.git
VMDK: probe for monolithicFlat images
Probe as the same behavior as VMware does. Recognize image as monolithicFlat descriptor file when the file is text and the first effective line (not '#' leaded comment or space line) is either 'version=1' or 'version=2'. No space or upper case charactors accepted. Signed-off-by: Fam Zheng <famcool@gmail.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
0e69c54394
commit
01fc99d6a8
45
block/vmdk.c
45
block/vmdk.c
|
@ -103,10 +103,51 @@ static int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
|
|||
return 0;
|
||||
magic = be32_to_cpu(*(uint32_t *)buf);
|
||||
if (magic == VMDK3_MAGIC ||
|
||||
magic == VMDK4_MAGIC)
|
||||
magic == VMDK4_MAGIC) {
|
||||
return 100;
|
||||
else
|
||||
} else {
|
||||
const char *p = (const char *)buf;
|
||||
const char *end = p + buf_size;
|
||||
while (p < end) {
|
||||
if (*p == '#') {
|
||||
/* skip comment line */
|
||||
while (p < end && *p != '\n') {
|
||||
p++;
|
||||
}
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
if (*p == ' ') {
|
||||
while (p < end && *p == ' ') {
|
||||
p++;
|
||||
}
|
||||
/* skip '\r' if windows line endings used. */
|
||||
if (p < end && *p == '\r') {
|
||||
p++;
|
||||
}
|
||||
/* only accept blank lines before 'version=' line */
|
||||
if (p == end || *p != '\n') {
|
||||
return 0;
|
||||
}
|
||||
p++;
|
||||
continue;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#define CHECK_CID 1
|
||||
|
|
Loading…
Reference in New Issue