+static char *sccsid = "@(#)mount.c 4.3 (Berkeley) 10/15/80";
#include <stdio.h>
+#include <fstab.h>
+/*
+ * mount
+ */
+
+int mountall;
#define NMOUNT 16
#define NAMSIZ 32
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) {
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);
}