BSD 3 development
[unix-history] / usr / src / cmd / mount.c
CommitLineData
9c79dca0
BJ
1#include <stdio.h>
2
3#define NMOUNT 16
4#define NAMSIZ 32
5
6struct mtab {
7 char file[NAMSIZ];
8 char spec[NAMSIZ];
9} mtab[NMOUNT];
10
11main(argc, argv)
12char **argv;
13{
14 register int ro;
15 register struct mtab *mp;
16 register char *np;
17 int mf;
18
19 mf = open("/etc/mtab", 0);
20 read(mf, (char *)mtab, NMOUNT*2*NAMSIZ);
21 if (argc==1) {
22 for (mp = mtab; mp < &mtab[NMOUNT]; mp++)
23 if (mp->file[0])
24 printf("%s on %s\n", mp->spec, mp->file);
25 exit(0);
26 }
27 if(argc < 3) {
28 fprintf(stderr,"arg count\n");
29 exit(1);
30 }
31 ro = 0;
32 if(argc > 3)
33 ro++;
34 if(mount(argv[1], argv[2], ro) < 0) {
35 perror("mount");
36 exit(1);
37 }
38 np = argv[1];
39 while(*np++)
40 ;
41 np--;
42 while(*--np == '/')
43 *np = '\0';
44 while(np > argv[1] && *--np != '/')
45 ;
46 if(*np == '/')
47 np++;
48 argv[1] = np;
49 for (mp = mtab; mp < &mtab[NMOUNT]; mp++) {
50 if (mp->file[0] == 0) {
51 for (np = mp->spec; np < &mp->spec[NAMSIZ-1];)
52 if ((*np++ = *argv[1]++) == 0)
53 argv[1]--;
54 for (np = mp->file; np < &mp->file[NAMSIZ-1];)
55 if ((*np++ = *argv[2]++) == 0)
56 argv[2]--;
57 mp = &mtab[NMOUNT];
58 while ((--mp)->file[0] == 0);
59 mf = creat("/etc/mtab", 0644);
60 write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ);
61 exit(0);
62 }
63 }
64 exit(0);
65}