chiark / gitweb /
builtin: firmware - move 'firmware' tool to builtins
[elogind.git] / udev / udev-builtin-kmod.c
index 8e7a50a02046e4978ac159c7a63567a298054d77..e6c4d95109f365076c35175f57d8252c2c0a2024 100644 (file)
@@ -321,16 +321,22 @@ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool te
        struct udev *udev = udev_device_get_udev(dev);
        int i;
 
-       if (!ctx)
-               return EXIT_FAILURE;
+       if (!ctx) {
+               ctx = kmod_new(NULL, NULL);
+               if (!ctx)
+                       return -ENOMEM;
 
-       if (argc < 3) {
-               err(udev, "missing command + argument\n");
+               info(udev, "load module index\n");
+               kmod_load_resources(ctx);
+       }
+
+       if (argc < 3 || strcmp(argv[1], "load")) {
+               err(udev, "expect: %s load <module>\n", argv[0]);
                return EXIT_FAILURE;
        }
 
        for (i = 2; argv[i]; i++) {
-               info(udev, "%s '%s'\n", argv[1], argv[i]);
+               info(udev, "execute '%s' '%s'\n", argv[1], argv[i]);
                insmod(ctx, argv[i], NULL);
        }
 
@@ -339,12 +345,15 @@ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool te
 
 static int builtin_kmod_init(struct udev *udev)
 {
-       kmod_unref(ctx);
+       if (ctx)
+               return 0;
+
        ctx = kmod_new(NULL, NULL);
        if (!ctx)
                return -ENOMEM;
 
        info(udev, "load module index\n");
+       kmod_load_resources(ctx);
        return 0;
 }