Hi, Gerd
> -----Original Message-----
> From: Gerd Hoffmann [mailto:[email protected]]
> Sent: Friday, July 25, 2014 5:46 PM
>
> 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.
>
Okay, agreed.
But we should also think about the situation which a device don't have
old entry in global fw_boot_order list. So we can do like this:
if (suffix) {
node->suffix = g_strdup(suffix);
} else if (has_old_entry) {
node->suffix = g_strdup(old_entry->suffix);
} else {
node->suffix = NULL;
}
Best regards,
-Gonglei