add some new functions for direct udev lookups on disk devices

SVN revision: 59412
This commit is contained in:
Mike Blumenkrantz 2011-05-15 20:50:26 +00:00
parent 30847d0bdc
commit 374df30b47
4 changed files with 133 additions and 1 deletions

View 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

View 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

View 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

View File

@ -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;
}