|
|
1.1 root 1: /*
2: * crack /etc/fstab; for mount, fsck, et al
3: */
4:
5: #include <fstab.h>
6: #include <stdio.h>
7: #include <ctype.h>
8: #include <string.h>
9:
10: static struct fstab fs;
11: static FILE *fs_file = 0;
12:
13: static int
14: fstabscan(fsp)
15: register struct fstab *fsp;
16: {
17: char *args[FSTABNARGS];
18: char buf[256];
19:
20: again:
21: if (fgets(buf, sizeof(buf), fs_file) == NULL)
22: return(0);
23: buf[strlen(buf)-1] = 0; /* discard \n */
24: setfields(":");
25: if (getfields(buf, args, FSTABNARGS) != FSTABNARGS)
26: goto again;
27: strcpy(fsp->fs_spec, args[0]);
28: strcpy(fsp->fs_file, args[1]);
29: if (isdigit(args[2][0]) || args[2][0] == '-') {
30: fsp->fs_ftype = atoi(args[2]);
31: fsp->fs_flags = atoi(args[3]);
32: } else if (strcmp(args[2], "rw") == 0) {
33: fsp->fs_ftype = 0;
34: fsp->fs_flags = 0;
35: } else if (strcmp(args[2], "ro") == 0) {
36: fsp->fs_ftype = 0;
37: fsp->fs_flags = 1;
38: } else if (strcmp(args[2], "sw") == 0) {
39: fsp->fs_ftype = FSSWAP;
40: fsp->fs_flags = 0;
41: } else {
42: fsp->fs_ftype = FSNONE;
43: fsp->fs_flags = 0;
44: }
45: fsp->fs_passno = atoi(args[4]);
46: return (1);
47: }
48:
49: int
50: setfsent()
51: {
52: if (fs_file)
53: endfsent();
54: if ((fs_file = fopen(FSTAB, "r")) == NULL)
55: return(0);
56: return(1);
57: }
58:
59: int endfsent()
60: {
61: if (fs_file)
62: fclose(fs_file);
63: return(1);
64: }
65:
66: struct fstab *
67: getfsent()
68: {
69:
70: if ((fs_file == 0) && (setfsent() == 0))
71: return(0);
72: if (fstabscan(&fs) == 0)
73: return (0);
74: return (&fs);
75: }
76:
77: struct fstab *
78: getfsspec(name)
79: char *name;
80: {
81: register struct fstab *fsp;
82:
83: if (setfsent() == 0) /* start from the beginning */
84: return(0);
85: while((fsp = getfsent()) != 0){
86: if (strcmp(fsp->fs_spec, name) == 0)
87: return(fsp);
88: }
89: return(0);
90: }
91:
92: struct fstab *
93: getfsfile(name)
94: char *name;
95: {
96: register struct fstab *fsp;
97:
98: if (setfsent() == 0) /* start from the beginning */
99: return(0);
100: while ((fsp = getfsent()) != 0){
101: if (strcmp(fsp->fs_file, name) == 0)
102: return(fsp);
103: }
104: return(0);
105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.