Annotation of 43BSDReno/lib/libc/gen/fstab.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1980, 1988 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms are permitted
                      6:  * provided that: (1) source distributions retain this entire copyright
                      7:  * notice and comment, and (2) distributions including binaries display
                      8:  * the following acknowledgement:  ``This product includes software
                      9:  * developed by the University of California, Berkeley and its contributors''
                     10:  * in the documentation or other materials provided with the distribution
                     11:  * and in all advertising materials mentioning features or use of this
                     12:  * software. Neither the name of the University nor the names of its
                     13:  * contributors may be used to endorse or promote products derived
                     14:  * from this software without specific prior written permission.
                     15:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     16:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     17:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     18:  */
                     19: 
                     20: #if defined(LIBC_SCCS) && !defined(lint)
                     21: static char sccsid[] = "@(#)fstab.c    5.11 (Berkeley) 6/1/90";
                     22: #endif /* LIBC_SCCS and not lint */
                     23: 
                     24: #include <fstab.h>
                     25: #include <unistd.h>
                     26: #include <stdio.h>
                     27: 
                     28: static FILE *_fs_fp;
                     29: static struct fstab _fs_fstab;
                     30: 
                     31: static
                     32: fstabscan()
                     33: {
                     34:        register char *cp;
                     35: #define        MAXLINELENGTH   1024
                     36:        static char line[MAXLINELENGTH];
                     37:        char subline[MAXLINELENGTH];
                     38:        char *fgets(), *strtok();
                     39:        int typexx;
                     40: 
                     41:        for (;;) {
                     42:                if (!(cp = fgets(line, sizeof(line), _fs_fp)))
                     43:                        return(0);
                     44:                _fs_fstab.fs_spec = strtok(cp, " \t\n");
                     45:                if (!_fs_fstab.fs_spec || *_fs_fstab.fs_spec == '#')
                     46:                        continue;
                     47:                _fs_fstab.fs_file = strtok((char *)NULL, " \t\n");
                     48:                _fs_fstab.fs_vfstype = strtok((char *)NULL, " \t\n");
                     49:                _fs_fstab.fs_mntops = strtok((char *)NULL, " \t\n");
                     50:                if (_fs_fstab.fs_mntops == NULL)
                     51:                        goto bad;
                     52:                _fs_fstab.fs_freq = 0;
                     53:                _fs_fstab.fs_passno = 0;
                     54:                if ((cp = strtok((char *)NULL, " \t\n")) != NULL) {
                     55:                        _fs_fstab.fs_freq = atoi(cp);
                     56:                        if ((cp = strtok((char *)NULL, " \t\n")) != NULL)
                     57:                                _fs_fstab.fs_passno = atoi(cp);
                     58:                }
                     59:                strcpy(subline, _fs_fstab.fs_mntops);
                     60:                for (typexx = 0, cp = strtok(subline, ","); cp;
                     61:                     cp = strtok((char *)NULL, ",")) {
                     62:                        if (strlen(cp) != 2)
                     63:                                continue;
                     64:                        if (!strcmp(cp, FSTAB_RW)) {
                     65:                                _fs_fstab.fs_type = FSTAB_RW;
                     66:                                break;
                     67:                        }
                     68:                        if (!strcmp(cp, FSTAB_RQ)) {
                     69:                                _fs_fstab.fs_type = FSTAB_RQ;
                     70:                                break;
                     71:                        }
                     72:                        if (!strcmp(cp, FSTAB_RO)) {
                     73:                                _fs_fstab.fs_type = FSTAB_RO;
                     74:                                break;
                     75:                        }
                     76:                        if (!strcmp(cp, FSTAB_SW)) {
                     77:                                _fs_fstab.fs_type = FSTAB_SW;
                     78:                                break;
                     79:                        }
                     80:                        if (!strcmp(cp, FSTAB_XX)) {
                     81:                                _fs_fstab.fs_type = FSTAB_XX;
                     82:                                typexx++;
                     83:                                break;
                     84:                        }
                     85:                }
                     86:                if (typexx)
                     87:                        continue;
                     88:                if (cp != NULL)
                     89:                        return(1);
                     90:        bad:
                     91:                /* no way to distinguish between EOF and syntax error */
                     92:                (void)write(STDERR_FILENO, "fstab: ", 7);
                     93:                (void)write(STDERR_FILENO, _PATH_FSTAB,
                     94:                    sizeof(_PATH_FSTAB) - 1);
                     95:                (void)write(STDERR_FILENO, ": syntax error.\n", 16);
                     96:        }
                     97:        /* NOTREACHED */
                     98: }
                     99: 
                    100: struct fstab *
                    101: getfsent()
                    102: {
                    103:        if (!_fs_fp && !setfsent() || !fstabscan())
                    104:                return((struct fstab *)NULL);
                    105:        return(&_fs_fstab);
                    106: }
                    107: 
                    108: struct fstab *
                    109: getfsspec(name)
                    110:        register char *name;
                    111: {
                    112:        if (setfsent())
                    113:                while (fstabscan())
                    114:                        if (!strcmp(_fs_fstab.fs_spec, name))
                    115:                                return(&_fs_fstab);
                    116:        return((struct fstab *)NULL);
                    117: }
                    118: 
                    119: struct fstab *
                    120: getfsfile(name)
                    121:        register char *name;
                    122: {
                    123:        if (setfsent())
                    124:                while (fstabscan())
                    125:                        if (!strcmp(_fs_fstab.fs_file, name))
                    126:                                return(&_fs_fstab);
                    127:        return((struct fstab *)NULL);
                    128: }
                    129: 
                    130: setfsent()
                    131: {
                    132:        if (_fs_fp) {
                    133:                rewind(_fs_fp);
                    134:                return(1);
                    135:        }
                    136:        return((_fs_fp = fopen(_PATH_FSTAB, "r")) != NULL);
                    137: }
                    138: 
                    139: void
                    140: endfsent()
                    141: {
                    142:        if (_fs_fp) {
                    143:                (void)fclose(_fs_fp);
                    144:                _fs_fp = NULL;
                    145:        }
                    146: }

unix.superglobalmegacorp.com

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