Lines Matching +full:entry +full:- +full:name
1 /*-
16 * 3. Neither the name of the University nor the names of its contributors
48 * would make the command name "hash" a misnomer.
77 struct tblentry *next; /* next entry in hash chain */
81 char cmdname[]; /* name of command */
86 static int cmdtable_cd = 0; /* cmdtable contains cd-dependent entries */
101 * The argv array may be changed and element argv[-1] should be writable.
117 if (--idx < 0 && opt == NULL) { in shellexec()
179 if (in != -1) { in tryexec()
188 *--argv = __DECONST(char *, _PATH_BSHELL); in tryexec()
200 * the path entry then *popt will be set to point to it; else *popt will be
205 padvance(const char **path, const char **popt, const char *name) in padvance() argument
220 namelen = strlen(name); in padvance()
221 len = p - start + namelen + 2; /* "2" is for '/' and '\0' */ in padvance()
225 memcpy(q, start, p - start); in padvance()
226 q += p - start; in padvance()
229 memcpy(q, name, namelen + 1); in padvance()
256 struct cmdentry entry; in hashcmd() local
257 char *name; in hashcmd() local
271 for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { in hashcmd()
272 if (cmdp->cmdtype == CMDNORMAL) in hashcmd()
278 while ((name = *argptr) != NULL) { in hashcmd()
279 if ((cmdp = cmdlookup(name, 0)) != NULL in hashcmd()
280 && cmdp->cmdtype == CMDNORMAL) in hashcmd()
282 find_command(name, &entry, DO_ERR, pathval()); in hashcmd()
283 if (entry.cmdtype == CMDUNKNOWN) in hashcmd()
286 cmdp = cmdlookup(name, 0); in hashcmd()
290 outfmt(out2, "%s: not found\n", name); in hashcmd()
306 char *name; in printentry() local
308 if (cmdp->cmdtype == CMDNORMAL) { in printentry()
309 idx = cmdp->param.index; in printentry()
312 name = padvance(&path, &opt, cmdp->cmdname); in printentry()
313 stunalloc(name); in printentry()
314 } while (--idx >= 0); in printentry()
315 out1str(name); in printentry()
316 } else if (cmdp->cmdtype == CMDBUILTIN) { in printentry()
317 out1fmt("builtin %s", cmdp->cmdname); in printentry()
318 } else if (cmdp->cmdtype == CMDFUNCTION) { in printentry()
319 out1fmt("function %s", cmdp->cmdname); in printentry()
322 name = commandtext(getfuncnode(cmdp->param.func)); in printentry()
324 out1str(name); in printentry()
325 ckfree(name); in printentry()
330 error("internal error: cmdtype %d", cmdp->cmdtype); in printentry()
339 * Resolve a command name. If you change this routine, you may have to
344 find_command(const char *name, struct cmdentry *entry, int act, in find_command() argument
357 /* If name contains a slash, don't use the hash table */ in find_command()
358 if (strchr(name, '/') != NULL) { in find_command()
359 entry->cmdtype = CMDNORMAL; in find_command()
360 entry->u.index = 0; in find_command()
361 entry->special = 0; in find_command()
367 /* If name is in the table, we're done */ in find_command()
368 if ((cmdp = cmdlookup(name, 0)) != NULL) { in find_command()
369 if (cmdp->cmdtype == CMDFUNCTION && act & DO_NOFUNC) in find_command()
376 if ((i = find_builtin(name, &spec)) >= 0) { in find_command()
378 cmdp = cmdlookup(name, 1); in find_command()
379 if (cmdp->cmdtype == CMDFUNCTION) in find_command()
381 cmdp->cmdtype = CMDBUILTIN; in find_command()
382 cmdp->param.index = i; in find_command()
383 cmdp->special = spec; in find_command()
391 idx = -1; in find_command()
392 for (;(fullname = padvance(&path, &opt, name)) != NULL; in find_command()
413 readcmdfile(fullname, -1 /* verify */); in find_command()
414 if ((cmdp = cmdlookup(name, 0)) == NULL || cmdp->cmdtype != CMDFUNCTION) in find_command()
415 error("%s not defined in %s", name, fullname); in find_command()
431 TRACE(("searchexec \"%s\" returns \"%s\"\n", name, fullname)); in find_command()
434 cmdp = cmdlookup(name, 1); in find_command()
435 if (cmdp->cmdtype == CMDFUNCTION) in find_command()
437 cmdp->cmdtype = CMDNORMAL; in find_command()
438 cmdp->param.index = idx; in find_command()
439 cmdp->special = 0; in find_command()
446 outfmt(out2, "%s: not found\n", name); in find_command()
448 outfmt(out2, "%s: %s\n", name, strerror(e)); in find_command()
450 entry->cmdtype = CMDUNKNOWN; in find_command()
451 entry->u.index = 0; in find_command()
452 entry->special = 0; in find_command()
458 entry->cmdtype = cmdp->cmdtype; in find_command()
459 entry->u = cmdp->param; in find_command()
460 entry->special = cmdp->special; in find_command()
470 find_builtin(const char *name, int *special) in find_builtin() argument
475 len = strlen(name); in find_builtin()
477 if (bp[0] == len && memcmp(bp + 2, name, len) == 0) { in find_builtin()
482 return -1; in find_builtin()
488 * Called when a cd is done. If any entry in cmdtable depends on the current
529 if (cmdp->cmdtype == CMDNORMAL) { in clearcmdentry()
530 *pp = cmdp->next; in clearcmdentry()
533 pp = &cmdp->next; in clearcmdentry()
559 * pointing to the entry, so that delete_cmd_entry can delete the
560 * entry.
567 cmdlookup(const char *name, int add) in cmdlookup() argument
573 pp = &cmdtable[hashname(name)]; in cmdlookup()
574 for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { in cmdlookup()
575 if (equal(cmdp->cmdname, name)) in cmdlookup()
577 pp = &cmdp->next; in cmdlookup()
581 len = strlen(name); in cmdlookup()
583 cmdp->next = NULL; in cmdlookup()
584 cmdp->cmdtype = CMDUNKNOWN; in cmdlookup()
585 memcpy(cmdp->cmdname, name, len + 1); in cmdlookup()
593 itercmd(const void *entry, struct cmdentry *result) in itercmd() argument
595 const struct tblentry *e = entry; in itercmd()
599 if (e->next != NULL) { in itercmd()
600 e = e->next; in itercmd()
603 i = hashname(e->cmdname) + 1; in itercmd()
611 result->cmdtype = e->cmdtype; in itercmd()
612 result->cmdname = e->cmdname; in itercmd()
618 * Delete the command entry returned on the last lookup.
628 *lastcmdentry = cmdp->next; in delete_cmd_entry()
636 * Add a new command entry, replacing any existing command entry for
637 * the same name.
641 addcmdentry(const char *name, struct cmdentry *entry) in addcmdentry() argument
646 cmdp = cmdlookup(name, 1); in addcmdentry()
647 if (cmdp->cmdtype == CMDFUNCTION) { in addcmdentry()
648 unreffunc(cmdp->param.func); in addcmdentry()
650 cmdp->cmdtype = entry->cmdtype; in addcmdentry()
651 cmdp->param = entry->u; in addcmdentry()
652 cmdp->special = entry->special; in addcmdentry()
662 defun(const char *name, union node *func) in defun() argument
664 struct cmdentry entry; in defun() local
667 entry.cmdtype = CMDFUNCTION; in defun()
668 entry.u.func = copyfunc(func); in defun()
669 entry.special = 0; in defun()
670 addcmdentry(name, &entry); in defun()
681 unsetfunc(const char *name) in unsetfunc() argument
685 if ((cmdp = cmdlookup(name, 0)) != NULL && cmdp->cmdtype == CMDFUNCTION) { in unsetfunc()
686 unreffunc(cmdp->param.func); in unsetfunc()
695 * Check if a function by a certain name exists.
698 isfunc(const char *name) in isfunc() argument
701 cmdp = cmdlookup(name, 0); in isfunc()
702 return (cmdp != NULL && cmdp->cmdtype == CMDFUNCTION); in isfunc()
707 print_absolute_path(const char *name) in print_absolute_path() argument
711 if (*name != '/' && (pwd = lookupvar("PWD")) != NULL && *pwd != '\0') { in print_absolute_path()
716 out1str(name); in print_absolute_path()
723 * type, command -v, command -V
729 struct cmdentry entry; in typecmd_impl() local
757 out1qstr(ap->val); in typecmd_impl()
761 ap->val); in typecmd_impl()
767 entry.cmdtype = cmdp->cmdtype; in typecmd_impl()
768 entry.u = cmdp->param; in typecmd_impl()
769 entry.special = cmdp->special; in typecmd_impl()
773 find_command(argv[i], &entry, 0, path); in typecmd_impl()
776 switch (entry.cmdtype) { in typecmd_impl()
781 char *name; in typecmd_impl() local
782 int j = entry.u.index; in typecmd_impl()
784 name = padvance(&path2, &opt2, argv[i]); in typecmd_impl()
785 stunalloc(name); in typecmd_impl()
786 } while (--j >= 0); in typecmd_impl()
791 print_absolute_path(name); in typecmd_impl()
816 else if (entry.special) in typecmd_impl()
844 if (argc > 2 && strcmp(argv[1], "--") == 0) in typecmd()
845 argc--, argv++; in typecmd()