diff options
Diffstat (limited to 'libc/stdio')
| -rw-r--r-- | libc/stdio/_fopen.c | 4 | ||||
| -rw-r--r-- | libc/stdio/_scanf.c | 12 | ||||
| -rw-r--r-- | libc/stdio/_stdio.c | 22 | ||||
| -rw-r--r-- | libc/stdio/_stdio.h | 8 | ||||
| -rw-r--r-- | libc/stdio/fflush.c | 4 | ||||
| -rw-r--r-- | libc/stdio/tempnam.c | 2 | ||||
| -rw-r--r-- | libc/stdio/tmpfile.c | 6 | ||||
| -rw-r--r-- | libc/stdio/tmpnam.c | 2 | ||||
| -rw-r--r-- | libc/stdio/tmpnam_r.c | 2 | ||||
| -rw-r--r-- | libc/stdio/vdprintf.c | 2 | ||||
| -rw-r--r-- | libc/stdio/vsnprintf.c | 4 | 
11 files changed, 39 insertions, 29 deletions
diff --git a/libc/stdio/_fopen.c b/libc/stdio/_fopen.c index 96377ee44..2db27a898 100644 --- a/libc/stdio/_fopen.c +++ b/libc/stdio/_fopen.c @@ -99,7 +99,7 @@ FILE attribute_hidden *_stdio_fopen(intptr_t fname_or_mode,  #ifdef __UCLIBC_HAS_THREADS__  		/* We only initialize the mutex in the non-freopen case. */  		/* stream->__user_locking = _stdio_user_locking; */ -		__stdio_init_mutex(&stream->__lock); +		STDIO_INIT_MUTEX(stream->__lock);  #endif  	} @@ -197,7 +197,7 @@ FILE attribute_hidden *_stdio_fopen(intptr_t fname_or_mode,  #ifdef __UCLIBC_HAS_THREADS__  	/* Even in the freopen case, we reset the user locking flag. */  	stream->__user_locking = _stdio_user_locking; -	/* __stdio_init_mutex(&stream->__lock); */ +	/* STDIO_INIT_MUTEX(stream->__lock); */  #endif  #ifdef __STDIO_HAS_OPENLIST diff --git a/libc/stdio/_scanf.c b/libc/stdio/_scanf.c index 914311877..34c1c9abd 100644 --- a/libc/stdio/_scanf.c +++ b/libc/stdio/_scanf.c @@ -235,7 +235,7 @@ int vsscanf(__const char *sp, __const char *fmt, va_list ap)  #ifdef __UCLIBC_HAS_THREADS__  	f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.__lock); +	STDIO_INIT_MUTEX(f.__lock);  #endif  	f.__nextopen = NULL; @@ -283,7 +283,7 @@ int vsscanf(__const char *sp, __const char *fmt, va_list ap)  #ifdef __UCLIBC_HAS_THREADS__  	f.f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.f.__lock); +	STDIO_INIT_MUTEX(f.f.__lock);  #endif  	f.f.__nextopen = NULL; @@ -388,8 +388,10 @@ int vswscanf(const wchar_t * __restrict str, const wchar_t * __restrict format,  {  	FILE f; -	f.__bufstart = f.__bufpos = (unsigned char *) str; -	f.__bufread = f.__bufend = (unsigned char *) (str + wcslen(str)); +	f.__bufstart = +	f.__bufpos = (char *) str; +	f.__bufread = +	f.__bufend = (char *)(str + wcslen(str));  	__STDIO_STREAM_DISABLE_GETC(&f);  	__STDIO_STREAM_DISABLE_PUTC(&f); @@ -414,7 +416,7 @@ int vswscanf(const wchar_t * __restrict str, const wchar_t * __restrict format,  #ifdef __UCLIBC_HAS_THREADS__  	f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.__lock); +	STDIO_INIT_MUTEX(f.__lock);  #endif  	f.__nextopen = NULL; diff --git a/libc/stdio/_stdio.c b/libc/stdio/_stdio.c index 3c8d667d2..6c11451fc 100644 --- a/libc/stdio/_stdio.c +++ b/libc/stdio/_stdio.c @@ -74,8 +74,13 @@  #endif  #ifdef __UCLIBC_HAS_THREADS__ +#ifdef __USE_STDIO_FUTEXES__ +#define __STDIO_FILE_INIT_THREADSAFE \ +	2, _LIBC_LOCK_RECURSIVE_INITIALIZER, +#else  #define __STDIO_FILE_INIT_THREADSAFE \  	2, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, +#endif  #else  #define __STDIO_FILE_INIT_THREADSAFE  #endif @@ -152,14 +157,13 @@ FILE *__stdout = _stdio_streams + 1; /* For putchar() macro. */  FILE *_stdio_openlist = _stdio_streams;  # ifdef __UCLIBC_HAS_THREADS__ -__UCLIBC_MUTEX_INIT(_stdio_openlist_add_lock, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP); -#ifdef __STDIO_BUFFERS -__UCLIBC_MUTEX_INIT(_stdio_openlist_del_lock, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP); +__UCLIBC_IO_MUTEX_INIT(_stdio_openlist_add_lock); +#  ifdef __STDIO_BUFFERS +__UCLIBC_IO_MUTEX_INIT(_stdio_openlist_del_lock);  volatile int _stdio_openlist_use_count = 0;  int _stdio_openlist_del_count = 0; -#endif +#  endif  # endif -  #endif  /**********************************************************************/  #ifdef __UCLIBC_HAS_THREADS__ @@ -167,6 +171,7 @@ int _stdio_openlist_del_count = 0;  /* 2 if threading not initialized and 0 otherwise; */  int _stdio_user_locking = 2; +#ifndef __USE_STDIO_FUTEXES__  void attribute_hidden __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m)  {  	const __UCLIBC_MUTEX_STATIC(__stdio_mutex_initializer, @@ -174,6 +179,7 @@ void attribute_hidden __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m)  	memcpy(m, &__stdio_mutex_initializer, sizeof(__stdio_mutex_initializer));  } +#endif  #endif  /**********************************************************************/ @@ -189,10 +195,10 @@ void attribute_hidden _stdio_term(void)  	 * locked, then I suppose there is a chance that a pointer in the  	 * chain might be corrupt due to a partial store.  	 */ -	__stdio_init_mutex(&_stdio_openlist_add_lock); +	STDIO_INIT_MUTEX(_stdio_openlist_add_lock);  #warning check  #ifdef __STDIO_BUFFERS -	__stdio_init_mutex(&_stdio_openlist_del_lock); +	STDIO_INIT_MUTEX(_stdio_openlist_del_lock);  #endif  	/* Next we need to worry about the streams themselves.  If a stream @@ -214,7 +220,7 @@ void attribute_hidden _stdio_term(void)  		}  		ptr->__user_locking = 1; /* Set locking mode to "by caller". */ -		__stdio_init_mutex(&ptr->__lock); /* Shouldn't be necessary, but... */ +		STDIO_INIT_MUTEX(ptr->__lock); /* Shouldn't be necessary, but... */  	}  #endif diff --git a/libc/stdio/_stdio.h b/libc/stdio/_stdio.h index aaa3ad656..ec98f9e0e 100644 --- a/libc/stdio/_stdio.h +++ b/libc/stdio/_stdio.h @@ -24,18 +24,18 @@  #include <bits/uClibc_mutex.h>  #define __STDIO_THREADLOCK_OPENLIST_ADD			\ -        __UCLIBC_MUTEX_LOCK(_stdio_openlist_add_lock) +        __UCLIBC_IO_MUTEX_LOCK(_stdio_openlist_add_lock)  #define __STDIO_THREADUNLOCK_OPENLIST_ADD		\ -        __UCLIBC_MUTEX_UNLOCK(_stdio_openlist_add_lock) +        __UCLIBC_IO_MUTEX_UNLOCK(_stdio_openlist_add_lock)  #ifdef __STDIO_BUFFERS  #define __STDIO_THREADLOCK_OPENLIST_DEL			\ -        __UCLIBC_MUTEX_LOCK(_stdio_openlist_del_lock) +        __UCLIBC_IO_MUTEX_LOCK(_stdio_openlist_del_lock)  #define __STDIO_THREADUNLOCK_OPENLIST_DEL		\ -        __UCLIBC_MUTEX_UNLOCK(_stdio_openlist_del_lock) +        __UCLIBC_IO_MUTEX_UNLOCK(_stdio_openlist_del_lock)  #ifdef __UCLIBC_HAS_THREADS__ diff --git a/libc/stdio/fflush.c b/libc/stdio/fflush.c index 8b918d6bb..d9104a42f 100644 --- a/libc/stdio/fflush.c +++ b/libc/stdio/fflush.c @@ -18,11 +18,11 @@   * when all (lbf) writing streams are flushed. */  #define __MY_STDIO_THREADLOCK(__stream)					\ -        __UCLIBC_MUTEX_CONDITIONAL_LOCK((__stream)->__lock,		\ +        __UCLIBC_IO_MUTEX_CONDITIONAL_LOCK((__stream)->__lock,		\  	(_stdio_user_locking != 2))  #define __MY_STDIO_THREADUNLOCK(__stream)				\ -        __UCLIBC_MUTEX_CONDITIONAL_UNLOCK((__stream)->__lock,		\ +        __UCLIBC_IO_MUTEX_CONDITIONAL_UNLOCK((__stream)->__lock,		\  	(_stdio_user_locking != 2))  #if defined(__UCLIBC_HAS_THREADS__) && defined(__STDIO_BUFFERS) diff --git a/libc/stdio/tempnam.c b/libc/stdio/tempnam.c index faf7c5ecb..66c905db8 100644 --- a/libc/stdio/tempnam.c +++ b/libc/stdio/tempnam.c @@ -36,7 +36,7 @@ tempnam (const char *dir, const char *pfx)    if (__path_search (buf, FILENAME_MAX, dir, pfx, 1))      return NULL; -  if (__gen_tempname (buf, __GT_NOCREATE)) +  if (__gen_tempname (buf, __GT_NOCREATE, 0))      return NULL;    return strdup (buf); diff --git a/libc/stdio/tmpfile.c b/libc/stdio/tmpfile.c index 2f973c329..c6b2dc8a9 100644 --- a/libc/stdio/tmpfile.c +++ b/libc/stdio/tmpfile.c @@ -18,8 +18,10 @@  #include <features.h>  #include <stdio.h> +#include <sys/stat.h>  #include <unistd.h>  #include "../misc/internals/tempname.h" +#include <not-cancel.h>  /* This returns a new stream opened on a temporary file (generated @@ -34,7 +36,7 @@ FILE * tmpfile (void)      if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0))  	return NULL; -    fd = __gen_tempname (buf, __GT_FILE); +    fd = __gen_tempname (buf, __GT_FILE, S_IRUSR | S_IWUSR);      if (fd < 0)  	return NULL; @@ -43,7 +45,7 @@ FILE * tmpfile (void)      (void) remove (buf);      if ((f = fdopen (fd, "w+b")) == NULL) -	close (fd); +	close_not_cancel (fd);      return f;  } diff --git a/libc/stdio/tmpnam.c b/libc/stdio/tmpnam.c index 1f180e08a..323105ba4 100644 --- a/libc/stdio/tmpnam.c +++ b/libc/stdio/tmpnam.c @@ -41,7 +41,7 @@ tmpnam (char *s)  			0))      return NULL; -  if (__builtin_expect (__gen_tempname (tmpbuf, __GT_NOCREATE), 0)) +  if (__builtin_expect (__gen_tempname (tmpbuf, __GT_NOCREATE, 0), 0))      return NULL;    if (s == NULL) diff --git a/libc/stdio/tmpnam_r.c b/libc/stdio/tmpnam_r.c index eec589e39..8f616b273 100644 --- a/libc/stdio/tmpnam_r.c +++ b/libc/stdio/tmpnam_r.c @@ -28,7 +28,7 @@ char * tmpnam_r (char *s)      if (__path_search (s, L_tmpnam, NULL, NULL, 0))  	return NULL; -    if (__gen_tempname (s, __GT_NOCREATE)) +    if (__gen_tempname (s, __GT_NOCREATE, 0))  	return NULL;      return s; diff --git a/libc/stdio/vdprintf.c b/libc/stdio/vdprintf.c index e3405e411..457018bcf 100644 --- a/libc/stdio/vdprintf.c +++ b/libc/stdio/vdprintf.c @@ -49,7 +49,7 @@ int vdprintf(int filedes, const char * __restrict format, va_list arg)   * only because of fflush_unlocked. TODO? */  #if (defined(__STDIO_BUFFERS) || defined(__USE_OLD_VFPRINTF__)) && defined(__UCLIBC_HAS_THREADS__)  	f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.__lock); +	STDIO_INIT_MUTEX(f.__lock);  #endif  	f.__nextopen = NULL; diff --git a/libc/stdio/vsnprintf.c b/libc/stdio/vsnprintf.c index 07cff3410..31adc52b6 100644 --- a/libc/stdio/vsnprintf.c +++ b/libc/stdio/vsnprintf.c @@ -43,7 +43,7 @@ int vsnprintf(char *__restrict buf, size_t size,  #if (defined(__STDIO_BUFFERS) || defined(__USE_OLD_VFPRINTF__)) && defined(__UCLIBC_HAS_THREADS__)  	f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.__lock); +	STDIO_INIT_MUTEX(f.__lock);  #endif  	f.__nextopen = NULL; @@ -117,7 +117,7 @@ int vsnprintf(char *__restrict buf, size_t size,  #ifdef __UCLIBC_HAS_THREADS__  	f.f.__user_locking = 1;		/* Set user locking. */ -	__stdio_init_mutex(&f.f.__lock); +	STDIO_INIT_MUTEX(f.f.__lock);  #endif  	f.f.__nextopen = NULL;  | 
