123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
- *
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <mntent.h>
- libc_hidden_proto(getmntent_r)
- libc_hidden_proto(setmntent)
- libc_hidden_proto(endmntent)
- libc_hidden_proto(strstr)
- libc_hidden_proto(strtok_r)
- libc_hidden_proto(atoi)
- libc_hidden_proto(fopen)
- libc_hidden_proto(fclose)
- libc_hidden_proto(fseek)
- libc_hidden_proto(fgets)
- libc_hidden_proto(abort)
- libc_hidden_proto(fprintf)
- #ifdef __UCLIBC_HAS_THREADS__
- # include <pthread.h>
- static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
- #endif
- #define LOCK __pthread_mutex_lock(&mylock)
- #define UNLOCK __pthread_mutex_unlock(&mylock)
- /* Reentrant version of getmntent. */
- struct mntent *getmntent_r (FILE *filep,
- struct mntent *mnt, char *buff, int bufsize)
- {
- char *cp, *ptrptr;
- const char *sep = " \t\n";
- if (!filep || !mnt || !buff)
- return NULL;
- /* Loop on the file, skipping comment lines. - FvK 03/07/93 */
- while ((cp = fgets(buff, bufsize, filep)) != NULL) {
- if (buff[0] == '#' || buff[0] == '\n')
- continue;
- break;
- }
- /* At the EOF, the buffer should be unchanged. We should
- * check the return value from fgets ().
- */
- if (cp == NULL)
- return NULL;
- ptrptr = 0;
- mnt->mnt_fsname = strtok_r(buff, sep, &ptrptr);
- if (mnt->mnt_fsname == NULL)
- return NULL;
- mnt->mnt_dir = strtok_r(NULL, sep, &ptrptr);
- if (mnt->mnt_dir == NULL)
- return NULL;
- mnt->mnt_type = strtok_r(NULL, sep, &ptrptr);
- if (mnt->mnt_type == NULL)
- return NULL;
- mnt->mnt_opts = strtok_r(NULL, sep, &ptrptr);
- if (mnt->mnt_opts == NULL)
- mnt->mnt_opts = "";
- cp = strtok_r(NULL, sep, &ptrptr);
- mnt->mnt_freq = (cp != NULL) ? atoi(cp) : 0;
- cp = strtok_r(NULL, sep, &ptrptr);
- mnt->mnt_passno = (cp != NULL) ? atoi(cp) : 0;
- return mnt;
- }
- libc_hidden_def(getmntent_r)
- struct mntent *getmntent(FILE * filep)
- {
- struct mntent *tmp;
- static char *buff = NULL;
- static struct mntent mnt;
- LOCK;
-
- if (!buff) {
- buff = malloc(BUFSIZ);
- if (!buff)
- abort();
- }
-
- tmp = getmntent_r(filep, &mnt, buff, BUFSIZ);
- UNLOCK;
- return(tmp);
- }
- int addmntent(FILE * filep, const struct mntent *mnt)
- {
- if (fseek(filep, 0, SEEK_END) < 0)
- return 1;
- if (fprintf (filep, "%s %s %s %s %d %d\n", mnt->mnt_fsname, mnt->mnt_dir,
- mnt->mnt_type, mnt->mnt_opts, mnt->mnt_freq, mnt->mnt_passno) < 1)
- return 1;
- return 0;
- }
- char *hasmntopt(const struct mntent *mnt, const char *opt)
- {
- return strstr(mnt->mnt_opts, opt);
- }
- FILE *setmntent(const char *name, const char *mode)
- {
- return fopen(name, mode);
- }
- libc_hidden_def(setmntent)
- int endmntent(FILE * filep)
- {
- if (filep != NULL)
- fclose(filep);
- return 1;
- }
- libc_hidden_def(endmntent)
|