X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Flinux%2Fmntent.c;h=48c85bd627db62c5307220da97911c03730c2107;hb=f6fd351c703a2843959b3be83078d9dce33f30f3;hp=e3735666b2abca67db131fe4c198bcb85cf77d0f;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/linux/mntent.c b/src/linux/mntent.c index e3735666..48c85bd6 100644 --- a/src/linux/mntent.c +++ b/src/linux/mntent.c @@ -13,34 +13,39 @@ int endmntent(FILE *f) return 1; } -struct mntent *getmntent(FILE *f) +struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen) { - static char linebuf[256]; - static struct mntent mnt; int cnt, n[8]; - mnt.mnt_freq = 0; - mnt.mnt_passno = 0; + mnt->mnt_freq = 0; + mnt->mnt_passno = 0; do { - fgets(linebuf, sizeof linebuf, f); + fgets(linebuf, buflen, f); if (feof(f)) return NULL; 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 >= 8 && linebuf[n[0]] != '#'); + &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]; + 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; +} - 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)