'\" t .TH "SD_DEVICE_REF" "3" "" "systemd 255" "sd_device_ref" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" sd_device_ref, sd_device_unref, sd_device_unrefp \- Create or destroy references to a device object .SH "SYNOPSIS" .sp .ft B .nf #include .fi .ft .HP \w'sd_device*\ sd_device_ref('u .BI "sd_device* sd_device_ref(sd_device\ *" "device" ");" .HP \w'sd_device*\ sd_device_unref('u .BI "sd_device* sd_device_unref(sd_device\ *" "device" ");" .HP \w'void\ sd_device_unrefp('u .BI "void sd_device_unrefp(sd_device\ **" "device" ");" .PP \fBsd_device_ref()\fR increases the internal reference counter of \fIdevice\fR by one\&. .PP \fBsd_device_unref()\fR decreases the internal reference counter of \fIdevice\fR by one\&. Once the reference count has dropped to zero, \fIdevice\fR is destroyed and cannot be used anymore, so further calls to \fBsd_device_ref()\fR or \fBsd_device_unref()\fR are illegal\&. .PP \fBsd_device_unrefp()\fR is similar to \fBsd_device_unref()\fR but takes a pointer to a pointer to an \fBsd_device\fR object\&. This call is useful in conjunction with GCC\*(Aqs and LLVM\*(Aqs \m[blue]\fBClean\-up Variable Attribute\fR\m[]\&\s-2\u[1]\d\s+2\&. 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: .sp .nf { __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\en"); } \&... } .fi .PP \fBsd_device_ref()\fR and \fBsd_device_unref()\fR execute no operation if the argument is \fBNULL\fR\&. \fBsd_device_unrefp()\fR will first dereference its argument, which must not be \fBNULL\fR, and will execute no operation if \fIthat\fR is \fBNULL\fR\&. .SH "RETURN VALUE" .PP \fBsd_device_ref()\fR always returns the argument, and \fBsd_device_unref()\fR always returns \fBNULL\fR\&. .SH "HISTORY" .PP \fBsd_device_ref()\fR, \fBsd_device_unref()\fR, and \fBsd_device_unrefp()\fR were added in version 251\&. .SH "NOTES" .IP " 1." 4 Clean-up Variable Attribute .RS 4 \%https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html .RE