<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/14428">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: command.c: Get rid of huge indentation block<br><br>Huge conditional block inside for loop is negated in this patch<br>together with a "continue" keyword, similar to what was already done<br>recently in 4742526645d6137dd90ef369f0415afdb91736dc.<br><br>Change-Id: I803c4ed38e9ab09bf929528c75a60e6f65da3928<br>---<br>M src/vty/command.c<br>1 file changed, 101 insertions(+), 98 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/28/14428/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/vty/command.c b/src/vty/command.c</span><br><span>index 104053f..4189c7c 100644</span><br><span>--- a/src/vty/command.c</span><br><span>+++ b/src/vty/command.c</span><br><span>@@ -1510,109 +1510,112 @@</span><br><span>        * or ambiguities to cause a noticeable memory footprint from keeping all allocations. */</span><br><span>    void *cmd_deopt_ctx = NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- for (i = 0; i < vector_active(v); i++)</span><br><span style="color: hsl(0, 100%, 40%);">-               if ((cmd_element = vector_slot(v, i)) != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        int match = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        for (i = 0; i < vector_active(v); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           cmd_element = vector_slot(v, i);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (!cmd_element)</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   descvec = vector_slot(cmd_element->strvec, index);</span><br><span style="color: hsl(120, 100%, 40%);">+         int match = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                      for (j = 0; j < vector_active(descvec); j++) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               desc = vector_slot(descvec, j);</span><br><span style="color: hsl(0, 100%, 40%);">-                         if (!desc)</span><br><span style="color: hsl(120, 100%, 40%);">+            descvec = vector_slot(cmd_element->strvec, index);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               for (j = 0; j < vector_active(descvec); j++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     desc = vector_slot(descvec, j);</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (!desc)</span><br><span style="color: hsl(120, 100%, 40%);">+                            continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   enum match_type mtype;</span><br><span style="color: hsl(120, 100%, 40%);">+                        const char *str = desc->cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (CMD_OPTION(str)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                if (!cmd_deopt_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+                                   cmd_deopt_ctx =</span><br><span style="color: hsl(120, 100%, 40%);">+                                               talloc_named_const(tall_vty_cmd_ctx, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                  __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+                         str = cmd_deopt(cmd_deopt_ctx, str);</span><br><span style="color: hsl(120, 100%, 40%);">+                          if (str == NULL)</span><br><span>                                     continue;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                               enum match_type mtype;</span><br><span style="color: hsl(0, 100%, 40%);">-                          const char *str = desc->cmd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                         if (CMD_OPTION(str)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                  if (!cmd_deopt_ctx)</span><br><span style="color: hsl(0, 100%, 40%);">-                                             cmd_deopt_ctx =</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 talloc_named_const(tall_vty_cmd_ctx, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                    __func__);</span><br><span style="color: hsl(0, 100%, 40%);">-                                   str = cmd_deopt(cmd_deopt_ctx, str);</span><br><span style="color: hsl(0, 100%, 40%);">-                                    if (str == NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-                                                continue;</span><br><span style="color: hsl(0, 100%, 40%);">-                               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                               switch (type) {</span><br><span style="color: hsl(0, 100%, 40%);">-                         case EXACT_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                       if (!(CMD_VARIABLE (str))</span><br><span style="color: hsl(0, 100%, 40%);">-                                          && strcmp(command, str) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                                                match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case PARTLY_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                      if (!(CMD_VARIABLE (str))</span><br><span style="color: hsl(0, 100%, 40%);">-                                          && strncmp(command, str, strlen (command)) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                                     {</span><br><span style="color: hsl(0, 100%, 40%);">-                                               if (matched</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 && strcmp(matched,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        str) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      ret = 1; /* There is ambiguous match. */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        goto free_and_return;</span><br><span style="color: hsl(0, 100%, 40%);">-                                           } else</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  matched = str;</span><br><span style="color: hsl(0, 100%, 40%);">-                                          match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case RANGE_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                       if (cmd_range_match</span><br><span style="color: hsl(0, 100%, 40%);">-                                         (str, command)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                           if (matched</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 && strcmp(matched,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        str) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      ret = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        goto free_and_return;</span><br><span style="color: hsl(0, 100%, 40%);">-                                           } else</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  matched = str;</span><br><span style="color: hsl(0, 100%, 40%);">-                                          match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef HAVE_IPV6</span><br><span style="color: hsl(0, 100%, 40%);">-                          case IPV6_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                        if (CMD_IPV6(str))</span><br><span style="color: hsl(0, 100%, 40%);">-                                              match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case IPV6_PREFIX_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                 if ((mtype =</span><br><span style="color: hsl(0, 100%, 40%);">-                                         cmd_ipv6_prefix_match</span><br><span style="color: hsl(0, 100%, 40%);">-                                           (command)) != NO_MATCH) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                          if (mtype == PARTLY_MATCH) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    ret = 2;        /* There is incomplete match. */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        goto free_and_return;</span><br><span style="color: hsl(0, 100%, 40%);">-                                           }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-#endif                            /* HAVE_IPV6 */</span><br><span style="color: hsl(0, 100%, 40%);">-                         case IPV4_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                        if (CMD_IPV4(str))</span><br><span style="color: hsl(0, 100%, 40%);">-                                              match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case IPV4_PREFIX_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                 if ((mtype =</span><br><span style="color: hsl(0, 100%, 40%);">-                                         cmd_ipv4_prefix_match</span><br><span style="color: hsl(0, 100%, 40%);">-                                           (command)) != NO_MATCH) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                          if (mtype == PARTLY_MATCH) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    ret = 2;        /* There is incomplete match. */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        goto free_and_return;</span><br><span style="color: hsl(0, 100%, 40%);">-                                           }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                                               match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case EXTEND_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                                      if (CMD_VARIABLE (str))</span><br><span style="color: hsl(0, 100%, 40%);">-                                         match++;</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          case NO_MATCH:</span><br><span style="color: hsl(0, 100%, 40%);">-                          default:</span><br><span style="color: hsl(0, 100%, 40%);">-                                        break;</span><br><span style="color: hsl(0, 100%, 40%);">-                          }</span><br><span>                    }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (!match)</span><br><span style="color: hsl(0, 100%, 40%);">-                             vector_slot(v, i) = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   switch (type) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       case EXACT_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                             if (!(CMD_VARIABLE (str))</span><br><span style="color: hsl(120, 100%, 40%);">+                                && strcmp(command, str) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                                      match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case PARTLY_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (!(CMD_VARIABLE (str))</span><br><span style="color: hsl(120, 100%, 40%);">+                                && strncmp(command, str, strlen (command)) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                           {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     if (matched</span><br><span style="color: hsl(120, 100%, 40%);">+                                       && strcmp(matched,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      str) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ret = 1; /* There is ambiguous match. */</span><br><span style="color: hsl(120, 100%, 40%);">+                                              goto free_and_return;</span><br><span style="color: hsl(120, 100%, 40%);">+                                 } else</span><br><span style="color: hsl(120, 100%, 40%);">+                                                matched = str;</span><br><span style="color: hsl(120, 100%, 40%);">+                                        match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case RANGE_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                             if (cmd_range_match</span><br><span style="color: hsl(120, 100%, 40%);">+                               (str, command)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 if (matched</span><br><span style="color: hsl(120, 100%, 40%);">+                                       && strcmp(matched,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      str) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ret = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                                              goto free_and_return;</span><br><span style="color: hsl(120, 100%, 40%);">+                                 } else</span><br><span style="color: hsl(120, 100%, 40%);">+                                                matched = str;</span><br><span style="color: hsl(120, 100%, 40%);">+                                        match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             break;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef HAVE_IPV6</span><br><span style="color: hsl(120, 100%, 40%);">+                      case IPV6_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                              if (CMD_IPV6(str))</span><br><span style="color: hsl(120, 100%, 40%);">+                                    match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case IPV6_PREFIX_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((mtype =</span><br><span style="color: hsl(120, 100%, 40%);">+                               cmd_ipv6_prefix_match</span><br><span style="color: hsl(120, 100%, 40%);">+                                 (command)) != NO_MATCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        if (mtype == PARTLY_MATCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                          ret = 2;        /* There is incomplete match. */</span><br><span style="color: hsl(120, 100%, 40%);">+                                              goto free_and_return;</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%);">+                                   match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             break;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif                          /* HAVE_IPV6 */</span><br><span style="color: hsl(120, 100%, 40%);">+                       case IPV4_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                              if (CMD_IPV4(str))</span><br><span style="color: hsl(120, 100%, 40%);">+                                    match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case IPV4_PREFIX_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((mtype =</span><br><span style="color: hsl(120, 100%, 40%);">+                               cmd_ipv4_prefix_match</span><br><span style="color: hsl(120, 100%, 40%);">+                                 (command)) != NO_MATCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        if (mtype == PARTLY_MATCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                          ret = 2;        /* There is incomplete match. */</span><br><span style="color: hsl(120, 100%, 40%);">+                                              goto free_and_return;</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%);">+                                   match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case EXTEND_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (CMD_VARIABLE (str))</span><br><span style="color: hsl(120, 100%, 40%);">+                                       match++;</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case NO_MATCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                        default:</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (!match)</span><br><span style="color: hsl(120, 100%, 40%);">+                   vector_slot(v, i) = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span> free_and_return:</span><br><span>    if (cmd_deopt_ctx)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/14428">change 14428</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.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.osmocom.org/c/libosmocore/+/14428"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I803c4ed38e9ab09bf929528c75a60e6f65da3928 </div>
<div style="display:none"> Gerrit-Change-Number: 14428 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>