提交 09d35afd 编写于 作者: S Shi Lei 提交者: Michal Privoznik

util: file: introduce VIR_AUTOCLOSE macro to close fd of the file automatically

Signed-off-by: NShi Lei <shi_lei@massclouds.com>
上级 7ea73429
......@@ -54,6 +54,11 @@ int virFileClose(int *fdptr, virFileCloseFlags flags)
int virFileFclose(FILE **file, bool preserve_errno) ATTRIBUTE_RETURN_CHECK;
FILE *virFileFdopen(int *fdptr, const char *mode) ATTRIBUTE_RETURN_CHECK;
static inline void virForceCloseHelper(int *fd)
{
ignore_value(virFileClose(fd, VIR_FILE_CLOSE_PRESERVE_ERRNO));
}
/* For use on normal paths; caller must check return value,
and failure sets errno per close. */
# define VIR_CLOSE(FD) virFileClose(&(FD), 0)
......@@ -64,8 +69,7 @@ FILE *virFileFdopen(int *fdptr, const char *mode) ATTRIBUTE_RETURN_CHECK;
/* For use on cleanup paths; errno is unaffected by close,
and no return value to worry about. */
# define VIR_FORCE_CLOSE(FD) \
ignore_value(virFileClose(&(FD), VIR_FILE_CLOSE_PRESERVE_ERRNO))
# define VIR_FORCE_CLOSE(FD) virForceCloseHelper(&(FD))
# define VIR_FORCE_FCLOSE(FILE) ignore_value(virFileFclose(&(FILE), true))
/* Similar VIR_FORCE_CLOSE() but ignores EBADF errors since they are expected
......@@ -80,6 +84,16 @@ FILE *virFileFdopen(int *fdptr, const char *mode) ATTRIBUTE_RETURN_CHECK;
VIR_FILE_CLOSE_PRESERVE_ERRNO | \
VIR_FILE_CLOSE_DONT_LOG))
/**
* VIR_AUTOCLOSE:
*
* Macro to automatically force close the fd by calling virForceCloseHelper
* when the fd goes out of scope. It's used to eliminate VIR_FORCE_CLOSE
* in cleanup sections.
*/
# define VIR_AUTOCLOSE __attribute__((cleanup(virForceCloseHelper))) int
/* Opaque type for managing a wrapper around a fd. */
struct _virFileWrapperFd;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册