summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-06-21 19:01:24 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-11-23 22:40:47 +0200
commit7bfc3353e1b3548f1aeef66ce04136ae1755c13c (patch)
treefd2127980da3eb197530761e6dcbd53718c0681b
parent0cfd33f0c1101b4a93c503cbda4274786a6d41e2 (diff)
downloadlibgudev-wip/muktupavels/current-tags.tar.gz
device: cache tags on device creationwip/muktupavels/current-tags
GUdevDevice contains snapshot of information when device object was created. Cache tags on device creation to follow this rule.
-rw-r--r--gudev/gudevdevice.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/gudev/gudevdevice.c b/gudev/gudevdevice.c
index 25af9d1..9971790 100644
--- a/gudev/gudevdevice.c
+++ b/gudev/gudevdevice.c
@@ -122,6 +122,21 @@ g_udev_device_init (GUdevDevice *device)
}
static void
+fetch_get_tags (GUdevDevice *device)
+{
+ struct udev_list_entry *l;
+ GPtrArray *p;
+
+ p = g_ptr_array_new ();
+ for (l = udev_device_get_tags_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->tags = (gchar **) g_ptr_array_free (p, FALSE);
+}
+
+static void
fetch_current_tags (GUdevDevice *device)
{
struct udev_list_entry *l;
@@ -144,6 +159,7 @@ _g_udev_device_new (struct udev_device *udevice)
device = G_UDEV_DEVICE (g_object_new (G_UDEV_TYPE_DEVICE, NULL));
device->priv->udevice = udev_device_ref (udevice);
+ fetch_get_tags (device);
fetch_current_tags (device);
return device;
@@ -1204,23 +1220,8 @@ g_udev_device_get_sysfs_attr_as_strv_uncached (GUdevDevice *device,
const gchar* const *
g_udev_device_get_tags (GUdevDevice *device)
{
- struct udev_list_entry *l;
- GPtrArray *p;
-
g_return_val_if_fail (G_UDEV_IS_DEVICE (device), NULL);
- if (device->priv->tags != NULL)
- goto out;
-
- p = g_ptr_array_new ();
- for (l = udev_device_get_tags_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->tags = (gchar **) g_ptr_array_free (p, FALSE);
-
- out:
return (const gchar * const *) device->priv->tags;
}