Am 02.10.2013 21:02, schrieb Michael Tokarev: > How about this: > > diff --git a/migration.c b/migration.c > index b4f8462..6066ab4 100644 > --- a/migration.c > +++ b/migration.c > @@ -146,22 +146,16 @@ uint64_t migrate_max_downtime(void) > MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error > **errp) > { > MigrationCapabilityStatusList *head = NULL; > - MigrationCapabilityStatusList *caps; > + MigrationCapabilityStatusList **capp = &head; > MigrationState *s = migrate_get_current(); > int i; > > for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) { > - if (head == NULL) { > - head = g_malloc0(sizeof(*caps)); > - caps = head; > - } else { > - caps->next = g_malloc0(sizeof(*caps)); > - caps = caps->next; > - } > - caps->value = > - g_malloc(sizeof(*caps->value)); > - caps->value->capability = i; > - caps->value->state = s->enabled_capabilities[i]; > + *capp = g_malloc0(sizeof(*head)); > + (*capp)->value = g_malloc(sizeof(*head->value)); > + (*capp)->value->capability = i; > + (*capp)->value->state = s->enabled_capabilities[i]; > + capp = &(*capp)->next; > } > > return head; > > > This is what I had in mind at the very beginnig, but only now tried > to make a patch... > > Thanks, > > /mjt > Thanks,
That's a possible solution. Paolo also sent a sketch of a similar solution. And here are two more: MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp) { MigrationCapabilityStatusList *head = NULL; MigrationState *s = migrate_get_current(); MigrationCapability i = MIGRATION_CAPABILITY_MAX; do { MigrationCapabilityStatusList *caps = g_new(MigrationCapabilityStatusList, 1); i--; caps->next = head; caps->value = g_new(MigrationCapabilityStatus, 1); caps->value->capability = i; caps->value->state = s->enabled_capabilities[i]; head = caps; } while (i > 0); return head; } MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp) { MigrationCapabilityStatusList *head = NULL; MigrationCapabilityStatusList *prev = NULL; MigrationState *s = migrate_get_current(); MigrationCapability i; for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) { MigrationCapabilityStatusList *caps = g_new(MigrationCapabilityStatusList, 1); if (prev == NULL) { head = caps; } else { prev->next = caps; prev = caps; } caps->value = g_new(MigrationCapabilityStatus, 1); caps->value->capability = i; caps->value->state = s->enabled_capabilities[i]; } return head; } Which one do we take? Any correct solution which fixes the compiler warning is fine for me (although I prefer g_new instead of g_malloc as you might have guessed). :-) Regards, Stefan