<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>