|
|
1.1 ! root 1: #include "../h/config.h" ! 2: #include "../h/cpuconf.h" ! 3: #include "../h/header.h" ! 4: #ifndef NoHeader ! 5: #include <sys/types.h> ! 6: #include <sys/stat.h> ! 7: #include "../h/paths.h" ! 8: #ifndef Iconx ! 9: #define Iconx IconxPath ! 10: #endif Iconx ! 11: #define MaxArgs 500 ! 12: char *pptr; ! 13: main(argc,argv) ! 14: int argc; ! 15: char **argv; ! 16: { ! 17: ! 18: char *path, *getenv(); ! 19: char file[256]; ! 20: char *name; ! 21: char *argvx[MaxArgs]; ! 22: ! 23: name = argv[0]; ! 24: do ! 25: argvx[argc+1] = argv[argc]; ! 26: while (argc--); ! 27: argv = argvx; ! 28: /* ! 29: * If the name contains any slashes we skip the path search and ! 30: * just try to run the file. ! 31: */ ! 32: if (index(name,'/')) ! 33: doiconx(argv,name); ! 34: ! 35: pptr = path = getenv("PATH"); ! 36: if (index(path,'.') == 0) { ! 37: if (canrun(name)) ! 38: doiconx(argv,name); ! 39: } ! 40: while (trypath(name,file)) { ! 41: if (canrun(file)) ! 42: doiconx(argv,file); ! 43: } ! 44: /* ! 45: * If we can't find it, we assume that it must exist somewhere ! 46: * and infer that it's in the current directory. ! 47: */ ! 48: if (canrun(name)) ! 49: doiconx(argv,name); ! 50: exit(100); ! 51: } ! 52: canrun(file) ! 53: char *file; ! 54: { ! 55: struct stat statb; ! 56: if (access(file,5) == 0) { ! 57: stat(file,&statb); ! 58: if (statb.st_mode & S_IFREG) ! 59: return 1; ! 60: } ! 61: return 0; ! 62: } ! 63: doiconx(av,file) ! 64: char **av; char *file; ! 65: { ! 66: av[0] = "-iconx"; ! 67: av[1] = file; ! 68: execv(Iconx,av); ! 69: exit(200); ! 70: } ! 71: trypath(name,file) ! 72: char *name, *file; ! 73: { ! 74: char c; ! 75: ! 76: while (*pptr == ':') ! 77: pptr++; ! 78: if (!*pptr) ! 79: return 0; ! 80: do { ! 81: c = (*file++ = *pptr++); ! 82: } while (c != ':' && c); ! 83: pptr--; ! 84: file--; ! 85: ! 86: *file++ = '/'; ! 87: while (*file++ = *name++); ! 88: *file = 0; ! 89: return 1; ! 90: } ! 91: exit(c) ! 92: { ! 93: _exit(c); ! 94: } ! 95: #else NoHeader ! 96: main() ! 97: { ! 98: } ! 99: #endif NoHeader
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.