提交 69267756 编写于 作者: J John Ferlan

logical: Use VIR_APPEND_ELEMENT instead of VIR_REALLOC_N

Rather than preallocating a set number of elements, then walking through
the extents and adjusting the specific element in place, use the APPEND
macros to handle that chore.
Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
上级 0d0e41a7
...@@ -50,7 +50,7 @@ struct _virStorageVolSourceExtent { ...@@ -50,7 +50,7 @@ struct _virStorageVolSourceExtent {
typedef struct _virStorageVolSource virStorageVolSource; typedef struct _virStorageVolSource virStorageVolSource;
typedef virStorageVolSource *virStorageVolSourcePtr; typedef virStorageVolSource *virStorageVolSourcePtr;
struct _virStorageVolSource { struct _virStorageVolSource {
int nextent; size_t nextent;
virStorageVolSourceExtentPtr extents; virStorageVolSourceExtentPtr extents;
int partType; /* virStorageVolTypeDisk, only used by disk int partType; /* virStorageVolTypeDisk, only used by disk
......
...@@ -84,6 +84,9 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol, ...@@ -84,6 +84,9 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol,
size_t i; size_t i;
int err, nvars; int err, nvars;
unsigned long long offset, size, length; unsigned long long offset, size, length;
virStorageVolSourceExtent extent;
memset(&extent, 0, sizeof(extent));
nextents = 1; nextents = 1;
if (STREQ(groups[4], VIR_STORAGE_VOL_LOGICAL_SEGTYPE_STRIPED)) { if (STREQ(groups[4], VIR_STORAGE_VOL_LOGICAL_SEGTYPE_STRIPED)) {
...@@ -94,11 +97,6 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol, ...@@ -94,11 +97,6 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol,
} }
} }
/* Allocate and fill in extents information */
if (VIR_REALLOC_N(vol->source.extents,
vol->source.nextent + nextents) < 0)
goto cleanup;
if (virStrToLong_ull(groups[6], NULL, 10, &length) < 0) { if (virStrToLong_ull(groups[6], NULL, 10, &length) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("malformed volume extent length value")); "%s", _("malformed volume extent length value"));
...@@ -162,7 +160,7 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol, ...@@ -162,7 +160,7 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol,
len = vars[j].rm_eo - vars[j].rm_so; len = vars[j].rm_eo - vars[j].rm_so;
p[vars[j].rm_eo] = '\0'; p[vars[j].rm_eo] = '\0';
if (VIR_STRNDUP(vol->source.extents[vol->source.nextent].path, if (VIR_STRNDUP(extent.path,
p + vars[j].rm_so, len) < 0) p + vars[j].rm_so, len) < 0)
goto cleanup; goto cleanup;
...@@ -176,12 +174,13 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol, ...@@ -176,12 +174,13 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol,
VIR_FREE(offset_str); VIR_FREE(offset_str);
goto cleanup; goto cleanup;
} }
VIR_FREE(offset_str); VIR_FREE(offset_str);
extent.start = offset * size;
extent.end = (offset * size) + length;
vol->source.extents[vol->source.nextent].start = offset * size; if (VIR_APPEND_ELEMENT(vol->source.extents, vol->source.nextent,
vol->source.extents[vol->source.nextent].end = (offset * size) + length; extent) < 0)
vol->source.nextent++; goto cleanup;
} }
ret = 0; ret = 0;
...@@ -190,6 +189,7 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol, ...@@ -190,6 +189,7 @@ virStorageBackendLogicalParseVolExtents(virStorageVolDefPtr vol,
VIR_FREE(regex); VIR_FREE(regex);
VIR_FREE(reg); VIR_FREE(reg);
VIR_FREE(vars); VIR_FREE(vars);
VIR_FREE(extent.path);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册