|
|
1.1 ! root 1: /* ! 2: * find a file on a path in the environment, or a default path ! 3: * with an access priveledge. ! 4: * ! 5: * example: pathn("helpfile", "LIBPATH", ",,\lib", "r"); ! 6: * ! 7: * Returns full path name. ! 8: */ ! 9: #include <stdio.h> ! 10: #include <path.h> ! 11: ! 12: #define PATHSIZE 64 ! 13: ! 14: char *getenv(), *path(), *strchr(); ! 15: ! 16: char * ! 17: pathn(name, envpath, deflpath, acs) ! 18: char *name, *envpath, *deflpath, *acs; ! 19: { ! 20: register char *pathptr; ! 21: ! 22: if ((NULL == envpath) || (NULL == (pathptr = getenv(envpath)))) ! 23: pathptr = deflpath; ! 24: ! 25: if (NULL == strchr(acs, 'w')) { ! 26: if ((pathptr = path(pathptr, name, AREAD)) == NULL) ! 27: return (name); ! 28: else ! 29: return (pathptr); ! 30: } ! 31: else { ! 32: register char *p, c; ! 33: static char fullname[PATHSIZE]; ! 34: ! 35: if ((p = path(pathptr, name, AWRITE)) == NULL) { ! 36: for (p = fullname; (c = *pathptr++) && c != LISTSEP;) ! 37: *p++ = c; ! 38: *p++ = PATHSEP; ! 39: strcpy(p, name); ! 40: return (fullname); ! 41: } else ! 42: return (p); ! 43: } ! 44: } ! 45: #ifdef TEST ! 46: #include <misc.h> ! 47: ! 48: main() ! 49: { ! 50: char name[80], envpath[80], deflpath[80], acs[80]; ! 51: ! 52: for (;;) { ! 53: ask(name, "file name"); ! 54: if ('q' == name[0]) ! 55: return(0); ! 56: ask(envpath, "env"); ! 57: ask(deflpath, "path"); ! 58: ask(acs, "acs"); ! 59: printf("found %s\n", pathn(name, envpath, deflpath, acs)); ! 60: } ! 61: } ! 62: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.