<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/14437">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved
  fixeria: Looks good to me, but someone else must approve

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: command.c: Fix: single-choice optional args are no longer passed incomplete to vty func<br><br>For instance, take command "single0 [one]":<br>If user executes "single0 on", VTY func will receive argv[0]="one"<br>instead of argv[0]="on".<br><br>Related: OS#4045<br>Change-Id: I5f4e2d16c62a2d22717989c6acc77450957168cb<br>---<br>M src/vty/command.c<br>M tests/vty/vty_transcript_test.vty<br>2 files changed, 15 insertions(+), 6 deletions(-)<br><br></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 3c91bfd..89a2bc1 100644</span><br><span>--- a/src/vty/command.c</span><br><span>+++ b/src/vty/command.c</span><br><span>@@ -2310,16 +2310,26 @@</span><br><span>            }</span><br><span> </span><br><span>                vector descvec = vector_slot(matched_element->strvec, i);</span><br><span style="color: hsl(120, 100%, 40%);">+          const char *tmp_cmd;</span><br><span> </span><br><span>             if (vector_active(descvec) == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* Single coice argument, no "(...|...)". */</span><br><span>                       struct desc *desc = vector_slot(descvec, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                        if (CMD_VARARG(desc->cmd))</span><br><span style="color: hsl(0, 100%, 40%);">-                           varflag = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (CMD_OPTION(desc->cmd)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               /* we need to first remove the [] chars, then check to see what's inside (var or token) */</span><br><span style="color: hsl(120, 100%, 40%);">+                                tmp_cmd = cmd_deopt(cmd_deopt_ctx, desc->cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              tmp_cmd = desc->cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   if (varflag || CMD_VARIABLE(desc->cmd)</span><br><span style="color: hsl(0, 100%, 40%);">-                           || CMD_OPTION(desc->cmd))</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (CMD_VARARG(tmp_cmd))</span><br><span style="color: hsl(120, 100%, 40%);">+                              varflag = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (varflag || CMD_VARIABLE(tmp_cmd))</span><br><span>                                argv[argc++] = vector_slot(vline, i);</span><br><span style="color: hsl(120, 100%, 40%);">+                 else if (CMD_OPTION(desc->cmd))</span><br><span style="color: hsl(120, 100%, 40%);">+                            argv[argc++] = tmp_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* else : we don't want to add non-opt single-choice static args in argv[] */</span><br><span>            } else {</span><br><span>                     /* multi choice argument. look up which choice</span><br><span>                          the user meant (can only be one after</span><br><span>@@ -2328,7 +2338,6 @@</span><br><span>                        want to pass "three" in argv[]. */</span><br><span>                      for (j = 0; j < vector_active(descvec); j++) {</span><br><span>                            struct desc *desc = vector_slot(descvec, j);</span><br><span style="color: hsl(0, 100%, 40%);">-                            const char *tmp_cmd;</span><br><span>                                 if (!desc)</span><br><span>                                   continue;</span><br><span>                            if (cmd_match(desc->cmd, vector_slot(vline, i), ANY_MATCH, true) == NO_MATCH)</span><br><span>diff --git a/tests/vty/vty_transcript_test.vty b/tests/vty/vty_transcript_test.vty</span><br><span>index f2dbacb..db58830 100644</span><br><span>--- a/tests/vty/vty_transcript_test.vty</span><br><span>+++ b/tests/vty/vty_transcript_test.vty</span><br><span>@@ -80,7 +80,7 @@</span><br><span> ok argc=1 one</span><br><span> </span><br><span> vty_transcript_test> single0 on</span><br><span style="color: hsl(0, 100%, 40%);">-ok argc=1 on</span><br><span style="color: hsl(120, 100%, 40%);">+ok argc=1 one</span><br><span> </span><br><span> vty_transcript_test> single0</span><br><span> ok argc=0</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/14437">change 14437</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/+/14437"/><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: I5f4e2d16c62a2d22717989c6acc77450957168cb </div>
<div style="display:none"> Gerrit-Change-Number: 14437 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>