| Index: fusl/src/misc/mntent.c
|
| diff --git a/fusl/src/misc/mntent.c b/fusl/src/misc/mntent.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a16d65254d5042df3de28ff29dc719ccecc76bc5
|
| --- /dev/null
|
| +++ b/fusl/src/misc/mntent.c
|
| @@ -0,0 +1,68 @@
|
| +#include <stdio.h>
|
| +#include <string.h>
|
| +#include <mntent.h>
|
| +#include <errno.h>
|
| +
|
| +FILE *setmntent(const char *name, const char *mode)
|
| +{
|
| + return fopen(name, mode);
|
| +}
|
| +
|
| +int endmntent(FILE *f)
|
| +{
|
| + if (f) fclose(f);
|
| + return 1;
|
| +}
|
| +
|
| +struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen)
|
| +{
|
| + int cnt, n[8];
|
| +
|
| + mnt->mnt_freq = 0;
|
| + mnt->mnt_passno = 0;
|
| +
|
| + do {
|
| + fgets(linebuf, buflen, f);
|
| + if (feof(f) || ferror(f)) return 0;
|
| + if (!strchr(linebuf, '\n')) {
|
| + fscanf(f, "%*[^\n]%*[\n]");
|
| + errno = ERANGE;
|
| + return 0;
|
| + }
|
| + cnt = sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
|
| + n, n+1, n+2, n+3, n+4, n+5, n+6, n+7,
|
| + &mnt->mnt_freq, &mnt->mnt_passno);
|
| + } while (cnt < 2 || linebuf[n[0]] == '#');
|
| +
|
| + linebuf[n[1]] = 0;
|
| + linebuf[n[3]] = 0;
|
| + linebuf[n[5]] = 0;
|
| + linebuf[n[7]] = 0;
|
| +
|
| + mnt->mnt_fsname = linebuf+n[0];
|
| + mnt->mnt_dir = linebuf+n[2];
|
| + mnt->mnt_type = linebuf+n[4];
|
| + mnt->mnt_opts = linebuf+n[6];
|
| +
|
| + return mnt;
|
| +}
|
| +
|
| +struct mntent *getmntent(FILE *f)
|
| +{
|
| + static char linebuf[256];
|
| + static struct mntent mnt;
|
| + return getmntent_r(f, &mnt, linebuf, sizeof linebuf);
|
| +}
|
| +
|
| +int addmntent(FILE *f, const struct mntent *mnt)
|
| +{
|
| + if (fseek(f, 0, SEEK_END)) return 1;
|
| + return fprintf(f, "%s\t%s\t%s\t%s\t%d\t%d\n",
|
| + mnt->mnt_fsname, mnt->mnt_dir, mnt->mnt_type, mnt->mnt_opts,
|
| + mnt->mnt_freq, mnt->mnt_passno) < 0;
|
| +}
|
| +
|
| +char *hasmntopt(const struct mntent *mnt, const char *opt)
|
| +{
|
| + return strstr(mnt->mnt_opts, opt);
|
| +}
|
|
|