|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)fstab.c 4.4 (Berkeley) 6/19/83"; ! 3: #endif ! 4: ! 5: #include <fstab.h> ! 6: #include <stdio.h> ! 7: #include <ctype.h> ! 8: ! 9: static struct fstab fs; ! 10: static char line[BUFSIZ+1]; ! 11: static FILE *fs_file = 0; ! 12: ! 13: static char * ! 14: fsskip(p) ! 15: register char *p; ! 16: { ! 17: ! 18: while (*p && *p != ':') ! 19: ++p; ! 20: if (*p) ! 21: *p++ = 0; ! 22: return (p); ! 23: } ! 24: ! 25: static char * ! 26: fsdigit(backp, string, end) ! 27: int *backp; ! 28: char *string, end; ! 29: { ! 30: register int value = 0; ! 31: register char *cp; ! 32: ! 33: for (cp = string; *cp && isdigit(*cp); cp++) { ! 34: value *= 10; ! 35: value += *cp - '0'; ! 36: } ! 37: if (*cp == '\0') ! 38: return ((char *)0); ! 39: *backp = value; ! 40: while (*cp && *cp != end) ! 41: cp++; ! 42: if (*cp == '\0') ! 43: return ((char *)0); ! 44: return (cp+1); ! 45: } ! 46: ! 47: static ! 48: fstabscan(fs) ! 49: struct fstab *fs; ! 50: { ! 51: register char *cp; ! 52: ! 53: cp = fgets(line, 256, fs_file); ! 54: if (cp == NULL) ! 55: return (EOF); ! 56: fs->fs_spec = cp; ! 57: cp = fsskip(cp); ! 58: fs->fs_file = cp; ! 59: cp = fsskip(cp); ! 60: fs->fs_type = cp; ! 61: cp = fsskip(cp); ! 62: cp = fsdigit(&fs->fs_freq, cp, ':'); ! 63: if (cp == 0) ! 64: return (3); ! 65: cp = fsdigit(&fs->fs_passno, cp, '\n'); ! 66: if (cp == 0) ! 67: return (4); ! 68: return (5); ! 69: } ! 70: ! 71: setfsent() ! 72: { ! 73: ! 74: if (fs_file) ! 75: endfsent(); ! 76: if ((fs_file = fopen(FSTAB, "r")) == NULL) { ! 77: fs_file = 0; ! 78: return (0); ! 79: } ! 80: return (1); ! 81: } ! 82: ! 83: endfsent() ! 84: { ! 85: ! 86: if (fs_file) { ! 87: fclose(fs_file); ! 88: fs_file = 0; ! 89: } ! 90: return (1); ! 91: } ! 92: ! 93: struct fstab * ! 94: getfsent() ! 95: { ! 96: int nfields; ! 97: ! 98: if ((fs_file == 0) && (setfsent() == 0)) ! 99: return ((struct fstab *)0); ! 100: nfields = fstabscan(&fs); ! 101: if (nfields == EOF || nfields != 5) ! 102: return ((struct fstab *)0); ! 103: return (&fs); ! 104: } ! 105: ! 106: struct fstab * ! 107: getfsspec(name) ! 108: char *name; ! 109: { ! 110: register struct fstab *fsp; ! 111: ! 112: if (setfsent() == 0) /* start from the beginning */ ! 113: return ((struct fstab *)0); ! 114: while((fsp = getfsent()) != 0) ! 115: if (strcmp(fsp->fs_spec, name) == 0) ! 116: return (fsp); ! 117: return ((struct fstab *)0); ! 118: } ! 119: ! 120: struct fstab * ! 121: getfsfile(name) ! 122: char *name; ! 123: { ! 124: register struct fstab *fsp; ! 125: ! 126: if (setfsent() == 0) /* start from the beginning */ ! 127: return ((struct fstab *)0); ! 128: while ((fsp = getfsent()) != 0) ! 129: if (strcmp(fsp->fs_file, name) == 0) ! 130: return (fsp); ! 131: return ((struct fstab *)0); ! 132: } ! 133: ! 134: struct fstab * ! 135: getfstype(type) ! 136: char *type; ! 137: { ! 138: register struct fstab *fs; ! 139: ! 140: if (setfsent() == 0) ! 141: return ((struct fstab *)0); ! 142: while ((fs = getfsent()) != 0) ! 143: if (strcmp(fs->fs_type, type) == 0) ! 144: return (fs); ! 145: return ((struct fstab *)0); ! 146: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.