Remove _THREAD_SAFE and make libc thread-safe by default by

adding (weak definitions to) stubs for some of the pthread
functions.  If the threads library is linked in, the real
pthread functions will pulled in.

Use the following convention for system calls wrapped by the
threads library:
	__sys_foo - actual system call
	_foo - weak definition to __sys_foo
	foo - weak definition to __sys_foo

Change all libc uses of system calls wrapped by the threads
library from foo to _foo.  In order to define the prototypes
for _foo(), we introduce namespace.h and un-namespace.h
(suggested by bde).  All files that need to reference these
system calls, should include namespace.h before any standard
includes, then include un-namespace.h after the standard
includes and before any local includes.  <db.h> is an exception
and shouldn't be included in between namespace.h and
un-namespace.h  namespace.h will define foo to _foo, and
un-namespace.h will undefine foo.

Try to eliminate some of the recursive calls to MT-safe
functions in libc/stdio in preparation for adding a mutex
to FILE.  We have recursive mutexes, but would like to avoid
using them if possible.

Remove uneeded includes of <errno.h> from a few files.

Add $FreeBSD$ to a few files in order to pass commitprep.

Approved by:	-arch
This commit is contained in:
Daniel Eischen 2001-01-24 13:01:12 +00:00
parent e0aa5ab718
commit d201fe46e3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=71579
190 changed files with 1585 additions and 1000 deletions

View File

@ -16,9 +16,22 @@ INSTALL_PIC_ARCHIVE= yes
PRECIOUSLIB= yes
#
# Don't bother hiding any syscalls (like libc_r does).
# This is a list of syscalls that are renamed as _thread_sys_{syscall}
# so that libpthread and libc_r can override and/or replace them.
# In the case of libc_r replacement functions are provided, whereas
# libpthread can both override and provide replacement functions.
#
HIDDEN_SYSCALLS=
HIDDEN_SYSCALLS= _exit.o accept.o aio_suspend.o bind.o close.o connect.o \
dup.o dup2.o execve.o fchflags.o fchmod.o fchown.o fcntl.o \
flock.o fpathconf.o fstat.o fstatfs.o fsync.o getdirentries.o \
getpeername.o getsockname.o getsockopt.o ioctl.o \
kevent.o listen.o \
msync.o nanosleep.o nfssvc.o open.o poll.o read.o readv.o recvfrom.o \
recvmsg.o sched_yield.o select.o sendfile.o sendmsg.o sendto.o \
setsockopt.o shutdown.o sigaction.o sigaltstack.o \
sigpending.o sigprocmask.o sigreturn.o \
sigsuspend.o socket.o \
socketpair.o wait4.o write.o writev.o
#
# Include make rules that are shared with libc_r.

View File

@ -83,50 +83,41 @@ END(label);
* Design note:
*
* The macros PSYSCALL() and PRSYSCALL() are intended for use where a
* syscall needs to be renamed in the threaded library. When building
* a normal library, they default to the traditional SYSCALL() and
* RSYSCALL(). This avoids the need to #ifdef _THREAD_SAFE everywhere
* that the renamed function needs to be called.
* syscall needs to be renamed in the threaded library.
*/
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* For the thread_safe versions, we prepend __sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
#define PNAME(name) __CONCAT(__sys_,name)
#define PCALL(name) \
CALL(___CONCAT(_thread_sys_,name))
CALL(PNAME(name))
#define PLEAF(name, args) \
LEAF(___CONCAT(_thread_sys_,name),args)
LEAF(PNAME(name),args)
#define PEND(name) \
END(___CONCAT(_thread_sys_,name))
END(PNAME(name))
#define PSYSCALL(name) \
PLEAF(name,0); /* XXX # of args? */ \
WEAK_ALIAS(name, PNAME(name)); \
WEAK_ALIAS(__CONCAT(_,name), PNAME(name)); \
CALLSYS_ERROR(name)
#define PRSYSCALL(name) \
PLEAF(name,0); /* XXX # of args? */ \
WEAK_ALIAS(name, PNAME(name)); \
WEAK_ALIAS(__CONCAT(_,name), PNAME(name)); \
CALLSYS_ERROR(name) \
RET; \
PEND(name)
#define PPSEUDO(label,name) \
PLEAF(label,0); /* XXX # of args? */ \
WEAK_ALIAS(label, PNAME(label)); \
WEAK_ALIAS(__CONCAT(_,label), PNAME(label)); \
CALLSYS_ERROR(name); \
RET; \
PEND(label)
#else
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
#define PSYSCALL(x) SYSCALL(x)
#define PRSYSCALL(x) RSYSCALL(x)
#define PPSEUDO(x,y) PSEUDO(x,y)
#define PLEAF(x,y) LEAF(x,y)
#define PEND(x) END(x)
#define PCALL(x) CALL(x)
#endif

View File

@ -87,12 +87,8 @@ LEAF(_setjmp, 1)
RET
END(_setjmp)
#ifdef _THREAD_SAFE
XLEAF(_longjmp, 2)
LEAF(___longjmp, 2)
#else
XLEAF(___longjmp, 2)
LEAF(_longjmp, 2)
#endif
LDGP(pv)
ldq t0, ((31 + 4) * 8)(a0) /* magic in sc_regs[31] */
ldiq t1, 0xacedbadd
@ -127,8 +123,4 @@ botch:
CALL(longjmperror)
CALL(abort)
RET /* "can't" get here... */
#ifdef _THREAD_SAFE
END(___longjmp)
#else
END(_longjmp)
#endif

View File

@ -66,12 +66,12 @@ LEAF(setjmp, 1)
lda a2, (71 * 8)(a0) /* oset: sc_reserved */
mov zero, a1 /* set: NULL */
addq a1, 1, a0 /* how: SIG_BLOCK */
PCALL(sigprocmask) /* see what's blocked */
CALL(_sigprocmask) /* see what's blocked */
lda sp, -24(sp) /* sizeof struct sigaltstack */
mov zero, a0
mov sp, a1
PCALL(sigaltstack)
CALL(_sigaltstack)
ldl t0, 16(sp) /* offset of ss_flags */
lda sp, 24(sp) /* sizeof struct sigaltstack */
ldq ra, ((26 + 4) * 8)(s0) /* restore return address */
@ -115,22 +115,14 @@ LEAF(setjmp, 1)
RET
END(setjmp)
#ifdef _THREAD_SAFE
XLEAF(longjmp, 2)
LEAF(__longjmp, 2)
#else
XLEAF(__longjmp, 2)
LEAF(longjmp, 2)
#endif
LDGP(pv)
stq a1, (( 0 + 4) * 8)(a0) /* save return value */
PCALL(sigreturn) /* use sigreturn to return */
CALL(_sigreturn) /* use sigreturn to return */
botch:
CALL(longjmperror)
CALL(abort)
RET /* "can't" get here... */
#ifdef _THREAD_SAFE
END(__longjmp)
#else
END(longjmp)
#endif

View File

@ -54,20 +54,12 @@ Lsavesig:
jmp zero, setjmp
END(sigsetjmp)
#ifdef _THREAD_SAFE
XLEAF(siglongjmp, 2)
LEAF(__siglongjmp, 2)
#else
XLEAF(__siglongjmp, 2)
LEAF(siglongjmp, 2)
#endif
LDGP(pv)
ldq t0, (81 * 8)(a0) /* get the mask */
bne t0, Lrestoresig /* if !zero, restore signals */
jmp zero, _longjmp
jmp zero, ___longjmp
Lrestoresig:
jmp zero, longjmp
#ifdef _THREAD_SAFE
jmp zero, __longjmp
END(__siglongjmp)
#else
END(siglongjmp)
#endif

View File

@ -25,11 +25,13 @@
*
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
* $FreeBSD$
*/
#include "SYS.h"
IMPORT(_logname_valid, 4) /* in getlogin() */
IMPORT(_logname_valid, 4) /* in _getlogin() */
SYSCALL(setlogin)
stl zero, _logname_valid /* clear it */

View File

@ -61,31 +61,28 @@
* Design note:
*
* The macros PSYSCALL() and PRSYSCALL() are intended for use where a
* syscall needs to be renamed in the threaded library. When building
* a normal library, they default to the traditional SYSCALL() and
* RSYSCALL(). This avoids the need to #ifdef _THREAD_SAFE everywhere
* that the renamed function needs to be called.
* syscall needs to be renamed in the threaded library.
*/
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* For the thread_safe versions, we prepend __sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
#define PSYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
ENTRY(__CONCAT(_thread_sys_,x)); \
ENTRY(__CONCAT(__sys_,x)); \
.weak CNAME(x); \
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
.weak CNAME(__CONCAT(_,x)); \
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b
#define PRSYSCALL(x) PSYSCALL(x); ret
#define PPSEUDO(x,y) ENTRY(__CONCAT(_thread_sys_,x)); \
#define PPSEUDO(x,y) ENTRY(__CONCAT(__sys_,x)); \
.weak CNAME(x); \
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
.weak CNAME(__CONCAT(_,x)); \
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
lea __CONCAT(SYS_,y), %eax; KERNCALL; ret
#else
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
#define PSYSCALL(x) SYSCALL(x)
#define PRSYSCALL(x) RSYSCALL(x)
#define PPSEUDO(x,y) PSEUDO(x,y)
#endif
#ifdef __ELF__
#define KERNCALL int $0x80 /* Faster */

View File

@ -66,12 +66,9 @@ ENTRY(_setjmp)
xorl %eax,%eax
ret
#ifdef _THREAD_SAFE
.weak CNAME(_longjmp)
.set CNAME(_longjmp),CNAME(___longjmp)
ENTRY(___longjmp)
#else
ALTENTRY(___longjmp)
ENTRY(_longjmp)
#endif
movl 4(%esp),%edx
movl 8(%esp),%eax
movl 0(%edx),%ecx

View File

@ -61,11 +61,7 @@ ENTRY(setjmp)
pushl %eax /* (sigset_t*)oset */
pushl $0 /* (sigset_t*)set */
pushl $1 /* SIG_BLOCK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%ecx
@ -80,10 +76,8 @@ ENTRY(setjmp)
xorl %eax,%eax
ret
#ifndef _THREAD_SAFE
.weak CNAME(longjmp);
.set CNAME(longjmp),CNAME(__longjmp);
#endif
.weak CNAME(longjmp)
.set CNAME(longjmp),CNAME(__longjmp)
ENTRY(__longjmp)
movl 4(%esp),%edx
PIC_PROLOGUE
@ -91,11 +85,7 @@ ENTRY(__longjmp)
leal 28(%edx), %eax
pushl %eax /* (sigset_t*)set */
pushl $3 /* SIG_SETMASK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%edx

View File

@ -52,9 +52,6 @@
* the renamed functions (introduced in gcc-2.5.3; previous versions
* only supported *jmp with 0 or 1 leading underscores).
*
* Use sigprocmask() instead of sigblock() and sigsetmask(), and
* check for and handle errors.
*
* Restore _all_ the registers and the signal mask atomically. Can
* use sigreturn() if sigreturn() works.
*/
@ -70,11 +67,7 @@ ENTRY(sigsetjmp)
pushl %eax /* (sigset_t*)oset */
pushl $0 /* (sigset_t*)set */
pushl $1 /* SIG_BLOCK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%ecx
@ -89,10 +82,8 @@ ENTRY(sigsetjmp)
xorl %eax,%eax
ret
#ifndef _THREAD_SAFE
.weak CNAME(siglongjmp);
.set CNAME(siglongjmp),CNAME(__siglongjmp);
#endif
.weak CNAME(siglongjmp);
.set CNAME(siglongjmp),CNAME(__siglongjmp);
ENTRY(__siglongjmp);
movl 4(%esp),%edx
cmpl $0,44(%edx)
@ -102,11 +93,7 @@ ENTRY(__siglongjmp);
leal 28(%edx), %eax
pushl %eax /* (sigset_t*)set */
pushl $3 /* SIG_SETMASK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%edx

View File

@ -43,7 +43,7 @@
#include "SYS.h"
.globl CNAME(_logname_valid) /* in getlogin() */
.globl CNAME(_logname_valid) /* in _getlogin() */
SYSCALL(setlogin)
#ifdef PIC

View File

@ -51,12 +51,11 @@
* %eax == pid of child in parent, %eax == pid of parent in child.
*
*/
#ifdef _THREAD_SAFE
ENTRY(_thread_sys_vfork)
#else
ENTRY(vfork)
#endif
.weak _vfork
.set _vfork,__sys_vfork
.weak vfork
.set vfork,__sys_vfork
ENTRY(__sys_vfork)
popl %ecx /* my rta into ecx */
lea SYS_vfork,%eax
KERNCALL

View File

@ -37,20 +37,14 @@
static char sccsid[] = "@(#)creat.c 8.1 (Berkeley) 6/2/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <fcntl.h>
#include "un-namespace.h"
int
#if __STDC__
__creat(const char *path, mode_t mode)
#else
__creat(path, mode)
char *path;
mode_t mode;
#endif
{
return(_open(path, O_WRONLY|O_CREAT|O_TRUNC, mode));
}
#ifndef _THREAD_SAFE
__weak_reference(__creat, creat);
#endif
__weak_reference(__creat, _creat);

View File

@ -41,8 +41,11 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <signal.h>
#include "un-namespace.h"
#include "libc_private.h"
int
sigvec(signo, sv, osv)
@ -62,7 +65,7 @@ sigvec(signo, sv, osv)
} else
sap = NULL;
osap = osv != NULL ? &osa : NULL;
ret = sigaction(signo, sap, osap);
ret = _sigaction(signo, sap, osap);
if (ret == 0 && osv != NULL) {
osv->sv_handler = osa.sa_handler;
osv->sv_flags = osa.sa_flags ^ SV_INTERRUPT;
@ -80,7 +83,7 @@ sigsetmask(mask)
sigemptyset(&set);
set.__bits[0] = mask;
n = sigprocmask(SIG_SETMASK, &set, &oset);
n = _sigprocmask(SIG_SETMASK, &set, &oset);
if (n)
return (n);
return (oset.__bits[0]);
@ -95,7 +98,7 @@ sigblock(mask)
sigemptyset(&set);
set.__bits[0] = mask;
n = sigprocmask(SIG_BLOCK, &set, &oset);
n = _sigprocmask(SIG_BLOCK, &set, &oset);
if (n)
return (n);
return (oset.__bits[0]);

View File

@ -40,6 +40,7 @@
static char sccsid[] = "@(#)bt_close.c 8.7 (Berkeley) 8/17/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <errno.h>
@ -47,6 +48,7 @@ static char sccsid[] = "@(#)bt_close.c 8.7 (Berkeley) 8/17/94";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
#include "btree.h"

View File

@ -48,6 +48,7 @@ static char sccsid[] = "@(#)bt_open.c 8.10 (Berkeley) 8/17/94";
* is wholly independent of the Postgres code.
*/
#include "namespace.h"
#include <sys/param.h>
#include <sys/stat.h>
@ -59,6 +60,7 @@ static char sccsid[] = "@(#)bt_open.c 8.10 (Berkeley) 8/17/94";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
#include "btree.h"
@ -217,7 +219,7 @@ __bt_open(fname, flags, mode, openinfo, dflags)
if (_fcntl(t->bt_fd, F_SETFD, 1) == -1)
goto err;
if (fstat(t->bt_fd, &sb))
if (_fstat(t->bt_fd, &sb))
goto err;
if (sb.st_size) {
if ((nr = _read(t->bt_fd, &m, sizeof(BTMETA))) < 0)
@ -399,10 +401,10 @@ tmp()
sizeof(path), "%s/bt.XXXXXXXXXX", envtmp ? envtmp : "/tmp");
(void)sigfillset(&set);
(void)sigprocmask(SIG_BLOCK, &set, &oset);
(void)_sigprocmask(SIG_BLOCK, &set, &oset);
if ((fd = mkstemp(path)) != -1)
(void)unlink(path);
(void)sigprocmask(SIG_SETMASK, &oset, NULL);
(void)_sigprocmask(SIG_SETMASK, &oset, NULL);
return(fd);
}

View File

@ -40,6 +40,7 @@
static char sccsid[] = "@(#)hash.c 8.9 (Berkeley) 6/16/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/stat.h>
@ -52,6 +53,7 @@ static char sccsid[] = "@(#)hash.c 8.9 (Berkeley) 6/16/94";
#ifdef DEBUG
#include <assert.h>
#endif
#include "un-namespace.h"
#include <db.h>
#include "hash.h"
@ -136,7 +138,7 @@ __hash_open(file, flags, mode, info, dflags)
/* if the .db file is empty, and we had permission to create
a new .db file, then reinitialize the database */
if ((flags & O_CREAT) &&
fstat(hashp->fp, &statbuf) == 0 && statbuf.st_size == 0)
_fstat(hashp->fp, &statbuf) == 0 && statbuf.st_size == 0)
new_table = 1;
(void)_fcntl(hashp->fp, F_SETFD, 1);
@ -562,7 +564,8 @@ hash_put(dbp, key, data, flag)
hashp = (HTAB *)dbp->internal;
if (flag && flag != R_NOOVERWRITE) {
hashp->error = errno = EINVAL;
hashp->error = EINVAL;
errno = EINVAL;
return (ERROR);
}
if ((hashp->flags & O_ACCMODE) == O_RDONLY) {

View File

@ -32,6 +32,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
@ -56,7 +58,6 @@ static char sccsid[] = "@(#)hash_buf.c 8.5 (Berkeley) 7/15/94";
#include <sys/param.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

View File

@ -56,6 +56,7 @@ static char sccsid[] = "@(#)hash_page.c 8.7 (Berkeley) 8/16/94";
* open_temp
*/
#include "namespace.h"
#include <sys/types.h>
#include <errno.h>
@ -68,6 +69,7 @@ static char sccsid[] = "@(#)hash_page.c 8.7 (Berkeley) 8/16/94";
#ifdef DEBUG
#include <assert.h>
#endif
#include "un-namespace.h"
#include <db.h>
#include "hash.h"
@ -866,12 +868,12 @@ open_temp(hashp)
/* Block signals; make sure file goes away at process exit. */
(void)sigfillset(&set);
(void)sigprocmask(SIG_BLOCK, &set, &oset);
(void)_sigprocmask(SIG_BLOCK, &set, &oset);
if ((hashp->fp = mkstemp(namestr)) != -1) {
(void)unlink(namestr);
(void)_fcntl(hashp->fp, F_SETFD, 1);
}
(void)sigprocmask(SIG_SETMASK, &oset, (sigset_t *)NULL);
(void)_sigprocmask(SIG_SETMASK, &oset, (sigset_t *)NULL);
return (hashp->fp != -1 ? 0 : -1);
}

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)mpool.c 8.5 (Berkeley) 7/26/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/stat.h>
@ -46,6 +47,7 @@ static char sccsid[] = "@(#)mpool.c 8.5 (Berkeley) 7/26/94";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
@ -76,7 +78,7 @@ mpool_open(key, fd, pagesize, maxcache)
* XXX
* We don't currently handle pipes, although we should.
*/
if (fstat(fd, &sb))
if (_fstat(fd, &sb))
return (NULL);
if (!S_ISREG(sb.st_mode)) {
errno = ESPIPE;

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)rec_close.c 8.6 (Berkeley) 8/18/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/mman.h>
@ -45,6 +46,7 @@ static char sccsid[] = "@(#)rec_close.c 8.6 (Berkeley) 8/18/94";
#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
#include "recno.h"
@ -165,7 +167,7 @@ __rec_sync(dbp, flags)
while (status == RET_SUCCESS) {
iov[0].iov_base = data.data;
iov[0].iov_len = data.size;
if (writev(t->bt_rfd, iov, 2) != data.size + 1)
if (_writev(t->bt_rfd, iov, 2) != data.size + 1)
return (RET_ERROR);
status = (dbp->seq)(dbp, &key, &data, R_NEXT);
}

View File

@ -40,6 +40,7 @@
static char sccsid[] = "@(#)rec_open.c 8.10 (Berkeley) 9/1/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
@ -50,6 +51,7 @@ static char sccsid[] = "@(#)rec_open.c 8.10 (Berkeley) 9/1/94";
#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
#include "recno.h"
@ -146,7 +148,7 @@ slow: if ((t->bt_rfp = fdopen(rfd, "r")) == NULL)
goto einval;
}
if (fstat(rfd, &sb))
if (_fstat(rfd, &sb))
goto err;
/*
* Kluge -- we'd like to test to see if the file is too

View File

@ -4,8 +4,8 @@
# machine-independent gen sources
.PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/gen ${.CURDIR}/../libc/gen
SRCS+= _rand48.c _spinlock_stub.c alarm.c arc4random.c assert.c \
basename.c \
SRCS+= _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
alarm.c arc4random.c assert.c basename.c \
clock.c closedir.c confstr.c \
crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \
dlfcn.c drand48.c erand48.c err.c errlst.c \

View File

@ -0,0 +1,131 @@
/*
* Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY DANIEL EISCHEN AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#include <pthread.h>
/*
* Weak symbols: All libc internal usage of these functions should
* use the weak symbol versions (_pthread_XXX). If libpthread is
* linked, it will override these functions with (non-weak) routines.
* The _pthread_XXX functions are provided solely for internal libc
* usage to avoid unwanted cancellation points and to differentiate
* between application locks and libc locks (threads holding the
* latter can't be allowed to exit/terminate).
*/
#pragma weak _pthread_getspecific=_pthread_getspecific_stub
#pragma weak _pthread_key_create=_pthread_key_create_stub
#pragma weak _pthread_key_delete=_pthread_key_delete_stub
#pragma weak _pthread_mutex_destroy=_pthread_mutex_destroy_stub
#pragma weak _pthread_mutex_init=_pthread_mutex_init_stub
#pragma weak _pthread_mutex_lock=_pthread_mutex_lock_stub
#pragma weak _pthread_mutex_trylock=_pthread_mutex_trylock_stub
#pragma weak _pthread_mutex_unlock=_pthread_mutex_unlock_stub
#pragma weak _pthread_mutexattr_init=_pthread_mutexattr_init_stub
#pragma weak _pthread_mutexattr_destroy=_pthread_mutexattr_destroy_stub
#pragma weak _pthread_mutexattr_settype=_pthread_mutexattr_settype_stub
#pragma weak _pthread_once=_pthread_once_stub
#pragma weak _pthread_setspecific=_pthread_setspecific_stub
void *
_pthread_getspecific_stub(pthread_key_t key)
{
return (NULL);
}
int
_pthread_key_create_stub(pthread_key_t *key, void (*destructor) (void *))
{
return (0);
}
int
_pthread_key_delete_stub(pthread_key_t key)
{
return (0);
}
int
_pthread_mutex_destroy_stub(pthread_mutex_t *mattr)
{
return (0);
}
int
_pthread_mutex_init_stub(pthread_mutex_t *mutex, const pthread_mutexattr_t *mattr)
{
return (0);
}
int
_pthread_mutex_lock_stub(pthread_mutex_t *mutex)
{
return (0);
}
int
_pthread_mutex_trylock_stub(pthread_mutex_t *mutex)
{
return (0);
}
int
_pthread_mutex_unlock_stub(pthread_mutex_t *mutex)
{
return (0);
}
int
_pthread_mutexattr_init_stub(pthread_mutexattr_t *mattr)
{
return (0);
}
int
_pthread_mutexattr_destroy_stub(pthread_mutexattr_t *mattr)
{
return (0);
}
int
_pthread_mutexattr_settype_stub(pthread_mutexattr_t *mattr, int type)
{
return (0);
}
int
_pthread_once_stub(pthread_once_t *once_control, void (*init_routine) (void))
{
return (0);
}
int
_pthread_setspecific_stub(pthread_key_t key, const void *value)
{
return (0);
}

View File

@ -35,17 +35,26 @@
#include <stdio.h>
/* Don't build these stubs into libc_r: */
#ifndef _THREAD_SAFE
#include "spinlock.h"
/*
* Declare weak references in case the application is not linked
* Declare weak definitions in case the application is not linked
* with libpthread.
*/
#pragma weak _atomic_lock=_atomic_lock_stub
#pragma weak _spinlock=_spinlock_stub
#pragma weak _spinlock_debug=_spinlock_debug_stub
/*
* This function is a stub for the _atomic_lock function in libpthread.
*/
long
_atomic_lock_stub(volatile long *lck)
{
return (0L);
}
/*
* This function is a stub for the spinlock function in libpthread.
*/
@ -61,4 +70,3 @@ void
_spinlock_debug_stub(spinlock_t *lck, char *fname, int lineno)
{
}
#endif

View File

@ -0,0 +1,38 @@
/*
* Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Neither the name of the author nor the names of any co-contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY DANIEL EISCHEN AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#pragma weak _thread_init=_thread_init_stub
#pragma weak _thread_autoinit_dummy_decl=_thread_autoinit_dummy_decl_stub
int _thread_autoinit_dummy_decl_stub = 0;
void
_thread_init_stub(void)
{
/* This is just a stub; there is nothing to do. */
}

View File

@ -25,11 +25,13 @@
* RC4 is a registered trademark of RSA Laboratories.
*/
#include "namespace.h"
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include "un-namespace.h"
struct arc4_stream {
u_int8_t i;

View File

@ -37,11 +37,15 @@
static char sccsid[] = "@(#)closedir.c 8.1 (Berkeley) 6/10/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <dirent.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include "un-namespace.h"
#include "libc_private.h"
#include "telldir.h"
/*
@ -53,12 +57,18 @@ closedir(dirp)
{
int fd;
seekdir(dirp, dirp->dd_rewind); /* free seekdir storage */
if (__isthreaded)
_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
_seekdir(dirp, dirp->dd_rewind); /* free seekdir storage */
fd = dirp->dd_fd;
dirp->dd_fd = -1;
dirp->dd_loc = 0;
free((void *)dirp->dd_buf);
_reclaim_telldir(dirp);
if (__isthreaded) {
_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
_pthread_mutex_destroy((pthread_mutex_t *)&dirp->dd_lock);
}
free((void *)dirp);
return(_close(fd));
}

View File

@ -37,9 +37,11 @@
static char sccsid[] = "@(#)daemon.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <fcntl.h>
#include <paths.h>
#include <unistd.h>
#include "un-namespace.h"
int
daemon(nochdir, noclose)
@ -63,9 +65,9 @@ daemon(nochdir, noclose)
(void)chdir("/");
if (!noclose && (fd = _open(_PATH_DEVNULL, O_RDWR, 0)) != -1) {
(void)dup2(fd, STDIN_FILENO);
(void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO);
(void)_dup2(fd, STDIN_FILENO);
(void)_dup2(fd, STDOUT_FILENO);
(void)_dup2(fd, STDERR_FILENO);
if (fd > 2)
(void)_close(fd);
}

View File

@ -42,7 +42,6 @@ static char sccsid[] = "@(#)devname.c 8.2 (Berkeley) 4/29/95";
#include <db.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <paths.h>
#include <stdio.h>

View File

@ -45,7 +45,6 @@ static const char rcsid[] =
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

View File

@ -41,6 +41,7 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
@ -56,6 +57,7 @@ static const char rcsid[] =
#else
#include <varargs.h>
#endif
#include "un-namespace.h"
extern char **environ;
@ -97,7 +99,7 @@ execl(name, arg, va_alist)
while ((argv[n] = va_arg(ap, char *)) != NULL)
n++;
va_end(ap);
return (execve(name, argv, environ));
return (_execve(name, argv, environ));
}
int
@ -139,7 +141,7 @@ execle(name, arg, va_alist)
n++;
envp = va_arg(ap, char **);
va_end(ap);
return (execve(name, argv, envp));
return (_execve(name, argv, envp));
}
int
@ -189,7 +191,7 @@ execv(name, argv)
const char *name;
char * const *argv;
{
(void)execve(name, argv, environ);
(void)_execve(name, argv, environ);
return (-1);
}
@ -260,7 +262,7 @@ execvp(name, argv)
bcopy(name, buf + lp + 1, ln);
buf[lp + ln + 1] = '\0';
retry: (void)execve(bp, argv, environ);
retry: (void)_execve(bp, argv, environ);
switch(errno) {
case E2BIG:
goto done;
@ -279,7 +281,7 @@ retry: (void)execve(bp, argv, environ);
memp[0] = "sh";
memp[1] = bp;
bcopy(argv + 1, memp + 2, cnt * sizeof(char *));
(void)execve(_PATH_BSHELL, memp, environ);
(void)_execve(_PATH_BSHELL, memp, environ);
goto done;
case ENOMEM:
goto done;

View File

@ -42,6 +42,7 @@ static char rcsid[] =
#endif
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/stat.h>
@ -53,6 +54,7 @@ static char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
static FILE *_fs_fp;
static struct fstab _fs_fstab;

View File

@ -43,6 +43,7 @@ static char rcsid[] = "$FreeBSD$";
#endif
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/stat.h>
@ -53,6 +54,7 @@ static char rcsid[] = "$FreeBSD$";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
static FTSENT *fts_alloc __P((FTS *, char *, int));
static FTSENT *fts_build __P((FTS *, int));
@ -1082,7 +1084,7 @@ fts_safe_changedir(sp, p, fd)
return (0);
if (fd < 0 && (newfd = _open(p->fts_accpath, O_RDONLY, 0)) < 0)
return (-1);
if (fstat(newfd, &sb)) {
if (_fstat(newfd, &sb)) {
ret = -1;
goto bail;
}

View File

@ -43,6 +43,7 @@ static char rcsid[] = "$FreeBSD$";
#endif
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/stat.h>
@ -53,6 +54,7 @@ static char rcsid[] = "$FreeBSD$";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
static FTSENT *fts_alloc __P((FTS *, char *, int));
static FTSENT *fts_build __P((FTS *, int));
@ -1082,7 +1084,7 @@ fts_safe_changedir(sp, p, fd)
return (0);
if (fd < 0 && (newfd = _open(p->fts_accpath, O_RDONLY, 0)) < 0)
return (-1);
if (fstat(newfd, &sb)) {
if (_fstat(newfd, &sb)) {
ret = -1;
goto bail;
}

View File

@ -40,10 +40,10 @@
static char sccsid[] = "@(#)getcap.c 8.3 (Berkeley) 3/25/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <ctype.h>
#include <db.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
@ -51,6 +51,9 @@ static char sccsid[] = "@(#)getcap.c 8.3 (Berkeley) 3/25/94";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#include <db.h>
#define BFRAG 1024
#define BSIZE 1024

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)getcwd.c 8.5 (Berkeley) 2/7/95";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/stat.h>
@ -47,6 +48,7 @@ static char sccsid[] = "@(#)getcwd.c 8.5 (Berkeley) 2/7/95";
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#define ISDOT(dp) \
(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
@ -166,7 +168,7 @@ getcwd(pt, size)
*bup = '\0';
/* Open and stat parent directory. */
if (!(dir = opendir(up)) || fstat(dirfd(dir), &s))
if (!(dir = opendir(up)) || _fstat(dirfd(dir), &s))
goto err;
/* Add trailing slash for next directory. */

View File

@ -44,22 +44,19 @@ static char sccsid[] = "@(#)getlogin.c 8.1 (Berkeley) 6/4/93";
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "namespace.h"
#include <pthread.h>
#include "un-namespace.h"
#include <libc_private.h>
#ifndef _THREAD_SAFE
#define THREAD_LOCK()
#define THREAD_UNLOCK()
#else
#include <pthread.h>
#include "pthread_private.h"
static struct pthread_mutex logname_lock = PTHREAD_MUTEX_STATIC_INITIALIZER;
static pthread_mutex_t logname_mutex = &logname_lock;
#define THREAD_LOCK() if (__isthreaded) pthread_mutex_lock(&logname_mutex)
#define THREAD_UNLOCK() if (__isthreaded) pthread_mutex_unlock(&logname_mutex)
#endif /* _THREAD_SAFE */
#define THREAD_LOCK() if (__isthreaded) _pthread_mutex_lock(&logname_mutex)
#define THREAD_UNLOCK() if (__isthreaded) _pthread_mutex_unlock(&logname_mutex)
int _logname_valid; /* known to setlogin() */
extern int _getlogin(char *, int);
int _logname_valid; /* known to setlogin() */
static pthread_mutex_t logname_mutex = PTHREAD_MUTEX_INITIALIZER;
static char *
getlogin_basic(int *status)
@ -68,7 +65,7 @@ getlogin_basic(int *status)
if (_logname_valid == 0) {
#ifdef __NETBSD_SYSCALLS
if (__getlogin(logname, sizeof(logname) - 1) < 0) {
if (_getlogin(logname, sizeof(logname) - 1) < 0) {
#else
if (_getlogin(logname, sizeof(logname)) < 0) {
#endif

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)getpass.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/termios.h>
#include <signal.h>
@ -44,6 +45,7 @@ static char sccsid[] = "@(#)getpass.c 8.1 (Berkeley) 6/4/93";
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
#include "un-namespace.h"
static struct termios oterm, term;
static FILE *fp;
@ -74,7 +76,7 @@ getpass(prompt)
sigemptyset(&nset);
sigaddset(&nset, SIGINT);
sigaddset(&nset, SIGTSTP);
(void)sigprocmask(SIG_BLOCK, &nset, &oset);
(void)_sigprocmask(SIG_BLOCK, &nset, &oset);
(void)tcgetattr(fileno(fp), &oterm);
term = oterm;
@ -89,7 +91,7 @@ getpass(prompt)
(void)_write(fileno(outfp), "\n", 1);
(void)tcsetattr(fileno(fp), TCSAFLUSH|TCSASOFT, &oterm);
(void)sigprocmask(SIG_SETMASK, &oset, NULL);
(void)_sigprocmask(SIG_SETMASK, &oset, NULL);
if (fp != stdin)
(void)fclose(fp);

View File

@ -40,6 +40,7 @@ static const char *rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "un-namespace.h"
#include <sys/param.h>
#include <fcntl.h>
#include <db.h>
@ -62,6 +63,7 @@ static const char *rcsid[] =
#include <rpcsvc/yp_prot.h>
#include <rpcsvc/ypclnt.h>
#endif
#include "un-namespace.h"
extern void setnetgrent __P((char *));
extern int getnetgrent __P((char **, char **, char **));

View File

@ -2,6 +2,8 @@
* getvfsent.c - get a listing of installed filesystems
* Written September 1994 by Garrett A. Wollman
* This file is in the public domain.
*
* $FreeBSD$
*/
#include <sys/param.h>
@ -14,7 +16,6 @@
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <paths.h>
/* XXX hide some compatibility problems. */

View File

@ -29,6 +29,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
@ -37,10 +39,6 @@ static char sccsid[] = "@(#)isatty.c 8.1 (Berkeley) 6/4/93";
#include <termios.h>
#include <unistd.h>
#ifdef _THREAD_SAFE
#include <pthread.h>
#include "pthread_private.h"
#endif
int
isatty(fd)
@ -49,15 +47,6 @@ isatty(fd)
int retval;
struct termios t;
#ifdef _THREAD_SAFE
if (_FD_LOCK(fd, FD_READ, NULL) == 0) {
#endif
retval = (tcgetattr(fd, &t) != -1);
#ifdef _THREAD_SAFE
_FD_UNLOCK(fd, FD_READ);
} else {
retval = 0;
}
#endif
retval = (tcgetattr(fd, &t) != -1);
return(retval);
}

View File

@ -43,9 +43,11 @@ static const char rcsid[]=
"$FreeBSD$";
#endif
#include "namespace.h"
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include "un-namespace.h"
int
lockf(filedes, function, size)

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)nlist.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/mman.h>
#include <sys/stat.h>
@ -47,6 +48,7 @@ static char sccsid[] = "@(#)nlist.c 8.1 (Berkeley) 6/4/93";
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#define _NLIST_DO_AOUT
#define _NLIST_DO_ELF
@ -117,7 +119,7 @@ __aout_fdnlist(fd, list)
struct stat st;
/* check that file is at least as large as struct exec! */
if ((fstat(fd, &st) < 0) || (st.st_size < sizeof(struct exec)))
if ((_fstat(fd, &st) < 0) || (st.st_size < sizeof(struct exec)))
return (-1);
/* Check for files too large to mmap. */
@ -257,7 +259,7 @@ __elf_fdnlist(fd, list)
if (lseek(fd, (off_t)0, SEEK_SET) == -1 ||
_read(fd, &ehdr, sizeof(Elf_Ehdr)) != sizeof(Elf_Ehdr) ||
!__elf_is_okay__(&ehdr) ||
fstat(fd, &st) < 0)
_fstat(fd, &st) < 0)
return (-1);
/* calculate section header table size */

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)opendir.c 8.8 (Berkeley) 5/1/95";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/stat.h>
@ -46,9 +47,9 @@ static char sccsid[] = "@(#)opendir.c 8.8 (Berkeley) 5/1/95";
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include "un-namespace.h"
#include "telldir.h"
/*
* Open a directory.
*/
@ -56,7 +57,6 @@ DIR *
opendir(name)
const char *name;
{
return (__opendir2(name, DTF_HIDEW|DTF_NODUP));
}
@ -73,8 +73,8 @@ __opendir2(name, flags)
struct stat statb;
/*
* stat() before open() because opening of special files may be
* harmful. fstat() after open because the file may have changed.
* stat() before _open() because opening of special files may be
* harmful. _fstat() after open because the file may have changed.
*/
if (stat(name, &statb) != 0)
return (NULL);
@ -85,7 +85,7 @@ __opendir2(name, flags)
if ((fd = _open(name, O_RDONLY | O_NONBLOCK)) == -1)
return (NULL);
dirp = NULL;
if (fstat(fd, &statb) != 0)
if (_fstat(fd, &statb) != 0)
goto fail;
if (!S_ISDIR(statb.st_mode)) {
errno = ENOTDIR;
@ -102,7 +102,7 @@ __opendir2(name, flags)
/*
* Use the system page size if that is a multiple of DIRBLKSIZ.
* Hopefully this can be a big win someday by allowing page
* trades to user space to be done by getdirentries().
* trades to user space to be done by _getdirentries().
*/
incr = getpagesize();
if ((incr % DIRBLKSIZ) != 0)
@ -114,7 +114,7 @@ __opendir2(name, flags)
if (flags & DTF_NODUP) {
struct statfs sfb;
if (fstatfs(fd, &sfb) < 0)
if (_fstatfs(fd, &sfb) < 0)
goto fail;
unionstack = !strcmp(sfb.f_fstypename, "union");
} else {
@ -140,7 +140,7 @@ __opendir2(name, flags)
do {
/*
* Always make at least DIRBLKSIZ bytes
* available to getdirentries
* available to _getdirentries
*/
if (space < DIRBLKSIZ) {
space += incr;
@ -151,7 +151,7 @@ __opendir2(name, flags)
ddptr = buf + (len - space);
}
n = getdirentries(fd, ddptr, space, &dirp->dd_seek);
n = _getdirentries(fd, ddptr, space, &dirp->dd_seek);
if (n > 0) {
ddptr += n;
space -= n;
@ -265,6 +265,7 @@ __opendir2(name, flags)
dirp->dd_loc = 0;
dirp->dd_fd = fd;
dirp->dd_flags = flags;
dirp->dd_lock = NULL;
/*
* Set up seek point for rewinddir.

View File

@ -48,7 +48,5 @@ __pause()
{
return sigpause(sigblock(0L));
}
#ifndef _THREAD_SAFE
__weak_reference(__pause, pause);
#endif
__weak_reference(__pause, _pause);

View File

@ -40,6 +40,7 @@
static char sccsid[] = "@(#)popen.c 8.3 (Berkeley) 5/3/95";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/wait.h>
@ -50,6 +51,7 @@ static char sccsid[] = "@(#)popen.c 8.3 (Berkeley) 5/3/95";
#include <stdlib.h>
#include <string.h>
#include <paths.h>
#include "un-namespace.h"
extern char **environ;
@ -70,7 +72,7 @@ popen(command, type)
struct pid *p;
/*
* Lite2 introduced two-way popen() pipes using socketpair().
* Lite2 introduced two-way popen() pipes using _socketpair().
* FreeBSD's pipe() is bidirectional, so we use that.
*/
if (strchr(type, '+')) {
@ -105,7 +107,7 @@ popen(command, type)
case 0: /* Child. */
if (*type == 'r') {
/*
* The dup2() to STDIN_FILENO is repeated to avoid
* The _dup2() to STDIN_FILENO is repeated to avoid
* writing to pdes[1], which might corrupt the
* parent's copy. This isn't good enough in
* general, since the _exit() is no return, so
@ -114,15 +116,15 @@ popen(command, type)
*/
(void)_close(pdes[0]);
if (pdes[1] != STDOUT_FILENO) {
(void)dup2(pdes[1], STDOUT_FILENO);
(void)_dup2(pdes[1], STDOUT_FILENO);
(void)_close(pdes[1]);
if (twoway)
(void)dup2(STDOUT_FILENO, STDIN_FILENO);
(void)_dup2(STDOUT_FILENO, STDIN_FILENO);
} else if (twoway && (pdes[1] != STDIN_FILENO))
(void)dup2(pdes[1], STDIN_FILENO);
(void)_dup2(pdes[1], STDIN_FILENO);
} else {
if (pdes[0] != STDIN_FILENO) {
(void)dup2(pdes[0], STDIN_FILENO);
(void)_dup2(pdes[0], STDIN_FILENO);
(void)_close(pdes[0]);
}
(void)_close(pdes[1]);
@ -130,7 +132,7 @@ popen(command, type)
for (p = pidlist; p; p = p->next) {
(void)_close(fileno(p->fp));
}
execve(_PATH_BSHELL, argv, environ);
_execve(_PATH_BSHELL, argv, environ);
_exit(127);
/* NOTREACHED */
}

View File

@ -29,6 +29,7 @@
* $FreeBSD$
*/
#include "namespace.h"
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/mman.h>
@ -36,6 +37,7 @@
#include <errno.h>
#include <unistd.h>
#include "un-namespace.h"
int
shm_open(const char *path, int flags, mode_t mode)
@ -48,7 +50,7 @@ shm_open(const char *path, int flags, mode_t mode)
fd = _open(path, flags, mode);
if (fd != -1) {
if (fstat(fd, &stab) != 0 || !S_ISREG(stab.st_mode)) {
if (_fstat(fd, &stab) != 0 || !S_ISREG(stab.st_mode)) {
_close(fd);
errno = EINVAL;
return (-1);

View File

@ -29,11 +29,13 @@
* $FreeBSD$
*/
#include "namespace.h"
#include <sys/select.h>
#include <sys/time.h>
#include <errno.h>
#include <signal.h>
#include "un-namespace.h"
/*
* Emulate the POSIX 1003.1g-2000 `pselect' interface. This is the
@ -56,15 +58,15 @@ pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds,
tvp = 0;
if (mask != 0) {
rv = sigprocmask(SIG_SETMASK, mask, &omask);
rv = _sigprocmask(SIG_SETMASK, mask, &omask);
if (rv != 0)
return rv;
}
rv = select(count, rfds, wfds, efds, tvp);
rv = _select(count, rfds, wfds, efds, tvp);
if (mask != 0) {
sverrno = errno;
sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
_sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
errno = sverrno;
}

View File

@ -41,9 +41,11 @@ static char sccsid[] = "@(#)psignal.c 8.1 (Berkeley) 6/4/93";
* Print the name of the signal indicated
* along with the supplied message.
*/
#include "namespace.h"
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
void
psignal(sig, s)

View File

@ -38,20 +38,21 @@
static char sccsid[] = "@(#)readdir.c 8.3 (Berkeley) 9/29/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#ifdef _THREAD_SAFE
#include <pthread.h>
#include "pthread_private.h"
#endif /* _THREAD_SAFE */
#include "un-namespace.h"
#include "libc_private.h"
/*
* get next entry in a directory.
*/
struct dirent *
readdir(dirp)
_readdir_unlocked(dirp)
DIR *dirp;
{
struct dirent *dp;
@ -63,7 +64,7 @@ readdir(dirp)
dirp->dd_loc = 0;
}
if (dirp->dd_loc == 0 && !(dirp->dd_flags & __DTF_READALL)) {
dirp->dd_size = getdirentries(dirp->dd_fd,
dirp->dd_size = _getdirentries(dirp->dd_fd,
dirp->dd_buf, dirp->dd_len, &dirp->dd_seek);
if (dirp->dd_size <= 0)
return (NULL);
@ -83,6 +84,22 @@ readdir(dirp)
}
}
struct dirent *
readdir(dirp)
DIR *dirp;
{
struct dirent *dp;
if (__isthreaded) {
_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
dp = _readdir_unlocked(dirp);
_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
}
else
dp = _readdir_unlocked(dirp);
return (dp);
}
int
readdir_r(dirp, entry, result)
DIR *dirp;
@ -91,32 +108,23 @@ readdir_r(dirp, entry, result)
{
struct dirent *dp;
int saved_errno;
#ifdef _THREAD_SAFE
int ret;
if ((ret = _FD_LOCK(dirp->dd_fd, FD_READ, NULL)) != 0)
return (ret);
#endif
saved_errno = errno;
errno = 0;
dp = readdir(dirp);
if (errno != 0) {
if (dp == NULL) {
#ifdef _THREAD_SAFE
_FD_UNLOCK(dirp->dd_fd, FD_READ);
#endif
return (errno);
}
} else
errno = saved_errno;
if (dp != NULL)
if (__isthreaded) {
_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
if ((dp = _readdir_unlocked(dirp)) != NULL)
memcpy(entry, dp, sizeof *entry);
_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
}
else if ((dp = _readdir_unlocked(dirp)) != NULL)
memcpy(entry, dp, sizeof *entry);
#ifdef _THREAD_SAFE
_FD_UNLOCK(dirp->dd_fd, FD_READ);
#endif
if (errno != 0) {
if (dp == NULL)
return (errno);
} else
errno = saved_errno;
if (dp != NULL)
*result = entry;

View File

@ -29,6 +29,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
@ -42,11 +44,13 @@ static char sccsid[] = "@(#)scandir.c 8.3 (Berkeley) 1/2/94";
* struct dirent (through namelist). Returns -1 if there were any errors.
*/
#include "namespace.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include "un-namespace.h"
/*
* The DIRSIZ macro is the minimum record length which will hold the directory
@ -74,7 +78,7 @@ scandir(dirname, namelist, select, dcomp)
if ((dirp = opendir(dirname)) == NULL)
return(-1);
if (fstat(dirp->dd_fd, &stb) < 0)
if (_fstat(dirp->dd_fd, &stb) < 0)
goto fail;
/*

View File

@ -37,9 +37,13 @@
static char sccsid[] = "@(#)seekdir.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <dirent.h>
#include <pthread.h>
#include "un-namespace.h"
#include "libc_private.h"
#include "telldir.h"
/*
@ -51,5 +55,9 @@ seekdir(dirp, loc)
DIR *dirp;
long loc;
{
if (__isthreaded)
_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
_seekdir(dirp, loc);
if (__isthreaded)
_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
}

View File

@ -44,8 +44,10 @@ static char sccsid[] = "@(#)setjmperr.c 8.1 (Berkeley) 6/4/93";
* If this routine returns, the program is aborted.
*/
#include "namespace.h"
#include <setjmp.h>
#include <unistd.h>
#include "un-namespace.h"
void
longjmperror()

View File

@ -42,11 +42,11 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <errno.h>
#include <signal.h>
#include <stddef.h>
#include <stdlib.h>
@ -54,6 +54,7 @@ static const char rcsid[] =
#ifdef SETMODE_DEBUG
#include <stdio.h>
#endif
#include "un-namespace.h"
#define SET_LEN 6 /* initial # of bitcmd struct to malloc */
#define SET_LEN_INCR 4 /* # of bitcmd structs to add as needed */
@ -188,10 +189,10 @@ setmode(p)
* as best we can.
*/
sigfillset(&sigset);
(void)sigprocmask(SIG_BLOCK, &sigset, &sigoset);
(void)_sigprocmask(SIG_BLOCK, &sigset, &sigoset);
(void)umask(mask = umask(0));
mask = ~mask;
(void)sigprocmask(SIG_SETMASK, &sigoset, NULL);
(void)_sigprocmask(SIG_SETMASK, &sigoset, NULL);
setlen = SET_LEN + 2;

View File

@ -29,13 +29,18 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)siginterrupt.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <signal.h>
#include "un-namespace.h"
#include "libc_private.h"
/*
* Set signal state to prevent restart of system calls
@ -49,7 +54,7 @@ siginterrupt(sig, flag)
struct sigaction sa;
int ret;
if ((ret = sigaction(sig, (struct sigaction *)0, &sa)) < 0)
if ((ret = _sigaction(sig, (struct sigaction *)0, &sa)) < 0)
return (ret);
if (flag) {
sigaddset(&_sigintr, sig);
@ -58,5 +63,5 @@ siginterrupt(sig, flag)
sigdelset(&_sigintr, sig);
sa.sa_flags |= SA_RESTART;
}
return (sigaction(sig, &sa, (struct sigaction *)0));
return (_sigaction(sig, &sa, (struct sigaction *)0));
}

View File

@ -29,6 +29,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
@ -38,7 +40,10 @@ static char sccsid[] = "@(#)signal.c 8.1 (Berkeley) 6/4/93";
/*
* Almost backwards compatible signal.
*/
#include "namespace.h"
#include <signal.h>
#include "un-namespace.h"
#include "libc_private.h"
sigset_t _sigintr; /* shared with siginterrupt */
@ -54,7 +59,7 @@ signal(s, a)
sa.sa_flags = 0;
if (!sigismember(&_sigintr, s))
sa.sa_flags |= SA_RESTART;
if (sigaction(s, &sa, &osa) < 0)
if (_sigaction(s, &sa, &osa) < 0)
return (SIG_ERR);
return (osa.sa_handler);
}

View File

@ -39,10 +39,12 @@ static char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <errno.h>
#include <limits.h>
#include <time.h>
#include <unistd.h>
#include "un-namespace.h"
unsigned int
__sleep(seconds)
@ -68,6 +70,5 @@ __sleep(seconds)
(time_remaining.tv_nsec != 0)); /* round up */
}
#ifndef _THREAD_SAFE
__weak_reference(__sleep, sleep);
#endif
__weak_reference(__sleep, _sleep);

View File

@ -39,6 +39,7 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/syslog.h>
@ -59,6 +60,7 @@ static const char rcsid[] =
#else
#include <varargs.h>
#endif
#include "un-namespace.h"
static int LogFile = -1; /* fd for log */
static int connected; /* have done connect */
@ -235,7 +237,7 @@ vsyslog(pri, fmt, ap)
++v;
v->iov_base = "\n";
v->iov_len = 1;
(void)writev(STDERR_FILENO, iov, 2);
(void)_writev(STDERR_FILENO, iov, 2);
}
/* Get connected, output the message to the local logger. */
@ -270,7 +272,7 @@ vsyslog(pri, fmt, ap)
++v;
v->iov_base = "\r\n";
v->iov_len = 2;
(void)writev(fd, iov, 2);
(void)_writev(fd, iov, 2);
(void)_close(fd);
}
}
@ -295,7 +297,7 @@ connectlog()
struct sockaddr_un SyslogAddr; /* AF_UNIX address of local logger */
if (LogFile == -1) {
if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
if ((LogFile = _socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
return;
(void)_fcntl(LogFile, F_SETFD, 1);
}
@ -304,7 +306,7 @@ connectlog()
SyslogAddr.sun_family = AF_UNIX;
(void)strncpy(SyslogAddr.sun_path, _PATH_LOG,
sizeof SyslogAddr.sun_path);
connected = connect(LogFile, (struct sockaddr *)&SyslogAddr,
connected = _connect(LogFile, (struct sockaddr *)&SyslogAddr,
sizeof(SyslogAddr)) != -1;
if (!connected) {
@ -314,7 +316,7 @@ connectlog()
*/
(void)strncpy(SyslogAddr.sun_path, _PATH_OLDLOG,
sizeof SyslogAddr.sun_path);
connected = connect(LogFile,
connected = _connect(LogFile,
(struct sockaddr *)&SyslogAddr,
sizeof(SyslogAddr)) != -1;
}

View File

@ -37,12 +37,16 @@
static char sccsid[] = "@(#)telldir.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/queue.h>
#include <dirent.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include "un-namespace.h"
#include "libc_private.h"
#include "telldir.h"
/*
@ -63,10 +67,14 @@ telldir(dirp)
if ((lp = (struct ddloc *)malloc(sizeof(struct ddloc))) == NULL)
return (-1);
if (__isthreaded)
_pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock);
lp->loc_index = dirp->dd_td->td_loccnt++;
lp->loc_seek = dirp->dd_seek;
lp->loc_loc = dirp->dd_loc;
LIST_INSERT_HEAD(&dirp->dd_td->td_locq, lp, loc_lqe);
if (__isthreaded)
_pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock);
return (lp->loc_index);
}
@ -94,7 +102,7 @@ _seekdir(dirp, loc)
dirp->dd_seek = lp->loc_seek;
dirp->dd_loc = 0;
while (dirp->dd_loc < lp->loc_loc) {
dp = readdir(dirp);
dp = _readdir_unlocked(dirp);
if (dp == NULL)
break;
}

View File

@ -59,7 +59,8 @@ struct _telldir {
long td_loccnt; /* index of entry for sequential readdir's */
};
void _reclaim_telldir __P((DIR *));
void _seekdir __P((DIR *, long));
struct dirent *_readdir_unlocked(DIR *);
void _reclaim_telldir(DIR *);
void _seekdir(DIR *, long);
#endif

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)termios.c 8.2 (Berkeley) 2/21/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
@ -45,6 +46,7 @@ static char sccsid[] = "@(#)termios.c 8.2 (Berkeley) 2/21/94";
#include <errno.h>
#include <termios.h>
#include <unistd.h>
#include "un-namespace.h"
int
tcgetattr(fd, t)
@ -52,7 +54,7 @@ tcgetattr(fd, t)
struct termios *t;
{
return (ioctl(fd, TIOCGETA, t));
return (_ioctl(fd, TIOCGETA, t));
}
int
@ -69,11 +71,11 @@ tcsetattr(fd, opt, t)
}
switch (opt & ~TCSASOFT) {
case TCSANOW:
return (ioctl(fd, TIOCSETA, t));
return (_ioctl(fd, TIOCSETA, t));
case TCSADRAIN:
return (ioctl(fd, TIOCSETAW, t));
return (_ioctl(fd, TIOCSETAW, t));
case TCSAFLUSH:
return (ioctl(fd, TIOCSETAF, t));
return (_ioctl(fd, TIOCSETAF, t));
default:
errno = EINVAL;
return (-1);
@ -92,7 +94,7 @@ tcsetpgrp(fd, pgrp)
int s;
s = pgrp;
return (ioctl(fd, TIOCSPGRP, &s));
return (_ioctl(fd, TIOCSPGRP, &s));
}
pid_t
@ -101,7 +103,7 @@ tcgetpgrp(fd)
{
int s;
if (ioctl(fd, TIOCGPGRP, &s) < 0)
if (_ioctl(fd, TIOCGPGRP, &s) < 0)
return ((pid_t)-1);
return ((pid_t)s);
@ -180,10 +182,10 @@ tcsendbreak(fd, len)
sleepytime.tv_sec = 0;
sleepytime.tv_usec = 400000;
if (ioctl(fd, TIOCSBRK, 0) == -1)
if (_ioctl(fd, TIOCSBRK, 0) == -1)
return (-1);
(void)select(0, 0, 0, 0, &sleepytime);
if (ioctl(fd, TIOCCBRK, 0) == -1)
(void)_select(0, 0, 0, 0, &sleepytime);
if (_ioctl(fd, TIOCCBRK, 0) == -1)
return (-1);
return (0);
}
@ -192,12 +194,11 @@ int
__tcdrain(fd)
int fd;
{
return (ioctl(fd, TIOCDRAIN, 0));
return (_ioctl(fd, TIOCDRAIN, 0));
}
#ifndef _THREAD_SAFE
__weak_reference(__tcdrain, tcdrain);
#endif
__weak_reference(__tcdrain, _tcdrain);
int
tcflush(fd, which)
@ -219,7 +220,7 @@ tcflush(fd, which)
errno = EINVAL;
return (-1);
}
return (ioctl(fd, TIOCFLUSH, &com));
return (_ioctl(fd, TIOCFLUSH, &com));
}
int
@ -231,9 +232,9 @@ tcflow(fd, action)
switch (action) {
case TCOOFF:
return (ioctl(fd, TIOCSTOP, 0));
return (_ioctl(fd, TIOCSTOP, 0));
case TCOON:
return (ioctl(fd, TIOCSTART, 0));
return (_ioctl(fd, TIOCSTART, 0));
case TCION:
case TCIOFF:
if (tcgetattr(fd, &term) == -1)

View File

@ -29,12 +29,15 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)ttyname.c 8.2 (Berkeley) 1/27/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@ -42,42 +45,44 @@ static char sccsid[] = "@(#)ttyname.c 8.2 (Berkeley) 1/27/94";
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <db.h>
#include <string.h>
#include <paths.h>
#ifdef _THREAD_SAFE
#include <pthread.h>
#include "pthread_private.h"
static struct pthread_mutex _ttyname_lockd = PTHREAD_MUTEX_STATIC_INITIALIZER;
static pthread_mutex_t ttyname_lock = &_ttyname_lockd;
static pthread_key_t ttyname_key;
static int ttyname_init = 0;
#include "un-namespace.h"
char *
#include <db.h>
#include "libc_private.h"
static char buf[sizeof(_PATH_DEV) + MAXNAMLEN] = _PATH_DEV;
static char *oldttyname __P((int, struct stat *));
static char *ttyname_threaded(int fd);
static char *ttyname_unthreaded(int fd);
static pthread_mutex_t ttyname_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_key_t ttyname_key;
static int ttyname_init = 0;
char *
ttyname(int fd)
{
char *ret;
if (_FD_LOCK(fd, FD_READ, NULL) == 0) {
ret = __ttyname_basic(fd);
_FD_UNLOCK(fd, FD_READ);
} else {
ret = NULL;
}
if (__isthreaded == 0)
ret = ttyname_unthreaded(fd);
else
ret = ttyname_threaded(fd);
return (ret);
}
char *
__ttyname_r_basic(int fd, char *buf, size_t len)
char *
ttyname_r(int fd, char *buf, size_t len)
{
register struct dirent *dirp;
register DIR *dp;
struct stat dsb;
struct stat sb;
char *rval;
int minlen;
struct dirent *dirp;
DIR *dp;
struct stat dsb;
struct stat sb;
char *rval;
int minlen;
rval = NULL;
@ -85,7 +90,7 @@ __ttyname_r_basic(int fd, char *buf, size_t len)
if (!isatty(fd))
return (rval);
/* Must be a character device. */
if (_thread_sys_fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
if (_fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
return (rval);
/* Must have enough room */
if (len <= sizeof(_PATH_DEV))
@ -110,25 +115,27 @@ __ttyname_r_basic(int fd, char *buf, size_t len)
return (rval);
}
char *
__ttyname_basic(int fd)
static char *
ttyname_threaded(int fd)
{
char *buf;
char *buf;
pthread_mutex_lock(&ttyname_lock);
if (ttyname_init == 0) {
if (pthread_key_create(&ttyname_key, free)) {
pthread_mutex_unlock(&ttyname_lock);
return (NULL);
_pthread_mutex_lock(&ttyname_lock);
if (ttyname_init == 0) {
if (_pthread_key_create(&ttyname_key, free)) {
_pthread_mutex_unlock(&ttyname_lock);
return (NULL);
}
ttyname_init = 1;
}
ttyname_init = 1;
_pthread_mutex_unlock(&ttyname_lock);
}
pthread_mutex_unlock(&ttyname_lock);
/* Must have thread specific data field to put data */
if ((buf = pthread_getspecific(ttyname_key)) == NULL) {
if ((buf = _pthread_getspecific(ttyname_key)) == NULL) {
if ((buf = malloc(sizeof(_PATH_DEV) + MAXNAMLEN)) != NULL) {
if (pthread_setspecific(ttyname_key, buf) != 0) {
if (_pthread_setspecific(ttyname_key, buf) != 0) {
free(buf);
return (NULL);
}
@ -136,34 +143,16 @@ __ttyname_basic(int fd)
return (NULL);
}
}
return (__ttyname_r_basic(fd, buf, sizeof(_PATH_DEV) + MAXNAMLEN));
return (ttyname_r(fd, buf, sizeof(_PATH_DEV) + MAXNAMLEN));
}
char *
ttyname_r(int fd, char *buf, size_t len)
static char *
ttyname_unthreaded(int fd)
{
char *ret;
if (_FD_LOCK(fd, FD_READ, NULL) == 0) {
ret = __ttyname_r_basic(fd, buf, len);
_FD_UNLOCK(fd, FD_READ);
} else {
ret = NULL;
}
return (ret);
}
#else
static char buf[sizeof(_PATH_DEV) + MAXNAMLEN] = _PATH_DEV;
static char *oldttyname __P((int, struct stat *));
char *
ttyname(fd)
int fd;
{
struct stat sb;
struct termios ttyb;
DB *db;
DBT data, key;
struct stat sb;
struct termios ttyb;
DB *db;
DBT data, key;
struct {
mode_t type;
dev_t dev;
@ -173,7 +162,7 @@ ttyname(fd)
if (tcgetattr(fd, &ttyb) < 0)
return (NULL);
/* Must be a character device. */
if (fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
if (_fstat(fd, &sb) || !S_ISCHR(sb.st_mode))
return (NULL);
if ( (db = dbopen(_PATH_DEVDB, O_RDONLY, 0, DB_HASH, NULL)) ) {
@ -194,13 +183,11 @@ ttyname(fd)
}
static char *
oldttyname(fd, sb)
int fd;
struct stat *sb;
oldttyname(int fd, struct stat *sb)
{
register struct dirent *dirp;
register DIR *dp;
struct stat dsb;
struct dirent *dirp;
struct stat dsb;
DIR *dp;
if ((dp = opendir(_PATH_DEV)) == NULL)
return (NULL);
@ -219,4 +206,3 @@ oldttyname(fd, sb)
(void)closedir(dp);
return (NULL);
}
#endif

View File

@ -39,8 +39,10 @@ static char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <time.h>
#include <unistd.h>
#include "un-namespace.h"
int
usleep(useconds)

View File

@ -40,6 +40,7 @@ static char sccsid[] = "@(#)vis.c 8.1 (Berkeley) 7/19/93";
#include <sys/types.h>
#include <limits.h>
#include <ctype.h>
#include <stdio.h>
#include <vis.h>
#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')

View File

@ -37,18 +37,18 @@
static char sccsid[] = "@(#)wait.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include "un-namespace.h"
pid_t
__wait(istat)
int *istat;
__wait(int *istat)
{
return (wait4(WAIT_ANY, istat, 0, (struct rusage *)0));
return (_wait4(WAIT_ANY, istat, 0, (struct rusage *)0));
}
#ifndef _THREAD_SAFE
__weak_reference(__wait, wait);
#endif
__weak_reference(__wait, _wait);

View File

@ -29,16 +29,20 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)wait3.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include "un-namespace.h"
pid_t
wait3(istat, options, rup)
@ -46,5 +50,5 @@ wait3(istat, options, rup)
int options;
struct rusage *rup;
{
return (wait4(WAIT_ANY, istat, options, rup));
return (_wait4(WAIT_ANY, istat, options, rup));
}

View File

@ -37,24 +37,18 @@
static char sccsid[] = "@(#)waitpid.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include "un-namespace.h"
pid_t
#if __STDC__
__waitpid(pid_t pid, int *istat, int options)
#else
__waitpid(pid, istat, options)
pid_t pid;
int *istat;
int options;
#endif
{
return (wait4(pid, istat, options, (struct rusage *)0));
return (_wait4(pid, istat, options, (struct rusage *)0));
}
#ifndef _THREAD_SAFE
__weak_reference(__waitpid, waitpid);
#endif
__weak_reference(__waitpid, _waitpid);

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)gmon.c 8.1 (Berkeley) 6/4/93";
#endif
#include "namespace.h"
#include <sys/param.h>
#include <sys/time.h>
#include <sys/gmon.h>
@ -46,7 +47,9 @@ static char sccsid[] = "@(#)gmon.c 8.1 (Berkeley) 6/4/93";
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
#if defined(__ELF__) && defined(i386)
extern char *minbrk asm (".minbrk");

View File

@ -61,31 +61,28 @@
* Design note:
*
* The macros PSYSCALL() and PRSYSCALL() are intended for use where a
* syscall needs to be renamed in the threaded library. When building
* a normal library, they default to the traditional SYSCALL() and
* RSYSCALL(). This avoids the need to #ifdef _THREAD_SAFE everywhere
* that the renamed function needs to be called.
* syscall needs to be renamed in the threaded library.
*/
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* For the thread_safe versions, we prepend __sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
#define PSYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
ENTRY(__CONCAT(_thread_sys_,x)); \
ENTRY(__CONCAT(__sys_,x)); \
.weak CNAME(x); \
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
.weak CNAME(__CONCAT(_,x)); \
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b
#define PRSYSCALL(x) PSYSCALL(x); ret
#define PPSEUDO(x,y) ENTRY(__CONCAT(_thread_sys_,x)); \
#define PPSEUDO(x,y) ENTRY(__CONCAT(__sys_,x)); \
.weak CNAME(x); \
.set CNAME(x),CNAME(__CONCAT(__sys_,x)); \
.weak CNAME(__CONCAT(_,x)); \
.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
lea __CONCAT(SYS_,y), %eax; KERNCALL; ret
#else
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
#define PSYSCALL(x) SYSCALL(x)
#define PRSYSCALL(x) RSYSCALL(x)
#define PPSEUDO(x,y) PSEUDO(x,y)
#endif
#ifdef __ELF__
#define KERNCALL int $0x80 /* Faster */

View File

@ -66,12 +66,9 @@ ENTRY(_setjmp)
xorl %eax,%eax
ret
#ifdef _THREAD_SAFE
.weak CNAME(_longjmp)
.set CNAME(_longjmp),CNAME(___longjmp)
ENTRY(___longjmp)
#else
ALTENTRY(___longjmp)
ENTRY(_longjmp)
#endif
movl 4(%esp),%edx
movl 8(%esp),%eax
movl 0(%edx),%ecx

View File

@ -61,11 +61,7 @@ ENTRY(setjmp)
pushl %eax /* (sigset_t*)oset */
pushl $0 /* (sigset_t*)set */
pushl $1 /* SIG_BLOCK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%ecx
@ -80,10 +76,8 @@ ENTRY(setjmp)
xorl %eax,%eax
ret
#ifndef _THREAD_SAFE
.weak CNAME(longjmp);
.set CNAME(longjmp),CNAME(__longjmp);
#endif
.weak CNAME(longjmp)
.set CNAME(longjmp),CNAME(__longjmp)
ENTRY(__longjmp)
movl 4(%esp),%edx
PIC_PROLOGUE
@ -91,11 +85,7 @@ ENTRY(__longjmp)
leal 28(%edx), %eax
pushl %eax /* (sigset_t*)set */
pushl $3 /* SIG_SETMASK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%edx

View File

@ -52,9 +52,6 @@
* the renamed functions (introduced in gcc-2.5.3; previous versions
* only supported *jmp with 0 or 1 leading underscores).
*
* Use sigprocmask() instead of sigblock() and sigsetmask(), and
* check for and handle errors.
*
* Restore _all_ the registers and the signal mask atomically. Can
* use sigreturn() if sigreturn() works.
*/
@ -70,11 +67,7 @@ ENTRY(sigsetjmp)
pushl %eax /* (sigset_t*)oset */
pushl $0 /* (sigset_t*)set */
pushl $1 /* SIG_BLOCK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%ecx
@ -89,10 +82,8 @@ ENTRY(sigsetjmp)
xorl %eax,%eax
ret
#ifndef _THREAD_SAFE
.weak CNAME(siglongjmp);
.set CNAME(siglongjmp),CNAME(__siglongjmp);
#endif
.weak CNAME(siglongjmp);
.set CNAME(siglongjmp),CNAME(__siglongjmp);
ENTRY(__siglongjmp);
movl 4(%esp),%edx
cmpl $0,44(%edx)
@ -102,11 +93,7 @@ ENTRY(__siglongjmp);
leal 28(%edx), %eax
pushl %eax /* (sigset_t*)set */
pushl $3 /* SIG_SETMASK */
#ifdef _THREAD_SAFE
call PIC_PLT(CNAME(_thread_sys_sigprocmask))
#else
call PIC_PLT(CNAME(sigprocmask))
#endif
call PIC_PLT(CNAME(_sigprocmask))
addl $12,%esp
PIC_EPILOGUE
movl 4(%esp),%edx

View File

@ -51,12 +51,11 @@
* %eax == pid of child in parent, %eax == pid of parent in child.
*
*/
#ifdef _THREAD_SAFE
ENTRY(_thread_sys_vfork)
#else
ENTRY(vfork)
#endif
.weak _vfork
.set _vfork,__sys_vfork
.weak vfork
.set vfork,__sys_vfork
ENTRY(__sys_vfork)
popl %ecx /* my rta into ecx */
lea SYS_vfork,%eax
KERNCALL

View File

@ -43,7 +43,7 @@
#include "SYS.h"
.globl CNAME(_logname_valid) /* in getlogin() */
.globl CNAME(_logname_valid) /* in _getlogin() */
SYSCALL(setlogin)
#ifdef PIC

View File

@ -75,50 +75,35 @@ END(label);
* Design note:
*
* The macros PSYSCALL() and PRSYSCALL() are intended for use where a
* syscall needs to be renamed in the threaded library. When building
* a normal library, they default to the traditional SYSCALL() and
* RSYSCALL(). This avoids the need to #ifdef _THREAD_SAFE everywhere
* that the renamed function needs to be called.
* syscall needs to be renamed in the threaded library.
*/
#ifdef _THREAD_SAFE
/*
* For the thread_safe versions, we prepend _thread_sys_ to the function
* For the thread_safe versions, we prepend __sys_ to the function
* name so that the 'C' wrapper can go around the real name.
*/
#define PCALL(name) \
CALL(_thread_sys_ ## name)
CALL(__sys_ ## name)
#define PENTRY(name, args) \
ENTRY(_thread_sys_ ## name,args)
ENTRY(__sys_ ## name,args)
#define PEND(name) \
END(_thread_sys_ ## name)
END(__sys_ ## name)
#define PSYSCALL(name) \
PENTRY(name,0); /* XXX # of args? */ \
CALLSYS_ERROR(name)
#define PRSYSCALL(name) \
PENTRY(name,0); /* XXX # of args? */ \
PENTRY(_sys_ ## name,0); /* XXX # of args? */ \
WEAK_ALIAS(name, __sys_ ## name); \
WEAK_ALIAS(_ ## name, __sys_ ## name); \
CALLSYS_ERROR(name) \
br.ret.sptk.few rp; \
PEND(name)
#define PPSEUDO(label,name) \
PENTRY(label,0); /* XXX # of args? */ \
PENTRY(label,0); /* XXX # of args? */ \
CALLSYS_ERROR(name); \
br.ret.sptk.few rp; \
PEND(label)
#else
/*
* The non-threaded library defaults to traditional syscalls where
* the function name matches the syscall name.
*/
#define PSYSCALL(x) SYSCALL(x)
#define PRSYSCALL(x) RSYSCALL(x)
#define PPSEUDO(x,y) PSEUDO(x,y)
#define PENTRY(x,y) ENTRY(x,y)
#define PEND(x) END(x)
#define PCALL(x) CALL(x)
#endif

View File

@ -90,12 +90,8 @@ ENTRY(_setjmp, 1)
#endif
END(_setjmp)
#ifdef _THREAD_SAFE
XENTRY(_longjmp)
ENTRY(___longjmp, 2)
#else
XENTRY(___longjmp)
ENTRY(_longjmp, 2)
#endif
#if 0
LDGP(pv)
ldq t0, ((31 + 4) * 8)(a0) /* magic in sc_regs[31] */
@ -132,8 +128,4 @@ botch:
CALL(abort)
RET /* "can't" get here... */
#endif
#ifdef _THREAD_SAFE
END(___longjmp)
#else
END(_longjmp)
#endif

View File

@ -30,7 +30,6 @@
#include <sys/types.h>
#include <machine/ieee.h>
#include <errno.h>
#include <math.h>
/*

View File

@ -69,12 +69,12 @@ ENTRY(setjmp, 1)
lda a2, (71 * 8)(a0) /* oset: sc_reserved */
mov zero, a1 /* set: NULL */
addq a1, 1, a0 /* how: SIG_BLOCK */
PCALL(sigprocmask) /* see what's blocked */
CALL(_sigprocmask) /* see what's blocked */
lda sp, -24(sp) /* sizeof struct sigaltstack */
mov zero, a0
mov sp, a1
PCALL(sigaltstack)
CALL(_sigaltstack)
ldl t0, 16(sp) /* offset of ss_flags */
lda sp, 24(sp) /* sizeof struct sigaltstack */
ldq ra, ((26 + 4) * 8)(s0) /* restore return address */
@ -119,24 +119,15 @@ ENTRY(setjmp, 1)
#endif
END(setjmp)
#ifdef _THREAD_SAFE
XENTRY(longjmp)
ENTRY(__longjmp, 2)
#else
XENTRY(__longjmp)
ENTRY(longjmp, 2)
#endif
#if 0
LDGP(pv)
stq a1, (( 0 + 4) * 8)(a0) /* save return value */
PCALL(sigreturn) /* use sigreturn to return */
PCALL(_sigreturn) /* use sigreturn to return */
botch:
CALL(longjmperror)
CALL(abort)
RET /* "can't" get here... */
#endif
#ifdef _THREAD_SAFE
END(__longjmp)
#else
END(longjmp)
#endif

View File

@ -55,12 +55,8 @@ Lsavesig:
#endif
END(sigsetjmp)
#ifdef _THREAD_SAFE
XENTRY(siglongjmp)
ENTRY(__siglongjmp, 2)
#else
XENTRY(__siglongjmp)
ENTRY(siglongjmp, 2)
#endif
#if 0
LDGP(pv)
ldq t0, (81 * 8)(a0) /* get the mask */
@ -69,8 +65,4 @@ ENTRY(siglongjmp, 2)
Lrestoresig:
jmp zero, longjmp
#endif
#ifdef _THREAD_SAFE
END(__siglongjmp)
#else
END(siglongjmp)
#endif

View File

@ -53,7 +53,7 @@ extern int __isthreaded;
#ifdef _FLOCK_DEBUG
#define _FLOCKFILE(x) _flockfile_debug(x, __FILE__, __LINE__)
#else
#define _FLOCKFILE(x) flockfile(x)
#define _FLOCKFILE(x) _flockfile(x)
#endif
/*
@ -61,6 +61,6 @@ extern int __isthreaded;
* process is threaded to avoid locking when not required.
*/
#define FLOCKFILE(fp) if (__isthreaded) _FLOCKFILE(fp)
#define FUNLOCKFILE(fp) if (__isthreaded) funlockfile(fp)
#define FUNLOCKFILE(fp) if (__isthreaded) _funlockfile(fp)
#endif /* _LIBC_PRIVATE_H_ */

View File

@ -0,0 +1,134 @@
/*
* Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*
*/
#ifndef _NAMESPACE_H_
#define _NAMESPACE_H_
/*
* Prototypes for syscalls/functions that need to be overridden
* in libc_r/libpthread.
*/
#define accept _accept
#define bind _bind
#define close _close
#define connect _connect
#define dup _dup
#define dup2 _dup2
#define execve _execve
#define fcntl _fcntl
/*#define flock _flock */
#define flockfile _flockfile
#define fstat _fstat
#define fstatfs _fstatfs
#define fsync _fsync
#define funlockfile _funlockfile
#define getdirentries _getdirentries
#define getlogin _getlogin
#define getpeername _getpeername
#define getsockname _getsockname
#define getsockopt _getsockopt
#define ioctl _ioctl
/* #define kevent _kevent */
#define listen _listen
#define nanosleep _nanosleep
#define open _open
#define pthread_getspecific _pthread_getspecific
#define pthread_key_create _pthread_key_create
#define pthread_key_delete _pthread_key_delete
#define pthread_mutex_destroy _pthread_mutex_destroy
#define pthread_mutex_init _pthread_mutex_init
#define pthread_mutex_lock _pthread_mutex_lock
#define pthread_mutex_trylock _pthread_mutex_trylock
#define pthread_mutex_unlock _pthread_mutex_unlock
#define pthread_mutexattr_init _pthread_mutexattr_init
#define pthread_mutexattr_destroy _pthread_mutexattr_destroy
#define pthread_mutexattr_settype _pthread_mutexattr_settype
#define pthread_once _pthread_once
#define pthread_setspecific _pthread_setspecific
#define read _read
#define readv _readv
#define recvfrom _recvfrom
#define recvmsg _recvmsg
#define select _select
#define sendmsg _sendmsg
#define sendto _sendto
#define setsockopt _setsockopt
/*#define sigaction _sigaction*/
#define sigprocmask _sigprocmask
#define sigsuspend _sigsuspend
#define socket _socket
#define socketpair _socketpair
#define wait4 _wait4
#define write _write
#define writev _writev
/*
* Other hidden syscalls/functions that libc_r needs to override
* but are not used internally by libc.
*
* XXX - When modifying libc to use one of the following, remove
* the prototype from below and place it in the list above.
*/
#if 0
#define creat _creat
#define fchflags _fchflags
#define fchmod _fchmod
#define fpathconf _fpathconf
#define ftrylockfile _ftrylockfile
#define msync _msync
#define nfssvc _nfssvc
#define pause _pause
#define poll _poll
#define pthread_rwlock_destroy _pthread_rwlock_destroy
#define pthread_rwlock_init _pthread_rwlock_init
#define pthread_rwlock_rdlock _pthread_rwlock_rdlock
#define pthread_rwlock_tryrdlock _pthread_rwlock_tryrdlock
#define pthread_rwlock_trywrlock _pthread_rwlock_trywrlock
#define pthread_rwlock_unlock _pthread_rwlock_unlock
#define pthread_rwlock_wrlock _pthread_rwlock_wrlock
#define pthread_rwlockattr_init _pthread_rwlockattr_init
#define pthread_rwlockattr_destroy _pthread_rwlockattr_destroy
#define pthread_self _pthread_self
#define sched_yield _sched_yield
#define sendfile _sendfile
#define shutdown _shutdown
#define sigaltstack _sigaltstack
#define signanosleep _signanosleep
#define sigpending _sigpending
#define sigreturn _sigreturn
#define sigsetmask _sigsetmask
#define sleep _sleep
#define system _system
#define tcdrain _tcdrain
#define wait _wait
#define waitpid _waitpid
#endif
#endif /* _NAMESPACE_H_ */

View File

@ -0,0 +1,134 @@
/*
* Copyright (c) 2001 Daniel Eischen <deischen@FreeBSD.org>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _UN_NAMESPACE_H_
#define _UN_NAMESPACE_H_
#undef accept
#undef bind
#undef close
#undef connect
#undef dup
#undef dup2
#undef execve
#undef fcntl
#undef flock
#undef flockfile
#undef fstat
#undef fstatfs
#undef fsync
#undef funlockfile
#undef getdirentries
#undef getlogin
#undef getpeername
#undef getsockname
#undef getsockopt
#undef ioctl
#undef kevent
#undef listen
#undef nanosleep
#undef open
#undef pthread_getspecific
#undef pthread_key_create
#undef pthread_key_delete
#undef pthread_mutex_destroy
#undef pthread_mutex_init
#undef pthread_mutex_lock
#undef pthread_mutex_trylock
#undef pthread_mutex_unlock
#undef pthread_mutexattr_init
#undef pthread_mutexattr_destroy
#undef pthread_mutexattr_settype
#undef pthread_once
#undef pthread_setspecific
#undef read
#undef readv
#undef recvfrom
#undef recvmsg
#undef select
#undef sendmsg
#undef sendto
#undef setsockopt
#undef sigaction
#undef sigprocmask
#undef sigsuspend
#undef socket
#undef socketpair
#undef wait4
#undef write
#undef writev
#if 0
#undef creat
#undef fchflags
#undef fchmod
#undef fpathconf
#undef ftrylockfile
#undef msync
#undef nfssvc
#undef pause
#undef poll
#undef pthread_rwlock_destroy
#undef pthread_rwlock_init
#undef pthread_rwlock_rdlock
#undef pthread_rwlock_tryrdlock
#undef pthread_rwlock_trywrlock
#undef pthread_rwlock_unlock
#undef pthread_rwlock_wrlock
#undef pthread_rwlockattr_init
#undef pthread_rwlockattr_destroy
#undef pthread_self
#undef sched_yield
#undef sendfile
#undef shutdown
#undef sigaltstack
#undef signanosleep
#undef sigpending
#undef sigreturn
#undef sigsetmask
#undef sleep
#undef system
#undef tcdrain
#undef wait
#undef waitpid
#endif /* 0 */
#ifdef _SIGNAL_H_
int _sigaction(int, const struct sigaction *, struct sigaction *);
#endif
#ifdef _SYS_EVENT_H_
int _kevent(int, const struct kevent *, int, struct kevent *,
int, const struct timespec *);
#endif
#ifdef _SYS_FCNTL_H_
int _flock(int, int);
#endif
#endif /* _UN_NAMESPACE_H_ */

View File

@ -40,7 +40,6 @@
static char sccsid[] = "@(#)big5.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <errno.h>
#include <rune.h>
#include <stddef.h>
#include <stdio.h>

View File

@ -27,6 +27,7 @@
* $FreeBSD$
*/
#include "namespace.h"
#include <rune.h>
#include <stdio.h>
#include <stdlib.h>
@ -34,6 +35,8 @@
#include <errno.h>
#include <unistd.h>
#include <sysexits.h>
#include "un-namespace.h"
#include "collate.h"
#include "setlocale.h"
@ -46,7 +49,7 @@ struct __collate_st_chain_pri __collate_chain_pri_table[TABLE_SIZE];
#define FREAD(a, b, c, d) \
do { \
if(fread(a, b, c, d) != c) { \
if (fread(a, b, c, d) != c) { \
fclose(d); \
return -1; \
} \

View File

@ -39,7 +39,6 @@ static char sccsid[] = "@(#)mskanji.c 1.0 (Phase One) 5/5/95";
#include <sys/types.h>
#include <errno.h>
#include <rune.h>
#include <stddef.h>
#include <stdio.h>

View File

@ -32,6 +32,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
@ -41,7 +43,6 @@ static char sccsid[] = "@(#)none.c 8.1 (Berkeley) 6/4/93";
#include <stddef.h>
#include <stdio.h>
#include <rune.h>
#include <errno.h>
#include <stdlib.h>
rune_t _none_sgetrune __P((const char *, size_t, char const **));

View File

@ -32,18 +32,22 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rune.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <rune.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "un-namespace.h"
_RuneLocale *
_Read_RuneMagi(fp)
@ -56,7 +60,7 @@ _Read_RuneMagi(fp)
struct stat sb;
int x;
if (fstat(fileno(fp), &sb) < 0)
if (_fstat(fileno(fp), &sb) < 0)
return(0);
if (sb.st_size < sizeof(_RuneLocale))

View File

@ -40,7 +40,6 @@
static char sccsid[] = "@(#)utf2.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <errno.h>
#include <rune.h>
#include <stddef.h>
#include <stdio.h>

View File

@ -86,6 +86,7 @@
* - classful IPv4 numeric (127.1) is allowed.
*/
#include "namespace.h"
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
@ -106,6 +107,7 @@
#include <syslog.h>
#include <stdarg.h>
#include <nsswitch.h>
#include "un-namespace.h"
#if defined(__KAME__) && defined(INET6)
# define FAITH
@ -665,7 +667,7 @@ explore_null(pai, servname, res)
* filter out AFs that are not supported by the kernel
* XXX errno?
*/
s = socket(pai->ai_family, SOCK_DGRAM, 0);
s = _socket(pai->ai_family, SOCK_DGRAM, 0);
if (s < 0) {
if (errno != EMFILE)
return 0;
@ -1059,18 +1061,18 @@ addrconfig(pai)
*/
af = pai->ai_family;
if (af == AF_UNSPEC) {
if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
af = AF_INET;
else {
_close(s);
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(AF_INET, SOCK_DGRAM, 0)) < 0)
af = AF_INET6;
else
_close(s);
}
}
if (af != AF_UNSPEC) {
if ((s = socket(af, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(af, SOCK_DGRAM, 0)) < 0)
return 0;
_close(s);
}

View File

@ -63,7 +63,6 @@ static char rcsid[] = "$FreeBSD$";
#include <netdb.h>
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <nsswitch.h>

View File

@ -35,7 +35,6 @@ static char rcsid[] = "$FreeBSD$";
#include <netdb.h>
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <nsswitch.h>
@ -117,7 +116,6 @@ gethostbyaddr(const char *addr, int len, int type)
return hp;
}
#ifdef _THREAD_SAFE
struct hostent_data;
/*
@ -136,7 +134,6 @@ int gethostbyaddr_r(const char *addr, int len, int type,
}
return(ret);
}
#endif
void
sethostent(stayopen)

View File

@ -28,6 +28,7 @@
* NOTE: SIOCGIFCONF case is not LP64 friendly. it also does not perform
* try-and-error for region size.
*/
#include "namespace.h"
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
@ -39,10 +40,10 @@
#include <net/if_dl.h>
#endif
#include <errno.h>
#include <ifaddrs.h>
#include <stdlib.h>
#include <string.h>
#include "un-namespace.h"
#if !defined(AF_LINK)
#define SA_LEN(sa) sizeof(struct sockaddr)
@ -194,10 +195,10 @@ getifaddrs(struct ifaddrs **pif)
ifc.ifc_buf = buf;
ifc.ifc_len = sizeof(buf);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
if ((sock = _socket(AF_INET, SOCK_STREAM, 0)) < 0)
return (-1);
i = ioctl(sock, SIOCGIFCONF, (char *)&ifc);
close(sock);
i = _ioctl(sock, SIOCGIFCONF, (char *)&ifc);
_close(sock);
if (i < 0)
return (-1);

View File

@ -73,7 +73,6 @@ static char rcsid[] = "$FreeBSD$";
#include <netdb.h>
#include <resolv.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <syslog.h>

View File

@ -34,7 +34,6 @@ static char rcsid[] = "$FreeBSD$";
#include <netdb.h>
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <nsswitch.h>

View File

@ -53,11 +53,13 @@ static char sccsid[] = "@(#)herror.c 8.1 (Berkeley) 6/4/93";
static char rcsid[] = "$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/uio.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#include "un-namespace.h"
const char *h_errlist[] = {
"Resolver Error 0 (no error)",
@ -94,7 +96,7 @@ herror(s)
v++;
v->iov_base = "\n";
v->iov_len = 1;
writev(STDERR_FILENO, iov, (v - iov) + 1);
_writev(STDERR_FILENO, iov, (v - iov) + 1);
}
const char *

View File

@ -70,7 +70,6 @@ static char rcsid[] = "$FreeBSD$";
#include <netdb.h>
#include <resolv.h>
#include <ctype.h>
#include <errno.h>
#include <syslog.h>
typedef union {

View File

@ -94,6 +94,7 @@
* rewrite resolvers to be thread safe
*/
#include "namespace.h"
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/time.h>
@ -112,6 +113,7 @@
#include <stdarg.h>
#include <nsswitch.h>
#include <unistd.h>
#include "un-namespace.h"
#ifndef _PATH_HOSTS
#define _PATH_HOSTS "/etc/hosts"
@ -255,11 +257,11 @@ _ghbyname(const char *name, int af, int flags, int *errp)
* because addresses will be dynamically assigned or deleted.
*/
if (af == AF_UNSPEC) {
if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
af = AF_INET;
else {
_close(s);
if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(AF_INET, SOCK_DGRAM, 0)) < 0)
af = AF_INET6;
else
_close(s);
@ -267,7 +269,7 @@ _ghbyname(const char *name, int af, int flags, int *errp)
}
if (af != AF_UNSPEC) {
if ((s = socket(af, SOCK_DGRAM, 0)) < 0)
if ((s = _socket(af, SOCK_DGRAM, 0)) < 0)
return NULL;
_close(s);
}
@ -1699,11 +1701,11 @@ _icmp_fqdn_query(const struct in6_addr *addr, int ifindex)
msg.msg_controllen = (char *)cmsg - cbuf;
}
if ((s = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0)
if ((s = _socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0)
return NULL;
(void)setsockopt(s, IPPROTO_ICMPV6, ICMP6_FILTER,
(void)_setsockopt(s, IPPROTO_ICMPV6, ICMP6_FILTER,
(char *)&filter, sizeof(filter));
cc = sendmsg(s, &msg, 0);
cc = _sendmsg(s, &msg, 0);
if (cc < 0) {
_close(s);
return NULL;
@ -1711,12 +1713,12 @@ _icmp_fqdn_query(const struct in6_addr *addr, int ifindex)
FD_SET(s, &s_fds);
for (;;) {
fds = s_fds;
if (select(s + 1, &fds, NULL, NULL, &tout) <= 0) {
if (_select(s + 1, &fds, NULL, NULL, &tout) <= 0) {
_close(s);
return NULL;
}
len = sizeof(sin6);
cc = recvfrom(s, buf, sizeof(buf), 0,
cc = _recvfrom(s, buf, sizeof(buf), 0,
(struct sockaddr *)&sin6, &len);
if (cc <= 0) {
_close(s);

View File

@ -37,6 +37,7 @@
static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/stat.h>
@ -59,6 +60,7 @@ static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94";
#include <rpcsvc/ypclnt.h>
#endif
#include <arpa/nameser.h>
#include "un-namespace.h"
/* wrapper for KAME-special getnameinfo() */
#ifndef NI_WITHSCOPEID
@ -100,7 +102,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
struct addrinfo hints, *res, *ai;
struct sockaddr_storage from;
fd_set reads;
long oldmask;
sigset_t oldmask, newmask;
pid_t pid;
int s, aport, lport, timo, error;
char c;
@ -136,7 +138,9 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
nres++;
ai = res;
refused = 0;
oldmask = sigblock(sigmask(SIGURG));
sigemptyset(&newmask);
sigaddset(&newmask, SIGURG);
_sigprocmask(SIG_BLOCK, (const sigset_t *)&newmask, &oldmask);
for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
s = rresvport_af(&lport, ai->ai_family);
if (s < 0) {
@ -151,11 +155,12 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
(void)fprintf(stderr, "rcmd: socket: %s\n",
strerror(errno));
freeaddrinfo(res);
sigsetmask(oldmask);
_sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask,
NULL);
return (-1);
}
_fcntl(s, F_SETOWN, pid);
if (connect(s, ai->ai_addr, ai->ai_addrlen) >= 0)
if (_connect(s, ai->ai_addr, ai->ai_addrlen) >= 0)
break;
(void)_close(s);
if (errno == EADDRINUSE) {
@ -168,7 +173,8 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
(void)fprintf(stderr, "%s: %s\n",
*ahost, strerror(errno));
freeaddrinfo(res);
sigsetmask(oldmask);
_sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask,
NULL);
return (-1);
}
if (nres > 1) {
@ -214,7 +220,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
if (s2 < 0)
goto bad;
listen(s2, 1);
_listen(s2, 1);
(void)snprintf(num, sizeof(num), "%d", lport);
if (_write(s, num, strlen(num)+1) != strlen(num)+1) {
(void)fprintf(stderr,
@ -234,7 +240,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
FD_SET(s, &reads);
FD_SET(s2, &reads);
errno = 0;
if (select(nfds, &reads, 0, 0, 0) < 1 || !FD_ISSET(s2, &reads)){
if (_select(nfds, &reads, 0, 0, 0) < 1 || !FD_ISSET(s2, &reads)){
if (errno != 0)
(void)fprintf(stderr,
"rcmd: select (setting up stderr): %s\n",
@ -245,7 +251,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
(void)_close(s2);
goto bad;
}
s3 = accept(s2, (struct sockaddr *)&from, &len);
s3 = _accept(s2, (struct sockaddr *)&from, &len);
switch (from.ss_family) {
case AF_INET:
aport = ntohs(((struct sockaddr_in *)&from)->sin_port);
@ -297,7 +303,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
}
goto bad2;
}
sigsetmask(oldmask);
_sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask, NULL);
freeaddrinfo(res);
return (s);
bad2:
@ -305,7 +311,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
(void)_close(*fd2p);
bad:
(void)_close(s);
sigsetmask(oldmask);
_sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask, NULL);
freeaddrinfo(res);
return (-1);
}
@ -345,12 +351,12 @@ rresvport_af(alport, family)
return -1;
}
s = socket(ss.ss_family, SOCK_STREAM, 0);
s = _socket(ss.ss_family, SOCK_STREAM, 0);
if (s < 0)
return (-1);
#if 0 /* compat_exact_traditional_rresvport_semantics */
sin.sin_port = htons((u_short)*alport);
if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
if (_bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
return (s);
if (errno != EADDRINUSE) {
(void)_close(s);
@ -486,7 +492,7 @@ iruserok_sa(ra, rlen, superuser, ruser, luser)
cp = ".rhosts lstat failed";
else if (!S_ISREG(sbuf.st_mode))
cp = ".rhosts not regular file";
else if (fstat(fileno(hostf), &sbuf) < 0)
else if (_fstat(fileno(hostf), &sbuf) < 0)
cp = ".rhosts fstat failed";
else if (sbuf.st_uid && sbuf.st_uid != pwd->pw_uid)
cp = "bad .rhosts owner";

View File

@ -29,16 +29,20 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)recv.c 8.2 (Berkeley) 2/21/94";
#endif /* LIBC_SCCS and not lint */
#include "namespace.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <stddef.h>
#include "un-namespace.h"
ssize_t
recv(s, buf, len, flags)
@ -46,5 +50,5 @@ recv(s, buf, len, flags)
size_t len;
void *buf;
{
return (recvfrom(s, buf, len, flags, NULL, 0));
return (_recvfrom(s, buf, len, flags, NULL, 0));
}

Some files were not shown because too many files have changed in this diff Show More