On Mon, 13.01.14 21:19, Andreas Fuchs (andu...@gmail.com) wrote: > For gudev -> gudevdevice: > - Add support for get_sysfs_attr_keys() > - Add support for has_sysfs_attr() > > Note: Only tested against systemd-204 on Ubuntu 13.10's patch-set... > RFC1: For some reason libudev cosiders every link or file as sysfs > attribute (opposed to udevadm). Is this intended ? > RFC2: Since this is my first patch, please comment on any changes it needs > and I'll iterate. Thank you...
Hmm, so this certainly looks useful, given that the low-level libudev API supports something like this. Your patch is broken though, it got line-wrapper by your mailer? Kay, what's the deal with patches for gudev? Are you looking after this? I wonder if David is still maintaining it? > > Signed-off-by: Andreas Fuchs <andu...@gmail.com> > --- > src/gudev/gudevdevice.c | 53 > +++++++++++++++++++++++++++++++++++++++++++++++++ > src/gudev/gudevdevice.h | 3 +++ > 2 files changed, 56 insertions(+) > > diff --git a/src/gudev/gudevdevice.c b/src/gudev/gudevdevice.c > index 6c9e0f5..2c768b7 100644 > --- a/src/gudev/gudevdevice.c > +++ b/src/gudev/gudevdevice.c > @@ -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) > @@ -699,6 +703,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. > * @name: Name of the sysfs attribute. > diff --git a/src/gudev/gudevdevice.h b/src/gudev/gudevdevice.h > index 457b961..72ec180 100644 > --- a/src/gudev/gudevdevice.h > +++ b/src/gudev/gudevdevice.h > @@ -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, > _______________________________________________ > systemd-devel mailing list > systemd-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/systemd-devel Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel