From c38b452ac4a804ba6d707367439e3520e929d805 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Tue, 2 Aug 2016 00:50:20 +0200 Subject: [PATCH] Add set/get/endfsent() support for musl libc This patch adds support for the following /etc/fstab API's on systems that do not have them, e.g. musl libc on Alpine Linux. - setfsent() - getfsent(), and - endfsent() Signed-off-by: Joachim Nilsson --- configure.ac | 3 ++- finit.c | 2 ++ helpers.c | 39 +++++++++++++++++++++++++++++++++++++++ helpers.h | 16 ++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) 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_ */ /**