[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 15/32] blockdev: Move vmdk probe to its own file
From: |
Colin Lord |
Subject: |
[Qemu-devel] [PATCH v3 15/32] blockdev: Move vmdk probe to its own file |
Date: |
Tue, 5 Jul 2016 11:24:15 -0400 |
Isolates vmdk probe as part of the modularization process.
Signed-off-by: Colin Lord <address@hidden>
---
block/Makefile.objs | 2 +-
block/probe/vmdk.c | 60 +++++++++++++++++++++++++++++++++++++++++++++
block/vmdk.c | 60 ++-------------------------------------------
include/block/driver/vmdk.h | 7 ++++++
include/block/probe.h | 1 +
5 files changed, 71 insertions(+), 59 deletions(-)
create mode 100644 block/probe/vmdk.c
create mode 100644 include/block/driver/vmdk.h
diff --git a/block/Makefile.objs b/block/Makefile.objs
index 89e0da4..4cecf68 100644
--- a/block/Makefile.objs
+++ b/block/Makefile.objs
@@ -26,7 +26,7 @@ block-obj-y += write-threshold.o
block-obj-y += crypto.o
block-obj-y += probe/bochs.o probe/cloop.o probe/luks.o probe/dmg.o
block-obj-y += probe/parallels.o probe/qcow.o probe/qcow2.o probe/qed.o
-block-obj-y += probe/raw.o probe/vdi.o probe/vhdx.o
+block-obj-y += probe/raw.o probe/vdi.o probe/vhdx.o probe/vmdk.o
common-obj-y += stream.o
common-obj-y += commit.o
diff --git a/block/probe/vmdk.c b/block/probe/vmdk.c
new file mode 100644
index 0000000..cb9bd3d
--- /dev/null
+++ b/block/probe/vmdk.c
@@ -0,0 +1,60 @@
+#include "qemu/osdep.h"
+#include "block/block_int.h"
+#include "block/probe.h"
+#include "block/driver/vmdk.h"
+
+int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
+{
+ uint32_t magic;
+
+ if (buf_size < 4) {
+ return 0;
+ }
+ magic = be32_to_cpu(*(uint32_t *)buf);
+ if (magic == VMDK3_MAGIC ||
+ magic == VMDK4_MAGIC) {
+ return 100;
+ } 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;
+ }
+}
diff --git a/block/vmdk.c b/block/vmdk.c
index 2901692..d22db95 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -26,6 +26,8 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "block/block_int.h"
+#include "block/probe.h"
+#include "block/driver/vmdk.h"
#include "sysemu/block-backend.h"
#include "qapi/qmp/qerror.h"
#include "qemu/error-report.h"
@@ -35,8 +37,6 @@
#include "qemu/cutils.h"
#include <zlib.h>
-#define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D')
-#define VMDK4_MAGIC (('K' << 24) | ('D' << 16) | ('M' << 8) | 'V')
#define VMDK4_COMPRESSION_DEFLATE 1
#define VMDK4_FLAG_NL_DETECT (1 << 0)
#define VMDK4_FLAG_RGD (1 << 1)
@@ -151,62 +151,6 @@ enum {
MARKER_FOOTER = 3,
};
-static int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename)
-{
- uint32_t magic;
-
- if (buf_size < 4) {
- return 0;
- }
- magic = be32_to_cpu(*(uint32_t *)buf);
- if (magic == VMDK3_MAGIC ||
- magic == VMDK4_MAGIC) {
- return 100;
- } 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 SECTOR_SIZE 512
#define DESC_SIZE (20 * SECTOR_SIZE) /* 20 sectors of 512 bytes each */
#define BUF_SIZE 4096
diff --git a/include/block/driver/vmdk.h b/include/block/driver/vmdk.h
new file mode 100644
index 0000000..d631468
--- /dev/null
+++ b/include/block/driver/vmdk.h
@@ -0,0 +1,7 @@
+#ifndef VMDK_H
+#define VMDK_H
+
+#define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D')
+#define VMDK4_MAGIC (('K' << 24) | ('D' << 16) | ('M' << 8) | 'V')
+
+#endif
diff --git a/include/block/probe.h b/include/block/probe.h
index e901d8f..392515d 100644
--- a/include/block/probe.h
+++ b/include/block/probe.h
@@ -13,5 +13,6 @@ int bdrv_qed_probe(const uint8_t *buf, int buf_size, const
char *filename);
int raw_probe(const uint8_t *buf, int buf_size, const char *filename);
int vdi_probe(const uint8_t *buf, int buf_size, const char *filename);
int vhdx_probe(const uint8_t *buf, int buf_size, const char *filename);
+int vmdk_probe(const uint8_t *buf, int buf_size, const char *filename);
#endif
--
2.5.5
- Re: [Qemu-devel] [PATCH v3 09/32] blockdev: Move qcow probe to its own file, (continued)
- [Qemu-devel] [PATCH v3 07/32] blockdev: Move dmg probe to its own file, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 08/32] blockdev: Move parallels probe to its own file, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 02/32] blockdev: Add dynamic generation of module_block.h, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 20/32] blockdev: Separate dmg probe from its driver, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 15/32] blockdev: Move vmdk probe to its own file,
Colin Lord <=
- [Qemu-devel] [PATCH v3 06/32] blockdev: Move luks probe to its own file, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 13/32] blockdev: Move vdi probe to its own file, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 18/32] blockdev: Separate cloop probe from its driver, Colin Lord, 2016/07/05
- [Qemu-devel] [PATCH v3 11/32] blockdev: Move qed probe to its own file, Colin Lord, 2016/07/05