Annotation of researchv9/cmd/mount.c, revision 1.1.1.1

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(stderr, "usage: mount [-a] [special dir [-r]]\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:                if (setfsent() == 0)
                     56:                        perror(FSTAB), exit(1);
                     57:                while ( (fsp = getfsent()) != 0){
                     58:                        if (strcmp(fsp->fs_file, "/") == 0)
                     59:                                continue;
                     60:                        ro = !strcmp(fsp->fs_type, FSTAB_RO);
                     61:                        if (ro==0 && strcmp(fsp->fs_type, FSTAB_RW))
                     62:                                continue;
                     63:                        if (mountfs(fsp->fs_spec, fsp->fs_file, ro))
                     64:                                failed(fsp);
                     65:                        else
                     66:                                succeed(fsp);
                     67:                }
                     68:                endfsent();
                     69:        }
                     70:        exit(0);
                     71: }
                     72: failed(fsp)
                     73:        register        struct  fstab *fsp;
                     74: {
                     75:        extern int errno;
                     76:        extern char *sys_errlist[];
                     77:        int err = errno;
                     78:        printf("can't mount ");
                     79:        location(fsp);
                     80:        printf(": %s\n", sys_errlist[err]);
                     81: }
                     82: succeed(fsp)
                     83:        register        struct  fstab *fsp;
                     84: {
                     85:        printf("Mounted ");
                     86:        location(fsp);
                     87:        printf("\n");
                     88: }
                     89: location(fsp)
                     90:        register        struct  fstab *fsp;
                     91: {
                     92:        extern  int     ro;
                     93:        printf("%s on %s%s",
                     94:                fsp->fs_spec, fsp->fs_file,
                     95:                ro ? " (read only)" : "");
                     96: }
                     97: 
                     98: mountfs(spec, name, ro)
                     99:        char    *spec, *name;
                    100:        int     ro;
                    101: {
                    102:        register        char    *np;
                    103:        register        struct  mtab    *mp;
                    104:        int     mf;
                    105: 
                    106:        if(mount(spec, name, ro) < 0)
                    107:                return(1);
                    108:        np = spec;
                    109:        while(*np++)
                    110:                ;
                    111:        np--;
                    112:        while(*--np == '/')
                    113:                *np = '\0';
                    114:        while(np > spec && *--np != '/')
                    115:                ;
                    116:        if(*np == '/')
                    117:                np++;
                    118:        spec = np;
                    119:        for (mp = mtab; mp < &mtab[NMOUNT]; mp++) {
                    120:                if (mp->file[0] == 0) {
                    121:                        for (np = mp->spec; np < &mp->spec[NAMSIZ-1];)
                    122:                                if ((*np++ = *spec++) == 0)
                    123:                                        spec--;
                    124:                        for (np = mp->file; np < &mp->file[NAMSIZ-1];)
                    125:                                if ((*np++ = *name++) == 0)
                    126:                                        name--;
                    127:                        mp = &mtab[NMOUNT];
                    128:                        while ((--mp)->file[0] == 0);
                    129:                        mf = creat("/etc/mtab", 0644);
                    130:                        write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ);
                    131:                        return(0);
                    132:                }
                    133:        }
                    134:        return(0);
                    135: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.