diff options
author | deischen <deischen@FreeBSD.org> | 2001-01-24 13:01:12 +0000 |
---|---|---|
committer | deischen <deischen@FreeBSD.org> | 2001-01-24 13:01:12 +0000 |
commit | 1635c221b7b2678beeeb2b5fa728edd7c8c3735b (patch) | |
tree | d7d4f61b9e319a781a335702fe846592726c22b9 /lib | |
parent | 08685e9e9fd9de1e8dc51cada55659344adaf0cc (diff) | |
download | FreeBSD-src-1635c221b7b2678beeeb2b5fa728edd7c8c3735b.zip FreeBSD-src-1635c221b7b2678beeeb2b5fa728edd7c8c3735b.tar.gz |
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
Diffstat (limited to 'lib')
190 files changed, 1582 insertions, 997 deletions
diff --git a/lib/libc/Makefile b/lib/libc/Makefile index 8862755..2a73a6c 100644 --- a/lib/libc/Makefile +++ b/lib/libc/Makefile @@ -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. diff --git a/lib/libc/alpha/SYS.h b/lib/libc/alpha/SYS.h index 923300b..d53e1fb 100644 --- a/lib/libc/alpha/SYS.h +++ b/lib/libc/alpha/SYS.h @@ -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 diff --git a/lib/libc/alpha/gen/_setjmp.S b/lib/libc/alpha/gen/_setjmp.S index 0d032e7..f3aa6ff 100644 --- a/lib/libc/alpha/gen/_setjmp.S +++ b/lib/libc/alpha/gen/_setjmp.S @@ -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 diff --git a/lib/libc/alpha/gen/setjmp.S b/lib/libc/alpha/gen/setjmp.S index 04202ce..297e601 100644 --- a/lib/libc/alpha/gen/setjmp.S +++ b/lib/libc/alpha/gen/setjmp.S @@ -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 diff --git a/lib/libc/alpha/gen/sigsetjmp.S b/lib/libc/alpha/gen/sigsetjmp.S index 0a3992d..ddc0636 100644 --- a/lib/libc/alpha/gen/sigsetjmp.S +++ b/lib/libc/alpha/gen/sigsetjmp.S @@ -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 diff --git a/lib/libc/alpha/sys/setlogin.S b/lib/libc/alpha/sys/setlogin.S index 9657cb1..e542b2d 100644 --- a/lib/libc/alpha/sys/setlogin.S +++ b/lib/libc/alpha/sys/setlogin.S @@ -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 */ diff --git a/lib/libc/amd64/SYS.h b/lib/libc/amd64/SYS.h index cadbecb..2d58562 100644 --- a/lib/libc/amd64/SYS.h +++ b/lib/libc/amd64/SYS.h @@ -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 */ diff --git a/lib/libc/amd64/gen/_setjmp.S b/lib/libc/amd64/gen/_setjmp.S index 9c66308..5932fee 100644 --- a/lib/libc/amd64/gen/_setjmp.S +++ b/lib/libc/amd64/gen/_setjmp.S @@ -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 diff --git a/lib/libc/amd64/gen/setjmp.S b/lib/libc/amd64/gen/setjmp.S index 738407a..5e92c97 100644 --- a/lib/libc/amd64/gen/setjmp.S +++ b/lib/libc/amd64/gen/setjmp.S @@ -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 diff --git a/lib/libc/amd64/gen/sigsetjmp.S b/lib/libc/amd64/gen/sigsetjmp.S index 40aebb6..96aae68 100644 --- a/lib/libc/amd64/gen/sigsetjmp.S +++ b/lib/libc/amd64/gen/sigsetjmp.S @@ -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 diff --git a/lib/libc/amd64/sys/setlogin.S b/lib/libc/amd64/sys/setlogin.S index a4d74b0..3ba52c5 100644 --- a/lib/libc/amd64/sys/setlogin.S +++ b/lib/libc/amd64/sys/setlogin.S @@ -43,7 +43,7 @@ #include "SYS.h" -.globl CNAME(_logname_valid) /* in getlogin() */ +.globl CNAME(_logname_valid) /* in _getlogin() */ SYSCALL(setlogin) #ifdef PIC diff --git a/lib/libc/amd64/sys/vfork.S b/lib/libc/amd64/sys/vfork.S index 8ec99ae..8981308 100644 --- a/lib/libc/amd64/sys/vfork.S +++ b/lib/libc/amd64/sys/vfork.S @@ -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 diff --git a/lib/libc/compat-43/creat.c b/lib/libc/compat-43/creat.c index 42759e7..88a3c5f 100644 --- a/lib/libc/compat-43/creat.c +++ b/lib/libc/compat-43/creat.c @@ -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); diff --git a/lib/libc/compat-43/sigcompat.c b/lib/libc/compat-43/sigcompat.c index 9401e73..23f1eff 100644 --- a/lib/libc/compat-43/sigcompat.c +++ b/lib/libc/compat-43/sigcompat.c @@ -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]); diff --git a/lib/libc/db/btree/bt_close.c b/lib/libc/db/btree/bt_close.c index c5e0d52..878c4c4 100644 --- a/lib/libc/db/btree/bt_close.c +++ b/lib/libc/db/btree/bt_close.c @@ -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" diff --git a/lib/libc/db/btree/bt_open.c b/lib/libc/db/btree/bt_open.c index d3c353f..e2e9a24 100644 --- a/lib/libc/db/btree/bt_open.c +++ b/lib/libc/db/btree/bt_open.c @@ -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); } diff --git a/lib/libc/db/hash/hash.c b/lib/libc/db/hash/hash.c index dcef5df..34fe4ad 100644 --- a/lib/libc/db/hash/hash.c +++ b/lib/libc/db/hash/hash.c @@ -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) { diff --git a/lib/libc/db/hash/hash_buf.c b/lib/libc/db/hash/hash_buf.c index 92e1f93..afa9164 100644 --- a/lib/libc/db/hash/hash_buf.c +++ b/lib/libc/db/hash/hash_buf.c @@ -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> diff --git a/lib/libc/db/hash/hash_page.c b/lib/libc/db/hash/hash_page.c index 30445e4..dd042c8 100644 --- a/lib/libc/db/hash/hash_page.c +++ b/lib/libc/db/hash/hash_page.c @@ -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); } diff --git a/lib/libc/db/mpool/mpool.c b/lib/libc/db/mpool/mpool.c index a4ab912..303d8c0 100644 --- a/lib/libc/db/mpool/mpool.c +++ b/lib/libc/db/mpool/mpool.c @@ -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; diff --git a/lib/libc/db/recno/rec_close.c b/lib/libc/db/recno/rec_close.c index 25d01de..1f19bd3 100644 --- a/lib/libc/db/recno/rec_close.c +++ b/lib/libc/db/recno/rec_close.c @@ -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); } diff --git a/lib/libc/db/recno/rec_open.c b/lib/libc/db/recno/rec_open.c index eaeacc5..4098b18 100644 --- a/lib/libc/db/recno/rec_open.c +++ b/lib/libc/db/recno/rec_open.c @@ -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 diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index afe8e91..3f7bbb4 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -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 \ diff --git a/lib/libc/gen/_pthread_stubs.c b/lib/libc/gen/_pthread_stubs.c new file mode 100644 index 0000000..87b0ad2 --- /dev/null +++ b/lib/libc/gen/_pthread_stubs.c @@ -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); +} diff --git a/lib/libc/gen/_spinlock_stub.c b/lib/libc/gen/_spinlock_stub.c index e3a800d..071fc20 100644 --- a/lib/libc/gen/_spinlock_stub.c +++ b/lib/libc/gen/_spinlock_stub.c @@ -35,18 +35,27 @@ #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. */ void @@ -61,4 +70,3 @@ void _spinlock_debug_stub(spinlock_t *lck, char *fname, int lineno) { } -#endif diff --git a/lib/libc/gen/_thread_init.c b/lib/libc/gen/_thread_init.c new file mode 100644 index 0000000..d6be5f2 --- /dev/null +++ b/lib/libc/gen/_thread_init.c @@ -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. */ +} diff --git a/lib/libc/gen/arc4random.c b/lib/libc/gen/arc4random.c index c0569e5..ad063b8 100644 --- a/lib/libc/gen/arc4random.c +++ b/lib/libc/gen/arc4random.c @@ -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; diff --git a/lib/libc/gen/closedir.c b/lib/libc/gen/closedir.c index b1d0842..317bbf8 100644 --- a/lib/libc/gen/closedir.c +++ b/lib/libc/gen/closedir.c @@ -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)); } diff --git a/lib/libc/gen/daemon.c b/lib/libc/gen/daemon.c index 4f6c2f3..6f1639f 100644 --- a/lib/libc/gen/daemon.c +++ b/lib/libc/gen/daemon.c @@ -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); } diff --git a/lib/libc/gen/devname.c b/lib/libc/gen/devname.c index 69c51e3..f7532b1 100644 --- a/lib/libc/gen/devname.c +++ b/lib/libc/gen/devname.c @@ -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> diff --git a/lib/libc/gen/disklabel.c b/lib/libc/gen/disklabel.c index c7ac0b4..19c0d19 100644 --- a/lib/libc/gen/disklabel.c +++ b/lib/libc/gen/disklabel.c @@ -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> diff --git a/lib/libc/gen/exec.c b/lib/libc/gen/exec.c index 04bd2d2..51ee6ed 100644 --- a/lib/libc/gen/exec.c +++ b/lib/libc/gen/exec.c @@ -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; diff --git a/lib/libc/gen/fstab.c b/lib/libc/gen/fstab.c index ecd79fb..9170ae9 100644 --- a/lib/libc/gen/fstab.c +++ b/lib/libc/gen/fstab.c @@ -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; diff --git a/lib/libc/gen/fts-compat.c b/lib/libc/gen/fts-compat.c index f38f24e..c6b09ff 100644 --- a/lib/libc/gen/fts-compat.c +++ b/lib/libc/gen/fts-compat.c @@ -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; } diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c index f38f24e..c6b09ff 100644 --- a/lib/libc/gen/fts.c +++ b/lib/libc/gen/fts.c @@ -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; } diff --git a/lib/libc/gen/getcap.c b/lib/libc/gen/getcap.c index edb828b..4500062 100644 --- a/lib/libc/gen/getcap.c +++ b/lib/libc/gen/getcap.c @@ -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 diff --git a/lib/libc/gen/getcwd.c b/lib/libc/gen/getcwd.c index e2ea820..3655388 100644 --- a/lib/libc/gen/getcwd.c +++ b/lib/libc/gen/getcwd.c @@ -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. */ diff --git a/lib/libc/gen/getlogin.c b/lib/libc/gen/getlogin.c index 5adc46c..10261ae 100644 --- a/lib/libc/gen/getlogin.c +++ b/lib/libc/gen/getlogin.c @@ -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) + +extern int _getlogin(char *, int); -int _logname_valid; /* known to setlogin() */ +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 diff --git a/lib/libc/gen/getpass.c b/lib/libc/gen/getpass.c index 60e92b7..f44cf17 100644 --- a/lib/libc/gen/getpass.c +++ b/lib/libc/gen/getpass.c @@ -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); diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index 38c90b4..f3bccd5 100644 --- a/lib/libc/gen/getpwent.c +++ b/lib/libc/gen/getpwent.c @@ -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 **)); diff --git a/lib/libc/gen/getvfsent.c b/lib/libc/gen/getvfsent.c index bf3ca20..2b8998c 100644 --- a/lib/libc/gen/getvfsent.c +++ b/lib/libc/gen/getvfsent.c @@ -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. */ diff --git a/lib/libc/gen/isatty.c b/lib/libc/gen/isatty.c index f14f470..2339c3a 100644 --- a/lib/libc/gen/isatty.c +++ b/lib/libc/gen/isatty.c @@ -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); } diff --git a/lib/libc/gen/lockf.c b/lib/libc/gen/lockf.c index 15b5b21..b881b11 100644 --- a/lib/libc/gen/lockf.c +++ b/lib/libc/gen/lockf.c @@ -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) diff --git a/lib/libc/gen/nlist.c b/lib/libc/gen/nlist.c index f459067..ed0fd48 100644 --- a/lib/libc/gen/nlist.c +++ b/lib/libc/gen/nlist.c @@ -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 */ diff --git a/lib/libc/gen/opendir.c b/lib/libc/gen/opendir.c index bd7fc82..51d7090 100644 --- a/lib/libc/gen/opendir.c +++ b/lib/libc/gen/opendir.c @@ -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. diff --git a/lib/libc/gen/pause.c b/lib/libc/gen/pause.c index f7ddb18..ca98a65 100644 --- a/lib/libc/gen/pause.c +++ b/lib/libc/gen/pause.c @@ -48,7 +48,5 @@ __pause() { return sigpause(sigblock(0L)); } - -#ifndef _THREAD_SAFE __weak_reference(__pause, pause); -#endif +__weak_reference(__pause, _pause); diff --git a/lib/libc/gen/popen.c b/lib/libc/gen/popen.c index 7939b8f..2070f83 100644 --- a/lib/libc/gen/popen.c +++ b/lib/libc/gen/popen.c @@ -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 */ } diff --git a/lib/libc/gen/posixshm.c b/lib/libc/gen/posixshm.c index e437940..51713f2 100644 --- a/lib/libc/gen/posixshm.c +++ b/lib/libc/gen/posixshm.c @@ -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); diff --git a/lib/libc/gen/pselect.c b/lib/libc/gen/pselect.c index 02456e2..abf273f 100644 --- a/lib/libc/gen/pselect.c +++ b/lib/libc/gen/pselect.c @@ -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; } diff --git a/lib/libc/gen/psignal.c b/lib/libc/gen/psignal.c index 7c25476..e51c463 100644 --- a/lib/libc/gen/psignal.c +++ b/lib/libc/gen/psignal.c @@ -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) diff --git a/lib/libc/gen/readdir.c b/lib/libc/gen/readdir.c index 43c7bc2..9698415 100644 --- a/lib/libc/gen/readdir.c +++ b/lib/libc/gen/readdir.c @@ -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,34 +108,25 @@ 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 (__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); + if (errno != 0) { - if (dp == NULL) { -#ifdef _THREAD_SAFE - _FD_UNLOCK(dirp->dd_fd, FD_READ); -#endif + if (dp == NULL) return (errno); - } } else errno = saved_errno; if (dp != NULL) - memcpy(entry, dp, sizeof *entry); - -#ifdef _THREAD_SAFE - _FD_UNLOCK(dirp->dd_fd, FD_READ); -#endif - - if (dp != NULL) *result = entry; else *result = NULL; diff --git a/lib/libc/gen/scandir.c b/lib/libc/gen/scandir.c index 5c64b29..59128c8 100644 --- a/lib/libc/gen/scandir.c +++ b/lib/libc/gen/scandir.c @@ -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; /* diff --git a/lib/libc/gen/seekdir.c b/lib/libc/gen/seekdir.c index 8ce57d2..2057b98 100644 --- a/lib/libc/gen/seekdir.c +++ b/lib/libc/gen/seekdir.c @@ -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); } diff --git a/lib/libc/gen/setjmperr.c b/lib/libc/gen/setjmperr.c index e9b5d45..fd69cdb 100644 --- a/lib/libc/gen/setjmperr.c +++ b/lib/libc/gen/setjmperr.c @@ -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() diff --git a/lib/libc/gen/setmode.c b/lib/libc/gen/setmode.c index 2c12b81..f05607f 100644 --- a/lib/libc/gen/setmode.c +++ b/lib/libc/gen/setmode.c @@ -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; diff --git a/lib/libc/gen/siginterrupt.c b/lib/libc/gen/siginterrupt.c index 06960ab..245d738 100644 --- a/lib/libc/gen/siginterrupt.c +++ b/lib/libc/gen/siginterrupt.c @@ -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)); } diff --git a/lib/libc/gen/signal.c b/lib/libc/gen/signal.c index c4057f5..5b3d71a 100644 --- a/lib/libc/gen/signal.c +++ b/lib/libc/gen/signal.c @@ -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); } diff --git a/lib/libc/gen/sleep.c b/lib/libc/gen/sleep.c index e4c4fbd..701eccd 100644 --- a/lib/libc/gen/sleep.c +++ b/lib/libc/gen/sleep.c @@ -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); diff --git a/lib/libc/gen/syslog.c b/lib/libc/gen/syslog.c index 18d00d7..d3326ed 100644 --- a/lib/libc/gen/syslog.c +++ b/lib/libc/gen/syslog.c @@ -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; } diff --git a/lib/libc/gen/telldir.c b/lib/libc/gen/telldir.c index 3c4b781..6661c23 100644 --- a/lib/libc/gen/telldir.c +++ b/lib/libc/gen/telldir.c @@ -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; } diff --git a/lib/libc/gen/telldir.h b/lib/libc/gen/telldir.h index be8a9f5..4fb4cb6 100644 --- a/lib/libc/gen/telldir.h +++ b/lib/libc/gen/telldir.h @@ -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 diff --git a/lib/libc/gen/termios.c b/lib/libc/gen/termios.c index f321876..b262305 100644 --- a/lib/libc/gen/termios.c +++ b/lib/libc/gen/termios.c @@ -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) diff --git a/lib/libc/gen/ttyname.c b/lib/libc/gen/ttyname.c index cb01870..55fc918 100644 --- a/lib/libc/gen/ttyname.c +++ b/lib/libc/gen/ttyname.c @@ -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" + +#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); -char * +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) -{ - 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; +static char * +ttyname_unthreaded(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 diff --git a/lib/libc/gen/usleep.c b/lib/libc/gen/usleep.c index 651edf9..647b5c0 100644 --- a/lib/libc/gen/usleep.c +++ b/lib/libc/gen/usleep.c @@ -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) diff --git a/lib/libc/gen/vis.c b/lib/libc/gen/vis.c index 7f10aa5..35f24bf 100644 --- a/lib/libc/gen/vis.c +++ b/lib/libc/gen/vis.c @@ -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') diff --git a/lib/libc/gen/wait.c b/lib/libc/gen/wait.c index 366e262..baba6cd 100644 --- a/lib/libc/gen/wait.c +++ b/lib/libc/gen/wait.c @@ -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); diff --git a/lib/libc/gen/wait3.c b/lib/libc/gen/wait3.c index c8d8f9e..21623d4 100644 --- a/lib/libc/gen/wait3.c +++ b/lib/libc/gen/wait3.c @@ -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)); } diff --git a/lib/libc/gen/waitpid.c b/lib/libc/gen/waitpid.c index 350157a..fbdf16b 100644 --- a/lib/libc/gen/waitpid.c +++ b/lib/libc/gen/waitpid.c @@ -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); diff --git a/lib/libc/gmon/gmon.c b/lib/libc/gmon/gmon.c index 6bf3d5b..f0209bb 100644 --- a/lib/libc/gmon/gmon.c +++ b/lib/libc/gmon/gmon.c @@ -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"); diff --git a/lib/libc/i386/SYS.h b/lib/libc/i386/SYS.h index cadbecb..2d58562 100644 --- a/lib/libc/i386/SYS.h +++ b/lib/libc/i386/SYS.h @@ -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 */ diff --git a/lib/libc/i386/gen/_setjmp.S b/lib/libc/i386/gen/_setjmp.S index 9c66308..5932fee 100644 --- a/lib/libc/i386/gen/_setjmp.S +++ b/lib/libc/i386/gen/_setjmp.S @@ -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 diff --git a/lib/libc/i386/gen/setjmp.S b/lib/libc/i386/gen/setjmp.S index 738407a..5e92c97 100644 --- a/lib/libc/i386/gen/setjmp.S +++ b/lib/libc/i386/gen/setjmp.S @@ -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 diff --git a/lib/libc/i386/gen/sigsetjmp.S b/lib/libc/i386/gen/sigsetjmp.S index 40aebb6..96aae68 100644 --- a/lib/libc/i386/gen/sigsetjmp.S +++ b/lib/libc/i386/gen/sigsetjmp.S @@ -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 diff --git a/lib/libc/i386/sys/Ovfork.S b/lib/libc/i386/sys/Ovfork.S index 8ec99ae..8981308 100644 --- a/lib/libc/i386/sys/Ovfork.S +++ b/lib/libc/i386/sys/Ovfork.S @@ -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 diff --git a/lib/libc/i386/sys/setlogin.S b/lib/libc/i386/sys/setlogin.S index a4d74b0..3ba52c5 100644 --- a/lib/libc/i386/sys/setlogin.S +++ b/lib/libc/i386/sys/setlogin.S @@ -43,7 +43,7 @@ #include "SYS.h" -.globl CNAME(_logname_valid) /* in getlogin() */ +.globl CNAME(_logname_valid) /* in _getlogin() */ SYSCALL(setlogin) #ifdef PIC diff --git a/lib/libc/ia64/SYS.h b/lib/libc/ia64/SYS.h index 303b50e..1cbc970 100644 --- a/lib/libc/ia64/SYS.h +++ b/lib/libc/ia64/SYS.h @@ -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 diff --git a/lib/libc/ia64/gen/_setjmp.S b/lib/libc/ia64/gen/_setjmp.S index 5baf3ff..cd2482f 100644 --- a/lib/libc/ia64/gen/_setjmp.S +++ b/lib/libc/ia64/gen/_setjmp.S @@ -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 diff --git a/lib/libc/ia64/gen/modf.c b/lib/libc/ia64/gen/modf.c index 42c79cf..0dae657 100644 --- a/lib/libc/ia64/gen/modf.c +++ b/lib/libc/ia64/gen/modf.c @@ -30,7 +30,6 @@ #include <sys/types.h> #include <machine/ieee.h> -#include <errno.h> #include <math.h> /* diff --git a/lib/libc/ia64/gen/setjmp.S b/lib/libc/ia64/gen/setjmp.S index f1c5399..e61850a 100644 --- a/lib/libc/ia64/gen/setjmp.S +++ b/lib/libc/ia64/gen/setjmp.S @@ -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 diff --git a/lib/libc/ia64/gen/sigsetjmp.S b/lib/libc/ia64/gen/sigsetjmp.S index a941978..8ef32cc 100644 --- a/lib/libc/ia64/gen/sigsetjmp.S +++ b/lib/libc/ia64/gen/sigsetjmp.S @@ -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 diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index 1e20bc7..f356e18 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -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_ */ diff --git a/lib/libc/include/namespace.h b/lib/libc/include/namespace.h new file mode 100644 index 0000000..95acce4 --- /dev/null +++ b/lib/libc/include/namespace.h @@ -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_ */ diff --git a/lib/libc/include/un-namespace.h b/lib/libc/include/un-namespace.h new file mode 100644 index 0000000..4d2e8bd --- /dev/null +++ b/lib/libc/include/un-namespace.h @@ -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_ */ diff --git a/lib/libc/locale/big5.c b/lib/libc/locale/big5.c index b8628dd..dcbe168 100644 --- a/lib/libc/locale/big5.c +++ b/lib/libc/locale/big5.c @@ -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> diff --git a/lib/libc/locale/collate.c b/lib/libc/locale/collate.c index 373019c..13ad770 100644 --- a/lib/libc/locale/collate.c +++ b/lib/libc/locale/collate.c @@ -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; \ } \ diff --git a/lib/libc/locale/mskanji.c b/lib/libc/locale/mskanji.c index 6c3199e..0b6ced8 100644 --- a/lib/libc/locale/mskanji.c +++ b/lib/libc/locale/mskanji.c @@ -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> diff --git a/lib/libc/locale/none.c b/lib/libc/locale/none.c index 41f70ae..ff736ff 100644 --- a/lib/libc/locale/none.c +++ b/lib/libc/locale/none.c @@ -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 **)); diff --git a/lib/libc/locale/rune.c b/lib/libc/locale/rune.c index bc4d07c..f0a5490 100644 --- a/lib/libc/locale/rune.c +++ b/lib/libc/locale/rune.c @@ -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)) diff --git a/lib/libc/locale/utf2.c b/lib/libc/locale/utf2.c index 81a9412..3fbe9c5 100644 --- a/lib/libc/locale/utf2.c +++ b/lib/libc/locale/utf2.c @@ -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> diff --git a/lib/libc/net/getaddrinfo.c b/lib/libc/net/getaddrinfo.c index 10ddd3a..9e498e5 100644 --- a/lib/libc/net/getaddrinfo.c +++ b/lib/libc/net/getaddrinfo.c @@ -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); } diff --git a/lib/libc/net/gethostbyht.c b/lib/libc/net/gethostbyht.c index eeecd22..478d2d2 100644 --- a/lib/libc/net/gethostbyht.c +++ b/lib/libc/net/gethostbyht.c @@ -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> diff --git a/lib/libc/net/gethostnamadr.c b/lib/libc/net/gethostnamadr.c index d5644a8..80e6637 100644 --- a/lib/libc/net/gethostnamadr.c +++ b/lib/libc/net/gethostnamadr.c @@ -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) diff --git a/lib/libc/net/getifaddrs.c b/lib/libc/net/getifaddrs.c index a0a034e..6b81196 100644 --- a/lib/libc/net/getifaddrs.c +++ b/lib/libc/net/getifaddrs.c @@ -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); diff --git a/lib/libc/net/getnetbydns.c b/lib/libc/net/getnetbydns.c index 5827103..433b3b8 100644 --- a/lib/libc/net/getnetbydns.c +++ b/lib/libc/net/getnetbydns.c @@ -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> diff --git a/lib/libc/net/getnetnamadr.c b/lib/libc/net/getnetnamadr.c index 6d9dbfa..2c5c918 100644 --- a/lib/libc/net/getnetnamadr.c +++ b/lib/libc/net/getnetnamadr.c @@ -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> diff --git a/lib/libc/net/herror.c b/lib/libc/net/herror.c index 0ab7448..e42badf 100644 --- a/lib/libc/net/herror.c +++ b/lib/libc/net/herror.c @@ -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 * diff --git a/lib/libc/net/map_v4v6.c b/lib/libc/net/map_v4v6.c index ca5e553..cc6bb36 100644 --- a/lib/libc/net/map_v4v6.c +++ b/lib/libc/net/map_v4v6.c @@ -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 { diff --git a/lib/libc/net/name6.c b/lib/libc/net/name6.c index 36df9a0..4ab24b3 100644 --- a/lib/libc/net/name6.c +++ b/lib/libc/net/name6.c @@ -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); diff --git a/lib/libc/net/rcmd.c b/lib/libc/net/rcmd.c index 3392cd5..3fad8d6 100644 --- a/lib/libc/net/rcmd.c +++ b/lib/libc/net/rcmd.c @@ -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 @@ again: 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 @@ again: (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 @@ again: } goto bad2; } - sigsetmask(oldmask); + _sigprocmask(SIG_SETMASK, (const sigset_t *)&oldmask, NULL); freeaddrinfo(res); return (s); bad2: @@ -305,7 +311,7 @@ bad2: (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 @@ again: 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"; diff --git a/lib/libc/net/recv.c b/lib/libc/net/recv.c index 65ec9d4..6d4ac0e 100644 --- a/lib/libc/net/recv.c +++ b/lib/libc/net/recv.c @@ -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)); } diff --git a/lib/libc/net/res_mkupdate.c b/lib/libc/net/res_mkupdate.c index eb31bac..7344197 100644 --- a/lib/libc/net/res_mkupdate.c +++ b/lib/libc/net/res_mkupdate.c @@ -31,7 +31,6 @@ static char rcsid[] = "$FreeBSD$"; #include <arpa/nameser.h> #include <arpa/inet.h> -#include <errno.h> #include <limits.h> #include <netdb.h> #include <resolv.h> diff --git a/lib/libc/net/res_send.c b/lib/libc/net/res_send.c index cfcf815..4173f65 100644 --- a/lib/libc/net/res_send.c +++ b/lib/libc/net/res_send.c @@ -78,6 +78,7 @@ static char rcsid[] = "$FreeBSD$"; * Send query to name server and wait for reply. */ +#include "namespace.h" #include <sys/types.h> #include <sys/event.h> #include <sys/param.h> @@ -96,6 +97,7 @@ static char rcsid[] = "$FreeBSD$"; #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "un-namespace.h" #include "res_config.h" @@ -460,7 +462,7 @@ res_send(buf, buflen, ans, anssiz) res_close(); af = nsap->sa_family; - s = socket(af, SOCK_STREAM, 0); + s = _socket(af, SOCK_STREAM, 0); if (s < 0) { terrno = errno; Perror(stderr, "socket(vc)", errno); @@ -469,7 +471,7 @@ res_send(buf, buflen, ans, anssiz) goto next_ns; } errno = 0; - if (connect(s, nsap, salen) < 0) { + if (_connect(s, nsap, salen) < 0) { terrno = errno; Aerror(stderr, "connect/vc", errno, nsap); @@ -487,7 +489,7 @@ res_send(buf, buflen, ans, anssiz) iov[0].iov_len = INT16SZ; iov[1].iov_base = (caddr_t)buf; iov[1].iov_len = buflen; - if (writev(s, iov, 2) != (INT16SZ + buflen)) { + if (_writev(s, iov, 2) != (INT16SZ + buflen)) { terrno = errno; Perror(stderr, "write failed", errno); badns |= (1 << ns); @@ -604,7 +606,7 @@ read_len: if (vc) res_close(); af = nsap->sa_family; - s = socket(af, SOCK_DGRAM, 0); + s = _socket(af, SOCK_DGRAM, 0); if (s < 0) { #ifndef CAN_RECONNECT bad_dg_sock: @@ -639,7 +641,7 @@ read_len: * receive a response from another server. */ if (!connected) { - if (connect(s, nsap, salen) < 0) { + if (_connect(s, nsap, salen) < 0) { Aerror(stderr, "connect(dg)", errno, nsap); @@ -668,15 +670,15 @@ read_len: no_addr.sin_family = AF_INET; no_addr.sin_addr.s_addr = INADDR_ANY; no_addr.sin_port = 0; - (void) connect(s, + (void) _connect(s, (struct sockaddr *) &no_addr, sizeof no_addr); #else - int s1 = socket(af, SOCK_DGRAM,0); + int s1 = _socket(af, SOCK_DGRAM,0); if (s1 < 0) goto bad_dg_sock; - (void)dup2(s1, s); + (void)_dup2(s1, s); (void)_close(s1); Dprint(_res.options & RES_DEBUG, (stdout, ";; new DG socket\n")) @@ -685,7 +687,7 @@ read_len: errno = 0; } #endif /* !CANNOT_CONNECT_DGRAM */ - if (sendto(s, (char*)buf, buflen, 0, + if (_sendto(s, (char*)buf, buflen, 0, nsap, salen) != buflen) { Aerror(stderr, "sendto", errno, nsap); badns |= (1 << ns); @@ -717,7 +719,7 @@ read_len: kv.flags = EV_ADD | EV_ONESHOT; kv.filter = EVFILT_READ; - n = kevent(kq, &kv, 1, &kv, 1, &timeout); + n = _kevent(kq, &kv, 1, &kv, 1, &timeout); if (n < 0) { if (errno == EINTR) goto wait; @@ -738,7 +740,7 @@ read_len: } errno = 0; fromlen = sizeof(from); - resplen = recvfrom(s, (char*)ans, anssiz, 0, + resplen = _recvfrom(s, (char*)ans, anssiz, 0, (struct sockaddr *)&from, &fromlen); if (resplen <= 0) { Perror(stderr, "recvfrom", errno); diff --git a/lib/libc/net/res_update.c b/lib/libc/net/res_update.c index a877d4a..6622efd 100644 --- a/lib/libc/net/res_update.c +++ b/lib/libc/net/res_update.c @@ -30,7 +30,6 @@ static char rcsid[] = "$FreeBSD$"; #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> -#include <errno.h> #include <limits.h> #include <netdb.h> #include <resolv.h> diff --git a/lib/libc/net/send.c b/lib/libc/net/send.c index 81151c4..81ded52 100644 --- a/lib/libc/net/send.c +++ b/lib/libc/net/send.c @@ -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[] = "@(#)send.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 send(s, msg, len, flags) @@ -46,5 +50,5 @@ send(s, msg, len, flags) size_t len; const void *msg; { - return (sendto(s, msg, len, flags, NULL, 0)); + return (_sendto(s, msg, len, flags, NULL, 0)); } diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c index 07ba4d3..063c021 100644 --- a/lib/libc/nls/msgcat.c +++ b/lib/libc/nls/msgcat.c @@ -41,6 +41,7 @@ static char *rcsid = "$FreeBSD$"; * to add an error handling routine. */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <sys/syslimits.h> @@ -52,6 +53,7 @@ static char *rcsid = "$FreeBSD$"; #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "un-namespace.h" #include "msgcat.h" diff --git a/lib/libc/rpc/auth_time.c b/lib/libc/rpc/auth_time.c index 836a69f..114d59d 100644 --- a/lib/libc/rpc/auth_time.c +++ b/lib/libc/rpc/auth_time.c @@ -31,6 +31,7 @@ * * $FreeBSD$ */ +#include "namespace.h" #include <stdio.h> #include <syslog.h> #include <string.h> @@ -46,6 +47,7 @@ #include <rpc/rpc_com.h> #undef NIS #include <rpcsvc/nis.h> +#include "un-namespace.h" /* * FreeBSD currently uses RPC 4.0, which uses portmap rather than @@ -385,7 +387,7 @@ __rpc_get_time_offset(td, srv, thost, uaddr, netid) goto error; } - s = socket(AF_INET, type, 0); + s = _socket(AF_INET, type, 0); if (s == -1) { msg("unable to open fd to network."); goto error; @@ -401,7 +403,7 @@ __rpc_get_time_offset(td, srv, thost, uaddr, netid) fd_set readfds; int res; - if (sendto(s, &thetime, sizeof(thetime), 0, + if (_sendto(s, &thetime, sizeof(thetime), 0, (struct sockaddr *)&sin, sizeof(sin)) == -1) { msg("udp : sendto failed."); goto error; @@ -409,13 +411,13 @@ __rpc_get_time_offset(td, srv, thost, uaddr, netid) do { FD_ZERO(&readfds); FD_SET(s, &readfds); - res = select(_rpc_dtablesize(), &readfds, + res = _select(_rpc_dtablesize(), &readfds, (fd_set *)NULL, (fd_set *)NULL, &timeout); } while (res < 0 && errno == EINTR); if (res <= 0) goto error; len = sizeof(from); - res = recvfrom(s, (char *)&thetime, sizeof(thetime), 0, + res = _recvfrom(s, (char *)&thetime, sizeof(thetime), 0, (struct sockaddr *)&from, &len); if (res == -1) { msg("recvfrom failed on udp transport."); @@ -428,7 +430,7 @@ __rpc_get_time_offset(td, srv, thost, uaddr, netid) oldsig = (void (*)())signal(SIGALRM, alarm_hndler); saw_alarm = 0; /* global tracking the alarm */ alarm(20); /* only wait 20 seconds */ - res = connect(s, (struct sockaddr *)&sin, sizeof(sin)); + res = _connect(s, (struct sockaddr *)&sin, sizeof(sin)); if (res == -1) { msg("failed to connect to tcp endpoint."); goto error; diff --git a/lib/libc/rpc/bindresvport.c b/lib/libc/rpc/bindresvport.c index fb43eed..2aed9dd 100644 --- a/lib/libc/rpc/bindresvport.c +++ b/lib/libc/rpc/bindresvport.c @@ -40,12 +40,14 @@ static char *rcsid = "$FreeBSD$"; * Portions Copyright(C) 1996, Jason Downs. All rights reserved. */ +#include "namespace.h" #include <sys/types.h> #include <sys/errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> +#include "un-namespace.h" /* * Bind a socket to a privileged IP port @@ -78,7 +80,7 @@ bindresvport_sa(sd, sa) salen = sizeof(myaddr); sa = (struct sockaddr *)&myaddr; - if (getsockname(sd, sa, &salen) == -1) + if (_getsockname(sd, sa, &salen) == -1) return -1; /* errno is correctly set */ af = sa->sa_family; @@ -110,23 +112,23 @@ bindresvport_sa(sd, sa) if (port == 0) { int oldlen = sizeof(old); - error = getsockopt(sd, proto, portrange, &old, &oldlen); + error = _getsockopt(sd, proto, portrange, &old, &oldlen); if (error < 0) return (error); - error = setsockopt(sd, proto, portrange, &portlow, + error = _setsockopt(sd, proto, portrange, &portlow, sizeof(portlow)); if (error < 0) return (error); } - error = bind(sd, sa, salen); + error = _bind(sd, sa, salen); if (port == 0) { int saved_errno = errno; if (error) { - if (setsockopt(sd, proto, portrange, &old, + if (_setsockopt(sd, proto, portrange, &old, sizeof(old)) < 0) errno = saved_errno; return (error); @@ -134,7 +136,7 @@ bindresvport_sa(sd, sa) if (sa != (struct sockaddr *)&myaddr) { /* Hmm, what did the kernel assign... */ - if (getsockname(sd, sa, &salen) < 0) + if (_getsockname(sd, sa, &salen) < 0) errno = saved_errno; return (error); } diff --git a/lib/libc/rpc/clnt_generic.c b/lib/libc/rpc/clnt_generic.c index 5e3cb7b..d885f18 100644 --- a/lib/libc/rpc/clnt_generic.c +++ b/lib/libc/rpc/clnt_generic.c @@ -38,14 +38,14 @@ static char *rcsid = "$FreeBSD$"; */ #include <rpc/rpc.h> #include <sys/socket.h> -#include <sys/errno.h> +#include <errno.h> #include <netdb.h> #include <string.h> /* * Generic client creation: takes (hostname, program-number, protocol) and * returns client handle. Default options are set, which the user can - * change using the rpc equivalent of ioctl()'s. + * change using the rpc equivalent of _ioctl()'s. */ CLIENT * clnt_create(hostname, prog, vers, proto) diff --git a/lib/libc/rpc/clnt_simple.c b/lib/libc/rpc/clnt_simple.c index 897eab5..46d959b 100644 --- a/lib/libc/rpc/clnt_simple.c +++ b/lib/libc/rpc/clnt_simple.c @@ -40,6 +40,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <sys/param.h> #include <stdio.h> #include <stdlib.h> @@ -48,6 +49,7 @@ static char *rcsid = "$FreeBSD$"; #include <rpc/rpc.h> #include <sys/socket.h> #include <netdb.h> +#include "un-namespace.h" static struct callrpc_private { CLIENT *client; diff --git a/lib/libc/rpc/clnt_tcp.c b/lib/libc/rpc/clnt_tcp.c index 1889694..9e8e394 100644 --- a/lib/libc/rpc/clnt_tcp.c +++ b/lib/libc/rpc/clnt_tcp.c @@ -52,6 +52,7 @@ static char *rcsid = "$FreeBSD$"; * Now go hang yourself. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -61,6 +62,7 @@ static char *rcsid = "$FreeBSD$"; #include <netdb.h> #include <errno.h> #include <rpc/pmap_clnt.h> +#include "un-namespace.h" #define MCALL_MSG_SIZE 24 @@ -159,10 +161,10 @@ clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz) * If no socket given, open one */ if (*sockp < 0) { - *sockp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + *sockp = _socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); (void)bindresvport(*sockp, (struct sockaddr_in *)0); if ((*sockp < 0) - || (connect(*sockp, (struct sockaddr *)raddr, + || (_connect(*sockp, (struct sockaddr *)raddr, sizeof(*raddr)) < 0)) { rpc_createerr.cf_stat = RPC_SYSTEMERROR; rpc_createerr.cf_error.re_errno = errno; @@ -450,7 +452,7 @@ clnttcp_control(cl, request, info) break; case CLGET_LOCAL_ADDR: len = sizeof(struct sockaddr); - if (getsockname(ct->ct_sock, (struct sockaddr *)info, &len) <0) + if (_getsockname(ct->ct_sock, (struct sockaddr *)info, &len) <0) return(FALSE); break; case CLGET_RETRY_TIMEOUT: @@ -516,7 +518,7 @@ readtcp(ct, buf, len) /* XXX we know the other bits are still clear */ FD_SET(ct->ct_sock, fds); tv = delta; /* in case select writes back */ - r = select(ct->ct_sock+1, fds, NULL, NULL, &tv); + r = _select(ct->ct_sock+1, fds, NULL, NULL, &tv); save_errno = errno; gettimeofday(&after, NULL); diff --git a/lib/libc/rpc/clnt_udp.c b/lib/libc/rpc/clnt_udp.c index 3dc7710..bc103ed 100644 --- a/lib/libc/rpc/clnt_udp.c +++ b/lib/libc/rpc/clnt_udp.c @@ -39,6 +39,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -49,6 +50,7 @@ static char *rcsid = "$FreeBSD$"; #include <netdb.h> #include <errno.h> #include <rpc/pmap_clnt.h> +#include "un-namespace.h" /* * UDP bases client side rpc operations @@ -173,7 +175,7 @@ clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz) if (*sockp < 0) { int dontblock = 1; - *sockp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + *sockp = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (*sockp < 0) { rpc_createerr.cf_stat = RPC_SYSTEMERROR; rpc_createerr.cf_error.re_errno = errno; @@ -182,7 +184,7 @@ clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz) /* attempt to bind to priv port */ (void)bindresvport(*sockp, (struct sockaddr_in *)0); /* the sockets rpc controls are non-blocking */ - (void)ioctl(*sockp, FIONBIO, (char *) &dontblock); + (void)_ioctl(*sockp, FIONBIO, (char *) &dontblock); cu->cu_closeit = TRUE; } else { cu->cu_closeit = FALSE; @@ -271,7 +273,7 @@ call_again: outlen = (int)XDR_GETPOS(xdrs); send_again: - if (sendto(cu->cu_sock, cu->cu_outbuf, outlen, 0, + if (_sendto(cu->cu_sock, cu->cu_outbuf, outlen, 0, (struct sockaddr *)&(cu->cu_raddr), cu->cu_rlen) != outlen) { cu->cu_error.re_errno = errno; if (fds != &readfds) @@ -301,7 +303,7 @@ send_again: /* XXX we know the other bits are still clear */ FD_SET(cu->cu_sock, fds); tv = cu->cu_wait; - switch (select(cu->cu_sock+1, fds, NULL, NULL, &tv)) { + switch (_select(cu->cu_sock+1, fds, NULL, NULL, &tv)) { case 0: timeradd(&time_waited, &cu->cu_wait, &tmp1); @@ -332,7 +334,7 @@ send_again: do { fromlen = sizeof(struct sockaddr); - inlen = recvfrom(cu->cu_sock, cu->cu_inbuf, + inlen = _recvfrom(cu->cu_sock, cu->cu_inbuf, (int) cu->cu_recvsz, 0, (struct sockaddr *)&from, &fromlen); } while (inlen < 0 && errno == EINTR); @@ -539,7 +541,7 @@ clntudp_control(cl, request, info) break; case CLGET_LOCAL_ADDR: len = sizeof(struct sockaddr); - if (getsockname(cu->cu_sock, (struct sockaddr *)info, &len) <0) + if (_getsockname(cu->cu_sock, (struct sockaddr *)info, &len) <0) return(FALSE); break; case CLGET_SVC_ADDR: diff --git a/lib/libc/rpc/clnt_unix.c b/lib/libc/rpc/clnt_unix.c index 3b28bf8..d55859c 100644 --- a/lib/libc/rpc/clnt_unix.c +++ b/lib/libc/rpc/clnt_unix.c @@ -52,6 +52,7 @@ static char *rcsid = "$FreeBSD$"; * Now go hang yourself. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -63,6 +64,7 @@ static char *rcsid = "$FreeBSD$"; #include <netdb.h> #include <errno.h> #include <rpc/pmap_clnt.h> +#include "un-namespace.h" #define MCALL_MSG_SIZE 24 @@ -149,12 +151,12 @@ clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz) * If no socket given, open one */ if (*sockp < 0) { - *sockp = socket(AF_UNIX, SOCK_STREAM, 0); + *sockp = _socket(AF_UNIX, SOCK_STREAM, 0); len = strlen(raddr->sun_path) + sizeof(raddr->sun_family) + sizeof(raddr->sun_len) + 1; raddr->sun_len = len; if ((*sockp < 0) - || (connect(*sockp, (struct sockaddr *)raddr, len) < 0)) { + || (_connect(*sockp, (struct sockaddr *)raddr, len) < 0)) { rpc_createerr.cf_stat = RPC_SYSTEMERROR; rpc_createerr.cf_error.re_errno = errno; if (*sockp != -1) @@ -441,7 +443,7 @@ clntunix_control(cl, request, info) break; case CLGET_LOCAL_ADDR: len = sizeof(struct sockaddr); - if (getsockname(ct->ct_sock, (struct sockaddr *)info, &len) <0) + if (_getsockname(ct->ct_sock, (struct sockaddr *)info, &len) <0) return(FALSE); break; case CLGET_RETRY_TIMEOUT: @@ -473,7 +475,7 @@ clntunix_destroy(h) } /* - * read() and write() are replaced with recvmsg()/sendmsg() so that + * _read() and _write() are replaced with _recvmsg()/_sendmsg() so that * we can pass ancillary control data. In this case, the data constists * of credential information which the kernel will fill in for us. * XXX: This code is specific to FreeBSD and will not work on other @@ -505,7 +507,7 @@ static int __msgread(sock, buf, cnt) msg.msg_controllen = sizeof(struct cmessage); msg.msg_flags = 0; - return(recvmsg(sock, &msg, 0)); + return(_recvmsg(sock, &msg, 0)); } static int __msgwrite(sock, buf, cnt) @@ -533,7 +535,7 @@ static int __msgwrite(sock, buf, cnt) msg.msg_controllen = sizeof(struct cmessage); msg.msg_flags = 0; - return(sendmsg(sock, &msg, 0)); + return(_sendmsg(sock, &msg, 0)); } /* @@ -571,7 +573,7 @@ readunix(ct, buf, len) /* XXX we know the other bits are still clear */ FD_SET(ct->ct_sock, fds); tv = delta; /* in case select writes back */ - r = select(ct->ct_sock+1, fds, NULL, NULL, &tv); + r = _select(ct->ct_sock+1, fds, NULL, NULL, &tv); save_errno = errno; gettimeofday(&after, NULL); diff --git a/lib/libc/rpc/get_myaddress.c b/lib/libc/rpc/get_myaddress.c index eb2917e..70c3ac0 100644 --- a/lib/libc/rpc/get_myaddress.c +++ b/lib/libc/rpc/get_myaddress.c @@ -40,6 +40,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <rpc/types.h> #include <rpc/xdr.h> #include <rpc/pmap_prot.h> @@ -50,6 +51,7 @@ static char *rcsid = "$FreeBSD$"; #include <sys/ioctl.h> #include <netinet/in.h> #include <arpa/inet.h> +#include "un-namespace.h" /* * don't use gethostbyname, which would invoke yellow pages @@ -67,12 +69,12 @@ get_myaddress(addr) struct ifreq ifreq, *ifr, *end; int loopback = 0, gotit = 0; - if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + if ((s = _socket(AF_INET, SOCK_DGRAM, 0)) < 0) { return(-1); } ifc.ifc_len = sizeof (buf); ifc.ifc_buf = buf; - if (ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0) { + if (_ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0) { _close(s); return(-1); } @@ -82,7 +84,7 @@ again: while (ifr < end) { memcpy(&ifreq, ifr, sizeof(ifreq)); - if (ioctl(s, SIOCGIFFLAGS, (char *)&ifreq) < 0) { + if (_ioctl(s, SIOCGIFFLAGS, (char *)&ifreq) < 0) { _close(s); return(-1); } diff --git a/lib/libc/rpc/key_call.c b/lib/libc/rpc/key_call.c index 703e038..c6c3e78 100644 --- a/lib/libc/rpc/key_call.c +++ b/lib/libc/rpc/key_call.c @@ -43,6 +43,7 @@ * gendeskey(deskey) - generate a secure des key */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -57,6 +58,7 @@ #include <signal.h> #include <sys/wait.h> #include <sys/fcntl.h> +#include "un-namespace.h" #define KEY_TIMEOUT 5 /* per-try timeout in seconds */ @@ -322,7 +324,7 @@ int vers; if (kcp->client != NULL) { /* if other side closed socket, build handle again */ clnt_control(kcp->client, CLGET_FD, (char *)&fd); - if (getpeername(fd,(struct sockaddr *)&name,&namelen) == -1) { + if (_getpeername(fd,(struct sockaddr *)&name,&namelen) == -1) { auth_destroy(kcp->client->cl_auth); clnt_destroy(kcp->client); kcp->client = NULL; diff --git a/lib/libc/rpc/pmap_clnt.c b/lib/libc/rpc/pmap_clnt.c index 540187b..41bb78d 100644 --- a/lib/libc/rpc/pmap_clnt.c +++ b/lib/libc/rpc/pmap_clnt.c @@ -40,6 +40,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> @@ -47,6 +48,7 @@ static char *rcsid = "$FreeBSD$"; #include <rpc/pmap_prot.h> #include <rpc/pmap_clnt.h> #include <netinet/in.h> +#include "un-namespace.h" static struct timeval timeout = { 5, 0 }; static struct timeval tottimeout = { 60, 0 }; diff --git a/lib/libc/rpc/pmap_getmaps.c b/lib/libc/rpc/pmap_getmaps.c index 777877b..b51ac69 100644 --- a/lib/libc/rpc/pmap_getmaps.c +++ b/lib/libc/rpc/pmap_getmaps.c @@ -41,6 +41,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <rpc/rpc.h> #include <rpc/pmap_prot.h> #include <rpc/pmap_clnt.h> @@ -51,6 +52,8 @@ static char *rcsid = "$FreeBSD$"; #include <errno.h> #include <net/if.h> #include <sys/ioctl.h> +#include "un-namespace.h" + #define NAMELEN 255 #define MAX_BROADCAST_SIZE 1400 diff --git a/lib/libc/rpc/pmap_getport.c b/lib/libc/rpc/pmap_getport.c index 2d6f5ac..bef94fdf 100644 --- a/lib/libc/rpc/pmap_getport.c +++ b/lib/libc/rpc/pmap_getport.c @@ -40,12 +40,14 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <rpc/rpc.h> #include <rpc/pmap_prot.h> #include <rpc/pmap_clnt.h> #include <sys/socket.h> #include <net/if.h> #include <unistd.h> +#include "un-namespace.h" static struct timeval timeout = { 5, 0 }; static struct timeval tottimeout = { 60, 0 }; diff --git a/lib/libc/rpc/pmap_rmt.c b/lib/libc/rpc/pmap_rmt.c index f36acf1..298c956 100644 --- a/lib/libc/rpc/pmap_rmt.c +++ b/lib/libc/rpc/pmap_rmt.c @@ -41,6 +41,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <rpc/rpc.h> #include <rpc/pmap_prot.h> #include <rpc/pmap_clnt.h> @@ -54,6 +55,8 @@ static char *rcsid = "$FreeBSD$"; #include <net/if.h> #include <sys/ioctl.h> #include <arpa/inet.h> +#include "un-namespace.h" + #define MAX_BROADCAST_SIZE 1400 static struct timeval timeout = { 3, 0 }; @@ -177,7 +180,7 @@ getbroadcastnets(addrs, sock, buf) ifc.ifc_len = UDPMSGSIZE; ifc.ifc_buf = buf; - if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { + if (_ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { perror("broadcast: ioctl (get interface configuration)"); return (0); } @@ -190,7 +193,7 @@ getbroadcastnets(addrs, sock, buf) if (ifr->ifr_addr.sa_family != AF_INET) continue; memcpy(&ifreq, ifr, sizeof(ifreq)); - if (ioctl(sock, SIOCGIFFLAGS, (char *)&ifreq) < 0) { + if (_ioctl(sock, SIOCGIFFLAGS, (char *)&ifreq) < 0) { perror("broadcast: ioctl (get interface flags)"); continue; } @@ -198,7 +201,7 @@ getbroadcastnets(addrs, sock, buf) (ifreq.ifr_flags & IFF_UP)) { sin = (struct sockaddr_in *)&ifr->ifr_addr; #ifdef SIOCGIFBRDADDR /* 4.3BSD */ - if (ioctl(sock, SIOCGIFBRDADDR, (char *)&ifreq) < 0) { + if (_ioctl(sock, SIOCGIFBRDADDR, (char *)&ifreq) < 0) { addr = inet_makeaddr(inet_netof(sin->sin_addr), INADDR_ANY); @@ -263,13 +266,13 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) * initialization: create a socket, a broadcast address, and * preserialize the arguments into a send buffer. */ - if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { + if ((sock = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { perror("Cannot create socket for broadcast rpc"); stat = RPC_CANTSEND; goto done_broad; } #ifdef SO_BROADCAST - if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) { + if (_setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) { perror("Cannot set socket option SO_BROADCAST"); stat = RPC_CANTSEND; goto done_broad; @@ -332,7 +335,7 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) for (t.tv_sec = 4; t.tv_sec <= 14; t.tv_sec += 2) { for (i = 0; i < nets; i++) { baddr.sin_addr = addrs[i]; - if (sendto(sock, outbuf, outlen, 0, + if (_sendto(sock, outbuf, outlen, 0, (struct sockaddr *)&baddr, sizeof (struct sockaddr)) != outlen) { perror("Cannot send broadcast packet"); @@ -350,8 +353,8 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) msg.acpted_rply.ar_results.proc = xdr_rmtcallres; /* XXX we know the other bits are still clear */ FD_SET(sock, fds); - tv = t; /* for select() that copies back */ - switch (select(sock + 1, fds, NULL, NULL, &tv)) { + tv = t; /* for _select() that copies back */ + switch (_select(sock + 1, fds, NULL, NULL, &tv)) { case 0: /* timed out */ stat = RPC_TIMEDOUT; @@ -367,7 +370,7 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) } /* end of select results switch */ try_again: fromlen = sizeof(struct sockaddr); - inlen = recvfrom(sock, inbuf, UDPMSGSIZE, 0, + inlen = _recvfrom(sock, inbuf, UDPMSGSIZE, 0, (struct sockaddr *)&raddr, &fromlen); if (inlen < 0) { if (errno == EINTR) diff --git a/lib/libc/rpc/rpc_dtablesize.c b/lib/libc/rpc/rpc_dtablesize.c index 1ce5617..44b32796 100644 --- a/lib/libc/rpc/rpc_dtablesize.c +++ b/lib/libc/rpc/rpc_dtablesize.c @@ -45,7 +45,7 @@ static char *rcsid = "$FreeBSD$"; * descriptors be greater than FD_SETSIZE (which us 256 by default). * * Since old programs tend to use this call to determine the first arg - * for select(), having this return > FD_SETSIZE is a Bad Idea(TM)! + * for _select(), having this return > FD_SETSIZE is a Bad Idea(TM)! */ int _rpc_dtablesize(void) diff --git a/lib/libc/rpc/rtime.c b/lib/libc/rpc/rtime.c index 0aaf7c0..61d0e86 100644 --- a/lib/libc/rpc/rtime.c +++ b/lib/libc/rpc/rtime.c @@ -41,6 +41,7 @@ * subtract seconds before Jan 1, 1970 to get * what unix uses. */ +#include "namespace.h" #include <stdlib.h> #include <string.h> #include <unistd.h> @@ -51,6 +52,7 @@ #include <netinet/in.h> #include <stdio.h> #include <netdb.h> +#include "un-namespace.h" #if defined(LIBC_SCCS) && !defined(lint) /* from: static char sccsid[] = "@(#)rtime.c 2.2 88/08/10 4.0 RPCSRC; from 1.8 88/02/08 SMI"; */ @@ -84,7 +86,7 @@ rtime(addrp, timep, timeout) } else { type = SOCK_DGRAM; } - s = socket(AF_INET, type, 0); + s = _socket(AF_INET, type, 0); if (s < 0) { return(-1); } @@ -98,7 +100,7 @@ rtime(addrp, timep, timeout) addrp->sin_port = serv->s_port; if (type == SOCK_DGRAM) { - res = sendto(s, (char *)&thetime, sizeof(thetime), 0, + res = _sendto(s, (char *)&thetime, sizeof(thetime), 0, (struct sockaddr *)addrp, sizeof(*addrp)); if (res < 0) { do_close(s); @@ -107,7 +109,7 @@ rtime(addrp, timep, timeout) do { FD_ZERO(&readfds); FD_SET(s, &readfds); - res = select(_rpc_dtablesize(), &readfds, + res = _select(_rpc_dtablesize(), &readfds, (fd_set *)NULL, (fd_set *)NULL, timeout); } while (res < 0 && errno == EINTR); if (res <= 0) { @@ -118,14 +120,14 @@ rtime(addrp, timep, timeout) return(-1); } fromlen = sizeof(from); - res = recvfrom(s, (char *)&thetime, sizeof(thetime), 0, + res = _recvfrom(s, (char *)&thetime, sizeof(thetime), 0, (struct sockaddr *)&from, &fromlen); do_close(s); if (res < 0) { return(-1); } } else { - if (connect(s, (struct sockaddr *)addrp, sizeof(*addrp)) < 0) { + if (_connect(s, (struct sockaddr *)addrp, sizeof(*addrp)) < 0) { do_close(s); return(-1); } diff --git a/lib/libc/rpc/svc.c b/lib/libc/rpc/svc.c index 1f9803b..94d6057 100644 --- a/lib/libc/rpc/svc.c +++ b/lib/libc/rpc/svc.c @@ -45,7 +45,6 @@ static char *rcsid = "$FreeBSD$"; #include <string.h> #include <stdlib.h> -#include <sys/errno.h> #include <rpc/rpc.h> #include <rpc/pmap_clnt.h> diff --git a/lib/libc/rpc/svc_auth_des.c b/lib/libc/rpc/svc_auth_des.c index 6a937f5..f3af780 100644 --- a/lib/libc/rpc/svc_auth_des.c +++ b/lib/libc/rpc/svc_auth_des.c @@ -48,6 +48,7 @@ #include <string.h> #include <stdlib.h> +#include <stdio.h> #include <unistd.h> #include <rpc/des_crypt.h> #include <sys/param.h> diff --git a/lib/libc/rpc/svc_run.c b/lib/libc/rpc/svc_run.c index f39886a..bc5b48a 100644 --- a/lib/libc/rpc/svc_run.c +++ b/lib/libc/rpc/svc_run.c @@ -37,6 +37,7 @@ static char *rcsid = "$FreeBSD$"; * This is the rpc server side idle loop * Wait for input, call server program. */ +#include "namespace.h" #include <rpc/rpc.h> #include <stdio.h> #include <sys/errno.h> @@ -45,6 +46,7 @@ static char *rcsid = "$FreeBSD$"; #include <unistd.h> #include <stdlib.h> #include <string.h> +#include "un-namespace.h" extern int __svc_fdsetsize; extern fd_set *__svc_fdset; @@ -62,7 +64,7 @@ svc_run() memcpy(fds, __svc_fdset, bytes); } else fds = NULL; - switch (select(svc_maxfd + 1, fds, NULL, NULL, + switch (_select(svc_maxfd + 1, fds, NULL, NULL, (struct timeval *)0)) { case -1: if (errno == EINTR) { @@ -79,7 +81,7 @@ svc_run() free(fds); continue; default: - /* if fds == NULL, select() can't return a result */ + /* if fds == NULL, _select() can't return a result */ svc_getreqset2(fds, svc_maxfd + 1); free(fds); } diff --git a/lib/libc/rpc/svc_tcp.c b/lib/libc/rpc/svc_tcp.c index 3e14010..b060997 100644 --- a/lib/libc/rpc/svc_tcp.c +++ b/lib/libc/rpc/svc_tcp.c @@ -43,6 +43,7 @@ static char *rcsid = "$FreeBSD$"; * and a record/tcp stream. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -51,6 +52,7 @@ static char *rcsid = "$FreeBSD$"; #include <sys/socket.h> #include <sys/ioctl.h> #include <errno.h> +#include "un-namespace.h" /* * Ops vector for TCP/IP based rpc service handle @@ -135,14 +137,14 @@ svctcp_create(sock, sendsize, recvsize) int on; if (sock == RPC_ANYSOCK) { - if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { + if ((sock = _socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("svctcp_.c - udp socket creation problem"); return ((SVCXPRT *)NULL); } madesock = TRUE; } on = 1; - if (ioctl(sock, FIONBIO, &on) < 0) { + if (_ioctl(sock, FIONBIO, &on) < 0) { perror("svc_tcp.c - cannot turn on non-blocking mode"); if (madesock) (void)_close(sock); @@ -153,10 +155,10 @@ svctcp_create(sock, sendsize, recvsize) addr.sin_family = AF_INET; if (bindresvport(sock, &addr)) { addr.sin_port = 0; - (void)bind(sock, (struct sockaddr *)&addr, len); + (void)_bind(sock, (struct sockaddr *)&addr, len); } - if ((getsockname(sock, (struct sockaddr *)&addr, &len) != 0) || - (listen(sock, 2) != 0)) { + if ((_getsockname(sock, (struct sockaddr *)&addr, &len) != 0) || + (_listen(sock, 2) != 0)) { perror("svctcp_.c - cannot getsockname or listen"); if (madesock) (void)_close(sock); @@ -247,7 +249,7 @@ rendezvous_request(xprt) r = (struct tcp_rendezvous *)xprt->xp_p1; again: len = sizeof(struct sockaddr_in); - if ((sock = accept(xprt->xp_sock, (struct sockaddr *)&addr, + if ((sock = _accept(xprt->xp_sock, (struct sockaddr *)&addr, &len)) < 0) { if (errno == EINTR) goto again; @@ -264,7 +266,7 @@ rendezvous_request(xprt) * The listening socket is in FIONBIO mode and we inherit it. */ off = 0; - if (ioctl(sock, FIONBIO, &off) < 0) { + if (_ioctl(sock, FIONBIO, &off) < 0) { _close(sock); return (FALSE); } @@ -317,7 +319,7 @@ static struct timeval wait_per_try = { 35, 0 }; * Note: we have to be careful here not to allow ourselves to become * blocked too long in this routine. While we're waiting for data from one * client, another client may be trying to connect. To avoid this situation, - * some code from svc_run() is transplanted here: the select() loop checks + * some code from svc_run() is transplanted here: the _select() loop checks * all RPC descriptors including the one we want and calls svc_getreqset2() * to handle new requests if any are detected. */ @@ -349,8 +351,8 @@ readtcp(xprt, buf, len) /* XXX we know the other bits are still clear */ FD_SET(sock, fds); - tv = delta; /* in case select() implements writeback */ - switch (select(svc_maxfd + 1, fds, NULL, NULL, &tv)) { + tv = delta; /* in case _select() implements writeback */ + switch (_select(svc_maxfd + 1, fds, NULL, NULL, &tv)) { case -1: if (errno != EINTR) goto fatal_err; diff --git a/lib/libc/rpc/svc_udp.c b/lib/libc/rpc/svc_udp.c index 9849d53..0abd486 100644 --- a/lib/libc/rpc/svc_udp.c +++ b/lib/libc/rpc/svc_udp.c @@ -41,6 +41,7 @@ static char *rcsid = "$FreeBSD$"; * Copyright (C) 1984, Sun Microsystems, Inc. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -48,6 +49,7 @@ static char *rcsid = "$FreeBSD$"; #include <rpc/rpc.h> #include <sys/socket.h> #include <errno.h> +#include "un-namespace.h" #define rpc_buffer(xprt) ((xprt)->xp_p1) #define MAX(a, b) ((a > b) ? a : b) @@ -107,7 +109,7 @@ svcudp_bufcreate(sock, sendsz, recvsz) int len = sizeof(struct sockaddr_in); if (sock == RPC_ANYSOCK) { - if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { + if ((sock = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { perror("svcudp_create: socket creation problem"); return ((SVCXPRT *)NULL); } @@ -118,9 +120,9 @@ svcudp_bufcreate(sock, sendsz, recvsz) addr.sin_family = AF_INET; if (bindresvport(sock, &addr)) { addr.sin_port = 0; - (void)bind(sock, (struct sockaddr *)&addr, len); + (void)_bind(sock, (struct sockaddr *)&addr, len); } - if (getsockname(sock, (struct sockaddr *)&addr, &len) != 0) { + if (_getsockname(sock, (struct sockaddr *)&addr, &len) != 0) { perror("svcudp_create - cannot getsockname"); if (madesock) (void)_close(sock); @@ -182,7 +184,7 @@ svcudp_recv(xprt, msg) again: xprt->xp_addrlen = sizeof(struct sockaddr_in); - rlen = recvfrom(xprt->xp_sock, rpc_buffer(xprt), (int) su->su_iosz, + rlen = _recvfrom(xprt->xp_sock, rpc_buffer(xprt), (int) su->su_iosz, 0, (struct sockaddr *)&(xprt->xp_raddr), &(xprt->xp_addrlen)); if (rlen == -1 && errno == EINTR) goto again; @@ -195,7 +197,7 @@ svcudp_recv(xprt, msg) su->su_xid = msg->rm_xid; if (su->su_cache != NULL) { if (cache_get(xprt, msg, &reply, &replylen)) { - (void) sendto(xprt->xp_sock, reply, (int) replylen, 0, + (void) _sendto(xprt->xp_sock, reply, (int) replylen, 0, (struct sockaddr *) &xprt->xp_raddr, xprt->xp_addrlen); return (TRUE); } @@ -218,7 +220,7 @@ svcudp_reply(xprt, msg) msg->rm_xid = su->su_xid; if (xdr_replymsg(xdrs, msg)) { slen = (int)XDR_GETPOS(xdrs); - if (sendto(xprt->xp_sock, rpc_buffer(xprt), slen, 0, + if (_sendto(xprt->xp_sock, rpc_buffer(xprt), slen, 0, (struct sockaddr *)&(xprt->xp_raddr), xprt->xp_addrlen) == slen) { stat = TRUE; diff --git a/lib/libc/rpc/svc_unix.c b/lib/libc/rpc/svc_unix.c index dc680d0..ac92bc5 100644 --- a/lib/libc/rpc/svc_unix.c +++ b/lib/libc/rpc/svc_unix.c @@ -43,6 +43,7 @@ static char *rcsid = "$FreeBSD$"; * and a record/unix stream. */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -52,6 +53,7 @@ static char *rcsid = "$FreeBSD$"; #include <sys/un.h> #include <sys/uio.h> #include <errno.h> +#include "un-namespace.h" /* * Ops vector for AF_UNIX based rpc service handle @@ -130,7 +132,7 @@ static int __msgread(sock, buf, cnt) msg.msg_controllen = sizeof(struct cmessage); msg.msg_flags = 0; - return(recvmsg(sock, &msg, 0)); + return(_recvmsg(sock, &msg, 0)); } static int __msgwrite(sock, buf, cnt) @@ -157,7 +159,7 @@ static int __msgwrite(sock, buf, cnt) msg.msg_controllen = sizeof(struct cmessage); msg.msg_flags = 0; - return(sendmsg(sock, &msg, 0)); + return(_sendmsg(sock, &msg, 0)); } /* @@ -194,7 +196,7 @@ svcunix_create(sock, sendsize, recvsize, path) int len = sizeof(struct sockaddr_un); if (sock == RPC_ANYSOCK) { - if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { + if ((sock = _socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { perror("svc_unix.c - AF_UNIX socket creation problem"); return ((SVCXPRT *)NULL); } @@ -207,10 +209,10 @@ svcunix_create(sock, sendsize, recvsize, path) sizeof(addr.sun_len) + 1; addr.sun_len = len; - bind(sock, (struct sockaddr *)&addr, len); + _bind(sock, (struct sockaddr *)&addr, len); - if ((getsockname(sock, (struct sockaddr *)&addr, &len) != 0) || - (listen(sock, 2) != 0)) { + if ((_getsockname(sock, (struct sockaddr *)&addr, &len) != 0) || + (_listen(sock, 2) != 0)) { perror("svc_unix.c - cannot getsockname or listen"); if (madesock) (void)_close(sock); @@ -301,7 +303,7 @@ rendezvous_request(xprt) r = (struct unix_rendezvous *)xprt->xp_p1; again: len = sizeof(struct sockaddr_in); - if ((sock = accept(xprt->xp_sock, (struct sockaddr *)&addr, + if ((sock = _accept(xprt->xp_sock, (struct sockaddr *)&addr, &len)) < 0) { if (errno == EINTR) goto again; @@ -359,7 +361,7 @@ static struct timeval wait_per_try = { 35, 0 }; * Note: we have to be careful here not to allow ourselves to become * blocked too long in this routine. While we're waiting for data from one * client, another client may be trying to connect. To avoid this situation, - * some code from svc_run() is transplanted here: the select() loop checks + * some code from svc_run() is transplanted here: the _select() loop checks * all RPC descriptors including the one we want and calls svc_getreqset2() * to handle new requests if any are detected. */ @@ -391,8 +393,8 @@ readunix(xprt, buf, len) /* XXX we know the other bits are still clear */ FD_SET(sock, fds); - tv = delta; /* in case select() implements writeback */ - switch (select(svc_maxfd + 1, fds, NULL, NULL, &tv)) { + tv = delta; /* in case _select() implements writeback */ + switch (_select(svc_maxfd + 1, fds, NULL, NULL, &tv)) { case -1: if (errno != EINTR) goto fatal_err; diff --git a/lib/libc/stdio/_flock_stub.c b/lib/libc/stdio/_flock_stub.c index ada714c..83a3e86 100644 --- a/lib/libc/stdio/_flock_stub.c +++ b/lib/libc/stdio/_flock_stub.c @@ -35,16 +35,17 @@ #include <stdio.h> -/* Don't build this in libc_r, just libc: */ -#ifndef _THREAD_SAFE /* * Declare weak references in case the application is not linked * with libpthread. */ #pragma weak flockfile=_flockfile_stub +#pragma weak _flockfile=_flockfile_stub #pragma weak _flockfile_debug=_flockfile_debug_stub #pragma weak ftrylockfile=_ftrylockfile_stub +#pragma weak _ftrylockfile=_ftrylockfile_stub #pragma weak funlockfile=_funlockfile_stub +#pragma weak _funlockfile=_funlockfile_stub /* * This function is a stub for the _flockfile function in libpthread. @@ -78,4 +79,3 @@ void _funlockfile_stub(FILE *fp) { } -#endif diff --git a/lib/libc/stdio/clrerr.c b/lib/libc/stdio/clrerr.c index 4e6b720..3232088 100644 --- a/lib/libc/stdio/clrerr.c +++ b/lib/libc/stdio/clrerr.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> -#undef clearerr +#include "un-namespace.h" #include "libc_private.h" +#undef clearerr void clearerr(fp) diff --git a/lib/libc/stdio/fclose.c b/lib/libc/stdio/fclose.c index 8ddb98b..0d6fd80 100644 --- a/lib/libc/stdio/fclose.c +++ b/lib/libc/stdio/fclose.c @@ -42,17 +42,19 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> -#include "local.h" +#include "un-namespace.h" #include "libc_private.h" +#include "local.h" int fclose(fp) - register FILE *fp; + FILE *fp; { - register int r; + int r; if (fp->_flags == 0) { /* not open! */ errno = EBADF; @@ -71,6 +73,12 @@ fclose(fp) FUNLOCKFILE(fp); fp->_file = -1; fp->_r = fp->_w = 0; /* Mess up if reaccessed. */ +#if 0 + if (fp->_lock != NULL) { + _pthread_mutex_destroy((pthread_mutex_t *)&fp->_lock); + fp->_lock = NULL; + } +#endif fp->_flags = 0; /* Release this FILE for reuse. */ return (r); } diff --git a/lib/libc/stdio/fdopen.c b/lib/libc/stdio/fdopen.c index 44341b3..2e72e71 100644 --- a/lib/libc/stdio/fdopen.c +++ b/lib/libc/stdio/fdopen.c @@ -40,11 +40,13 @@ static char sccsid[] = "@(#)fdopen.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <errno.h> +#include "un-namespace.h" #include "local.h" FILE * diff --git a/lib/libc/stdio/fflush.c b/lib/libc/stdio/fflush.c index cd7fbe8..09d346b 100644 --- a/lib/libc/stdio/fflush.c +++ b/lib/libc/stdio/fflush.c @@ -42,15 +42,19 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <errno.h> #include <stdio.h> -#include "local.h" +#include "un-namespace.h" #include "libc_private.h" +#include "local.h" -/* Flush a single file, or (if fp is NULL) all files. */ +/* + * Flush a single file, or (if fp is NULL) all files. + * MT-safe version + */ int -fflush(fp) - register FILE *fp; +fflush(FILE *fp) { int retval; @@ -60,19 +64,36 @@ fflush(fp) if ((fp->_flags & (__SWR | __SRW)) == 0) { errno = EBADF; retval = EOF; - } else { + } else retval = __sflush(fp); - } FUNLOCKFILE(fp); return (retval); } +/* + * Flush a single file, or (if fp is NULL) all files. + * Non-MT-safe version + */ +int +__fflush(FILE *fp) +{ + int retval; + + if (fp == NULL) + return (_fwalk(__sflush)); + if ((fp->_flags & (__SWR | __SRW)) == 0) { + errno = EBADF; + retval = EOF; + } else + retval = __sflush(fp); + return (retval); +} + int -__sflush(fp) - register FILE *fp; +__sflush(FILE *fp) { - register unsigned char *p; - register int n, t; + unsigned char *p; + int n, t; t = fp->_flags; if ((t & __SWR) == 0) diff --git a/lib/libc/stdio/fgetc.c b/lib/libc/stdio/fgetc.c index 4e52705..a367af3 100644 --- a/lib/libc/stdio/fgetc.c +++ b/lib/libc/stdio/fgetc.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" int diff --git a/lib/libc/stdio/fgetpos.c b/lib/libc/stdio/fgetpos.c index 6d6cfa1..239f6d1 100644 --- a/lib/libc/stdio/fgetpos.c +++ b/lib/libc/stdio/fgetpos.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" int diff --git a/lib/libc/stdio/fgets.c b/lib/libc/stdio/fgets.c index 33b7144..ccf5535 100644 --- a/lib/libc/stdio/fgets.c +++ b/lib/libc/stdio/fgets.c @@ -42,8 +42,10 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <string.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" diff --git a/lib/libc/stdio/findfp.c b/lib/libc/stdio/findfp.c index 3cc08a9..50edcb6 100644 --- a/lib/libc/stdio/findfp.c +++ b/lib/libc/stdio/findfp.c @@ -43,15 +43,15 @@ static const char rcsid[] = #endif /* LIBC_SCCS and not lint */ #include <sys/param.h> +#include <machine/atomic.h> #include <unistd.h> #include <stdio.h> -#include <errno.h> #include <stdlib.h> #include <string.h> -#include <libc_private.h> #include <spinlock.h> +#include "libc_private.h" #include "local.h" #include "glue.h" @@ -65,7 +65,7 @@ int __sdidinit; /* the usual - (stdin + stdout + stderr) */ static FILE usual[FOPEN_MAX - 3]; -static struct glue uglue = { 0, FOPEN_MAX - 3, usual }; +static struct glue uglue = { NULL, FOPEN_MAX - 3, usual }; FILE __sF[3] = { std(__SRD, STDIN_FILENO), /* stdin */ @@ -73,6 +73,7 @@ FILE __sF[3] = { std(__SWR|__SNBF, STDERR_FILENO) /* stderr */ }; struct glue __sglue = { &uglue, 3, __sF }; +static struct glue *lastglue = &uglue; static struct glue * moreglue __P((int)); @@ -80,12 +81,18 @@ static spinlock_t thread_lock = _SPINLOCK_INITIALIZER; #define THREAD_LOCK() if (__isthreaded) _SPINLOCK(&thread_lock) #define THREAD_UNLOCK() if (__isthreaded) _SPINUNLOCK(&thread_lock) +#if NOT_YET +#define SET_GLUE_PTR(ptr, val) atomic_set_ptr(&(ptr), (uintptr_t)(val)) +#else +#define SET_GLUE_PTR(ptr, val) ptr = val +#endif + static struct glue * moreglue(n) - register int n; + int n; { - register struct glue *g; - register FILE *p; + struct glue *g; + FILE *p; static FILE empty; g = (struct glue *)malloc(sizeof(*g) + ALIGNBYTES + n * sizeof(FILE)); @@ -106,22 +113,28 @@ moreglue(n) FILE * __sfp() { - register FILE *fp; - register int n; - register struct glue *g; + FILE *fp; + int n; + struct glue *g; if (!__sdidinit) __sinit(); + /* + * The list must be locked because a FILE may be updated. + */ THREAD_LOCK(); - for (g = &__sglue;; g = g->next) { + for (g = &__sglue; g != NULL; g = g->next) { for (fp = g->iobs, n = g->niobs; --n >= 0; fp++) if (fp->_flags == 0) goto found; - if (g->next == NULL && (g->next = moreglue(NDYNAMIC)) == NULL) - break; } - THREAD_UNLOCK(); - return (NULL); + THREAD_UNLOCK(); /* don't hold lock while malloc()ing. */ + if ((g == moreglue(NDYNAMIC)) == NULL) + return (NULL); + THREAD_LOCK(); /* reacquire the lock */ + SET_GLUE_PTR(lastglue->next, g); /* atomically append glue to list */ + lastglue = g; /* not atomic; only accessed when locked */ + fp = g->iobs; found: fp->_flags = 1; /* reserve this slot; caller sets real flags */ THREAD_UNLOCK(); @@ -137,6 +150,7 @@ found: fp->_ub._size = 0; fp->_lb._base = NULL; /* no line buffer */ fp->_lb._size = 0; + /* fp->_lock = NULL; */ return (fp); } @@ -150,14 +164,23 @@ __warn_references(f_prealloc, void f_prealloc() { - register struct glue *g; + struct glue *g; int n; n = getdtablesize() - FOPEN_MAX + 20; /* 20 for slop. */ + /* + * It should be safe to walk the list without locking it; + * new nodes are only added to the end and none are ever + * removed. + */ for (g = &__sglue; (n -= g->niobs) > 0 && g->next; g = g->next) /* void */; - if (n > 0) - g->next = moreglue(n); + if ((n > 0) && ((g = moreglue(n)) != NULL)) { + THREAD_LOCK(); + SET_GLUE_PTR(lastglue->next, g); + lastglue = g; + THREAD_UNLOCK(); + } } /* diff --git a/lib/libc/stdio/flags.c b/lib/libc/stdio/flags.c index afcc4d8..4f39460 100644 --- a/lib/libc/stdio/flags.c +++ b/lib/libc/stdio/flags.c @@ -46,11 +46,12 @@ static const char rcsid[] = #include <sys/file.h> #include <stdio.h> #include <errno.h> + #include "local.h" /* * Return the (stdio) flags for a given mode. Store the flags - * to be passed to an open() syscall through *optr. + * to be passed to an _open() syscall through *optr. * Return 0 on error. */ int diff --git a/lib/libc/stdio/fopen.c b/lib/libc/stdio/fopen.c index 1ef6bda..4ea2eb9 100644 --- a/lib/libc/stdio/fopen.c +++ b/lib/libc/stdio/fopen.c @@ -40,11 +40,14 @@ static char sccsid[] = "@(#)fopen.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <errno.h> +#include "un-namespace.h" + #include "local.h" FILE * @@ -52,8 +55,8 @@ fopen(file, mode) const char *file; const char *mode; { - register FILE *fp; - register int f; + FILE *fp; + int f; int flags, oflags; if ((flags = __sflags(mode, &oflags)) == 0) @@ -71,7 +74,7 @@ fopen(file, mode) fp->_write = __swrite; fp->_seek = __sseek; fp->_close = __sclose; - + /* fp->_lock = NULL; */ /* * When opening in append mode, even though we use O_APPEND, * we need to seek to the end so that ftell() gets the right diff --git a/lib/libc/stdio/fpurge.c b/lib/libc/stdio/fpurge.c index acf0b8b..4959098 100644 --- a/lib/libc/stdio/fpurge.c +++ b/lib/libc/stdio/fpurge.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" diff --git a/lib/libc/stdio/fputc.c b/lib/libc/stdio/fputc.c index 60079f1..24eb560 100644 --- a/lib/libc/stdio/fputc.c +++ b/lib/libc/stdio/fputc.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" int diff --git a/lib/libc/stdio/fputs.c b/lib/libc/stdio/fputs.c index 63a5321..0967c6a 100644 --- a/lib/libc/stdio/fputs.c +++ b/lib/libc/stdio/fputs.c @@ -42,8 +42,10 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <string.h> +#include "un-namespace.h" #include "fvwrite.h" #include "libc_private.h" diff --git a/lib/libc/stdio/fread.c b/lib/libc/stdio/fread.c index 886a9fc..f7e8985 100644 --- a/lib/libc/stdio/fread.c +++ b/lib/libc/stdio/fread.c @@ -42,8 +42,10 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <string.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c index f6fa754..fd8612c 100644 --- a/lib/libc/stdio/freopen.c +++ b/lib/libc/stdio/freopen.c @@ -42,6 +42,7 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -49,7 +50,8 @@ static const char rcsid[] = #include <unistd.h> #include <stdio.h> #include <stdlib.h> -#include <libc_private.h> +#include "un-namespace.h" +#include "libc_private.h" #include "local.h" /* @@ -146,7 +148,7 @@ freopen(file, mode, fp) * assume stderr is always fd STDERR_FILENO, even if being freopen'd. */ if (wantfd >= 0 && f != wantfd) { - if (dup2(f, wantfd) >= 0) { + if (_dup2(f, wantfd) >= 0) { (void)_close(f); f = wantfd; } diff --git a/lib/libc/stdio/fscanf.c b/lib/libc/stdio/fscanf.c index 8b7b941..45c399a 100644 --- a/lib/libc/stdio/fscanf.c +++ b/lib/libc/stdio/fscanf.c @@ -42,12 +42,14 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #if __STDC__ #include <stdarg.h> #else #include <varargs.h> #endif +#include "un-namespace.h" #include "libc_private.h" #if __STDC__ diff --git a/lib/libc/stdio/fseek.c b/lib/libc/stdio/fseek.c index 8c2732e..f873975 100644 --- a/lib/libc/stdio/fseek.c +++ b/lib/libc/stdio/fseek.c @@ -42,12 +42,14 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" @@ -62,13 +64,31 @@ fseek(fp, offset, whence) return (fseeko(fp, offset, whence)); } +int +fseeko(fp, offset, whence) + FILE *fp; + off_t offset; + int whence; +{ + int ret; + + /* make sure stdio is set up */ + if (!__sdidinit) + __sinit(); + + FLOCKFILE(fp); + ret = _fseeko(fp, offset, whence); + FUNLOCKFILE(fp); + return (ret); +} + /* * Seek the given file to the given offset. * `Whence' must be one of the three SEEK_* macros. */ int -fseeko(fp, offset, whence) - register FILE *fp; +_fseeko(fp, offset, whence) + FILE *fp; off_t offset; int whence; { @@ -78,17 +98,11 @@ fseeko(fp, offset, whence) struct stat st; int havepos; - /* make sure stdio is set up */ - if (!__sdidinit) - __sinit(); - - FLOCKFILE(fp); /* * Have to be able to seek. */ if ((seekfn = fp->_seek) == NULL) { - errno = ESPIPE; /* historic practice */ - FUNLOCKFILE(fp); + errno = ESPIPE; /* historic practice */ return (EOF); } @@ -108,10 +122,8 @@ fseeko(fp, offset, whence) curoff = fp->_offset; else { curoff = (*seekfn)(fp->_cookie, (fpos_t)0, SEEK_CUR); - if (curoff == -1) { - FUNLOCKFILE(fp); + if (curoff == -1) return (EOF); - } } if (fp->_flags & __SRD) { curoff -= fp->_r; @@ -133,7 +145,6 @@ fseeko(fp, offset, whence) default: errno = EINVAL; - FUNLOCKFILE(fp); return (EOF); } @@ -151,7 +162,7 @@ fseeko(fp, offset, whence) goto dumb; if ((fp->_flags & __SOPT) == 0) { if (seekfn != __sseek || - fp->_file < 0 || fstat(fp->_file, &st) || + fp->_file < 0 || _fstat(fp->_file, &st) || (st.st_mode & S_IFMT) != S_IFREG) { fp->_flags |= __SNPT; goto dumb; @@ -167,7 +178,7 @@ fseeko(fp, offset, whence) if (whence == SEEK_SET) target = offset; else { - if (fstat(fp->_file, &st)) + if (_fstat(fp->_file, &st)) goto dumb; target = st.st_size + offset; } @@ -217,7 +228,6 @@ fseeko(fp, offset, whence) if (HASUB(fp)) FREEUB(fp); fp->_flags &= ~__SEOF; - FUNLOCKFILE(fp); return (0); } @@ -244,7 +254,6 @@ fseeko(fp, offset, whence) fp->_p += n; fp->_r -= n; } - FUNLOCKFILE(fp); return (0); /* @@ -253,10 +262,8 @@ fseeko(fp, offset, whence) */ dumb: if (__sflush(fp) || - (*seekfn)(fp->_cookie, (fpos_t)offset, whence) == POS_ERR) { - FUNLOCKFILE(fp); + (*seekfn)(fp->_cookie, (fpos_t)offset, whence) == POS_ERR) return (EOF); - } /* success: clear EOF indicator and discard ungetc() data */ if (HASUB(fp)) FREEUB(fp); @@ -264,6 +271,5 @@ dumb: fp->_r = 0; /* fp->_w = 0; */ /* unnecessary (I think...) */ fp->_flags &= ~__SEOF; - FUNLOCKFILE(fp); return (0); } diff --git a/lib/libc/stdio/ftell.c b/lib/libc/stdio/ftell.c index 9057f89..e4a4e11 100644 --- a/lib/libc/stdio/ftell.c +++ b/lib/libc/stdio/ftell.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <stdio.h> #include <errno.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" diff --git a/lib/libc/stdio/funopen.c b/lib/libc/stdio/funopen.c index 4d65b68..f66c60e 100644 --- a/lib/libc/stdio/funopen.c +++ b/lib/libc/stdio/funopen.c @@ -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) @@ -40,6 +42,7 @@ static char sccsid[] = "@(#)funopen.c 8.1 (Berkeley) 6/4/93"; #include <stdio.h> #include <errno.h> + #include "local.h" FILE * diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c index 75d7191..82a49cb 100644 --- a/lib/libc/stdio/fvwrite.c +++ b/lib/libc/stdio/fvwrite.c @@ -143,7 +143,7 @@ __sfvwrite(fp, uio) COPY(w); /* fp->_w -= w; */ /* unneeded */ fp->_p += w; - if (fflush(fp)) + if (__fflush(fp)) goto err; } else if (len >= (w = fp->_bf._size)) { /* write directly */ @@ -183,7 +183,7 @@ __sfvwrite(fp, uio) COPY(w); /* fp->_w -= w; */ fp->_p += w; - if (fflush(fp)) + if (__fflush(fp)) goto err; } else if (s >= (w = fp->_bf._size)) { w = (*fp->_write)(fp->_cookie, p, w); @@ -197,7 +197,7 @@ __sfvwrite(fp, uio) } if ((nldist -= w) == 0) { /* copied the newline: flush and forget */ - if (fflush(fp)) + if (__fflush(fp)) goto err; nlknown = 0; } diff --git a/lib/libc/stdio/fwalk.c b/lib/libc/stdio/fwalk.c index b1a25d1..17cb5ce 100644 --- a/lib/libc/stdio/fwalk.c +++ b/lib/libc/stdio/fwalk.c @@ -42,20 +42,26 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ -#include <errno.h> +#include <sys/types.h> +#include <machine/atomic.h> #include <stdio.h> #include "local.h" #include "glue.h" int _fwalk(function) - register int (*function)(FILE *); + int (*function)(FILE *); { - register FILE *fp; - register int n, ret; - register struct glue *g; + FILE *fp; + int n, ret; + struct glue *g; ret = 0; + /* + * It should be safe to walk the list without locking it; + * new nodes are only added to the end and none are ever + * removed. + */ for (g = &__sglue; g != NULL; g = g->next) for (fp = g->iobs, n = g->niobs; --n >= 0; fp++) if (fp->_flags != 0) diff --git a/lib/libc/stdio/fwrite.c b/lib/libc/stdio/fwrite.c index 681b9d3..13653b6 100644 --- a/lib/libc/stdio/fwrite.c +++ b/lib/libc/stdio/fwrite.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "local.h" #include "fvwrite.h" #include "libc_private.h" diff --git a/lib/libc/stdio/getc.c b/lib/libc/stdio/getc.c index eff320a..1668407 100644 --- a/lib/libc/stdio/getc.c +++ b/lib/libc/stdio/getc.c @@ -42,14 +42,12 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" -/* - * A subroutine version of the macro getc. - */ #undef getc - int getc(fp) register FILE *fp; diff --git a/lib/libc/stdio/getchar.c b/lib/libc/stdio/getchar.c index ec8810d..92f714e 100644 --- a/lib/libc/stdio/getchar.c +++ b/lib/libc/stdio/getchar.c @@ -45,7 +45,9 @@ static const char rcsid[] = /* * A subroutine version of the macro getchar. */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" #undef getchar diff --git a/lib/libc/stdio/gets.c b/lib/libc/stdio/gets.c index 1f9be80..7a368cf 100644 --- a/lib/libc/stdio/gets.c +++ b/lib/libc/stdio/gets.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <unistd.h> #include <stdio.h> #include <sys/cdefs.h> +#include "un-namespace.h" __warn_references(gets, "warning: this program uses gets(), which is unsafe."); diff --git a/lib/libc/stdio/local.h b/lib/libc/stdio/local.h index cbc07a9..2f95a58 100644 --- a/lib/libc/stdio/local.h +++ b/lib/libc/stdio/local.h @@ -34,13 +34,19 @@ * SUCH DAMAGE. * * @(#)local.h 8.3 (Berkeley) 7/3/94 + * + * $FreeBSD$ */ +#include <sys/types.h> /* for off_t */ + /* * Information local to this implementation of stdio, * in particular, macros and private variables. */ +extern int _fseeko __P((FILE *, off_t, int)); +extern int __fflush __P((FILE *fp)); extern int __sflush __P((FILE *)); extern FILE *__sfp __P((void)); extern int __srefill __P((FILE *)); @@ -56,6 +62,8 @@ extern int __swhatbuf __P((FILE *, size_t *, int *)); extern int _fwalk __P((int (*)(FILE *))); extern int __swsetup __P((FILE *)); extern int __sflags __P((const char *, int *)); +extern int __ungetc __P((int, FILE *)); +extern int __vfprintf __P((FILE *, const char *, _BSD_VA_LIST_)); extern int __sdidinit; diff --git a/lib/libc/stdio/makebuf.c b/lib/libc/stdio/makebuf.c index 7dcbd70..34fe8e6 100644 --- a/lib/libc/stdio/makebuf.c +++ b/lib/libc/stdio/makebuf.c @@ -32,25 +32,29 @@ * 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[] = "@(#)makebuf.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include "local.h" +#include "un-namespace.h" /* * Allocate a file buffer, or switch to unbuffered I/O. * Per the ANSI C standard, ALL tty devices default to line buffered. * * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek - * optimisation) right after the fstat() that finds the buffer size. + * optimisation) right after the _fstat() that finds the buffer size. */ void __smakebuf(fp) @@ -93,7 +97,7 @@ __swhatbuf(fp, bufsize, couldbetty) { struct stat st; - if (fp->_file < 0 || fstat(fp->_file, &st) < 0) { + if (fp->_file < 0 || _fstat(fp->_file, &st) < 0) { *couldbetty = 0; *bufsize = BUFSIZ; return (__SNPT); diff --git a/lib/libc/stdio/mktemp.c b/lib/libc/stdio/mktemp.c index 870e4db..e4c8c28 100644 --- a/lib/libc/stdio/mktemp.c +++ b/lib/libc/stdio/mktemp.c @@ -39,6 +39,7 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +/* #include "namespace.h" */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -48,6 +49,7 @@ static const char rcsid[] = #include <string.h> #include <ctype.h> #include <unistd.h> +/* #include "un-namespace.h" */ char *_mktemp __P((char *)); diff --git a/lib/libc/stdio/perror.c b/lib/libc/stdio/perror.c index bb61824..c137e06 100644 --- a/lib/libc/stdio/perror.c +++ b/lib/libc/stdio/perror.c @@ -29,18 +29,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[] = "@(#)perror.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <string.h> +#include "un-namespace.h" void perror(s) @@ -63,5 +67,5 @@ perror(s) v++; v->iov_base = "\n"; v->iov_len = 1; - (void)writev(STDERR_FILENO, iov, (v - iov) + 1); + (void)_writev(STDERR_FILENO, iov, (v - iov) + 1); } diff --git a/lib/libc/stdio/putc.c b/lib/libc/stdio/putc.c index fe1591c..72d6bbf 100644 --- a/lib/libc/stdio/putc.c +++ b/lib/libc/stdio/putc.c @@ -42,14 +42,19 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" /* - * A subroutine version of the macro putc. + * putc has traditionally been a macro in <stdio.h>. That is no + * longer true because POSIX requires it to be thread-safe. POSIX + * does define putc_unlocked() which is defined as a macro and is + * probably what you want to use instead. + * + * #undef putc */ -#undef putc - int putc(c, fp) int c; diff --git a/lib/libc/stdio/putchar.c b/lib/libc/stdio/putchar.c index cebd872..a611fbb 100644 --- a/lib/libc/stdio/putchar.c +++ b/lib/libc/stdio/putchar.c @@ -42,11 +42,19 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" -#undef putchar - +/* + * putchar has traditionally been a macro in <stdio.h>. That is no + * longer true because POSIX requires it to be thread-safe. POSIX + * does define putchar_unlocked() which is defined as a macro and is + * probably what you want to use instead. + * + * #undef putchar + */ /* * A subroutine version of the macro putchar */ diff --git a/lib/libc/stdio/puts.c b/lib/libc/stdio/puts.c index 59f153d..cdf1b53 100644 --- a/lib/libc/stdio/puts.c +++ b/lib/libc/stdio/puts.c @@ -42,8 +42,10 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <string.h> +#include "un-namespace.h" #include "fvwrite.h" #include "libc_private.h" diff --git a/lib/libc/stdio/putw.c b/lib/libc/stdio/putw.c index 8eac4cf..a7e93b7 100644 --- a/lib/libc/stdio/putw.c +++ b/lib/libc/stdio/putw.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "fvwrite.h" #include "libc_private.h" diff --git a/lib/libc/stdio/refill.c b/lib/libc/stdio/refill.c index 8793830..2db485bba 100644 --- a/lib/libc/stdio/refill.c +++ b/lib/libc/stdio/refill.c @@ -45,6 +45,7 @@ static const char rcsid[] = #include <errno.h> #include <stdio.h> #include <stdlib.h> + #include "local.h" static int lflush __P((FILE *)); diff --git a/lib/libc/stdio/rewind.c b/lib/libc/stdio/rewind.c index 98c5846..c4de2c1 100644 --- a/lib/libc/stdio/rewind.c +++ b/lib/libc/stdio/rewind.c @@ -42,17 +42,19 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <errno.h> #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" +#include "local.h" void -rewind(fp) - register FILE *fp; +rewind(FILE *fp) { FLOCKFILE(fp); - (void) fseek(fp, 0L, SEEK_SET); + (void) _fseeko(fp, (off_t)0, SEEK_SET); clearerr(fp); FUNLOCKFILE(fp); - errno = 0; /* not required, but seems reasonable */ + errno = 0; /* not required, but seems reasonable */ } diff --git a/lib/libc/stdio/scanf.c b/lib/libc/stdio/scanf.c index b183c17..fac6cee 100644 --- a/lib/libc/stdio/scanf.c +++ b/lib/libc/stdio/scanf.c @@ -42,12 +42,14 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #if __STDC__ #include <stdarg.h> #else #include <varargs.h> #endif +#include "un-namespace.h" #include "libc_private.h" #if __STDC__ diff --git a/lib/libc/stdio/setvbuf.c b/lib/libc/stdio/setvbuf.c index 4693b9f..f25391f 100644 --- a/lib/libc/stdio/setvbuf.c +++ b/lib/libc/stdio/setvbuf.c @@ -42,8 +42,10 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" diff --git a/lib/libc/stdio/stdio.c b/lib/libc/stdio/stdio.c index b8a3f47..57be5bb 100644 --- a/lib/libc/stdio/stdio.c +++ b/lib/libc/stdio/stdio.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <fcntl.h> #include <unistd.h> #include <stdio.h> +#include "un-namespace.h" #include "local.h" /* diff --git a/lib/libc/stdio/tmpfile.c b/lib/libc/stdio/tmpfile.c index a0162c2..e3e296b 100644 --- a/lib/libc/stdio/tmpfile.c +++ b/lib/libc/stdio/tmpfile.c @@ -40,6 +40,7 @@ static char sccsid[] = "@(#)tmpfile.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <signal.h> #include <unistd.h> @@ -47,6 +48,7 @@ static char sccsid[] = "@(#)tmpfile.c 8.1 (Berkeley) 6/4/93"; #include <stdio.h> #include <string.h> #include <paths.h> +#include "un-namespace.h" FILE * tmpfile() @@ -61,13 +63,13 @@ tmpfile() (void)memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER)); sigfillset(&set); - (void)sigprocmask(SIG_BLOCK, &set, &oset); + (void)_sigprocmask(SIG_BLOCK, &set, &oset); fd = mkstemp(buf); if (fd != -1) (void)unlink(buf); - (void)sigprocmask(SIG_SETMASK, &oset, NULL); + (void)_sigprocmask(SIG_SETMASK, &oset, NULL); if (fd == -1) return (NULL); diff --git a/lib/libc/stdio/ungetc.c b/lib/libc/stdio/ungetc.c index 3f4b32c..872abad 100644 --- a/lib/libc/stdio/ungetc.c +++ b/lib/libc/stdio/ungetc.c @@ -42,9 +42,11 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "un-namespace.h" #include "local.h" #include "libc_private.h" @@ -57,11 +59,10 @@ static int __submore __P((FILE *)); * are all at the end (stack-style). */ static int -__submore(fp) - register FILE *fp; +__submore(FILE *fp) { - register int i; - register unsigned char *p; + int i; + unsigned char *p; if (fp->_ub._base == fp->_ubuf) { /* @@ -89,30 +90,42 @@ __submore(fp) return (0); } +/* + * MT-safe version + */ int -ungetc(c, fp) - int c; - register FILE *fp; +ungetc(int c, FILE *fp) { + int ret; + if (c == EOF) return (EOF); if (!__sdidinit) __sinit(); FLOCKFILE(fp); + ret = __ungetc(c, fp); + FUNLOCKFILE(fp); + return (ret); +} + +/* + * Non-MT-safe version + */ +int +__ungetc(int c, FILE *fp) +{ + if (c == EOF) + return (EOF); if ((fp->_flags & __SRD) == 0) { /* * Not already reading: no good unless reading-and-writing. * Otherwise, flush any current write stuff. */ - if ((fp->_flags & __SRW) == 0) { - FUNLOCKFILE(fp); + if ((fp->_flags & __SRW) == 0) return (EOF); - } if (fp->_flags & __SWR) { - if (__sflush(fp)) { - FUNLOCKFILE(fp); + if (__sflush(fp)) return (EOF); - } fp->_flags &= ~__SWR; fp->_w = 0; fp->_lbfsize = 0; @@ -126,13 +139,10 @@ ungetc(c, fp) * This may require expanding the current ungetc buffer. */ if (HASUB(fp)) { - if (fp->_r >= fp->_ub._size && __submore(fp)) { - FUNLOCKFILE(fp); + if (fp->_r >= fp->_ub._size && __submore(fp)) return (EOF); - } *--fp->_p = c; fp->_r++; - FUNLOCKFILE(fp); return (c); } fp->_flags &= ~__SEOF; @@ -146,7 +156,6 @@ ungetc(c, fp) fp->_p[-1] == c) { fp->_p--; fp->_r++; - FUNLOCKFILE(fp); return (c); } @@ -161,6 +170,5 @@ ungetc(c, fp) fp->_ubuf[sizeof(fp->_ubuf) - 1] = c; fp->_p = &fp->_ubuf[sizeof(fp->_ubuf) - 1]; fp->_r = 1; - FUNLOCKFILE(fp); return (c); } diff --git a/lib/libc/stdio/vasprintf.c b/lib/libc/stdio/vasprintf.c index 37fb0fd..98180cb 100644 --- a/lib/libc/stdio/vasprintf.c +++ b/lib/libc/stdio/vasprintf.c @@ -34,6 +34,7 @@ static char rcsid[] = "$FreeBSD$"; #include <stdio.h> #include <stdlib.h> #include <errno.h> +#include "local.h" int vasprintf(str, fmt, ap) @@ -53,7 +54,7 @@ vasprintf(str, fmt, ap) return (-1); } f._bf._size = f._w = 127; /* Leave room for the NULL */ - ret = vfprintf(&f, fmt, ap); + ret = __vfprintf(&f, fmt, ap); *f._p = '\0'; f._bf._base = reallocf(f._bf._base, f._bf._size + 1); if (f._bf._base == NULL) { diff --git a/lib/libc/stdio/vfprintf.c b/lib/libc/stdio/vfprintf.c index f8eb9ca..fff9aa8 100644 --- a/lib/libc/stdio/vfprintf.c +++ b/lib/libc/stdio/vfprintf.c @@ -48,6 +48,7 @@ static const char rcsid[] = * This code is large and complicated... */ +#include "namespace.h" #include <sys/types.h> #include <limits.h> @@ -60,10 +61,11 @@ static const char rcsid[] = #else #include <varargs.h> #endif +#include "un-namespace.h" +#include "libc_private.h" #include "local.h" #include "fvwrite.h" -#include "libc_private.h" /* Define FLOATING_POINT to get floating point. */ #define FLOATING_POINT @@ -80,11 +82,9 @@ static void __grow_type_table __P((int, unsigned char **, int *)); * then reset it so that it can be reused. */ static int -__sprint(fp, uio) - FILE *fp; - register struct __suio *uio; +__sprint(FILE *fp, struct __suio *uio) { - register int err; + int err; if (uio->uio_resid == 0) { uio->uio_iovcnt = 0; @@ -102,10 +102,7 @@ __sprint(fp, uio) * worries about ungetc buffers and so forth. */ static int -__sbprintf(fp, fmt, ap) - register FILE *fp; - const char *fmt; - va_list ap; +__sbprintf(FILE *fp, const char *fmt, va_list ap) { int ret; FILE fake; @@ -123,8 +120,8 @@ __sbprintf(fp, fmt, ap) fake._lbfsize = 0; /* not actually used, but Just In Case */ /* do the work, then copy any error status */ - ret = vfprintf(&fake, fmt, ap); - if (ret >= 0 && fflush(&fake)) + ret = __vfprintf(&fake, fmt, ap); + if (ret >= 0 && __fflush(&fake)) ret = EOF; if (fake._flags & __SERR) fp->_flags |= __SERR; @@ -145,11 +142,7 @@ __sbprintf(fp, fmt, ap) * use the given digits. */ static char * -__ultoa(val, endp, base, octzero, xdigs) - register u_long val; - char *endp; - int base, octzero; - char *xdigs; +__ultoa(u_long val, char *endp, int base, int octzero, char *xdigs) { register char *cp = endp; register long sval; @@ -205,14 +198,10 @@ __ultoa(val, endp, base, octzero, xdigs) /* Identical to __ultoa, but for quads. */ static char * -__uqtoa(val, endp, base, octzero, xdigs) - register u_quad_t val; - char *endp; - int base, octzero; - char *xdigs; +__uqtoa(u_quad_t val, char *endp, int base, int octzero, char *xdigs) { - register char *cp = endp; - register quad_t sval; + char *cp = endp; + quad_t sval; /* quick test for small values; __ultoa is typically much faster */ /* (perhaps instead we should run until small, then call __ultoa?) */ @@ -257,6 +246,20 @@ __uqtoa(val, endp, base, octzero, xdigs) return (cp); } +/* + * MT-safe version + */ +int +vfprintf(FILE *fp, const char *fmt0, va_list ap) +{ + int ret; + + FLOCKFILE(fp); + ret = __vfprintf(fp, fmt0, ap); + FUNLOCKFILE(fp); + return (ret); +} + #ifdef FLOATING_POINT #include <math.h> #include "floatio.h" @@ -287,18 +290,18 @@ static int exponent __P((char *, int, int)); #define SHORTINT 0x040 /* short integer */ #define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ #define FPT 0x100 /* Floating point number */ +/* + * Non-MT-safe version + */ int -vfprintf(fp, fmt0, ap) - FILE *fp; - const char *fmt0; - va_list ap; +__vfprintf(FILE *fp, const char *fmt0, va_list ap) { - register char *fmt; /* format string */ - register int ch; /* character from fmt */ - register int n, n2; /* handy integer (short term usage) */ - register char *cp; /* handy char pointer (short term usage) */ - register struct __siov *iovp;/* for PRINT macro */ - register int flags; /* flags as above */ + char *fmt; /* format string */ + int ch; /* character from fmt */ + int n, n2; /* handy integer (short term usage) */ + char *cp; /* handy char pointer (short term usage) */ + struct __siov *iovp; /* for PRINT macro */ + int flags; /* flags as above */ int ret; /* return value accumulator */ int width; /* width from format (%8d), or 0 */ int prec; /* precision from format (%.3d), or -1 */ @@ -418,19 +421,14 @@ vfprintf(fp, fmt0, ap) } - FLOCKFILE(fp); /* sorry, fprintf(read_only_file, "") returns EOF, not 0 */ - if (cantwrite(fp)) { - FUNLOCKFILE(fp); + if (cantwrite(fp)) return (EOF); - } /* optimise fprintf(stderr) (and other unbuffered Unix files) */ if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) && - fp->_file >= 0) { - FUNLOCKFILE(fp); + fp->_file >= 0) return (__sbprintf(fp, fmt0, ap)); - } fmt = (char *)fmt0; argtable = NULL; @@ -867,7 +865,6 @@ done: error: if (__sferror(fp)) ret = EOF; - FUNLOCKFILE(fp); if ((argtable != NULL) && (argtable != statargtable)) free (argtable); return (ret); @@ -902,16 +899,13 @@ error: * It will be replaces with a malloc-ed one if it overflows. */ static void -__find_arguments (fmt0, ap, argtable) - const char *fmt0; - va_list ap; - void ***argtable; +__find_arguments (const char *fmt0, va_list ap, void ***argtable) { - register char *fmt; /* format string */ - register int ch; /* character from fmt */ - register int n, n2; /* handy integer (short term usage) */ - register char *cp; /* handy char pointer (short term usage) */ - register int flags; /* flags as above */ + char *fmt; /* format string */ + int ch; /* character from fmt */ + int n, n2; /* handy integer (short term usage) */ + char *cp; /* handy char pointer (short term usage) */ + int flags; /* flags as above */ int width; /* width from format (%8d), or 0 */ unsigned char *typetable; /* table of types */ unsigned char stattypetable [STATIC_ARG_TBL_SIZE]; @@ -1174,10 +1168,7 @@ done: * Increase the size of the type table. */ static void -__grow_type_table (nextarg, typetable, tablesize) - int nextarg; - unsigned char **typetable; - int *tablesize; +__grow_type_table (int nextarg, unsigned char **typetable, int *tablesize) { unsigned char *const oldtable = *typetable; const int oldsize = *tablesize; @@ -1206,10 +1197,8 @@ __grow_type_table (nextarg, typetable, tablesize) extern char *__dtoa __P((double, int, int, int *, int *, char **)); static char * -cvt(value, ndigits, flags, sign, decpt, ch, length) - double value; - int ndigits, flags, *decpt, ch, *length; - char *sign; +cvt(double value, int ndigits, int flags, char *sign, int *decpt, + int ch, int *length) { int mode, dsgn; char *digits, *bp, *rve; @@ -1250,11 +1239,9 @@ cvt(value, ndigits, flags, sign, decpt, ch, length) } static int -exponent(p0, exp, fmtch) - char *p0; - int exp, fmtch; +exponent(char *p0, int exp, int fmtch) { - register char *p, *t; + char *p, *t; char expbuf[MAXEXP]; p = p0; diff --git a/lib/libc/stdio/vfscanf.c b/lib/libc/stdio/vfscanf.c index 6a83216..04ce95c 100644 --- a/lib/libc/stdio/vfscanf.c +++ b/lib/libc/stdio/vfscanf.c @@ -42,6 +42,7 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> #include <stdlib.h> #include <ctype.h> @@ -51,8 +52,10 @@ static const char rcsid[] = #include <varargs.h> #endif #include <string.h> +#include "un-namespace.h" #include "collate.h" +#include "libc_private.h" #include "local.h" #define FLOATING_POINT @@ -100,21 +103,32 @@ static const char rcsid[] = static u_char *__sccl(char *, u_char *); /* - * vfscanf + * __vfscanf - MT-safe version */ int -__svfscanf(fp, fmt0, ap) - register FILE *fp; - char const *fmt0; - va_list ap; +__vfscanf(FILE *fp, char const *fmt0, va_list ap) { - register u_char *fmt = (u_char *)fmt0; - register int c; /* character from format, or conversion */ - register size_t width; /* field width, or 0 */ - register char *p; /* points into all kinds of strings */ - register int n; /* handy integer */ - register int flags; /* flags as defined above */ - register char *p0; /* saves original value of p when necessary */ + int ret; + + FLOCKFILE(fp); + ret = __svfscanf(fp, fmt0, ap); + FUNLOCKFILE(fp); + return (ret); +} + +/* + * __svfscanf - non-MT-safe version of __vfscanf + */ +int +__svfscanf(FILE *fp, char const *fmt0, va_list ap) +{ + u_char *fmt = (u_char *)fmt0; + int c; /* character from format, or conversion */ + size_t width; /* field width, or 0 */ + char *p; /* points into all kinds of strings */ + int n; /* handy integer */ + int flags; /* flags as defined above */ + char *p0; /* saves original value of p when necessary */ int nassigned; /* number of fields assigned */ int nconversions; /* number of conversions */ int nread; /* number of characters consumed from fp */ @@ -539,13 +553,13 @@ literal: */ if (flags & NDIGITS) { if (p > buf) - (void) ungetc(*(u_char *)--p, fp); + (void) __ungetc(*(u_char *)--p, fp); goto match_failure; } c = ((u_char *)p)[-1]; if (c == 'x' || c == 'X') { --p; - (void) ungetc(c, fp); + (void) __ungetc(c, fp); } if ((flags & SUPPRESS) == 0) { u_quad_t res; @@ -635,16 +649,16 @@ literal: if (flags & EXPOK) { /* no digits at all */ while (p > buf) - ungetc(*(u_char *)--p, fp); + __ungetc(*(u_char *)--p, fp); goto match_failure; } /* just a bad exponent (e and maybe sign) */ c = *(u_char *)--p; if (c != 'e' && c != 'E') { - (void) ungetc(c, fp);/* sign */ + (void) __ungetc(c, fp);/* sign */ c = *(u_char *)--p; } - (void) ungetc(c, fp); + (void) __ungetc(c, fp); } if ((flags & SUPPRESS) == 0) { double res; diff --git a/lib/libc/stdio/vscanf.c b/lib/libc/stdio/vscanf.c index 53fb362..64541c8 100644 --- a/lib/libc/stdio/vscanf.c +++ b/lib/libc/stdio/vscanf.c @@ -42,7 +42,9 @@ static const char rcsid[] = "$FreeBSD$"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdio.h> +#include "un-namespace.h" #include "libc_private.h" int diff --git a/lib/libc/stdio/vsnprintf.c b/lib/libc/stdio/vsnprintf.c index b8e4c8c..b301b08 100644 --- a/lib/libc/stdio/vsnprintf.c +++ b/lib/libc/stdio/vsnprintf.c @@ -44,6 +44,7 @@ static const char rcsid[] = #include <limits.h> #include <stdio.h> +#include "local.h" int vsnprintf(str, n, fmt, ap) @@ -65,7 +66,7 @@ vsnprintf(str, n, fmt, ap) f._flags = __SWR | __SSTR; f._bf._base = f._p = (unsigned char *)str; f._bf._size = f._w = n; - ret = vfprintf(&f, fmt, ap); + ret = __vfprintf(&f, fmt, ap); if (on > 0) *f._p = '\0'; return (ret); diff --git a/lib/libc/stdio/vsprintf.c b/lib/libc/stdio/vsprintf.c index d357af0..dbfd339 100644 --- a/lib/libc/stdio/vsprintf.c +++ b/lib/libc/stdio/vsprintf.c @@ -44,6 +44,7 @@ static const char rcsid[] = #include <stdio.h> #include <limits.h> +#include "local.h" int vsprintf(str, fmt, ap) @@ -58,7 +59,7 @@ vsprintf(str, fmt, ap) f._flags = __SWR | __SSTR; f._bf._base = f._p = (unsigned char *)str; f._bf._size = f._w = INT_MAX; - ret = vfprintf(&f, fmt, ap); + ret = __vfprintf(&f, fmt, ap); *f._p = 0; return (ret); } diff --git a/lib/libc/stdio/wbuf.c b/lib/libc/stdio/wbuf.c index 847699a..54da709 100644 --- a/lib/libc/stdio/wbuf.c +++ b/lib/libc/stdio/wbuf.c @@ -49,6 +49,8 @@ static const char rcsid[] = * Write the given character into the (probably full) buffer for * the given file. Flush the buffer out if it is or becomes full, * or if c=='\n' and the file is line buffered. + * + * Non-MT-safe */ int __swbuf(c, fp) @@ -80,14 +82,14 @@ __swbuf(c, fp) */ n = fp->_p - fp->_bf._base; if (n >= fp->_bf._size) { - if (fflush(fp)) + if (__fflush(fp)) return (EOF); n = 0; } fp->_w--; *fp->_p++ = c; if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n')) - if (fflush(fp)) + if (__fflush(fp)) return (EOF); return (c); } diff --git a/lib/libc/stdlib/abort.c b/lib/libc/stdlib/abort.c index b6b4be9..0b85182 100644 --- a/lib/libc/stdlib/abort.c +++ b/lib/libc/stdlib/abort.c @@ -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) @@ -39,17 +41,18 @@ static char sccsid[] = "@(#)abort.c 8.1 (Berkeley) 6/4/93"; #include <stdlib.h> #include <stddef.h> #include <unistd.h> -#ifdef _THREAD_SAFE #include <pthread.h> -#include "pthread_private.h" -#endif void (*__cleanup)(); +extern int __sys_sigprocmask(int, const sigset_t *, sigset_t *); +extern int __sys_sigaction(int, const struct sigaction *, + struct sigaction *); + void abort() { - sigset_t mask; + struct sigaction act; /* * POSIX requires we flush stdio buffers on abort @@ -57,29 +60,25 @@ abort() if (__cleanup) (*__cleanup)(); - sigfillset(&mask); + sigfillset(&act.sa_mask); /* * don't block SIGABRT to give any handler a chance; we ignore * any errors -- X311J doesn't allow abort to return anyway. */ - sigdelset(&mask, SIGABRT); -#ifdef _THREAD_SAFE - (void) _thread_sys_sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); -#else - (void)sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); -#endif + sigdelset(&act.sa_mask, SIGABRT); + (void)__sys_sigprocmask(SIG_SETMASK, &act.sa_mask, NULL); (void)kill(getpid(), SIGABRT); /* * if SIGABRT ignored, or caught and the handler returns, do * it again, only harder. */ - (void)signal(SIGABRT, SIG_DFL); -#ifdef _THREAD_SAFE - (void) _thread_sys_sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); -#else - (void)sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); -#endif + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigfillset(&act.sa_mask); + (void)__sys_sigaction(SIGABRT, &act, NULL); + sigdelset(&act.sa_mask, SIGABRT); + (void)__sys_sigprocmask(SIG_SETMASK, &act.sa_mask, NULL); (void)kill(getpid(), SIGABRT); exit(1); } diff --git a/lib/libc/stdlib/exit.c b/lib/libc/stdlib/exit.c index b0f6d3a..32f51d4 100644 --- a/lib/libc/stdlib/exit.c +++ b/lib/libc/stdlib/exit.c @@ -29,14 +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[] = "@(#)exit.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <stdlib.h> #include <unistd.h> +#include "un-namespace.h" #include "atexit.h" void (*__cleanup)(); @@ -60,11 +64,10 @@ exit(status) register struct atexit *p; register int n; -#ifdef _THREAD_SAFE - extern int _thread_autoinit_dummy_decl; /* Ensure that the auto-initialization routine is linked in: */ + extern int _thread_autoinit_dummy_decl; + _thread_autoinit_dummy_decl = 1; -#endif for (p = __atexit; p; p = p->next) for (n = p->ind; --n >= 0;) diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index 91236df..bf6a495 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -42,6 +42,7 @@ * */ +#include "namespace.h" #if defined(__FreeBSD__) # if defined(__i386__) # define malloc_pageshift 12U @@ -97,6 +98,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "un-namespace.h" /* * This structure describes a page worth of chunks. diff --git a/lib/libc/stdlib/random.c b/lib/libc/stdlib/random.c index e8e8254..a271669 100644 --- a/lib/libc/stdlib/random.c +++ b/lib/libc/stdlib/random.c @@ -38,11 +38,13 @@ static char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/time.h> /* for srandomdev() */ #include <fcntl.h> /* for srandomdev() */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* for srandomdev() */ +#include "un-namespace.h" /* * random.c: diff --git a/lib/libc/stdlib/realpath.c b/lib/libc/stdlib/realpath.c index 0217dde..2bb8c89 100644 --- a/lib/libc/stdlib/realpath.c +++ b/lib/libc/stdlib/realpath.c @@ -40,6 +40,7 @@ static char sccsid[] = "@(#)realpath.c 8.1 (Berkeley) 2/16/94"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/param.h> #include <sys/stat.h> @@ -48,6 +49,7 @@ static char sccsid[] = "@(#)realpath.c 8.1 (Berkeley) 2/16/94"; #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "un-namespace.h" /* * char *realpath(const char *path, char resolved_path[MAXPATHLEN]); diff --git a/lib/libc/stdlib/system.c b/lib/libc/stdlib/system.c index c7e68ba..3b16454 100644 --- a/lib/libc/stdlib/system.c +++ b/lib/libc/stdlib/system.c @@ -37,6 +37,7 @@ static char sccsid[] = "@(#)system.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ +#include "namespace.h" #include <sys/types.h> #include <sys/wait.h> #include <signal.h> @@ -45,6 +46,8 @@ static char sccsid[] = "@(#)system.c 8.1 (Berkeley) 6/4/93"; #include <unistd.h> #include <paths.h> #include <errno.h> +#include "un-namespace.h" +#include "libc_private.h" int __system(command) @@ -65,11 +68,11 @@ __system(command) ign.sa_handler = SIG_IGN; (void)sigemptyset(&ign.sa_mask); ign.sa_flags = 0; - (void)sigaction(SIGINT, &ign, &intact); - (void)sigaction(SIGQUIT, &ign, &quitact); + (void)_sigaction(SIGINT, &ign, &intact); + (void)_sigaction(SIGQUIT, &ign, &quitact); (void)sigemptyset(&newsigblock); (void)sigaddset(&newsigblock, SIGCHLD); - (void)sigprocmask(SIG_BLOCK, &newsigblock, &oldsigblock); + (void)_sigprocmask(SIG_BLOCK, &newsigblock, &oldsigblock); switch(pid = fork()) { case -1: /* error */ break; @@ -77,9 +80,9 @@ __system(command) /* * Restore original signal dispositions and exec the command. */ - (void)sigaction(SIGINT, &intact, NULL); - (void)sigaction(SIGQUIT, &quitact, NULL); - (void)sigprocmask(SIG_SETMASK, &oldsigblock, NULL); + (void)_sigaction(SIGINT, &intact, NULL); + (void)_sigaction(SIGQUIT, &quitact, NULL); + (void)_sigprocmask(SIG_SETMASK, &oldsigblock, NULL); execl(_PATH_BSHELL, "sh", "-c", command, (char *)NULL); _exit(127); default: /* parent */ @@ -88,12 +91,11 @@ __system(command) } while (pid == -1 && errno == EINTR); break; } - (void)sigaction(SIGINT, &intact, NULL); - (void)sigaction(SIGQUIT, &quitact, NULL); - (void)sigprocmask(SIG_SETMASK, &oldsigblock, NULL); + (void)_sigaction(SIGINT, &intact, NULL); + (void)_sigaction(SIGQUIT, &quitact, NULL); + (void)_sigprocmask(SIG_SETMASK, &oldsigblock, NULL); return(pid == -1 ? -1 : pstat); } -#ifndef _THREAD_SAFE __weak_reference(__system, system); -#endif +__weak_reference(__system, _system); diff --git a/lib/libc/stdtime/asctime.c b/lib/libc/stdtime/asctime.c index 832f185..d6e02b8 100644 --- a/lib/libc/stdtime/asctime.c +++ b/lib/libc/stdtime/asctime.c @@ -1,6 +1,8 @@ /* ** This file is in the public domain, so clarified as of ** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov). +* +* $FreeBSD$ */ #ifndef lint @@ -11,7 +13,9 @@ static char elsieid[] = "@(#)asctime.c 7.7"; /*LINTLIBRARY*/ +#include "namespace.h" #include "private.h" +#include "un-namespace.h" #include "tzfile.h" /* diff --git a/lib/libc/stdtime/difftime.c b/lib/libc/stdtime/difftime.c index f178524..64a5ea2 100644 --- a/lib/libc/stdtime/difftime.c +++ b/lib/libc/stdtime/difftime.c @@ -1,6 +1,8 @@ /* ** This file is in the public domain, so clarified as of ** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov). +* +* $FreeBSD$ */ #ifndef lint @@ -11,7 +13,9 @@ static char elsieid[] = "@(#)difftime.c 7.7"; /*LINTLIBRARY*/ +#include "namespace.h" #include "private.h" +#include "un-namespace.h" /* ** Algorithm courtesy Paul Eggert (eggert@twinsun.com). diff --git a/lib/libc/stdtime/localtime.c b/lib/libc/stdtime/localtime.c index 84a4ca9..e336414 100644 --- a/lib/libc/stdtime/localtime.c +++ b/lib/libc/stdtime/localtime.c @@ -19,16 +19,20 @@ static char elsieid[] = "@(#)localtime.c 7.57"; /*LINTLIBRARY*/ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> - +#include <fcntl.h> +#include <pthread.h> #include "private.h" +#include "un-namespace.h" + #include "tzfile.h" -#include "fcntl.h" -#ifdef _THREAD_SAFE -#include <pthread.h> -#include "pthread_private.h" -#endif + +#include "libc_private.h" + +#define _MUTEX_LOCK(x) if (__isthreaded) _pthread_mutex_lock(x) +#define _MUTEX_UNLOCK(x) if (__isthreaded) _pthread_mutex_unlock(x) /* ** SunOS 4.1.1 headers lack O_BINARY. @@ -172,12 +176,8 @@ static struct state gmtmem; static char lcl_TZname[TZ_STRLEN_MAX + 1]; static int lcl_is_set; static int gmt_is_set; -#ifdef _THREAD_SAFE -static struct pthread_mutex _lcl_mutexd = PTHREAD_MUTEX_STATIC_INITIALIZER; -static struct pthread_mutex _gmt_mutexd = PTHREAD_MUTEX_STATIC_INITIALIZER; -static pthread_mutex_t lcl_mutex = &_lcl_mutexd; -static pthread_mutex_t gmt_mutex = &_gmt_mutexd; -#endif +static pthread_mutex_t lcl_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t gmt_mutex = PTHREAD_MUTEX_INITIALIZER; char * tzname[2] = { wildabbr, @@ -316,7 +316,7 @@ register struct state * const sp; return -1; if ((fid = _open(name, OPEN_MODE)) == -1) return -1; - if ((fstat(fid, &stab) < 0) || !S_ISREG(stab.st_mode)) + if ((_fstat(fid, &stab) < 0) || !S_ISREG(stab.st_mode)) return -1; } { @@ -929,20 +929,8 @@ struct state * const sp; (void) tzparse(gmt, sp, TRUE); } -#ifndef STD_INSPIRED -/* -** A non-static declaration of tzsetwall in a system header file -** may cause a warning about this upcoming static declaration... -*/ -static -#endif /* !defined STD_INSPIRED */ -#ifdef _THREAD_SAFE -void -tzsetwall_basic P((void)) -#else -void -tzsetwall P((void)) -#endif +static void +tzsetwall_basic(void) { if (lcl_is_set < 0) return; @@ -962,23 +950,16 @@ tzsetwall P((void)) settzname(); } -#ifdef _THREAD_SAFE void tzsetwall P((void)) { - pthread_mutex_lock(&lcl_mutex); + _MUTEX_LOCK(&lcl_mutex); tzsetwall_basic(); - pthread_mutex_unlock(&lcl_mutex); + _MUTEX_UNLOCK(&lcl_mutex); } -#endif -#ifdef _THREAD_SAFE static void -tzset_basic P((void)) -#else -void -tzset P((void)) -#endif +tzset_basic(void) { register const char * name; @@ -1018,15 +999,13 @@ tzset P((void)) settzname(); } -#ifdef _THREAD_SAFE void tzset P((void)) { - pthread_mutex_lock(&lcl_mutex); + _MUTEX_LOCK(&lcl_mutex); tzset_basic(); - pthread_mutex_unlock(&lcl_mutex); + _MUTEX_UNLOCK(&lcl_mutex); } -#endif /* ** The easy way to behave "as if no library function calls" localtime @@ -1089,14 +1068,10 @@ localtime_r(timep, p_tm) const time_t * const timep; struct tm *p_tm; { -#ifdef _THREAD_SAFE - pthread_mutex_lock(&lcl_mutex); -#endif + _MUTEX_LOCK(&lcl_mutex); tzset(); localsub(timep, 0L, p_tm); -#ifdef _THREAD_SAFE - pthread_mutex_unlock(&lcl_mutex); -#endif + _MUTEX_UNLOCK(&lcl_mutex); return(p_tm); } @@ -1104,36 +1079,36 @@ struct tm * localtime(timep) const time_t * const timep; { -#ifdef _THREAD_SAFE - static struct pthread_mutex _localtime_mutex = PTHREAD_MUTEX_STATIC_INITIALIZER; - static pthread_mutex_t localtime_mutex = &_localtime_mutex; + static pthread_mutex_t localtime_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_key_t localtime_key = -1; struct tm *p_tm; - pthread_mutex_lock(&localtime_mutex); - if (localtime_key < 0) { - if (pthread_key_create(&localtime_key, free) < 0) { - pthread_mutex_unlock(&localtime_mutex); - return(NULL); + if (__isthreaded != 0) { + _pthread_mutex_lock(&localtime_mutex); + if (localtime_key < 0) { + if (_pthread_key_create(&localtime_key, free) < 0) { + _pthread_mutex_unlock(&localtime_mutex); + return(NULL); + } } + _pthread_mutex_unlock(&localtime_mutex); + p_tm = _pthread_getspecific(localtime_key); + if (p_tm == NULL) { + if ((p_tm = (struct tm *)malloc(sizeof(struct tm))) + == NULL) + return(NULL); + _pthread_setspecific(localtime_key, p_tm); + } + _pthread_mutex_lock(&lcl_mutex); + tzset(); + localsub(timep, 0L, p_tm); + _pthread_mutex_unlock(&lcl_mutex); + return(p_tm); + } else { + tzset(); + localsub(timep, 0L, &tm); + return(&tm); } - pthread_mutex_unlock(&localtime_mutex); - p_tm = pthread_getspecific(localtime_key); - if (p_tm == NULL) { - if ((p_tm = (struct tm *)malloc(sizeof(struct tm))) == NULL) - return(NULL); - pthread_setspecific(localtime_key, p_tm); - } - pthread_mutex_lock(&lcl_mutex); - tzset(); - localsub(timep, 0L, p_tm); - pthread_mutex_unlock(&lcl_mutex); - return p_tm; -#else - tzset(); - localsub(timep, 0L, &tm); - return &tm; -#endif } /* @@ -1146,9 +1121,7 @@ const time_t * const timep; const long offset; struct tm * const tmp; { -#ifdef _THREAD_SAFE - pthread_mutex_lock(&gmt_mutex); -#endif + _MUTEX_LOCK(&gmt_mutex); if (!gmt_is_set) { gmt_is_set = TRUE; #ifdef ALL_STATE @@ -1157,9 +1130,7 @@ struct tm * const tmp; #endif /* defined ALL_STATE */ gmtload(gmtptr); } -#ifdef _THREAD_SAFE - pthread_mutex_unlock(&gmt_mutex); -#endif + _MUTEX_UNLOCK(&gmt_mutex); timesub(timep, offset, gmtptr, tmp); #ifdef TM_ZONE /* @@ -1186,36 +1157,37 @@ struct tm * gmtime(timep) const time_t * const timep; { -#ifdef _THREAD_SAFE - static struct pthread_mutex _gmtime_mutex = PTHREAD_MUTEX_STATIC_INITIALIZER; - static pthread_mutex_t gmtime_mutex = &_gmtime_mutex; + static pthread_mutex_t gmtime_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_key_t gmtime_key = -1; struct tm *p_tm; - pthread_mutex_lock(&gmtime_mutex); - if (gmtime_key < 0) { - if (pthread_key_create(&gmtime_key, free) < 0) { - pthread_mutex_unlock(&gmtime_mutex); - return(NULL); + if (__isthreaded != 0) { + _pthread_mutex_lock(&gmtime_mutex); + if (gmtime_key < 0) { + if (_pthread_key_create(&gmtime_key, free) < 0) { + _pthread_mutex_unlock(&gmtime_mutex); + return(NULL); + } } - } - pthread_mutex_unlock(&gmtime_mutex); - /* - * Changed to follow draft 4 pthreads standard, which - * is what BSD currently has. - */ - if ((p_tm = pthread_getspecific(gmtime_key)) == NULL) { - if ((p_tm = (struct tm *)malloc(sizeof(struct tm))) == NULL) { - return(NULL); + _pthread_mutex_unlock(&gmtime_mutex); + /* + * Changed to follow POSIX.1 threads standard, which + * is what BSD currently has. + */ + if ((p_tm = _pthread_getspecific(gmtime_key)) == NULL) { + if ((p_tm = (struct tm *)malloc(sizeof(struct tm))) + == NULL) { + return(NULL); + } + _pthread_setspecific(gmtime_key, p_tm); } - pthread_setspecific(gmtime_key, p_tm); + gmtsub(timep, 0L, p_tm); + return(p_tm); + } + else { + gmtsub(timep, 0L, &tm); + return(&tm); } - gmtsub(timep, 0L, p_tm); - return(p_tm); -#else - gmtsub(timep, 0L, &tm); - return &tm; -#endif } struct tm * @@ -1635,14 +1607,10 @@ mktime(tmp) struct tm * const tmp; { time_t mktime_return_value; -#ifdef _THREAD_SAFE - pthread_mutex_lock(&lcl_mutex); -#endif + _MUTEX_LOCK(&lcl_mutex); tzset(); mktime_return_value = time1(tmp, localsub, 0L); -#ifdef _THREAD_SAFE - pthread_mutex_unlock(&lcl_mutex); -#endif + _MUTEX_UNLOCK(&lcl_mutex); return(mktime_return_value); } diff --git a/lib/libc/stdtime/strftime.c b/lib/libc/stdtime/strftime.c index cd506c1..83bddc9 100644 --- a/lib/libc/stdtime/strftime.c +++ b/lib/libc/stdtime/strftime.c @@ -30,6 +30,7 @@ static const char elsieid[] = "@(#)strftime.c 7.38"; #endif /* !defined NOID */ #endif /* !defined lint */ +#include "namespace.h" #include "private.h" #ifndef LIBC_SCCS @@ -41,6 +42,7 @@ static const char sccsid[] = "@(#)strftime.c 5.4 (Berkeley) 3/14/89"; #include "tzfile.h" #include <fcntl.h> #include <sys/stat.h> +#include "un-namespace.h" #include "timelocal.h" static char * _add P((const char *, char *, const char *)); diff --git a/lib/libc/stdtime/strptime.c b/lib/libc/stdtime/strptime.c index ca4dcef..88d04ce 100644 --- a/lib/libc/stdtime/strptime.c +++ b/lib/libc/stdtime/strptime.c @@ -64,21 +64,18 @@ static char sccsid[] = "@(#)strptime.c 0.1 (Powerdog) 94/03/27"; #endif /* !defined NOID */ #endif /* not lint */ +#include "namespace.h" #include <time.h> #include <ctype.h> #include <string.h> -#ifdef _THREAD_SAFE #include <pthread.h> -#include "pthread_private.h" -#endif +#include "un-namespace.h" +#include "libc_private.h" #include "timelocal.h" static char * _strptime(const char *, const char *, struct tm *); -#ifdef _THREAD_SAFE -static struct pthread_mutex _gotgmt_mutexd = PTHREAD_MUTEX_STATIC_INITIALIZER; -static pthread_mutex_t gotgmt_mutex = &_gotgmt_mutexd; -#endif +static pthread_mutex_t gotgmt_mutex = PTHREAD_MUTEX_INITIALIZER; static int got_GMT; #define asizeof(a) (sizeof (a) / sizeof ((a)[0])) @@ -524,21 +521,19 @@ strptime(const char *buf, const char *fmt, struct tm *tm) { char *ret; -#ifdef _THREAD_SAFE - pthread_mutex_lock(&gotgmt_mutex); -#endif + if (__isthreaded) + _pthread_mutex_lock(&gotgmt_mutex); got_GMT = 0; ret = _strptime(buf, fmt, tm); if (ret && got_GMT) { time_t t = timegm(tm); - localtime_r(&t, tm); + localtime_r(&t, tm); got_GMT = 0; } -#ifdef _THREAD_SAFE - pthread_mutex_unlock(&gotgmt_mutex); -#endif + if (__isthreaded) + _pthread_mutex_unlock(&gotgmt_mutex); return ret; } diff --git a/lib/libc/stdtime/timelocal.c b/lib/libc/stdtime/timelocal.c index 3a810ed..c39b956 100644 --- a/lib/libc/stdtime/timelocal.c +++ b/lib/libc/stdtime/timelocal.c @@ -26,6 +26,7 @@ * $FreeBSD$ */ +#include "namespace.h" #include <sys/types.h> #include <sys/stat.h> #include <sys/syslimits.h> @@ -34,6 +35,9 @@ #include <stddef.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> +#include "un-namespace.h" + #include "setlocale.h" #include "timelocal.h" @@ -158,7 +162,7 @@ __time_load_locale(const char *name) fd = _open(filename, O_RDONLY); if (fd < 0) goto no_locale; - if (fstat(fd, &st) != 0) + if (_fstat(fd, &st) != 0) goto bad_locale; if (st.st_size <= 0) goto bad_locale; diff --git a/lib/libc/sys/__error.c b/lib/libc/sys/__error.c index 9b0c25f..8c14b0f 100644 --- a/lib/libc/sys/__error.c +++ b/lib/libc/sys/__error.c @@ -29,6 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * + * $FreeBSD$ */ #include <sys/cdefs.h> @@ -41,7 +42,8 @@ extern int errno; */ #pragma weak __error=__error_unthreaded -int * __error_unthreaded() +int * +__error_unthreaded() { return(&errno); } diff --git a/lib/libc/sys/ftruncate.c b/lib/libc/sys/ftruncate.c index 9d7d5fb..da81b43 100644 --- a/lib/libc/sys/ftruncate.c +++ b/lib/libc/sys/ftruncate.c @@ -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,10 +40,6 @@ static char sccsid[] = "@(#)ftruncate.c 8.1 (Berkeley) 6/17/93"; #include <sys/types.h> #include <sys/syscall.h> #include <unistd.h> -#ifdef _THREAD_SAFE -#include <pthread.h> -#include "pthread_private.h" -#endif /* * This function provides 64-bit offset padding that @@ -53,16 +51,5 @@ ftruncate(fd, length) off_t length; { -#ifdef _THREAD_SAFE - int retval; - if (_FD_LOCK(fd, FD_RDWR, NULL) != 0) { - retval = -1; - } else { - retval = __syscall((quad_t)SYS_ftruncate, fd, 0, length); - _FD_UNLOCK(fd, FD_RDWR); - } - return(retval); -#else return(__syscall((quad_t)SYS_ftruncate, fd, 0, length)); -#endif } diff --git a/lib/libc/sys/lseek.c b/lib/libc/sys/lseek.c index 284885f..230940c 100644 --- a/lib/libc/sys/lseek.c +++ b/lib/libc/sys/lseek.c @@ -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,10 +40,6 @@ static char sccsid[] = "@(#)lseek.c 8.1 (Berkeley) 6/17/93"; #include <sys/types.h> #include <sys/syscall.h> #include <unistd.h> -#ifdef _THREAD_SAFE -#include <pthread.h> -#include "pthread_private.h" -#endif /* * This function provides 64-bit offset padding that @@ -53,17 +51,5 @@ lseek(fd, offset, whence) off_t offset; int whence; { -#ifdef _THREAD_SAFE - off_t offs; - if (_FD_LOCK(fd, FD_RDWR, NULL) != 0) { - offs = -1; - } else { - offs = __syscall((quad_t) SYS_lseek,fd, 0, offset, whence); - _FD_UNLOCK(fd, FD_RDWR); - } - return(offs); - -#else return(__syscall((quad_t)SYS_lseek, fd, 0, offset, whence)); -#endif } diff --git a/lib/libc/yp/yplib.c b/lib/libc/yp/yplib.c index 5c72573..e1755af 100644 --- a/lib/libc/yp/yplib.c +++ b/lib/libc/yp/yplib.c @@ -32,6 +32,7 @@ static char *rcsid = "$FreeBSD$"; #endif +#include "namespace.h" #include <sys/param.h> #include <sys/types.h> #include <sys/socket.h> @@ -45,6 +46,8 @@ static char *rcsid = "$FreeBSD$"; #include <rpc/rpc.h> #include <rpc/xdr.h> #include <rpcsvc/yp.h> +#include "un-namespace.h" +#include "libc_private.h" /* * We have to define these here due to clashes between yp_prot.h and @@ -337,19 +340,19 @@ _yp_dobind(dom, ypdb) new = 1; } else { /* Check the socket -- may have been hosed by the caller. */ - if (getsockname(ysd->dom_socket, (struct sockaddr *)&check, + if (_getsockname(ysd->dom_socket, (struct sockaddr *)&check, &checklen) == -1 || check.sin_family != AF_INET || check.sin_port != ysd->dom_local_port) { /* Socket became bogus somehow... need to rebind. */ int save, sock; sock = ysd->dom_socket; - save = dup(ysd->dom_socket); + save = _dup(ysd->dom_socket); if (ysd->dom_client != NULL) clnt_destroy(ysd->dom_client); ysd->dom_vers = 0; ysd->dom_client = NULL; - sock = dup2(save, sock); + sock = _dup2(save, sock); _close(save); } } @@ -379,7 +382,7 @@ again: _close(fd); goto skipit; } - if( flock(fd, LOCK_EX|LOCK_NB) == -1 && errno==EWOULDBLOCK) { + if(_flock(fd, LOCK_EX|LOCK_NB) == -1 && errno==EWOULDBLOCK) { struct iovec iov[2]; struct ypbind_resp ybr; u_short ypb_port; @@ -389,7 +392,7 @@ again: iov[1].iov_base = (caddr_t)&ybr; iov[1].iov_len = sizeof ybr; - r = readv(fd, iov, 2); + r = _readv(fd, iov, 2); if(r != iov[0].iov_len + iov[1].iov_len) { _close(fd); ysd->dom_vers = -1; @@ -532,9 +535,9 @@ gotit: */ checklen = sizeof(struct sockaddr_in); bzero((char *)&check, checklen); - bind(ysd->dom_socket, (struct sockaddr *)&check, checklen); + _bind(ysd->dom_socket, (struct sockaddr *)&check, checklen); check.sin_family = AF_INET; - if (!getsockname(ysd->dom_socket, + if (!_getsockname(ysd->dom_socket, (struct sockaddr *)&check, &checklen)) { ysd->dom_local_port = check.sin_port; } else { @@ -564,15 +567,15 @@ _yp_unbind(ypb) if (ypb->dom_client != NULL) { /* Check the socket -- may have been hosed by the caller. */ - if (getsockname(ypb->dom_socket, (struct sockaddr *)&check, + if (_getsockname(ypb->dom_socket, (struct sockaddr *)&check, &checklen) == -1 || check.sin_family != AF_INET || check.sin_port != ypb->dom_local_port) { int save, sock; sock = ypb->dom_socket; - save = dup(ypb->dom_socket); + save = _dup(ypb->dom_socket); clnt_destroy(ypb->dom_client); - sock = dup2(save, sock); + sock = _dup2(save, sock); _close(save); } else clnt_destroy(ypb->dom_client); |