This differential combines 4 commits that I intend to commit separately:
sh: also auto-complete functions
sh: introduce a function to iterate over all hashed commands
While aliases and built-ins are opportunistically stored in cmdtable, each function will be added to it immediately on definition. Factor out the hashing function, write the iterator function and make it use the hashing function. Add the cmdname pointer to struct cmdentry so that the command name can be exposed that way.
sh: tab-complete aliases
sh: introduce a function to iterate over all aliases
Currently the data structure holding alias information is opaque for consumers outside alias.c and there is no way to iterate over all aliases, which will become needed by a future commit. The new function "iteralias" takes a null pointer to return the first alias or an existing alias to return the next one, unless there is no alias to return, in which case it returns a null pointer. I slightly changed the static function hashalias so that it returns the index into the array holding link heads, and not the link head directly. In this form it's easier to use by iteralias and the slight adjustment in the three existing callers doesn't look too bad.