diff options
Diffstat (limited to 'libc/misc')
-rw-r--r-- | libc/misc/mntent/mntent.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/libc/misc/mntent/mntent.c b/libc/misc/mntent/mntent.c index 82a7e70d1..b1d27de2c 100644 --- a/libc/misc/mntent/mntent.c +++ b/libc/misc/mntent/mntent.c @@ -3,13 +3,22 @@ #include <string.h> #include <mntent.h> - -/* Reentrant version of the above function. */ +#ifdef __UCLIBC_HAS_THREADS__ +#include <pthread.h> +static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; +# define LOCK pthread_mutex_lock(&mylock) +# define UNLOCK pthread_mutex_unlock(&mylock); +#else +# define LOCK +# define UNLOCK +#endif + +/* Reentrant version of getmntent. */ struct mntent *getmntent_r (FILE *filep, struct mntent *mnt, char *buff, int bufsize) { - char *cp, *sep = " \t\n"; - static char *ptrptr = 0; + char *cp, *ptrptr; + const char *sep = " \t\n"; if (!filep || !mnt || !buff) return NULL; @@ -55,9 +64,13 @@ struct mntent *getmntent_r (FILE *filep, struct mntent *getmntent(FILE * filep) { + struct mntent *tmp; static char buff[BUFSIZ]; static struct mntent mnt; - return(getmntent_r(filep, &mnt, buff, sizeof buff)); + LOCK; + tmp = getmntent_r(filep, &mnt, buff, sizeof buff); + UNLOCK; + return(tmp); } int addmntent(FILE * filep, const struct mntent *mnt) |