diff options
Diffstat (limited to 'src/libudev/libudev.c')
-rw-r--r-- | src/libudev/libudev.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c index 8af97fe16d..d11e7a9279 100644 --- a/src/libudev/libudev.c +++ b/src/libudev/libudev.c @@ -11,16 +11,12 @@ #include "alloc-util.h" #include "fd-util.h" -#include "libudev-private.h" #include "missing.h" #include "string-util.h" /** * SECTION:libudev * @short_description: libudev context - * - * The context contains the default values read from the udev config file, - * and is passed to all library operations. */ /** @@ -29,10 +25,7 @@ * Opaque object representing the library context. */ struct udev { - int refcount; - void (*log_fn)(struct udev *udev, - int priority, const char *file, int line, const char *fn, - const char *format, va_list args); + unsigned n_ref; void *userdata; }; @@ -46,8 +39,8 @@ struct udev { * Returns: stored userdata **/ _public_ void *udev_get_userdata(struct udev *udev) { - if (udev == NULL) - return NULL; + assert_return(udev, NULL); + return udev->userdata; } @@ -59,8 +52,9 @@ _public_ void *udev_get_userdata(struct udev *udev) { * Store custom @userdata in the library context. **/ _public_ void udev_set_userdata(struct udev *udev, void *userdata) { - if (udev == NULL) + if (!udev) return; + udev->userdata = userdata; } @@ -77,12 +71,13 @@ _public_ void udev_set_userdata(struct udev *udev, void *userdata) { _public_ struct udev *udev_new(void) { struct udev *udev; - udev = new0(struct udev, 1); - if (!udev) { - errno = ENOMEM; - return NULL; - } - udev->refcount = 1; + udev = new(struct udev, 1); + if (!udev) + return_with_errno(NULL, ENOMEM); + + *udev = (struct udev) { + .n_ref = 1, + }; return udev; } @@ -95,12 +90,7 @@ _public_ struct udev *udev_new(void) { * * Returns: the passed udev library context **/ -_public_ struct udev *udev_ref(struct udev *udev) { - if (udev == NULL) - return NULL; - udev->refcount++; - return udev; -} +DEFINE_PUBLIC_TRIVIAL_REF_FUNC(struct udev, udev); /** * udev_unref: @@ -112,11 +102,17 @@ _public_ struct udev *udev_ref(struct udev *udev) { * Returns: the passed udev library context if it has still an active reference, or #NULL otherwise. **/ _public_ struct udev *udev_unref(struct udev *udev) { - if (udev == NULL) + if (!udev) return NULL; - udev->refcount--; - if (udev->refcount > 0) + + assert(udev->n_ref > 0); + udev->n_ref--; + if (udev->n_ref > 0) + /* This is different from our convetion, but let's keep backward + * compatibility. So, do not use DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC() + * macro to define this function. */ return udev; + return mfree(udev); } @@ -128,10 +124,11 @@ _public_ struct udev *udev_unref(struct udev *udev) { * This function is deprecated. * **/ -_public_ 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)) { +_public_ 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)) { return; } |