]> git.ozlabs.org Git - petitboot/blobdiff - discover/device-handler.c
discover/resource: create_url_resource should take ownership of url
[petitboot] / discover / device-handler.c
index f9d2dbf5d53f1450d56c0c201738567cfb9b9166..251c517f884aaa0c2212898b2e71dd3ad37a8e9e 100644 (file)
@@ -103,6 +103,12 @@ static int device_match_id(struct discover_device *dev, const char *id)
        return !strcmp(dev->device->id, id);
 }
 
+static int device_match_serial(struct discover_device *dev, const char *serial)
+{
+       const char *val = discover_device_get_param(dev, "ID_SERIAL");
+       return val && !strcmp(val, serial);
+}
+
 static struct discover_device *device_lookup(
                struct device_handler *device_handler,
                int (match_fn)(struct discover_device *, const char *),
@@ -154,6 +160,13 @@ struct discover_device *device_lookup_by_id(
        return device_lookup(device_handler, device_match_id, id);
 }
 
+struct discover_device *device_lookup_by_serial(
+               struct device_handler *device_handler,
+               const char *serial)
+{
+       return device_lookup(device_handler, device_match_serial, serial);
+}
+
 void device_handler_destroy(struct device_handler *handler)
 {
        talloc_free(handler);
@@ -327,6 +340,8 @@ static int default_timeout(void *arg)
                return 0;
        }
 
+       handler->timeout_waiter = NULL;
+
        pb_log("Timeout expired, booting default option %s\n", opt->option->id);
 
        boot(handler, handler->default_boot_option, NULL,
@@ -372,8 +387,14 @@ static void set_default(struct device_handler *handler,
                cur_prio = default_option_priority(
                                        handler->default_boot_option);
 
-               if (new_prio >= cur_prio)
-                       return;
+               if (new_prio < cur_prio) {
+                       handler->default_boot_option = opt;
+                       /* extend the timeout a little, so the user sees some
+                        * indication of the change */
+                       handler->sec_to_boot += 2;
+               }
+
+               return;
        }
 
        handler->sec_to_boot = config_get()->autoboot_timeout_sec;