Add an S_COR macro, which is similar to the existing S_OR macro,
authorJason Parker <jparker@digium.com>
Tue, 27 Nov 2007 19:12:33 +0000 (19:12 +0000)
committerJason Parker <jparker@digium.com>
Tue, 27 Nov 2007 19:12:33 +0000 (19:12 +0000)
 except with an additional boolean arg.

A hack such as:
foo ? S_OR(bar, "baz") : "baz"
becomes:
S_COR(foo, bar, "baz")

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89683 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/strings.h

index dc5f8e1..1ba62ed 100644 (file)
@@ -37,7 +37,13 @@ static force_inline int ast_strlen_zero(const char *s)
 /*! \brief returns the equivalent of logic or for strings:
  * first one if not empty, otherwise second one.
  */
-#define S_OR(a, b)     (!ast_strlen_zero(a) ? (a) : (b))
+#define S_OR(a, b)           (!ast_strlen_zero(a) ? (a) : (b))
+
+/*! \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.
+ * example: S_COR(usewidget, widget, "<no widget>")
+ */
+#define S_COR(a, b, c)   ((a && !ast_strlen_zero(b)) ? (b) : (c))
 
 /*!
   \brief Gets a pointer to the first non-whitespace character in a string.