1: #include <stdio.h>
2: #include "newsgate.h"
3:
4: #ifdef RCSIDENT
5: static char *rcsid = "$Header: newspath.c,v 1.7 85/01/18 15:40:17 notes Rel $";
6: #endif RCSIDENT
7:
8:
9: /*
10: * char *getpath(dest) char *dest;
11: *
12: * look in the routing tables for a path from here to that
13: * specified host. Return the path.
14: * Return NULL if there is no such path.
15: *
16: * The returned path is of the form:
17: * a!b!c!d!dest! (note trailing !)
18: *
19: * The path is saved in a static buffer so you have to save
20: * it or it is destroyed in the next call.
21: *
22: * A re-write of what Jeff Donnelly did a while back.
23: * Ray Essick
24: *
25: * The routing table contains lines of the form:
26: * site<space>path
27: * site = destination site
28: * path = a!b!c!d!site! (not trailing !)
29: *
30: * Must be in alphabetical order since the search gives up
31: * after finding a site "after" the one we want!
32: */
33:
34: FILE * fopen ();
35: extern char *fgets ();
36:
37: /*
38: * This entire routine is only called when EXPANDPATH is defined
39: * so we surround it with an ifdef to keep down the binary sizes
40: * when EXPANDPATH is not defined.
41: */
42: #ifdef EXPANDPATH
43: char *getpath (dest)
44: char *dest;
45: {
46:
47: static char line[BUFSIZ];
48: FILE * mapfile;
49: register char *p,
50: *path;
51:
52:
53: if ((mapfile = fopen (PATHMAP, "r")) == NULL)
54: return (NULL); /* no file */
55:
56: while (fgets (line, BUFSIZ, mapfile) != NULL)
57: {
58: p = line;
59: path = NULL;
60: do
61: {
62: switch (*p)
63: {
64: case ' ':
65: case '\t': /* zap and mark path */
66: if (path == NULL) /* only once */
67: {
68: *p++ = '\0';
69: path = p;
70: }
71: else
72: p++; /* gotta move over it */
73: break;
74:
75: case '\n':
76: *p = '\0'; /* end of it all */
77: break;
78:
79: default:
80: p++;
81: break;
82: }
83: }
84: while (*p); /* terminates after newline */
85: if (strcmp (line, dest) == 0) /* matches */
86: {
87: break; /* jump and return */
88: }
89:
90: if (strcmp (line, dest) > 0) /* past it */
91: {
92: path = NULL;
93: break;
94: }
95: }
96: fclose (mapfile); /* don't litter */
97: return (path); /* and our answer */
98: }
99: #endif EXPANDPATH
Defined functions
Defined variables
rcsid
defined in line
5;
never used