diff options
author | Sean Bright <sean.bright@gmail.com> | 2017-12-07 10:52:39 -0500 |
---|---|---|
committer | Sean Bright <sean.bright@gmail.com> | 2017-12-08 14:27:50 -0500 |
commit | f726f119740373a01bef6e26e5c1f02dd277033f (patch) | |
tree | c86e6167c79cf6289258f423ec16341932ed9e69 /include | |
parent | 54a86779a3d1cc2a1c859d76180f155865713bb5 (diff) |
utils: Add convenience function for setting fd flags
There are many places in the code base where we ignore the return value
of fcntl() when getting/setting file descriptior flags. This patch
introduces a convenience function that allows setting or clearing file
descriptor flags and will also log an error on failure for later
analysis.
Change-Id: I8b81901e1b1bd537ca632567cdb408931c6eded7
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/utils.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index 03705b321..876e53c29 100644 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -1142,4 +1142,44 @@ int ast_compare_versions(const char *version1, const char *version2); */ int ast_check_ipv6(void); +enum ast_fd_flag_operation { + AST_FD_FLAG_SET, + AST_FD_FLAG_CLEAR, +}; + +/* + * \brief Set flags on the given file descriptor + * \since 13.19 + * + * If getting or setting flags of the given file descriptor fails, logs an + * error message. + * + * \param fd File descriptor to set flags on + * \param flags The flag(s) to set + * + * \return -1 on error + * \return 0 if successful + */ +#define ast_fd_set_flags(fd, flags) \ + __ast_fd_set_flags((fd), (flags), AST_FD_FLAG_SET, __FILE__, __LINE__, __PRETTY_FUNCTION__) + +/* + * \brief Clear flags on the given file descriptor + * \since 13.19 + * + * If getting or setting flags of the given file descriptor fails, logs an + * error message. + * + * \param fd File descriptor to clear flags on + * \param flags The flag(s) to clear + * + * \return -1 on error + * \return 0 if successful + */ +#define ast_fd_clear_flags(fd, flags) \ + __ast_fd_set_flags((fd), (flags), AST_FD_FLAG_CLEAR, __FILE__, __LINE__, __PRETTY_FUNCTION__) + +int __ast_fd_set_flags(int fd, int flags, enum ast_fd_flag_operation op, + const char *file, int lineno, const char *function); + #endif /* _ASTERISK_UTILS_H */ |