6 FILE *setmntent(const char *name
, const char *mode
)
8 return fopen(name
, mode
);
11 int endmntent(FILE *f
)
17 struct mntent
*getmntent_r(FILE *f
, struct mntent
*mnt
, char *linebuf
, int buflen
)
25 fgets(linebuf
, buflen
, f
);
26 if (feof(f
) || ferror(f
)) return 0;
27 if (!strchr(linebuf
, '\n')) {
28 fscanf(f
, "%*[^\n]%*[\n]");
32 cnt
= sscanf(linebuf
, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
33 n
, n
+1, n
+2, n
+3, n
+4, n
+5, n
+6, n
+7,
34 &mnt
->mnt_freq
, &mnt
->mnt_passno
);
35 } while (cnt
< 2 || linebuf
[n
[0]] == '#');
42 mnt
->mnt_fsname
= linebuf
+n
[0];
43 mnt
->mnt_dir
= linebuf
+n
[2];
44 mnt
->mnt_type
= linebuf
+n
[4];
45 mnt
->mnt_opts
= linebuf
+n
[6];
50 struct mntent
*getmntent(FILE *f
)
52 static char linebuf
[256];
53 static struct mntent mnt
;
54 return getmntent_r(f
, &mnt
, linebuf
, sizeof linebuf
);
57 int addmntent(FILE *f
, const struct mntent
*mnt
)
59 if (fseek(f
, 0, SEEK_END
)) return 1;
60 return fprintf(f
, "%s\t%s\t%s\t%s\t%d\t%d\n",
61 mnt
->mnt_fsname
, mnt
->mnt_dir
, mnt
->mnt_type
, mnt
->mnt_opts
,
62 mnt
->mnt_freq
, mnt
->mnt_passno
) < 0;
65 char *hasmntopt(const struct mntent
*mnt
, const char *opt
)
67 return strstr(mnt
->mnt_opts
, opt
);