summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/file.c
diff options
context:
space:
mode:
authorJan Synacek <jsynacek@redhat.com>2013-07-02 13:47:00 +0200
committerJan Synacek <jsynacek@redhat.com>2013-07-02 14:57:03 +0200
commiteb40a7a4be8c04b527fb712106c345b770babe36 (patch)
tree6de5c6250e39142aaed2e123bfd64c0f85a4aa06 /src/logicalfile/file.c
parent7dc3232a1e2206e99272cb1dad2c8c71c11e42b3 (diff)
downloadopenlmi-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.c42
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));