|
|
1.1 ! root 1: static char *sccsid = "@(#)mount.c 4.3 (Berkeley) 10/15/80"; ! 2: #include <stdio.h> ! 3: #include <fstab.h> ! 4: ! 5: /* ! 6: * mount ! 7: */ ! 8: ! 9: int mountall; ! 10: #define NMOUNT 16 ! 11: #define NAMSIZ 32 ! 12: ! 13: struct mtab { ! 14: char file[NAMSIZ]; ! 15: char spec[NAMSIZ]; ! 16: } mtab[NMOUNT]; ! 17: ! 18: int ro; ! 19: main(argc, argv) ! 20: char **argv; ! 21: { ! 22: register struct mtab *mp; ! 23: register char *np; ! 24: int mf; ! 25: ! 26: mountall = 0; ! 27: mf = open("/etc/mtab", 0); ! 28: read(mf, (char *)mtab, NMOUNT*2*NAMSIZ); ! 29: if (argc==1) { ! 30: for (mp = mtab; mp < &mtab[NMOUNT]; mp++) ! 31: if (mp->file[0]) ! 32: printf("%s on %s\n", mp->spec, mp->file); ! 33: exit(0); ! 34: } ! 35: ! 36: if (argc == 2){ ! 37: if (strcmp(argv[1], "-a") == 0) ! 38: mountall++; ! 39: else { ! 40: fprintf(stdout,"arg count\n"); ! 41: exit(1); ! 42: } ! 43: } ! 44: ! 45: if (!mountall){ ! 46: ro = 0; ! 47: if(argc > 3) ! 48: ro++; ! 49: if (mountfs(argv[1], argv[2], ro)){ ! 50: perror("mount"); ! 51: exit(1); ! 52: } ! 53: } else { ! 54: struct fstab *fsp; ! 55: close(2); dup(1); ! 56: if (setfsent() == 0) ! 57: perror(FSTAB), exit(1); ! 58: while ( (fsp = getfsent()) != 0){ ! 59: if (strcmp(fsp->fs_file, "/") == 0) ! 60: continue; ! 61: ro = !strcmp(fsp->fs_type, FSTAB_RO); ! 62: if (ro==0 && strcmp(fsp->fs_type, FSTAB_RW)) ! 63: continue; ! 64: if (mountfs(fsp->fs_spec, fsp->fs_file, ro)) ! 65: failed(fsp); ! 66: else ! 67: succeed(fsp); ! 68: } ! 69: endfsent(); ! 70: } ! 71: exit(0); ! 72: } ! 73: failed(fsp) ! 74: register struct fstab *fsp; ! 75: { ! 76: extern int errno; ! 77: extern char *sys_errlist[]; ! 78: int err = errno; ! 79: printf("Attempt to mount "); ! 80: location(fsp); ! 81: printf("FAILED: %s\n", sys_errlist[err]); ! 82: } ! 83: succeed(fsp) ! 84: register struct fstab *fsp; ! 85: { ! 86: printf("Mounted "); ! 87: location(fsp); ! 88: printf("\n"); ! 89: } ! 90: location(fsp) ! 91: register struct fstab *fsp; ! 92: { ! 93: extern int ro; ! 94: printf("%s on %s %s ", ! 95: fsp->fs_file, fsp->fs_spec, ! 96: ro ? "(Read Only)" : ""); ! 97: } ! 98: ! 99: mountfs(spec, name, ro) ! 100: char *spec, *name; ! 101: int ro; ! 102: { ! 103: register char *np; ! 104: register struct mtab *mp; ! 105: int mf; ! 106: ! 107: if(mount(spec, name, ro) < 0) { ! 108: return(1); ! 109: } ! 110: np = spec; ! 111: while(*np++) ! 112: ; ! 113: np--; ! 114: while(*--np == '/') ! 115: *np = '\0'; ! 116: while(np > spec && *--np != '/') ! 117: ; ! 118: if(*np == '/') ! 119: np++; ! 120: spec = np; ! 121: for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { ! 122: if (mp->file[0] == 0) { ! 123: for (np = mp->spec; np < &mp->spec[NAMSIZ-1];) ! 124: if ((*np++ = *spec++) == 0) ! 125: spec--; ! 126: for (np = mp->file; np < &mp->file[NAMSIZ-1];) ! 127: if ((*np++ = *name++) == 0) ! 128: name--; ! 129: mp = &mtab[NMOUNT]; ! 130: while ((--mp)->file[0] == 0); ! 131: mf = creat("/etc/mtab", 0644); ! 132: write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ); ! 133: return(0); ! 134: } ! 135: } ! 136: return(0); ! 137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.