Skip to content

Commit

Permalink
45729: internal: Add a second parameter to zlinklist2array(), analogo…
Browse files Browse the repository at this point in the history
…usly to hlinklist2array().

Will be used in the next commit.
  • Loading branch information
danielshahaf committed May 3, 2020
1 parent d800c38 commit 4d2bcf2
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 15 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2020-05-03 Daniel Shahaf <d.s@daniel.shahaf.name>

* 45729: Src/Modules/curses.c, Src/Zle/compcore.c,
Src/Zle/computil.c, Src/builtin.c, Src/linklist.c: internal:
Add a second parameter to zlinklist2array(), analogously to
hlinklist2array().

2020-05-02 Daniel Shahaf <d.s@daniel.shahaf.name>

* unposted: Util/zyodl.vim: Use 'conceal' for some macros that
Expand Down
4 changes: 2 additions & 2 deletions Src/Modules/curses.c
Original file line number Diff line number Diff line change
Expand Up @@ -1212,7 +1212,7 @@ zccmd_input(const char *nam, char **args)
addlinknode(margs, "CTRL");
if (mevent.bstate & BUTTON_ALT)
addlinknode(margs, "ALT");
if (!setaparam(args[3], zlinklist2array(margs)))
if (!setaparam(args[3], zlinklist2array(margs, 1)))
return 1;
} else {
#endif
Expand Down Expand Up @@ -1464,7 +1464,7 @@ zccmd_querychar(const char *nam, char **args)
}

/* Turn this into an array and store it. */
return !setaparam(args[1] ? args[1] : "reply", zlinklist2array(clist));
return !setaparam(args[1] ? args[1] : "reply", zlinklist2array(clist, 1));
}


Expand Down
4 changes: 2 additions & 2 deletions Src/Zle/compcore.c
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ callcompfunc(char *s, char *fn)
if (compredirs)
freearray(compredirs);
if (rdstrs)
compredirs = zlinklist2array(rdstrs);
compredirs = zlinklist2array(rdstrs, 1);
else
compredirs = (char **) zshcalloc(sizeof(char *));

Expand Down Expand Up @@ -1922,7 +1922,7 @@ set_comp_sep(void)
mod_export void
set_list_array(char *name, LinkList l)
{
setaparam(name, zlinklist2array(l));
setaparam(name, zlinklist2array(l, 1));
}

/* Get the words from a variable or a (list of words). */
Expand Down
4 changes: 2 additions & 2 deletions Src/Zle/computil.c
Original file line number Diff line number Diff line change
Expand Up @@ -3591,7 +3591,7 @@ bin_compvalues(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
if (cv_laststate.vals) {
char **ret;

ret = zlinklist2array(cv_laststate.vals);
ret = zlinklist2array(cv_laststate.vals, 1);
sethparam(args[1], ret);

return 0;
Expand Down Expand Up @@ -4016,7 +4016,7 @@ bin_comptry(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))

set = (Ctset) zalloc(sizeof(*set));

set->tags = zlinklist2array(list);
set->tags = zlinklist2array(list, 1);
set->next = NULL;
set->ptr = NULL;
set->tag = NULL;
Expand Down
10 changes: 5 additions & 5 deletions Src/builtin.c
Original file line number Diff line number Diff line change
Expand Up @@ -2280,7 +2280,7 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
} else if (asg->flags & ASG_ARRAY) {
int flags = (asg->flags & ASG_KEY_VALUE) ? ASSPM_KEY_VALUE : 0;
if (!(pm = assignaparam(pname, asg->value.array ?
zlinklist2array(asg->value.array) :
zlinklist2array(asg->value.array, 1) :
mkarray(NULL), flags)))
return NULL;
}
Expand Down Expand Up @@ -2442,7 +2442,7 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
} else if (PM_TYPE(on) == PM_ARRAY && ASG_ARRAYP(asg)) {
int flags = (asg->flags & ASG_KEY_VALUE) ? ASSPM_KEY_VALUE : 0;
if (!(pm = assignaparam(pname, asg->value.array ?
zlinklist2array(asg->value.array) :
zlinklist2array(asg->value.array, 1) :
mkarray(NULL), flags)))
return NULL;
dont_set = 1;
Expand Down Expand Up @@ -2536,7 +2536,7 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
arrayval = mkarray(NULL);
}
} else if (asg->value.array)
arrayval = zlinklist2array(asg->value.array);
arrayval = zlinklist2array(asg->value.array, 1);
else
arrayval = mkarray(NULL);
if (!(pm=assignaparam(pname, arrayval, flags)))
Expand Down Expand Up @@ -2923,7 +2923,7 @@ bin_typeset(char *name, char **argv, LinkList assigns, Options ops, int func)
apm->ename = ztrdup(asg0.name);
if (asg->value.array) {
int flags = (asg->flags & ASG_KEY_VALUE) ? ASSPM_KEY_VALUE : 0;
assignaparam(asg->name, zlinklist2array(asg->value.array), flags);
assignaparam(asg->name, zlinklist2array(asg->value.array, 1), flags);
} else if (oldval)
assignsparam(asg0.name, oldval, 0);
unqueue_signals();
Expand Down Expand Up @@ -3901,7 +3901,7 @@ bin_whence(char *nam, char **argv, Options ops, int func)
}
unqueue_signals();
if (all) {
allmatched = argv = zlinklist2array(matchednodes);
allmatched = argv = zlinklist2array(matchednodes, 1);
matchednodes = NULL;
popheap();
} else
Expand Down
13 changes: 9 additions & 4 deletions Src/linklist.c
Original file line number Diff line number Diff line change
Expand Up @@ -438,22 +438,27 @@ hlinklist2array(LinkList list, int copy)

/*
* Convert a linked list whose data elements are strings to
* an array. The result is a permanently allocated, freearrayable
* array.
* a permanently-allocated array. The elements of the array are the same
* elements as the linked list data if copy is 0, else they are duplicated
* into permanent memory so the result is a permanently allocated,
* freearrayable array that's a deep copy of the linked list.
*/

/**/
mod_export char **
zlinklist2array(LinkList list)
zlinklist2array(LinkList list, int copy)
{
int l = countlinknodes(list);
char **ret = (char **) zalloc((l + 1) * sizeof(char *)), **p;
LinkNode n;

for (n = firstnode(list), p = ret; n; incnode(n), p++) {
*p = ztrdup((char *) getdata(n));
*p = (char *) getdata(n);
if (copy)
*p = ztrdup(*p);
}
*p = NULL;

return ret;
}

0 comments on commit 4d2bcf2

Please sign in to comment.