X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=lib%2Flibzfs%2Flibzfs_util.c;h=5618a5cd307f7c97017aa617a394ccd61ef9db27;hb=7eebaff409d969394dccb9b12e30aef466cc04b2;hp=3983f5c01003033cd3725b733017bbb5a6e2d4f6;hpb=821b683436423593a1f3ee597f40a61bd4569bdd;p=zfs.git diff --git a/lib/libzfs/libzfs_util.c b/lib/libzfs/libzfs_util.c index 3983f5c..5618a5c 100644 --- a/lib/libzfs/libzfs_util.c +++ b/lib/libzfs/libzfs_util.c @@ -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// */ 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); } /*