| 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 | } |