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