[asterisk-dev] RFC - add this S_OR macro to strings.h ?
Luigi Rizzo
rizzo at icir.org
Thu Mar 23 10:47:45 MST 2006
In my branch, i have a small patch in strings.h which defines
a function S_OR(a, b) similar in spirit to the || operator, but working
on char * instead of booleans. It is used to replace
constructs that take a string or a default value, as below:
- chan = !ast_strlen_zero(cdr->channel) ? cdr->channel : "<unknown>";
+ chan = S_OR(cdr->channel, "<unknown>");
or even longer statements involving if/then/else.
So far I have used it in 25 places in my branch, which means that this is
a very common construct. Readability of the code improves a lot,
because lines become shorter, and the chance of mistyping the second
argument become smaller.
If there are no objections i would like to commit the
patch below to trunk and start using it.
The implementation can be either a macro, or better a
static inline function so we are free from side effects
in evaluating the first argument.
cheers
luigi
--- include/asterisk/strings.h (revision 14413)
+++ include/asterisk/strings.h (working copy)
@@ -35,6 +35,11 @@
return (!s || (*s == '\0'));
}
+/*! \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))
+
/*!
\brief Gets a pointer to the first non-whitespace character in a string.
\param ast_skip_blanks function being used
More information about the asterisk-dev
mailing list