<p>Kevin Harwell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/10979">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">json.c/strings.c - Add a couple of utility functions<br><br>Added 'ast_json_object_string_get' to the JSON wrapper in order to make is a<br>little easier to retrieve a string field from the JSON object.<br><br>Also added 'ast_strcmp_s' that does a NULL check on the compared strings prior<br>to calling strcmp.<br><br>Change-Id: I26f0a16d61537505eb41b4b05ef2e6d67fc2541b<br>---<br>M include/asterisk/json.h<br>M include/asterisk/strings.h<br>M main/json.c<br>M main/strings.c<br>4 files changed, 44 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/79/10979/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/asterisk/json.h b/include/asterisk/json.h</span><br><span>index 227afbb..e346b8d 100644</span><br><span>--- a/include/asterisk/json.h</span><br><span>+++ b/include/asterisk/json.h</span><br><span>@@ -562,6 +562,16 @@</span><br><span> struct ast_json *ast_json_object_get(struct ast_json *object, const char *key);</span><br><span> </span><br><span> /*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Get a string field from a JSON object.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param object JSON object.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param key Key of string field to look up.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return String value of given \a key.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return \c NULL on error, or key value is not a string.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+const char *ast_json_object_string_get(struct ast_json *object, const char *key);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span>  * \brief Set a field in a JSON object.</span><br><span>  * \since 12.0.0</span><br><span>  *</span><br><span>diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h</span><br><span>index aaf2737..3332838 100644</span><br><span>--- a/include/asterisk/strings.h</span><br><span>+++ b/include/asterisk/strings.h</span><br><span>@@ -1298,6 +1298,17 @@</span><br><span> char *ast_generate_random_string(char *buf, size_t size);</span><br><span> </span><br><span> /*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Compare strings for equality checking for NULL.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param str1 The string to compare to str2</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param str2 The string to compare to str1</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return strcmp result if str1 and str2 are both not NULL, -1 if str2 is NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+ *         1 if str1 is NULL, or -2 if both str1 and str2 are NULL.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int ast_strcmp_s(const char *str1, const char *str2);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span>  * \brief Compares 2 strings using realtime-style operators</span><br><span>  * \since 13.9.0</span><br><span>  *</span><br><span>diff --git a/main/json.c b/main/json.c</span><br><span>index 9a94767..94016cd 100644</span><br><span>--- a/main/json.c</span><br><span>+++ b/main/json.c</span><br><span>@@ -401,6 +401,12 @@</span><br><span>       }</span><br><span>    return (struct ast_json *)json_object_get((json_t *)object, key);</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const char *ast_json_object_string_get(struct ast_json *object, const char *key)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ return ast_json_string_get(ast_json_object_get(object, key));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int ast_json_object_set(struct ast_json *object, const char *key, struct ast_json *value)</span><br><span> {</span><br><span>         return json_object_set_new((json_t *)object, key, (json_t *)value);</span><br><span>diff --git a/main/strings.c b/main/strings.c</span><br><span>index a18bb48..6f0760f 100644</span><br><span>--- a/main/strings.c</span><br><span>+++ b/main/strings.c</span><br><span>@@ -236,6 +236,23 @@</span><br><span>      return buf;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int ast_strcmp_s(const char *str1, const char *str2)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (str1 && str2) {</span><br><span style="color: hsl(120, 100%, 40%);">+           return strcmp(str1, str2);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!str1 && str2) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (str1 && !str2) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return -2;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int ast_strings_match(const char *left, const char *op, const char *right)</span><br><span> {</span><br><span>   char *internal_op = (char *)op;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/10979">change 10979</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/10979"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I26f0a16d61537505eb41b4b05ef2e6d67fc2541b </div>
<div style="display:none"> Gerrit-Change-Number: 10979 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kevin Harwell <kharwell@digium.com> </div>