gudev: add device::get_sysfs_attr_keys and device::has_sysfs_attr
For gudev -> gudevdevice: - Add support for get_sysfs_attr_keys() - Add support for has_sysfs_attr()
This commit is contained in:
committed by
Kay Sievers
parent
733f7a2c69
commit
fcc70b92f4
@@ -59,6 +59,8 @@
|
||||
* g_udev_device_get_property_as_strv().
|
||||
*
|
||||
* To access sysfs attributes for the device, use
|
||||
* g_udev_device_get_sysfs_attr_keys(),
|
||||
* g_udev_device_has_sysfs_attr(),
|
||||
* g_udev_device_get_sysfs_attr(),
|
||||
* g_udev_device_get_sysfs_attr_as_int(),
|
||||
* g_udev_device_get_sysfs_attr_as_uint64(),
|
||||
@@ -84,6 +86,7 @@ struct _GUdevDevicePrivate
|
||||
/* computed ondemand and cached */
|
||||
gchar **device_file_symlinks;
|
||||
gchar **property_keys;
|
||||
gchar **sysfs_attr_keys;
|
||||
gchar **tags;
|
||||
GHashTable *prop_strvs;
|
||||
GHashTable *sysfs_attr_strvs;
|
||||
@@ -98,6 +101,7 @@ g_udev_device_finalize (GObject *object)
|
||||
|
||||
g_strfreev (device->priv->device_file_symlinks);
|
||||
g_strfreev (device->priv->property_keys);
|
||||
g_strfreev (device->priv->sysfs_attr_keys);
|
||||
g_strfreev (device->priv->tags);
|
||||
|
||||
if (device->priv->udevice != NULL)
|
||||
@@ -698,6 +702,55 @@ out:
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* g_udev_device_get_sysfs_attr_keys:
|
||||
* @device: A #GUdevDevice.
|
||||
*
|
||||
* Gets all keys for sysfs attributes on @device.
|
||||
*
|
||||
* Returns: (transfer none) (array zero-terminated=1) (element-type utf8): A %NULL terminated string array of sysfs attribute keys. This array is owned by @device and should not be freed by the caller.
|
||||
*/
|
||||
const gchar * const *
|
||||
g_udev_device_get_sysfs_attr_keys (GUdevDevice *device)
|
||||
{
|
||||
struct udev_list_entry *l;
|
||||
GPtrArray *p;
|
||||
|
||||
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL);
|
||||
|
||||
if (device->priv->sysfs_attr_keys != NULL)
|
||||
goto out;
|
||||
|
||||
p = g_ptr_array_new ();
|
||||
for (l = udev_device_get_sysattr_list_entry (device->priv->udevice); l != NULL; l = udev_list_entry_get_next (l))
|
||||
{
|
||||
g_ptr_array_add (p, g_strdup (udev_list_entry_get_name (l)));
|
||||
}
|
||||
g_ptr_array_add (p, NULL);
|
||||
device->priv->sysfs_attr_keys = (gchar **) g_ptr_array_free (p, FALSE);
|
||||
|
||||
out:
|
||||
return (const gchar * const *) device->priv->sysfs_attr_keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_udev_device_has_sysfs_attr:
|
||||
* @device: A #GUdevDevice.
|
||||
* @key: Name of sysfs attribute.
|
||||
*
|
||||
* Check if a the sysfs attribute with the given key exists.
|
||||
*
|
||||
* Returns: %TRUE only if the value for @key exist.
|
||||
*/
|
||||
gboolean
|
||||
g_udev_device_has_sysfs_attr (GUdevDevice *device,
|
||||
const gchar *key)
|
||||
{
|
||||
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), FALSE);
|
||||
g_return_val_if_fail (key != NULL, FALSE);
|
||||
return udev_device_get_sysattr_value (device->priv->udevice, key) != NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_udev_device_get_sysfs_attr:
|
||||
* @device: A #GUdevDevice.
|
||||
|
||||
@@ -108,6 +108,9 @@ gboolean g_udev_device_get_property_as_boolean (GUdevDevice *devic
|
||||
const gchar* const *g_udev_device_get_property_as_strv (GUdevDevice *device,
|
||||
const gchar *key);
|
||||
|
||||
const gchar* const *g_udev_device_get_sysfs_attr_keys (GUdevDevice *device);
|
||||
gboolean g_udev_device_has_sysfs_attr (GUdevDevice *device,
|
||||
const gchar *key);
|
||||
const gchar *g_udev_device_get_sysfs_attr (GUdevDevice *device,
|
||||
const gchar *name);
|
||||
gint g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device,
|
||||
|
||||
Reference in New Issue
Block a user