X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/2b84abb596f52ab2068d52108adc96838ad4340a..31cef89cb428866f787983e68246030321893df4:/usr/src/cmd/mount.c?ds=inline diff --git a/usr/src/cmd/mount.c b/usr/src/cmd/mount.c index 6ec1d0088b..69324cfc24 100644 --- a/usr/src/cmd/mount.c +++ b/usr/src/cmd/mount.c @@ -1,5 +1,12 @@ +static char *sccsid = "@(#)mount.c 4.3 (Berkeley) 10/15/80"; #include +#include +/* + * mount + */ + +int mountall; #define NMOUNT 16 #define NAMSIZ 32 @@ -8,14 +15,15 @@ struct mtab { char spec[NAMSIZ]; } mtab[NMOUNT]; +int ro; main(argc, argv) char **argv; { - register int ro; register struct mtab *mp; register char *np; int mf; + mountall = 0; mf = open("/etc/mtab", 0); read(mf, (char *)mtab, NMOUNT*2*NAMSIZ); if (argc==1) { @@ -24,42 +32,106 @@ char **argv; printf("%s on %s\n", mp->spec, mp->file); exit(0); } - if(argc < 3) { - fprintf(stderr,"arg count\n"); - exit(1); + + if (argc == 2){ + if (strcmp(argv[1], "-a") == 0) + mountall++; + else { + fprintf(stdout,"arg count\n"); + exit(1); + } } - ro = 0; - if(argc > 3) - ro++; - if(mount(argv[1], argv[2], ro) < 0) { - perror("mount"); - exit(1); + + if (!mountall){ + ro = 0; + if(argc > 3) + ro++; + if (mountfs(argv[1], argv[2], ro)){ + perror("mount"); + exit(1); + } + } else { + struct fstab *fsp; + close(2); dup(1); + if (setfsent() == 0) + perror(FSTAB), exit(1); + while ( (fsp = getfsent()) != 0){ + if (strcmp(fsp->fs_file, "/") == 0) + continue; + ro = !strcmp(fsp->fs_type, FSTAB_RO); + if (ro==0 && strcmp(fsp->fs_type, FSTAB_RW)) + continue; + if (mountfs(fsp->fs_spec, fsp->fs_file, ro)) + failed(fsp); + else + succeed(fsp); + } + endfsent(); } - np = argv[1]; + exit(0); +} +failed(fsp) + register struct fstab *fsp; +{ + extern int errno; + extern char *sys_errlist[]; + int err = errno; + printf("Attempt to mount "); + location(fsp); + printf("FAILED: %s\n", sys_errlist[err]); +} +succeed(fsp) + register struct fstab *fsp; +{ + printf("Mounted "); + location(fsp); + printf("\n"); +} +location(fsp) + register struct fstab *fsp; +{ + extern int ro; + printf("%s on %s %s ", + fsp->fs_file, fsp->fs_spec, + ro ? "(Read Only)" : ""); +} + +mountfs(spec, name, ro) + char *spec, *name; + int ro; +{ + register char *np; + register struct mtab *mp; + int mf; + + if(mount(spec, name, ro) < 0) { + return(1); + } + np = spec; while(*np++) ; np--; while(*--np == '/') *np = '\0'; - while(np > argv[1] && *--np != '/') + while(np > spec && *--np != '/') ; if(*np == '/') np++; - argv[1] = np; + spec = np; for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { if (mp->file[0] == 0) { for (np = mp->spec; np < &mp->spec[NAMSIZ-1];) - if ((*np++ = *argv[1]++) == 0) - argv[1]--; + if ((*np++ = *spec++) == 0) + spec--; for (np = mp->file; np < &mp->file[NAMSIZ-1];) - if ((*np++ = *argv[2]++) == 0) - argv[2]--; + if ((*np++ = *name++) == 0) + name--; mp = &mtab[NMOUNT]; while ((--mp)->file[0] == 0); mf = creat("/etc/mtab", 0644); write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ); - exit(0); + return(0); } } - exit(0); + return(0); }