|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid="@(#)getpath.c 2.5 (smail) 9/15/87"; ! 3: #endif ! 4: ! 5: # include <stdio.h> ! 6: # include <sys/types.h> ! 7: # include <ctype.h> ! 8: # include "defs.h" ! 9: ! 10: extern enum edebug debug; /* how verbose we are */ ! 11: extern char *pathfile; /* location of path database */ ! 12: ! 13: /* ! 14: ** ! 15: ** getpath(): look up key in ascii sorted path database. ! 16: ** ! 17: */ ! 18: ! 19: getpath( key, path , cost) ! 20: char *key; /* what we are looking for */ ! 21: char *path; /* where the path results go */ ! 22: int *cost; /* where the cost results go */ ! 23: { ! 24: char *getline(); ! 25: ! 26: int lineno; ! 27: char *next_line, /* Next line read by getline(). */ ! 28: *line_key, /* Key extracted by strtok() from next_line. */ ! 29: *line_cost; /* Cost extracted by strtok() from next_line. */ ! 30: FILE *file; ! 31: ! 32: DEBUG("getpath: looking for '%s'\n", key); ! 33: ! 34: lineno = 0; ! 35: ! 36: if((file = fopen(pathfile, "r")) == NULL) { ! 37: (void) printf("can't access %s.\n", pathfile); ! 38: return( EX_OSFILE ); ! 39: } ! 40: ! 41: /* Linear search for key "path" in file stream "file". */ ! 42: ! 43: while (NULL != (next_line = getline(file, &lineno))) { ! 44: line_key = strtok(next_line, WS); ! 45: ! 46: /* ! 47: * If we have a match, copy the path; copy the ! 48: * cost if there is one. ! 49: */ ! 50: if (strcmpic(key, line_key) == 0) { ! 51: strcpy(path, strtok(NULL, WS)); ! 52: ! 53: if (NULL != (line_cost = strtok(NULL, WS)) ) { ! 54: *cost = atoi(line_cost); ! 55: } else { ! 56: *cost = DEFCOST; ! 57: } ! 58: break; ! 59: } ! 60: } ! 61: ! 62: if (NULL == next_line) { ! 63: fclose(file); ! 64: return(EX_NOHOST); ! 65: } ! 66: ! 67: fclose(file); ! 68: return (EX_OK); ! 69: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.