BSD 4_2 release
[unix-history] / usr / src / lib / libc / gen / fstab.c
index b836cbf..bc0cf72 100644 (file)
-/* @(#)fstab.c 4.1 (Berkeley) %G% */
+#ifndef lint
+static char sccsid[] = "@(#)fstab.c    4.4 (Berkeley) 6/19/83";
+#endif
+
 #include <fstab.h>
 #include <stdio.h>
 #include <ctype.h>
 
 #include <fstab.h>
 #include <stdio.h>
 #include <ctype.h>
 
-static struct  fstab fs;
-static FILE    *fs_file = 0;
+static struct fstab fs;
+static char line[BUFSIZ+1];
+static FILE *fs_file = 0;
 
 
-static char    *fs_string(back, string, lg, end)
-       char    *string, *back;
-       int     lg;     /* length of field to stuff into */
-       char    end;
+static char *
+fsskip(p)
+       register char *p;
 {
 {
-       register        char    *cp;
-       for (cp = string; *cp && *cp != end; cp++)
-               continue;
-       if (*cp == '\0') return(0);
-       *cp = '\0';
-       strncpy(back, string, lg-1);
-       return(cp+1);
+
+       while (*p && *p != ':')
+               ++p;
+       if (*p)
+               *p++ = 0;
+       return (p);
 }
 }
-static char *fs_digit(backp, string, end)
-       int     *backp;
-       char    *string;
-       char    end;
+
+static char *
+fsdigit(backp, string, end)
+       int *backp;
+       char *string, end;
 {
 {
-       register        int     value = 0;
-       register        char    *cp;
-       for (cp = string; *cp && isdigit(*cp); cp++){
+       register int value = 0;
+       register char *cp;
+
+       for (cp = string; *cp && isdigit(*cp); cp++) {
                value *= 10;
                value += *cp - '0';
        }
                value *= 10;
                value += *cp - '0';
        }
-       if (*cp == '\0') return(0);
+       if (*cp == '\0')
+               return ((char *)0);
        *backp = value;
        *backp = value;
-       while ( *cp && *cp != end)
+       while (*cp && *cp != end)
                cp++;
                cp++;
-       if (*cp == '\0') return(0);
-       return(cp+1);
+       if (*cp == '\0')
+               return ((char *)0);
+       return (cp+1);
 }
 
 }
 
-static int     fstabscan(fsp)
-       struct  fstab *fsp;
+static
+fstabscan(fs)
+       struct fstab *fs;
 {
 {
-       register        char    *cp;
-       char    buf[256];
-       if (fgets(buf, 256, fs_file) == NULL)
-               return(EOF);
-       cp = buf;
-       cp = fs_string(&fsp->fs_spec[0], cp, FSNMLG, ':');
-       if (cp == 0)    return(0);
-       cp = fs_string(&fsp->fs_file[0], cp, FSNMLG, ':');
-       if (cp == 0)    return(1);
-       cp = fs_string(&fsp->fs_type[0], cp, 3, ':');
-       if (cp == 0)    return(2);
-       cp = fs_digit(&fsp->fs_freq, cp, ':');
-       if (cp == 0)    return(3);
-       cp = fs_digit(&fsp->fs_passno, cp, '\n');
-       if (cp == 0)    return(4);
-       return(5);
+       register char *cp;
+
+       cp = fgets(line, 256, fs_file);
+       if (cp == NULL)
+               return (EOF);
+       fs->fs_spec = cp;
+       cp = fsskip(cp);
+       fs->fs_file = cp;
+       cp = fsskip(cp);
+       fs->fs_type = cp;
+       cp = fsskip(cp);
+       cp = fsdigit(&fs->fs_freq, cp, ':');
+       if (cp == 0)
+               return (3);
+       cp = fsdigit(&fs->fs_passno, cp, '\n');
+       if (cp == 0)
+               return (4);
+       return (5);
 }
        
 }
        
-int    setfsent()
+setfsent()
 {
 {
+
        if (fs_file)
                endfsent();
        if (fs_file)
                endfsent();
-       if ( (fs_file = fopen(FSTAB, "r")) == NULL){
+       if ((fs_file = fopen(FSTAB, "r")) == NULL) {
                fs_file = 0;
                fs_file = 0;
-               return(0);
+               return (0);
        }
        }
-       return(1);
+       return (1);
 }
 
 }
 
-int endfsent()
+endfsent()
 {
 {
-       if (fs_file){
+
+       if (fs_file) {
                fclose(fs_file);
                fclose(fs_file);
+               fs_file = 0;
        }
        }
-       return(1);
+       return (1);
 }
 
 }
 
-struct fstab *getfsent()
+struct fstab *
+getfsent()
 {
 {
-       int     nfields;
+       int nfields;
 
 
-       if ( (fs_file == 0) && (setfsent() == 0) )
-               return(0);
+       if ((fs_file == 0) && (setfsent() == 0))
+               return ((struct fstab *)0);
        nfields = fstabscan(&fs);
        nfields = fstabscan(&fs);
-       if (nfields == EOF || nfields != FSTABNARGS)
-               return(0);
-       return(&fs);
+       if (nfields == EOF || nfields != 5)
+               return ((struct fstab *)0);
+       return (&fs);
 }
 }
-struct fstab *getfsspec(name)
-       char    *name;
+
+struct fstab *
+getfsspec(name)
+       char *name;
 {
 {
-       register        struct  fstab *fsp;
+       register struct fstab *fsp;
+
        if (setfsent() == 0)    /* start from the beginning */
        if (setfsent() == 0)    /* start from the beginning */
-               return(0);
-       while( (fsp = getfsent()) != 0){
-               if (strncmp(fsp->fs_spec, name, sizeof(fsp->fs_spec)) == 0)
-                       return(fsp);
-       }
-       return(0);
+               return ((struct fstab *)0);
+       while((fsp = getfsent()) != 0)
+               if (strcmp(fsp->fs_spec, name) == 0)
+                       return (fsp);
+       return ((struct fstab *)0);
 }
 }
-struct fstab *getfsfile(name)
-       char    *name;
+
+struct fstab *
+getfsfile(name)
+       char *name;
 {
 {
-       register        struct fstab *fsp;
+       register struct fstab *fsp;
+
        if (setfsent() == 0)    /* start from the beginning */
        if (setfsent() == 0)    /* start from the beginning */
-               return(0);
-       while ( (fsp = getfsent()) != 0){
-               if (strncmp(fsp->fs_file, name, sizeof(fsp->fs_spec)) == 0)
-                       return(fsp);
-       }
-       return(0);
+               return ((struct fstab *)0);
+       while ((fsp = getfsent()) != 0)
+               if (strcmp(fsp->fs_file, name) == 0)
+                       return (fsp);
+       return ((struct fstab *)0);
+}
+
+struct fstab *
+getfstype(type)
+       char *type;
+{
+       register struct fstab *fs;
+
+       if (setfsent() == 0)
+               return ((struct fstab *)0);
+       while ((fs = getfsent()) != 0)
+               if (strcmp(fs->fs_type, type) == 0)
+                       return (fs);
+       return ((struct fstab *)0);
 }
 }