Provided by: libsystemd-dev_251.4-1ubuntu7_amd64 bug


       sd_device_ref, sd_device_unref, sd_device_unrefp - Create or destroy references to a
       device object


       #include <systemd/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[1]. 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)
           fprintf(stderr, "Failed to allocate device: %s\n", strerror(-r));

       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.


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


        1. Clean-up Variable Attribute