return 0;
}
+virStoragePoolSourcePtr
+virStoragePoolSourceListNewSource(virConnectPtr conn,
+ virStoragePoolSourceListPtr list)
+{
+ virStoragePoolSourcePtr source;
+
+ if (VIR_ALLOC(source) < 0) {
+ virReportOOMError(conn);
+ return NULL;
+ }
+
+ if (VIR_REALLOC_N(list->sources, list->nsources+1) < 0) {
+ virReportOOMError(conn);
+ return NULL;
+ }
+
+ source = &list->sources[list->nsources++];
+ memset(source, 0, sizeof(*source));
+
+ return source;
+}
+
char *virStoragePoolSourceListFormat(virConnectPtr conn,
virStoragePoolSourceListPtr def)
{
void virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
virStoragePoolObjPtr pool);
+virStoragePoolSourcePtr
+virStoragePoolSourceListNewSource(virConnectPtr conn,
+ virStoragePoolSourceListPtr list);
char *virStoragePoolSourceListFormat(virConnectPtr conn,
virStoragePoolSourceListPtr def);
virStoragePoolObjRemove;
virStoragePoolObjSaveDef;
virStoragePoolSourceFree;
+virStoragePoolSourceListNewSource;
virStoragePoolSourceListFormat;
virStorageVolDefFindByKey;
virStorageVolDefFindByName;
typedef struct _virNetfsDiscoverState virNetfsDiscoverState;
static int
-virStorageBackendFileSystemNetFindPoolSourcesFunc(virConnectPtr conn ATTRIBUTE_UNUSED,
+virStorageBackendFileSystemNetFindPoolSourcesFunc(virConnectPtr conn,
virStoragePoolObjPtr pool ATTRIBUTE_UNUSED,
char **const groups,
void *data)
{
virNetfsDiscoverState *state = data;
const char *name, *path;
- virStoragePoolSource *src;
+ virStoragePoolSource *src = NULL;
+ int ret = -1;
path = groups[0];
if (name == NULL) {
virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
_("invalid netfs path (no /): %s"), path);
- return -1;
+ goto cleanup;
}
name += 1;
if (*name == '\0') {
virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
_("invalid netfs path (ends in /): %s"), path);
- return -1;
+ goto cleanup;
}
- if (VIR_REALLOC_N(state->list.sources, state->list.nsources+1) < 0) {
- virReportOOMError(conn);
- return -1;
- }
- memset(state->list.sources + state->list.nsources, 0, sizeof(*state->list.sources));
+ if (!(src = virStoragePoolSourceListNewSource(conn, &state->list)))
+ goto cleanup;
- src = state->list.sources + state->list.nsources++;
if (!(src->host.name = strdup(state->host)) ||
- !(src->dir = strdup(path)))
- return -1;
+ !(src->dir = strdup(path))) {
+ virReportOOMError(conn);
+ goto cleanup;
+ }
src->format = VIR_STORAGE_POOL_NETFS_NFS;
- return 0;
+ src = NULL;
+ ret = 0;
+cleanup:
+ if (src)
+ virStoragePoolSourceFree(src);
+ return ret;
}
+
static char *
virStorageBackendFileSystemNetFindPoolSources(virConnectPtr conn,
const char *srcSpec,
}
if (thisSource == NULL) {
- if (VIR_REALLOC_N(sourceList->sources, sourceList->nsources + 1) != 0) {
- virReportOOMError(conn);
+ if (!(thisSource = virStoragePoolSourceListNewSource(conn,
+ sourceList)))
goto err_no_memory;
- }
-
- thisSource = &sourceList->sources[sourceList->nsources];
- sourceList->nsources++;
- memset(thisSource, 0, sizeof(*thisSource));
thisSource->name = vgname;
}
else