Allow machine-dependent arc4 locking

newlib:
	* libc/stdlib/arc4random.h: Remove Cygwin-specific locking code.
	Conditionalize arc4 locking.  Check for _ARC4_LOCK_INIT being
	undefined to fall back to default implementation.

cygwin:
	* include/machine/_arc4random.h: New file.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-03-18 18:01:07 +01:00
parent 472d0a228c
commit f7f26f65ab
2 changed files with 35 additions and 18 deletions

View File

@ -37,30 +37,17 @@
#include <sys/lock.h>
#include <signal.h>
__LOCK_INIT(static, _arc4random_mutex);
#ifndef _ARC4_LOCK_INIT
#ifdef __CYGWIN__
extern int __isthreaded;
#define _ARC4_LOCK() \
do { \
if (__isthreaded) \
__lock_acquire (_arc4random_mutex); \
} while (0)
#define _ARC4_UNLOCK() \
do { \
if (__isthreaded) \
__lock_release (_arc4random_mutex); \
} while (0)
#else
#define _ARC4_LOCK_INIT __LOCK_INIT(static, _arc4random_mutex);
#define _ARC4_LOCK() __lock_acquire(_arc4random_mutex)
#define _ARC4_UNLOCK() __lock_release(_arc4random_mutex)
#endif
#endif /* _ARC4_LOCK_INIT */
_ARC4_LOCK_INIT
#ifdef _ARC4RANDOM_DATA
_ARC4RANDOM_DATA

View File

@ -0,0 +1,30 @@
/* machine/_arc4random.h
Copyright 2016 Red Hat, Inc.
This file is part of Cygwin.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#ifndef _MACHINE_ARC4RANDOM_H
#define _MACHINE_ARC4RANDOM_H
extern int __isthreaded;
#define _ARC4_LOCK_INIT __LOCK_INIT(static, _arc4random_mutex);
#define _ARC4_LOCK() \
do { \
if (__isthreaded) \
__lock_acquire (_arc4random_mutex); \
} while (0)
#define _ARC4_UNLOCK() \
do { \
if (__isthreaded) \
__lock_release (_arc4random_mutex); \
} while (0)
#endif /* _MACHINE_ARC4RANDOM_H */