1: /* @(#)fstab.c 4.1 (Berkeley) 12/21/80 */
2: #include <fstab.h>
3: #include <stdio.h>
4: #include <ctype.h>
5:
6: static struct fstab fs;
7: static FILE *fs_file = 0;
8:
9: static char *fs_string(back, string, lg, end)
10: char *string, *back;
11: int lg; /* length of field to stuff into */
12: char end;
13: {
14: register char *cp;
15: for (cp = string; *cp && *cp != end; cp++)
16: continue;
17: if (*cp == '\0') return(0);
18: *cp = '\0';
19: strncpy(back, string, lg-1);
20: return(cp+1);
21: }
22: static char *fs_digit(backp, string, end)
23: int *backp;
24: char *string;
25: char end;
26: {
27: register int value = 0;
28: register char *cp;
29: for (cp = string; *cp && isdigit(*cp); cp++){
30: value *= 10;
31: value += *cp - '0';
32: }
33: if (*cp == '\0') return(0);
34: *backp = value;
35: while ( *cp && *cp != end)
36: cp++;
37: if (*cp == '\0') return(0);
38: return(cp+1);
39: }
40:
41: static int fstabscan(fsp)
42: struct fstab *fsp;
43: {
44: register char *cp;
45: char buf[256];
46: if (fgets(buf, 256, fs_file) == NULL)
47: return(EOF);
48: cp = buf;
49: cp = fs_string(&fsp->fs_spec[0], cp, FSNMLG, ':');
50: if (cp == 0) return(0);
51: cp = fs_string(&fsp->fs_file[0], cp, FSNMLG, ':');
52: if (cp == 0) return(1);
53: cp = fs_string(&fsp->fs_type[0], cp, 3, ':');
54: if (cp == 0) return(2);
55: cp = fs_digit(&fsp->fs_freq, cp, ':');
56: if (cp == 0) return(3);
57: cp = fs_digit(&fsp->fs_passno, cp, '\n');
58: if (cp == 0) return(4);
59: return(5);
60: }
61:
62: int setfsent()
63: {
64: if (fs_file)
65: endfsent();
66: if ( (fs_file = fopen(FSTAB, "r")) == NULL){
67: fs_file = 0;
68: return(0);
69: }
70: return(1);
71: }
72:
73: int endfsent()
74: {
75: if (fs_file){
76: fclose(fs_file);
77: }
78: return(1);
79: }
80:
81: struct fstab *getfsent()
82: {
83: int nfields;
84:
85: if ( (fs_file == 0) && (setfsent() == 0) )
86: return(0);
87: nfields = fstabscan(&fs);
88: if (nfields == EOF || nfields != FSTABNARGS)
89: return(0);
90: return(&fs);
91: }
92: struct fstab *getfsspec(name)
93: char *name;
94: {
95: register struct fstab *fsp;
96: if (setfsent() == 0) /* start from the beginning */
97: return(0);
98: while( (fsp = getfsent()) != 0){
99: if (strncmp(fsp->fs_spec, name, sizeof(fsp->fs_spec)) == 0)
100: return(fsp);
101: }
102: return(0);
103: }
104: struct fstab *getfsfile(name)
105: char *name;
106: {
107: register struct fstab *fsp;
108: if (setfsent() == 0) /* start from the beginning */
109: return(0);
110: while ( (fsp = getfsent()) != 0){
111: if (strncmp(fsp->fs_file, name, sizeof(fsp->fs_spec)) == 0)
112: return(fsp);
113: }
114: return(0);
115: }
Defined functions
Defined variables
fs
defined in line
6; used 2 times