[systemd-devel] [PATCH/RFC] gudev: add device::get_sysfs_attr_keys() and device::has_sysfs_attr()
Andreas Fuchs
anduchs at gmail.com
Sat Feb 22 02:55:27 PST 2014
Ok, I'll try my luck with git send-email then. I was unaware of this
gmail-oddity. Sorry about that.
Any ideas, why lubudev consideres so many things as attributes ?
Cheers,
Andreas
2014-02-14 1:07 GMT+01:00 Lennart Poettering <lennart at poettering.net>:
> On Mon, 13.01.14 21:19, Andreas Fuchs (anduchs at 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 <anduchs at 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 at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>
>
>
> Lennart
>
> --
> Lennart Poettering, Red Hat
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20140222/2073ee38/attachment.html>
More information about the systemd-devel
mailing list