|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.