diff --git a/configure.ac b/configure.ac index f1b83503..876ac246 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,8 @@ AC_PROG_INSTALL # Configuration. AC_HEADER_STDC -AC_CHECK_FUNCS(strstr getopt) +AC_CHECK_HEADERS(fstaby.h) +AC_CHECK_FUNCS(strstr getopt getfsenty) # Check for uint[8,16,32]_t AC_TYPE_UINT8_T diff --git a/finit.c b/finit.c index dc7ff5e5..d6112489 100644 --- a/finit.c +++ b/finit.c @@ -27,7 +27,9 @@ #include #include #include +#ifdef HAVE_FSTAB_H #include +#endif #include #include #include /* umask(), mkdir() */ diff --git a/helpers.c b/helpers.c index 037bfd1f..20ff68d0 100644 --- a/helpers.c +++ b/helpers.c @@ -254,6 +254,45 @@ void set_hostname(char **hostname) sethostname(*hostname, strlen(*hostname)); } +#ifndef HAVE_GETFSENT +static lfile_t *fstab = NULL; + +int setfsent(void) +{ + if (fstab) + lfclose(fstab); + + fstab = lfopen("/etc/fstab", " \t\n"); + if (!fstab) + return 0; + + return 1; +} + +struct fstab *getfsent(void) +{ + static struct fstab fs; + + fs.fs_spec = lftok(fstab); + fs.fs_file = lftok(fstab); + fs.fs_vfstype = lftok(fstab); + fs.fs_mntops = lftok(fstab); + fs.fs_type = (const char *)lftok(fstab); + fs.fs_freq = atoi(lftok(fstab) ?: 0); + fs.fs_passno = atoi(lftok(fstab) ?: 0); + + return &fs; +} + +void endfsent(void) +{ + if (fstab) + lfclose(fstab); + + fstab = NULL; +} +#endif /* HAVE_GETFSENT */ + /** * Local Variables: * indent-tabs-mode: t diff --git a/helpers.h b/helpers.h index f21d7af3..25cd3168 100644 --- a/helpers.h +++ b/helpers.h @@ -86,6 +86,22 @@ int run_interactive (char *cmd, char *fmt, ...); pid_t run_getty (char *tty, char *speed, char *term, int console); int run_parts (char *dir, char *cmd); +#ifndef HAVE_GETFSENT +struct fstab { + char *fs_spec; /* block device name */ + char *fs_file; /* mount point */ + char *fs_vfstype; /* file-system type */ + char *fs_mntops; /* mount options */ + const char *fs_type; /* rw/rq/ro/sw/xx option */ + int fs_freq; /* dump frequency, in days */ + int fs_passno; /* pass number on parallel dump */ +}; + +int setfsent(void); +void endfsent(void); +struct fstab *getfsent(void); +#endif /* HAVE_GETFSENT */ + #endif /* FINIT_HELPERS_H_ */ /**