diff options
author | Jan Synacek <jsynacek@redhat.com> | 2013-07-02 13:47:00 +0200 |
---|---|---|
committer | Jan Synacek <jsynacek@redhat.com> | 2013-07-02 14:57:03 +0200 |
commit | eb40a7a4be8c04b527fb712106c345b770babe36 (patch) | |
tree | 6de5c6250e39142aaed2e123bfd64c0f85a4aa06 /src/logicalfile/file.c | |
parent | 7dc3232a1e2206e99272cb1dad2c8c71c11e42b3 (diff) | |
download | openlmi-providers-eb40a7a4be8c04b527fb712106c345b770babe36.tar.gz openlmi-providers-eb40a7a4be8c04b527fb712106c345b770babe36.tar.xz openlmi-providers-eb40a7a4be8c04b527fb712106c345b770babe36.zip |
LogicalFile: use udev to fill info about the filesystem
Diffstat (limited to 'src/logicalfile/file.c')
-rw-r--r-- | src/logicalfile/file.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/logicalfile/file.c b/src/logicalfile/file.c index c17f0fc..64b7d52 100644 --- a/src/logicalfile/file.c +++ b/src/logicalfile/file.c @@ -95,6 +95,48 @@ int get_class_from_path(const char *path, char *fileclass) return rc; } +int get_fsname_from_stat(const struct stat *sb, char **fname) +{ + static struct udev *udev_ctx = NULL; + struct udev_device *udev_dev; + const char *dev_name; + int rc = 0; + + if (!udev_ctx) { + udev_ctx = udev_new(); + if (!udev_ctx) { + rc = -1; + goto err; + } + } + + char dev_id[16]; + snprintf(dev_id, 16, "b%u:%u", major(sb->st_dev), minor(sb->st_dev)); + + udev_dev = udev_device_new_from_device_id(udev_ctx, dev_id); + if ((dev_name = udev_device_get_property_value(udev_dev, "ID_FS_UUID_ENC"))) { + rc = asprintf(fname, "UUID=%s", dev_name); + } else if ((dev_name = udev_device_get_property_value(udev_dev, "DEVNAME"))) { + rc = asprintf(fname, "DEVICE=%s", dev_name); + } else { + rc = asprintf(fname, "Unknown"); + } +err: + return rc; +} + +int get_fsname_from_path(const char *path, char **fsname) +{ + struct stat sb; + int rc; + + rc = lstat(path, &sb); + if (rc == 0) { + rc = get_fsname_from_stat(&sb, fsname); + } + return rc; +} + void _dump_objectpath(const CMPIObjectPath *o) { printf("OP: %s\n", CMGetCharsPtr(o->ft->toString(o, NULL), NULL)); |