Annotation of 43BSD/contrib/notes/src/newspath.c, revision 1.1

1.1     ! root        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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.