sd_device_ref

elogind
sd_device_ref 3
sd_device_ref sd_device_unref sd_device_unrefp Create or destroy references to a device object

    #include <elogind/sd-device.h>

sd_device* `sd_device_ref` sd_device *device sd_device* `sd_device_unref` sd_device *device void `sd_device_unrefp` sd_device **device

`sd_device_ref()` increases the internal reference counter of device by one.

`sd_device_unref()` decreases the internal reference counter of device by one. Once the reference count has dropped to zero, device is destroyed and cannot be used anymore, so further calls to `sd_device_ref()` or `sd_device_unref()` are illegal.

`sd_device_unrefp()` is similar to `sd_device_unref()` but takes a pointer to a pointer to an sd_device object. This call is useful in conjunction with GCC's and LLVM's Clean-up Variable Attribute. Note that this function is defined as an inline function. Use a declaration like the following, in order to allocate a device object that is freed automatically as the code block is left:

    {
      __attribute__((cleanup(sd_device_unrefp))) sd_device *device = NULL;
      int r;
      …
      r = sd_device_new_from_syspath(&device, "…");
      if (r < 0) {
        errno = -r;
        fprintf(stderr, "Failed to allocate device: %m\n");
      }
      …
    }

`sd_device_ref()` and `sd_device_unref()` execute no operation if the argument is `NULL`. `sd_device_unrefp()` will first dereference its argument, which must not be `NULL`, and will execute no operation if that is `NULL`.

## Return Value

`sd_device_ref()` always returns the argument, and `sd_device_unref()` always returns `NULL`.

## History

`sd_device_ref()`, `sd_device_unref()`, and `sd_device_unrefp()` were added in version 251.