chiark / gitweb /
libudev: list - use binary search for list lookup
[elogind.git] / libudev / libudev.c
index 6b5c5e9f8481cbf15fd5a5114628dff1861db714..165c36984e9cdabb9beadaf2eeb4672ce38c7478 100644 (file)
@@ -45,7 +45,7 @@ struct udev {
        char *rules_path;
        char *run_config_path;
        char *run_path;
-       struct udev_list_node properties_list;
+       struct udev_list properties_list;
        int log_priority;
 };
 
@@ -77,7 +77,7 @@ static void log_stderr(struct udev *udev,
  *
  * Returns: stored userdata
  **/
-void *udev_get_userdata(struct udev *udev)
+UDEV_EXPORT void *udev_get_userdata(struct udev *udev)
 {
        if (udev == NULL)
                return NULL;
@@ -91,7 +91,7 @@ void *udev_get_userdata(struct udev *udev)
  *
  * Store custom @userdata in the library context.
  **/
-void udev_set_userdata(struct udev *udev, void *userdata)
+UDEV_EXPORT void udev_set_userdata(struct udev *udev, void *userdata)
 {
        if (udev == NULL)
                return;
@@ -117,7 +117,7 @@ static char *set_value(char **s, const char *v)
  *
  * Returns: a new udev library context
  **/
-struct udev *udev_new(void)
+UDEV_EXPORT struct udev *udev_new(void)
 {
        struct udev *udev;
        const char *env;
@@ -130,14 +130,14 @@ struct udev *udev_new(void)
        udev->refcount = 1;
        udev->log_fn = log_stderr;
        udev->log_priority = LOG_ERR;
-       udev_list_init(&udev->properties_list);
+       udev_list_init(udev, &udev->properties_list, true);
 
        /* custom config file */
        env = getenv("UDEV_CONFIG_FILE");
        if (env != NULL) {
-               udev_add_property(udev, "UDEV_CONFIG_FILE", udev->dev_path);
                if (set_value(&config_file, env) == NULL)
                        goto err;
+               udev_add_property(udev, "UDEV_CONFIG_FILE", config_file);
        }
 
        /* default config file */
@@ -284,7 +284,7 @@ err:
  *
  * Returns: the passed udev library context
  **/
-struct udev *udev_ref(struct udev *udev)
+UDEV_EXPORT struct udev *udev_ref(struct udev *udev)
 {
        if (udev == NULL)
                return NULL;
@@ -300,14 +300,14 @@ struct udev *udev_ref(struct udev *udev)
  * reaches zero, the resources of the context will be released.
  *
  **/
-void udev_unref(struct udev *udev)
+UDEV_EXPORT void udev_unref(struct udev *udev)
 {
        if (udev == NULL)
                return;
        udev->refcount--;
        if (udev->refcount > 0)
                return;
-       udev_list_cleanup_entries(udev, &udev->properties_list);
+       udev_list_cleanup(&udev->properties_list);
        free(udev->dev_path);
        free(udev->sys_path);
        free(udev->rules_path);
@@ -327,7 +327,7 @@ void udev_unref(struct udev *udev)
  * into the users' logging functionality.
  *
  **/
-void udev_set_log_fn(struct udev *udev,
+UDEV_EXPORT void udev_set_log_fn(struct udev *udev,
                     void (*log_fn)(struct udev *udev,
                                    int priority, const char *file, int line, const char *fn,
                                    const char *format, va_list args))
@@ -345,7 +345,7 @@ void udev_set_log_fn(struct udev *udev,
  *
  * Returns: the current logging priority
  **/
-int udev_get_log_priority(struct udev *udev)
+UDEV_EXPORT int udev_get_log_priority(struct udev *udev)
 {
        return udev->log_priority;
 }
@@ -358,7 +358,7 @@ int udev_get_log_priority(struct udev *udev)
  * Set the current logging priority. The value controls which messages
  * are logged.
  **/
-void udev_set_log_priority(struct udev *udev, int priority)
+UDEV_EXPORT void udev_set_log_priority(struct udev *udev, int priority)
 {
        char num[32];
 
@@ -382,7 +382,7 @@ const char *udev_get_rules_path(struct udev *udev)
  *
  * Returns: the sys mount point
  **/
-const char *udev_get_sys_path(struct udev *udev)
+UDEV_EXPORT const char *udev_get_sys_path(struct udev *udev)
 {
        if (udev == NULL)
                return NULL;
@@ -399,7 +399,7 @@ const char *udev_get_sys_path(struct udev *udev)
  *
  * Returns: the device directory path
  **/
-const char *udev_get_dev_path(struct udev *udev)
+UDEV_EXPORT const char *udev_get_dev_path(struct udev *udev)
 {
        if (udev == NULL)
                return NULL;
@@ -419,7 +419,7 @@ const char *udev_get_run_config_path(struct udev *udev)
  *
  * Returns: the runtime directory path
  **/
-const char *udev_get_run_path(struct udev *udev)
+UDEV_EXPORT const char *udev_get_run_path(struct udev *udev)
 {
        if (udev->run_path != NULL)
                return udev->run_path;
@@ -458,7 +458,7 @@ struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, co
                        udev_list_entry_delete(list_entry);
                return NULL;
        }
-       return udev_list_entry_add(udev, &udev->properties_list, key, value, UDEV_LIST_UNIQUE);
+       return udev_list_entry_add(&udev->properties_list, key, value);
 }
 
 struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev)