chiark / gitweb /
accelerometer: add orientation property
[elogind.git] / libudev / libudev-enumerate.c
index 9694797d35c42d8aab804cd69e90192fe6f9a616..6e51726f083cd0cd8b72084d2b75876181fcc270 100644 (file)
@@ -66,7 +66,7 @@ struct udev_enumerate {
  *
  * Returns: an enumeration context
  **/
-struct udev_enumerate *udev_enumerate_new(struct udev *udev)
+UDEV_EXPORT struct udev_enumerate *udev_enumerate_new(struct udev *udev)
 {
        struct udev_enumerate *udev_enumerate;
 
@@ -94,7 +94,7 @@ struct udev_enumerate *udev_enumerate_new(struct udev *udev)
  *
  * Returns: the passed enumeration context
  **/
-struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate)
 {
        if (udev_enumerate == NULL)
                return NULL;
@@ -109,7 +109,7 @@ struct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate)
  * Drop a reference of an enumeration context. If the refcount reaches zero,
  * all resources of the enumeration context will be released.
  **/
-void udev_enumerate_unref(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT void udev_enumerate_unref(struct udev_enumerate *udev_enumerate)
 {
        unsigned int i;
 
@@ -138,7 +138,7 @@ void udev_enumerate_unref(struct udev_enumerate *udev_enumerate)
  *
  * Returns: the udev library context.
  */
-struct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT struct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate)
 {
        if (udev_enumerate == NULL)
                return NULL;
@@ -247,7 +247,7 @@ static size_t devices_delay_later(struct udev *udev, const char *syspath)
  *
  * Returns: the first entry of the sorted list of device paths.
  */
-struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate)
 {
        if (udev_enumerate == NULL)
                return NULL;
@@ -274,8 +274,7 @@ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *ude
                        /* skip to be delayed devices, and add them to the end of the list */
                        if (devices_delay_end(udev_enumerate->udev, entry->syspath)) {
                                syspath_add(udev_enumerate, entry->syspath);
-                               /* need to update prev here for the case realloc() gives
-                                  a different address */
+                               /* need to update prev here for the case realloc() gives a different address */
                                prev = &udev_enumerate->devices[i];
                                continue;
                        }
@@ -296,24 +295,24 @@ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *ude
                            strncmp(entry->syspath, move_later->syspath, move_later_prefix) != 0) {
 
                                udev_list_entry_add(udev_enumerate->udev, &udev_enumerate->devices_list,
-                                           move_later->syspath, NULL, 0, 0);
+                                           move_later->syspath, NULL, 0);
                                move_later = NULL;
                        }
 
                        udev_list_entry_add(udev_enumerate->udev, &udev_enumerate->devices_list,
-                                           entry->syspath, NULL, 0, 0);
+                                           entry->syspath, NULL, 0);
                }
 
                if (move_later)
                        udev_list_entry_add(udev_enumerate->udev, &udev_enumerate->devices_list,
-                                           move_later->syspath, NULL, 0, 0);
+                                           move_later->syspath, NULL, 0);
 
                /* add and cleanup delayed devices from end of list */
                for (i = max; i < udev_enumerate->devices_cur; i++) {
                        struct syspath *entry = &udev_enumerate->devices[i];
 
                        udev_list_entry_add(udev_enumerate->udev, &udev_enumerate->devices_list,
-                                           entry->syspath, NULL, 0, 0);
+                                           entry->syspath, NULL, 0);
                        free(entry->syspath);
                }
                udev_enumerate->devices_cur = max;
@@ -330,14 +329,14 @@ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *ude
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem)
+UDEV_EXPORT int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (subsystem == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                               &udev_enumerate->subsystem_match_list, subsystem, NULL, 1, 0) == NULL)
+                               &udev_enumerate->subsystem_match_list, subsystem, NULL, UDEV_LIST_UNIQUE) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -349,14 +348,14 @@ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, co
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem)
+UDEV_EXPORT int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (subsystem == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                               &udev_enumerate->subsystem_nomatch_list, subsystem, NULL, 1, 0) == NULL)
+                               &udev_enumerate->subsystem_nomatch_list, subsystem, NULL, UDEV_LIST_UNIQUE) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -369,14 +368,14 @@ int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate,
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value)
+UDEV_EXPORT int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (sysattr == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                          &udev_enumerate->sysattr_match_list, sysattr, value, 0, 0) == NULL)
+                               &udev_enumerate->sysattr_match_list, sysattr, value, 0) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -389,14 +388,14 @@ int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, cons
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value)
+UDEV_EXPORT int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (sysattr == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                          &udev_enumerate->sysattr_nomatch_list, sysattr, value, 0, 0) == NULL)
+                          &udev_enumerate->sysattr_nomatch_list, sysattr, value, 0) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -429,14 +428,14 @@ exit:
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value)
+UDEV_EXPORT int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (property == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                               &udev_enumerate->properties_match_list, property, value, 0, 0) == NULL)
+                               &udev_enumerate->properties_match_list, property, value, 0) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -448,14 +447,14 @@ int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, con
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag)
+UDEV_EXPORT int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (tag == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                               &udev_enumerate->tags_match_list, tag, NULL, 1, 0) == NULL)
+                               &udev_enumerate->tags_match_list, tag, NULL, UDEV_LIST_UNIQUE) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -478,7 +477,7 @@ int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const ch
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerate)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
@@ -493,14 +492,14 @@ int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerat
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname)
+UDEV_EXPORT int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname)
 {
        if (udev_enumerate == NULL)
                return -EINVAL;
        if (sysname == NULL)
                return 0;
        if (udev_list_entry_add(udev_enumerate_get_udev(udev_enumerate),
-                               &udev_enumerate->sysname_match_list, sysname, NULL, 1, 0) == NULL)
+                               &udev_enumerate->sysname_match_list, sysname, NULL, UDEV_LIST_UNIQUE) == NULL)
                return -ENOMEM;
        return 0;
 }
@@ -711,7 +710,7 @@ static int scan_dir(struct udev_enumerate *udev_enumerate, const char *basedir,
  *
  * Returns: 0 on success, otherwise a negative error value.
  */
-int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char *syspath)
+UDEV_EXPORT int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char *syspath)
 {
        struct udev_device *udev_device;
 
@@ -734,7 +733,7 @@ int udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char
  *
  * Returns: 0 on success, otherwise a negative error value.
  **/
-int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate)
 {
        struct udev *udev = udev_enumerate_get_udev(udev_enumerate);
        char base[UTIL_PATH_SIZE];
@@ -752,7 +751,7 @@ int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate)
                        struct dirent *dent;
                        char path[UTIL_PATH_SIZE];
 
-                       util_strscpyl(path, sizeof(path), udev_get_dev_path(udev), "/.udev/tags/",
+                       util_strscpyl(path, sizeof(path), udev_get_run_path(udev), "/tags/",
                                      udev_list_entry_get_name(list_entry), NULL);
                        dir = opendir(path);
                        if (dir == NULL)
@@ -766,7 +765,18 @@ int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate)
                                dev = udev_device_new_from_id_filename(udev_enumerate->udev, dent->d_name);
                                if (dev == NULL)
                                        continue;
+
+                               if (!match_subsystem(udev_enumerate, udev_device_get_subsystem(dev)))
+                                       goto nomatch;
+                               if (!match_sysname(udev_enumerate, udev_device_get_sysname(dev)))
+                                       goto nomatch;
+                               if (!match_property(udev_enumerate, dev))
+                                       goto nomatch;
+                               if (!match_sysattr(udev_enumerate, dev))
+                                       goto nomatch;
+
                                syspath_add(udev_enumerate, udev_device_get_syspath(dev));
+nomatch:
                                udev_device_unref(dev);
                        }
                        closedir(dir);
@@ -794,7 +804,7 @@ int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate)
  *
  * Returns: 0 on success, otherwise a negative error value.
  **/
-int udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate)
+UDEV_EXPORT int udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate)
 {
        struct udev *udev = udev_enumerate_get_udev(udev_enumerate);
        char base[UTIL_PATH_SIZE];