Function
GLibclear_fd
since: 2.76
Declaration [src]
static inline gboolean
g_clear_fd (
int* fd_ptr,
GError** error
)
Description [src]
If fd_ptr points to a file descriptor, close it and return
whether closing it was successful, like g_close().
If fd_ptr points to a negative number, return TRUE without closing
anything.
In both cases, set fd_ptr to -1 before returning.
Like g_close(), if closing the file descriptor fails, the error is
stored in both %errno and error. If this function succeeds,
%errno is undefined.
On POSIX platforms, this function is async-signal safe
if error is NULL and fd_ptr points to either a negative number or a
valid open file descriptor.
This makes it safe to call from a signal handler or a GSpawnChildSetupFunc
under those conditions.
See signal(7) and
signal-safety(7) for more details.
It is a programming error for fd_ptr to point to a non-negative
number that is not a valid file descriptor.
A typical use of this function is to clean up a file descriptor at the end of its scope, whether it has been set successfully or not:
gboolean
operate_on_fd (GError **error)
{
gboolean ret = FALSE;
int fd = -1;
fd = open_a_fd (error);
if (fd < 0)
goto out;
if (!do_something (fd, error))
goto out;
if (!g_clear_fd (&fd, error))
goto out;
ret = TRUE;
out:
// OK to call even if fd was never opened or was already closed
g_clear_fd (&fd, NULL);
return ret;
}
This function is also useful in conjunction with #g_autofd.
Available since: 2.76
This function is not directly available to language bindings.
Parameters
fd_ptr-
Type:
int*A pointer to a file descriptor.
The argument will be modified by the function. error-
Type:
GError **The return location for a recoverable error.
The argument can be NULL.If the return location is not NULL, then you must initialize it to aNULLGError*.The argument will be left initialized to NULLby the function if there are no errors.In case of error, the argument will be set to a newly allocated GError; the caller will take ownership of the data, and be responsible for freeing it.