|
|
1.1 ! root 1: /* @(#)hashserv.c 1.4 */ ! 2: /* ! 3: * UNIX shell ! 4: * ! 5: * Bell Telephone Laboratories ! 6: * ! 7: */ ! 8: ! 9: #include "defs.h" ! 10: #include <sys/types.h> ! 11: #include <sys/stat.h> ! 12: #include <errno.h> ! 13: ! 14: #define EXECUTE 01 ! 15: ! 16: findpath(name) ! 17: register char *name; ! 18: { ! 19: register char *path; ! 20: register int count = 1; ! 21: ! 22: char *p; ! 23: int ok = 1; ! 24: int e_code = 1; ! 25: ! 26: path = getpath(name); ! 27: ! 28: while (path) ! 29: { ! 30: path = catpath(path, name); ! 31: p = curstak(); ! 32: ! 33: if ((ok = chk_access(p)) == 0) ! 34: break; ! 35: else ! 36: e_code = max(e_code, ok); ! 37: ! 38: count++; ! 39: } ! 40: ! 41: return(ok ? -e_code : count); ! 42: } ! 43: ! 44: ! 45: chk_access(name) ! 46: register char *name; ! 47: { ! 48: struct stat buf; ! 49: ! 50: if (access(name, EXECUTE)==0 && stat(name, &buf)==0 && (buf.st_mode&S_IFMT)==S_IFREG) ! 51: return(0); ! 52: ! 53: return(errno == EACCES ? 3 : 1); ! 54: } ! 55: ! 56: ! 57: pr_path(name, count) ! 58: register char *name; ! 59: int count; ! 60: { ! 61: register char *path; ! 62: ! 63: path = getpath(name); ! 64: ! 65: while (--count && path) ! 66: path = nextpath(path, name); ! 67: ! 68: catpath(path, name); ! 69: prs_buff(curstak()); ! 70: } ! 71: ! 72: what_is(name) ! 73: register char *name; ! 74: { ! 75: struct namnod *n; ! 76: int cnt; ! 77: short hashval; ! 78: int isparam = 0; ! 79: ! 80: if ((n = findnam(name)) && !(n->namval.flg & N_FUNCTN)) ! 81: { ! 82: printnam(n); ! 83: isparam = n->namval.val!=0; ! 84: } ! 85: ! 86: if (n && (n->namval.flg & N_FUNCTN)) ! 87: { ! 88: prs_buff(strf(n)); ! 89: prc_buff(NL); ! 90: return; ! 91: } ! 92: ! 93: if (syslook(name, commands, no_commands)) ! 94: { ! 95: prs_2buff("builtin ", name); ! 96: prc_buff(NL); ! 97: return; ! 98: } ! 99: if ((cnt = findpath(name)) > 0) ! 100: { ! 101: pr_path(name, cnt); ! 102: prc_buff(NL); ! 103: } ! 104: else if (!isparam) ! 105: failed(name, notfound); ! 106: } ! 107:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.