Commit | Line | Data |
---|---|---|
3b600ead TL |
1 | #define NMOUNT 16 |
2 | #define NAMSIZ 32 | |
3 | ||
4 | struct mtab { | |
5 | char file[NAMSIZ]; | |
6 | char spec[NAMSIZ]; | |
7 | } mtab[NMOUNT]; | |
8 | ||
9 | main(argc, argv) | |
10 | char **argv; | |
11 | { | |
12 | register struct mtab *mp; | |
13 | register char *p1, *p2; | |
14 | int mf; | |
15 | ||
16 | sync(); | |
17 | mf = open("/etc/mtab", 0); | |
18 | read(mf, (char *)mtab, NMOUNT*2*NAMSIZ); | |
19 | if(argc != 2) { | |
20 | printf("arg count\n"); | |
21 | return(1); | |
22 | } | |
23 | if (umount(argv[1]) < 0) { | |
24 | perror("umount"); | |
25 | return(1); | |
26 | } | |
27 | p1 = argv[1]; | |
28 | while(*p1++) | |
29 | ; | |
30 | p1--; | |
31 | while(*--p1 == '/') | |
32 | *p1 = '\0'; | |
33 | while(p1 > argv[1] && *--p1 != '/') | |
34 | ; | |
35 | if(*p1 == '/') | |
36 | p1++; | |
37 | argv[1] = p1; | |
38 | for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { | |
39 | p1 = argv[1]; | |
40 | p2 = &mp->spec[0]; | |
41 | while (*p1++ == *p2) | |
42 | if (*p2++ == 0) { | |
43 | for (p1 = mp->file; p1 < &mp->file[NAMSIZ*2];) | |
44 | *p1++ = 0; | |
45 | mp = &mtab[NMOUNT]; | |
46 | while ((--mp)->file[0] == 0); | |
47 | mf = creat("/etc/mtab", 0644); | |
48 | write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ); | |
49 | return(0); | |
50 | } | |
51 | } | |
52 | printf("%s not in mount table\n", argv[1]); | |
53 | return(1); | |
54 | } |