Hi,
> +void modify_boot_device_path(int32_t bootindex, DeviceState *dev,
> + const char *suffix)
> +{
> + FWBootEntry *node, *i;
> +
> + assert(dev != NULL || suffix != NULL);
> +
> + QTAILQ_FOREACH(i, &fw_boot_order, link) {
> + if (i->bootindex == bootindex) {
> + qerror_report(ERROR_CLASS_GENERIC_ERROR,
> + "The bootindex %d has already been used", bootindex);
> + return;
> + }
> + /* delete the same original dev */
> + if (i->dev->id && !strcmp(i->dev->id, dev->id)) {
> + QTAILQ_REMOVE(&fw_boot_order, i, link);
Ok ...
> + g_free(i->suffix);
> + g_free(i);
... but you should free the old entry later ...
> +
> + break;
> + }
> + }
> +
> + if (bootindex >= 0) {
> + node = g_malloc0(sizeof(FWBootEntry));
> + node->bootindex = bootindex;
> + node->suffix = g_strdup(suffix);
... because you can just copy the suffix from the old entry here,
instead of expecting the caller pass it in.
cheers,
Gerd