add some new functions for direct udev lookups on disk devices
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Sun, 15 May 2011 20:50:26 +0000 (20:50 +0000)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Sun, 15 May 2011 20:50:26 +0000 (20:50 +0000)
SVN revision: 59412

legacy/eeze/ChangeLog
legacy/eeze/src/lib/Eeze_Disk.h
legacy/eeze/src/lib/Makefile.am
legacy/eeze/src/lib/eeze_disk_udev.c [new file with mode: 0644]

index 08c42e2..135860f 100644 (file)
@@ -1,3 +1,10 @@
+2011-05-15  Mike Blumenkrantz (discomfitor/zmike)
++eeze_disk_udev_get_property
++eeze_disk_udev_get_sysattr
++eeze_disk_udev_walk_check_sysattr
++eeze_disk_udev_walk_get_sysattr
+New functions to perform udev lookups directly on disk devices without wasting unnecessary function calls
+
 2011-03-12  Mike Blumenkrantz (discomfitor/zmike)
 +eeze_udev_syspath_get_devname, added from patch sent by Clement Battin
 
index 836db7f..631bfa2 100644 (file)
@@ -368,6 +368,49 @@ EAPI Eina_Bool      eeze_mount_mtab_scan(void);
  */
 EAPI Eina_Bool      eeze_mount_fstab_scan(void);
 
+/**
+ * @brief Get the property value of a disk
+ *
+ * @param disk The disk
+ * @param property The property to get; full list of these is a FIXME
+ * @return A stringshared char* with the property or NULL on failure
+ */
+
+EAPI const char    *eeze_disk_udev_get_property(Eeze_Disk *disk, const char *property);
+
+/**
+ * @brief Get the sysattr value of a disk.
+ *
+ * @param disk The disk
+ * @param sysattr The sysattr to get; full list of these is a FIXME
+ * @return A stringshared char* with the sysattr or NULL on failure
+ */
+
+EAPI const char    *eeze_disk_udev_get_sysattr(Eeze_Disk *disk, const char *sysattr);
+
+/**
+ * Walks up the device chain using the device from @p disk,
+ * checking each device for @p sysattr with (optional) @p value.
+ *
+ * @param disk The disk to walk
+ * @param sysattr The attribute to find
+ * @param value OPTIONAL: The value that @p sysattr should have, or NULL
+ *
+ * @return If the sysattr (with value) is found, returns TRUE.  Else, false.
+ */
+EAPI Eina_Bool      eeze_disk_udev_walk_check_sysattr(Eeze_Disk *disk, const char *sysattr, const char *value);
+
+/**
+ * @brief Walks up the device chain of @p disk
+ * checking each device for @p sysattr and returns the value if found.
+ *
+ * @param disk The disk
+ * @param sysattr The attribute to find
+ *
+ * @return The stringshared value of @p sysattr if found, or NULL
+ */
+EAPI const char    *eeze_disk_udev_walk_get_sysattr(Eeze_Disk *disk, const char *sysattr);
+
 #ifdef __cplusplus
 }
 #endif
index d3e3beb..f742564 100644 (file)
@@ -4,7 +4,7 @@ AM_CPPFLAGS = @EEZE_CFLAGS@
 
 if HAVE_EEZE_MOUNT
   AM_CFLAGS = @EEZE_CFLAGS@ @LIBMOUNT_CFLAGS@ @ECORE_FILE_CFLAGS@
-  MOUNT_FILES = eeze_disk.c eeze_disk_mount.c
+  MOUNT_FILES = eeze_disk.c eeze_disk_udev.c eeze_disk_mount.c
 if OLD_LIBMOUNT
   MOUNT_FILES += eeze_disk_libmount_old.c
 else
diff --git a/legacy/eeze/src/lib/eeze_disk_udev.c b/legacy/eeze/src/lib/eeze_disk_udev.c
new file mode 100644 (file)
index 0000000..89bcbf7
--- /dev/null
@@ -0,0 +1,82 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <Ecore.h>
+#include <Eeze.h>
+#include <Eeze_Disk.h>
+
+#include "eeze_udev_private.h"
+#include "eeze_disk_private.h"
+
+EAPI const char *
+eeze_disk_udev_get_property(Eeze_Disk *disk, const char *property)
+{
+   const char *ret;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(disk, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(property, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(*property, NULL);
+   
+   ret = udev_device_get_property_value(disk->device, property);
+   return eina_stringshare_add(ret);
+}
+
+EAPI const char *
+eeze_disk_udev_get_sysattr(Eeze_Disk *disk, const char *sysattr)
+{
+   const char *ret;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(disk, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(sysattr, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(*sysattr, NULL);
+
+   ret = udev_device_get_sysattr_value(disk->device, sysattr);
+   return eina_stringshare_add(ret);
+}
+
+EAPI Eina_Bool
+eeze_disk_udev_walk_check_sysattr(Eeze_Disk *disk,
+                                  const char *sysattr,
+                                  const char *value)
+{
+
+   _udev_device *child, *parent;
+   const char *test = NULL;
+   
+   EINA_SAFETY_ON_NULL_RETURN_VAL(disk, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(sysattr, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(*sysattr, EINA_FALSE);
+
+   for (parent = disk->device; parent;
+        child = parent, parent = udev_device_get_parent(child))
+     {
+        if (!(test = udev_device_get_sysattr_value(parent, sysattr)))
+          continue;
+        if ((value && (!strcmp(test, value))) || (!value))
+          {
+             return EINA_TRUE;
+             break;
+          }
+     }
+   return EINA_FALSE;
+}
+
+EAPI const char *
+eeze_disk_udev_walk_get_sysattr(Eeze_Disk *disk,
+                                  const char *sysattr)
+{
+
+   _udev_device *child, *parent;
+   const char *test = NULL;
+   
+   EINA_SAFETY_ON_NULL_RETURN_VAL(disk, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(sysattr, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(*sysattr, NULL);
+
+   for (parent = disk->device; parent;
+        child = parent, parent = udev_device_get_parent(child))
+     {
+        test = udev_device_get_sysattr_value(parent, sysattr);
+        if (test) return eina_stringshare_add(test);
+     }
+   return EINA_FALSE;
+}