mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-24 05:38:11 +00:00
make S_OR and S_COR safe to use even if the parameters are function calls or have side effects. it still bothers me that these are called S_OR and not something like ast_string_or, but that's water over the bridge
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@155079 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -52,13 +52,19 @@ static force_inline int ast_strlen_zero(const char *s)
|
|||||||
/*! \brief returns the equivalent of logic or for strings:
|
/*! \brief returns the equivalent of logic or for strings:
|
||||||
* first one if not empty, otherwise second one.
|
* first one if not empty, otherwise second one.
|
||||||
*/
|
*/
|
||||||
#define S_OR(a, b) (!ast_strlen_zero(a) ? (a) : (b))
|
static force_inline char *S_OR(const char *a, const char *b)
|
||||||
|
{
|
||||||
|
return ast_strlen_zero(a) ? (char *) b : (char *) a;
|
||||||
|
}
|
||||||
|
|
||||||
/*! \brief returns the equivalent of logic or for strings, with an additional boolean check:
|
/*! \brief returns the equivalent of logic or for strings, with an additional boolean check:
|
||||||
* second one if not empty and first one is true, otherwise third one.
|
* second one if not empty and first one is true, otherwise third one.
|
||||||
* example: S_COR(usewidget, widget, "<no widget>")
|
* example: S_COR(usewidget, widget, "<no widget>")
|
||||||
*/
|
*/
|
||||||
#define S_COR(a, b, c) ((a && !ast_strlen_zero(b)) ? (b) : (c))
|
static force_inline char *S_COR(unsigned char a, const char *b, const char *c)
|
||||||
|
{
|
||||||
|
return a && !ast_strlen_zero(b) ? (char *) b : (char *) c;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Gets a pointer to the first non-whitespace character in a string.
|
\brief Gets a pointer to the first non-whitespace character in a string.
|
||||||
|
|||||||
Reference in New Issue
Block a user