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
This commit is contained in:
Sean Bright
2017-12-07 10:52:39 -05:00
parent b0b28446c1
commit 2ffe52a116
17 changed files with 100 additions and 78 deletions

View File

@@ -1141,4 +1141,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 */