Annotation of 43BSD/contrib/xns/xnslib/getcourierent.c, revision 1.1

1.1     ! root        1: /*     $Header: getcourierent.c,v 2.0 85/11/21 07:22:07 jqj Exp $      */
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include "courierdb.h"
        !             5: #include <ctype.h>
        !             6: 
        !             7: /*
        !             8:  *
        !             9:  */
        !            10: #ifdef CSERVICES
        !            11: static char *COURIERDB = CSERVICES;
        !            12: #else
        !            13: static char *COURIERDB = "/usr/new/lib/xnscourier/Courierservices";
        !            14: #endif
        !            15: static FILE *courierdbf = NULL;
        !            16: static char line[BUFSIZ+1];
        !            17: static struct courierdbent service;
        !            18: int _courier_stayopen;
        !            19: static char *skipspace(), *skipitem();
        !            20: 
        !            21: setcourierdbent(f)
        !            22:        int f;
        !            23: {
        !            24:        if (courierdbf != NULL)
        !            25:                rewind(courierdbf);
        !            26:        _courier_stayopen |= f;
        !            27: }
        !            28: 
        !            29: endcourierdbent()
        !            30: {
        !            31:        if (courierdbf != NULL) {
        !            32:                fclose(courierdbf);
        !            33:                courierdbf = NULL;
        !            34:        }
        !            35:        _courier_stayopen = 0;
        !            36: }
        !            37: 
        !            38: struct courierdbent *
        !            39: getcourierdbent()
        !            40: {
        !            41:        char *p;
        !            42:        register char *cp, c;
        !            43: 
        !            44:        if (courierdbf == NULL 
        !            45:            && (courierdbf = fopen(COURIERDB, "r" )) == NULL)
        !            46:                return (NULL);
        !            47: 
        !            48:        do {
        !            49:                if ((p = fgets(line, BUFSIZ, courierdbf)) == NULL)
        !            50:                        return (NULL);
        !            51:                p = skipspace(p);
        !            52:                cp = p;         /* end of whitespace */
        !            53:                while ((c = *cp) != '\0' && c != '\n' && c != '#')
        !            54:                        cp++;
        !            55:                *cp = '\0';     /* end of data */
        !            56:        } while (*p == '\0');
        !            57: 
        !            58:        service.cr_programname = p;             /* a string */
        !            59:        cp = skipitem(p);
        !            60:        if (*cp != '\0') {
        !            61:                *cp = '\0';
        !            62:                cp = skipspace(++cp);
        !            63:        }
        !            64:        service.cr_programnumber = (unsigned long) atol(cp);    /* a long */
        !            65:        cp = skipitem(cp);  cp = skipspace(cp);
        !            66:        service.cr_version = (unsigned short) atoi(cp);         /* an int */
        !            67:        cp = skipitem(cp);  cp = skipspace(cp);
        !            68:        service.cr_description = (*cp) ? cp : (char*) 0;
        !            69:        cp = skipitem(cp);
        !            70:        if (*cp != '\0') {
        !            71:                *cp = '\0';
        !            72:                cp = skipspace(++cp);
        !            73:        }
        !            74:        service.cr_serverbin = (*cp) ? cp : (char*) 0;
        !            75:        cp = skipitem(cp);
        !            76:        if (*cp != '\0') {
        !            77:                *cp = '\0';
        !            78:                /* etc. for more fields */
        !            79:        }
        !            80:        return (&service);
        !            81: }
        !            82: 
        !            83: static char * skipspace(p)
        !            84: /* move the pointer past leading whitespace, returning the updated ptr */
        !            85:        register char *p;
        !            86: {
        !            87:        register char c;
        !            88:        while ((c = *p) == ' ' || c == '\t')
        !            89:                p++;
        !            90:        return(p);
        !            91: }
        !            92: 
        !            93: static char* skipitem(p)
        !            94: /* move the pointer, p, past non-whitespace */
        !            95:        register char *p;
        !            96: {
        !            97:        register char c;
        !            98:        while ((c = *p) && c != ' ' && c != '\t')
        !            99:                p++;
        !           100:        return(p);
        !           101: }
        !           102: 
        !           103: setcourierdbfile(file)
        !           104:        char *file;
        !           105: {
        !           106:        COURIERDB = file;
        !           107: }
        !           108: 

unix.superglobalmegacorp.com

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