+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
*/
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
--- /dev/null
+#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;
+}