Adding grub2 mkconfig support patch
[zfs.git] / lib / libzfs / libzfs_util.c
index 3983f5c..5618a5c 100644 (file)
@@ -608,27 +608,13 @@ libzfs_print_on_error(libzfs_handle_t *hdl, boolean_t printerr)
 static int
 libzfs_module_loaded(const char *module)
 {
-       FILE *f;
-       int result = 0;
-       char name[256];
+       const char path_prefix[] = "/sys/module/";
+       char path[256];
 
-       f = fopen("/proc/modules", "r");
-       if (f == NULL)
-               return -1;
+       memcpy(path, path_prefix, sizeof(path_prefix) - 1);
+       strcpy(path + sizeof(path_prefix) - 1, module);
 
-       while (fgets(name, sizeof(name), f)) {
-               char *c = strchr(name, ' ');
-               if (!c)
-                       continue;
-               *c = 0;
-               if (strcmp(module, name) == 0) {
-                       result = 1;
-                       break;
-               }
-       }
-       fclose(f);
-
-       return result;
+       return (access(path, F_OK) == 0);
 }
 
 int
@@ -824,14 +810,26 @@ zfs_resolve_shortname(const char *name, char *path, size_t pathlen)
        char dirs[6][9] = {"by-id", "by-label", "by-path", "by-uuid", "zpool",
                           "by-vdev"};
 
+       /* /dev/ */
        (void) snprintf(path, pathlen, "%s/%s", DISK_ROOT, name);
        err = access(path, F_OK);
+       if (err == 0)
+               return (err);
+
+       /* /dev/mapper/ */
+       (void) snprintf(path, pathlen, "%s/mapper/%s", DISK_ROOT, name);
+       err = access(path, F_OK);
+       if (err == 0)
+               return (err);
+
+       /* /dev/disk/<dirs>/ */
        for (i = 0; i < 6 && err < 0; i++) {
                (void) snprintf(path, pathlen, "%s/%s/%s",
                    UDISK_ROOT, dirs[i], name);
                err = access(path, F_OK);
        }
-       return err;
+
+       return (err);
 }
 
 /*