diff options
Diffstat (limited to 'libc')
| -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)  | 
