45729: internal: Add a second parameter to zlinklist2array(), analogously to hlinklist2array().

Will be used in the next commit.
This commit is contained in:
Daniel Shahaf 2020-04-27 19:30:39 +00:00
parent d800c38507
commit 4d2bcf2fe7
6 changed files with 27 additions and 15 deletions

View File

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

View File

@ -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
@ -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));
}

View File

@ -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 *));
@ -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). */

View File

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

View File

@ -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;
}
@ -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;
@ -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)))
@ -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();
@ -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

View File

@ -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;
}