thr_syscalls.c revision 164583
1112918Sjeff/* 2144518Sdavidxu * Copyright (C) 2005 David Xu <davidxu@freebsd.org>. 3144518Sdavidxu * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org>. 4144518Sdavidxu * Copyright (C) 2000 Jason Evans <jasone@freebsd.org>. 5112918Sjeff * All rights reserved. 6112918Sjeff * 7112918Sjeff * Redistribution and use in source and binary forms, with or without 8112918Sjeff * modification, are permitted provided that the following conditions 9112918Sjeff * are met: 10112918Sjeff * 1. Redistributions of source code must retain the above copyright 11112918Sjeff * notice(s), this list of conditions and the following disclaimer as 12112918Sjeff * the first lines of this file unmodified other than the possible 13112918Sjeff * addition of one or more copyright notices. 14112918Sjeff * 2. Redistributions in binary form must reproduce the above copyright 15112918Sjeff * notice(s), this list of conditions and the following disclaimer in 16112918Sjeff * the documentation and/or other materials provided with the 17112918Sjeff * distribution. 18112918Sjeff * 19112918Sjeff * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 20112918Sjeff * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22112918Sjeff * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE 23112918Sjeff * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24112918Sjeff * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25112918Sjeff * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 26112918Sjeff * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27112918Sjeff * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 28112918Sjeff * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29112918Sjeff * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30112918Sjeff * 31112918Sjeff * $FreeBSD: head/lib/libthr/thread/thr_syscalls.c 164583 2006-11-24 09:57:38Z davidxu $ 32112918Sjeff */ 33112918Sjeff 34112918Sjeff/* 35112918Sjeff * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> 36112918Sjeff * All rights reserved. 37112918Sjeff * 38112918Sjeff * Redistribution and use in source and binary forms, with or without 39112918Sjeff * modification, are permitted provided that the following conditions 40112918Sjeff * are met: 41112918Sjeff * 1. Redistributions of source code must retain the above copyright 42112918Sjeff * notice, this list of conditions and the following disclaimer. 43112918Sjeff * 2. Redistributions in binary form must reproduce the above copyright 44112918Sjeff * notice, this list of conditions and the following disclaimer in the 45112918Sjeff * documentation and/or other materials provided with the distribution. 46112918Sjeff * 3. All advertising materials mentioning features or use of this software 47112918Sjeff * must display the following acknowledgement: 48112918Sjeff * This product includes software developed by John Birrell. 49112918Sjeff * 4. Neither the name of the author nor the names of any co-contributors 50112918Sjeff * may be used to endorse or promote products derived from this software 51112918Sjeff * without specific prior written permission. 52112918Sjeff * 53112918Sjeff * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND 54112918Sjeff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 55112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 56112918Sjeff * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 57112918Sjeff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 58112918Sjeff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 59112918Sjeff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 60112918Sjeff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 61112918Sjeff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 62112918Sjeff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 63112918Sjeff * SUCH DAMAGE. 64112918Sjeff * 65112918Sjeff */ 66112918Sjeff 67157457Sdavidxu#include "namespace.h" 68144518Sdavidxu#include <sys/types.h> 69112918Sjeff#include <sys/mman.h> 70112918Sjeff#include <sys/param.h> 71112918Sjeff#include <sys/select.h> 72144518Sdavidxu#include <sys/signalvar.h> 73135301Smtm#include <sys/socket.h> 74144518Sdavidxu#include <sys/stat.h> 75112918Sjeff#include <sys/time.h> 76112918Sjeff#include <sys/uio.h> 77112918Sjeff#include <sys/wait.h> 78112918Sjeff#include <aio.h> 79112918Sjeff#include <dirent.h> 80112918Sjeff#include <errno.h> 81112918Sjeff#include <fcntl.h> 82112918Sjeff#include <poll.h> 83112918Sjeff#include <signal.h> 84112918Sjeff#include <stdarg.h> 85112918Sjeff#include <stdio.h> 86112918Sjeff#include <stdlib.h> 87112918Sjeff#include <string.h> 88112918Sjeff#include <termios.h> 89112918Sjeff#include <unistd.h> 90144518Sdavidxu#include <pthread.h> 91157457Sdavidxu#include "un-namespace.h" 92112918Sjeff 93112918Sjeff#include "thr_private.h" 94112918Sjeff 95157457Sdavidxuextern int __creat(const char *, mode_t); 96157457Sdavidxuextern int __pselect(int, fd_set *, fd_set *, fd_set *, 97157457Sdavidxu const struct timespec *, const sigset_t *); 98157457Sdavidxuextern unsigned __sleep(unsigned int); 99157457Sdavidxuextern int __system(const char *); 100157457Sdavidxuextern int __tcdrain(int); 101157457Sdavidxuextern int __usleep(useconds_t); 102157457Sdavidxuextern pid_t __wait(int *); 103157457Sdavidxuextern pid_t __waitpid(pid_t, int *, int); 104157457Sdavidxuextern int __sys_aio_suspend(const struct aiocb * const[], int, 105157457Sdavidxu const struct timespec *); 106157457Sdavidxuextern int __sys_accept(int, struct sockaddr *, socklen_t *); 107157457Sdavidxuextern int __sys_connect(int, const struct sockaddr *, socklen_t); 108157457Sdavidxuextern int __sys_fsync(int); 109157457Sdavidxuextern int __sys_msync(void *, size_t, int); 110157457Sdavidxuextern int __sys_poll(struct pollfd *, unsigned, int); 111157457Sdavidxuextern ssize_t __sys_recv(int, void *, size_t, int); 112157457Sdavidxuextern ssize_t __sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); 113157457Sdavidxuextern ssize_t __sys_recvmsg(int, struct msghdr *, int); 114157457Sdavidxuextern int __sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); 115157457Sdavidxuextern int __sys_sendfile(int, int, off_t, size_t, struct sf_hdtr *, 116157457Sdavidxu off_t *, int); 117157457Sdavidxuextern ssize_t __sys_sendmsg(int, const struct msghdr *, int); 118157457Sdavidxuextern ssize_t __sys_sendto(int, const void *,size_t, int, const struct sockaddr *, socklen_t); 119157457Sdavidxuextern ssize_t __sys_readv(int, const struct iovec *, int); 120157457Sdavidxuextern pid_t __sys_wait4(pid_t, int *, int, struct rusage *); 121157457Sdavidxuextern ssize_t __sys_writev(int, const struct iovec *, int); 122115260Smtm 123157457Sdavidxuint ___creat(const char *, mode_t); 124160662Sdavidxuint ___pselect(int, fd_set *, fd_set *, fd_set *, 125160662Sdavidxu const struct timespec *, const sigset_t *); 126160662Sdavidxuunsigned ___sleep(unsigned); 127160662Sdavidxuint ___system(const char *); 128160662Sdavidxuint ___tcdrain(int); 129160662Sdavidxuint ___usleep(useconds_t useconds); 130160662Sdavidxupid_t ___wait(int *); 131160662Sdavidxupid_t ___waitpid(pid_t, int *, int); 132157457Sdavidxuint __accept(int, struct sockaddr *, socklen_t *); 133160662Sdavidxuint __aio_suspend(const struct aiocb * const iocbs[], int, 134160662Sdavidxu const struct timespec *); 135157457Sdavidxuint __close(int); 136157457Sdavidxuint __connect(int, const struct sockaddr *, socklen_t); 137157457Sdavidxuint __fcntl(int, int,...); 138157457Sdavidxuint __fsync(int); 139157457Sdavidxuint __msync(void *, size_t, int); 140157457Sdavidxuint __nanosleep(const struct timespec *, struct timespec *); 141157457Sdavidxuint __open(const char *, int,...); 142157457Sdavidxuint __poll(struct pollfd *, unsigned int, int); 143157457Sdavidxussize_t __read(int, void *buf, size_t); 144157457Sdavidxussize_t __readv(int, const struct iovec *, int); 145157457Sdavidxussize_t __recvfrom(int, void *, size_t, int f, struct sockaddr *, socklen_t *); 146157457Sdavidxussize_t __recvmsg(int, struct msghdr *, int); 147157457Sdavidxuint __select(int, fd_set *, fd_set *, fd_set *, struct timeval *); 148157457Sdavidxussize_t __sendmsg(int, const struct msghdr *, int); 149157457Sdavidxussize_t __sendto(int, const void *, size_t, int, 150157457Sdavidxu const struct sockaddr *, socklen_t); 151160662Sdavidxupid_t __wait3(int *, int, struct rusage *); 152157457Sdavidxupid_t __wait4(pid_t, int *, int, struct rusage *); 153157457Sdavidxussize_t __write(int, const void *, size_t); 154157457Sdavidxussize_t __writev(int, const struct iovec *, int); 155157457Sdavidxuint _vfork(void); 156157457Sdavidxu 157144518Sdavidxu__weak_reference(__accept, accept); 158157457Sdavidxu 159135301Smtmint 160144518Sdavidxu__accept(int s, struct sockaddr *addr, socklen_t *addrlen) 161135301Smtm{ 162144518Sdavidxu struct pthread *curthread; 163135301Smtm int ret; 164135301Smtm 165144518Sdavidxu curthread = _get_curthread(); 166164583Sdavidxu _thr_cancel_enter(curthread); 167135301Smtm ret = __sys_accept(s, addr, addrlen); 168164583Sdavidxu _thr_cancel_leave(curthread); 169144518Sdavidxu 170144518Sdavidxu return (ret); 171135301Smtm} 172135301Smtm 173160662Sdavidxu__weak_reference(__aio_suspend, aio_suspend); 174112918Sjeff 175112918Sjeffint 176160662Sdavidxu__aio_suspend(const struct aiocb * const iocbs[], int niocb, const struct 177112918Sjeff timespec *timeout) 178112918Sjeff{ 179144518Sdavidxu struct pthread *curthread = _get_curthread(); 180144518Sdavidxu int ret; 181112918Sjeff 182164583Sdavidxu _thr_cancel_enter(curthread); 183112918Sjeff ret = __sys_aio_suspend(iocbs, niocb, timeout); 184164583Sdavidxu _thr_cancel_leave(curthread); 185112918Sjeff 186144518Sdavidxu return (ret); 187112918Sjeff} 188112918Sjeff 189144518Sdavidxu__weak_reference(__close, close); 190112918Sjeff 191112918Sjeffint 192144518Sdavidxu__close(int fd) 193112918Sjeff{ 194144518Sdavidxu struct pthread *curthread = _get_curthread(); 195112918Sjeff int ret; 196112918Sjeff 197164583Sdavidxu _thr_cancel_enter(curthread); 198112918Sjeff ret = __sys_close(fd); 199164583Sdavidxu _thr_cancel_leave(curthread); 200112918Sjeff 201144518Sdavidxu return (ret); 202112918Sjeff} 203135301Smtm 204144518Sdavidxu__weak_reference(__connect, connect); 205135301Smtm 206135301Smtmint 207144518Sdavidxu__connect(int fd, const struct sockaddr *name, socklen_t namelen) 208135301Smtm{ 209144518Sdavidxu struct pthread *curthread = _get_curthread(); 210135301Smtm int ret; 211135301Smtm 212164583Sdavidxu _thr_cancel_enter(curthread); 213144518Sdavidxu ret = __sys_connect(fd, name, namelen); 214164583Sdavidxu _thr_cancel_leave(curthread); 215144518Sdavidxu 216144518Sdavidxu return (ret); 217135301Smtm} 218112918Sjeff 219144518Sdavidxu__weak_reference(___creat, creat); 220144518Sdavidxu 221112918Sjeffint 222144518Sdavidxu___creat(const char *path, mode_t mode) 223112918Sjeff{ 224144518Sdavidxu struct pthread *curthread = _get_curthread(); 225144518Sdavidxu int ret; 226112918Sjeff 227164583Sdavidxu _thr_cancel_enter(curthread); 228112918Sjeff ret = __creat(path, mode); 229164583Sdavidxu _thr_cancel_leave(curthread); 230112918Sjeff 231112918Sjeff return ret; 232112918Sjeff} 233112918Sjeff 234144518Sdavidxu__weak_reference(__fcntl, fcntl); 235112918Sjeff 236112918Sjeffint 237144518Sdavidxu__fcntl(int fd, int cmd,...) 238112918Sjeff{ 239144518Sdavidxu struct pthread *curthread = _get_curthread(); 240112918Sjeff int ret; 241112918Sjeff va_list ap; 242112918Sjeff 243164583Sdavidxu _thr_cancel_enter(curthread); 244112918Sjeff 245112918Sjeff va_start(ap, cmd); 246112918Sjeff switch (cmd) { 247144518Sdavidxu case F_DUPFD: 248144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 249144518Sdavidxu break; 250144518Sdavidxu case F_SETFD: 251144518Sdavidxu case F_SETFL: 252144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 253144518Sdavidxu break; 254144518Sdavidxu case F_GETFD: 255144518Sdavidxu case F_GETFL: 256144518Sdavidxu ret = __sys_fcntl(fd, cmd); 257144518Sdavidxu break; 258144518Sdavidxu default: 259144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, void *)); 260112918Sjeff } 261112918Sjeff va_end(ap); 262112918Sjeff 263164583Sdavidxu _thr_cancel_leave(curthread); 264112918Sjeff 265144518Sdavidxu return (ret); 266112918Sjeff} 267112918Sjeff 268144518Sdavidxu__weak_reference(__fsync, fsync); 269131181Smtm 270131181Smtmint 271144518Sdavidxu__fsync(int fd) 272131181Smtm{ 273144518Sdavidxu struct pthread *curthread = _get_curthread(); 274131181Smtm int ret; 275131181Smtm 276164583Sdavidxu _thr_cancel_enter(curthread); 277112918Sjeff ret = __sys_fsync(fd); 278164583Sdavidxu _thr_cancel_leave(curthread); 279112918Sjeff 280144518Sdavidxu return (ret); 281112918Sjeff} 282112918Sjeff 283144518Sdavidxu__weak_reference(__msync, msync); 284135301Smtm 285135301Smtmint 286144518Sdavidxu__msync(void *addr, size_t len, int flags) 287135301Smtm{ 288144518Sdavidxu struct pthread *curthread = _get_curthread(); 289112918Sjeff int ret; 290112918Sjeff 291164583Sdavidxu _thr_cancel_enter(curthread); 292112918Sjeff ret = __sys_msync(addr, len, flags); 293164583Sdavidxu _thr_cancel_leave(curthread); 294112918Sjeff 295112918Sjeff return ret; 296112918Sjeff} 297112918Sjeff 298144518Sdavidxu__weak_reference(__nanosleep, nanosleep); 299112918Sjeff 300112918Sjeffint 301144518Sdavidxu__nanosleep(const struct timespec *time_to_sleep, 302144518Sdavidxu struct timespec *time_remaining) 303112918Sjeff{ 304144518Sdavidxu struct pthread *curthread = _get_curthread(); 305144518Sdavidxu int ret; 306112918Sjeff 307164583Sdavidxu _thr_cancel_enter(curthread); 308112918Sjeff ret = __sys_nanosleep(time_to_sleep, time_remaining); 309164583Sdavidxu _thr_cancel_leave(curthread); 310112918Sjeff 311144518Sdavidxu return (ret); 312112918Sjeff} 313112918Sjeff 314144518Sdavidxu__weak_reference(__open, open); 315112918Sjeff 316112918Sjeffint 317144518Sdavidxu__open(const char *path, int flags,...) 318112918Sjeff{ 319144518Sdavidxu struct pthread *curthread = _get_curthread(); 320112918Sjeff int ret; 321112918Sjeff int mode = 0; 322112918Sjeff va_list ap; 323112918Sjeff 324164583Sdavidxu _thr_cancel_enter(curthread); 325112918Sjeff 326112918Sjeff /* Check if the file is being created: */ 327112918Sjeff if (flags & O_CREAT) { 328112918Sjeff /* Get the creation mode: */ 329112918Sjeff va_start(ap, flags); 330112918Sjeff mode = va_arg(ap, int); 331112918Sjeff va_end(ap); 332112918Sjeff } 333112918Sjeff 334112918Sjeff ret = __sys_open(path, flags, mode); 335112918Sjeff 336164583Sdavidxu _thr_cancel_leave(curthread); 337144518Sdavidxu 338112918Sjeff return ret; 339112918Sjeff} 340112918Sjeff 341144518Sdavidxu__weak_reference(__poll, poll); 342112918Sjeff 343112918Sjeffint 344144518Sdavidxu__poll(struct pollfd *fds, unsigned int nfds, int timeout) 345112918Sjeff{ 346144518Sdavidxu struct pthread *curthread = _get_curthread(); 347112918Sjeff int ret; 348112918Sjeff 349164583Sdavidxu _thr_cancel_enter(curthread); 350112918Sjeff ret = __sys_poll(fds, nfds, timeout); 351164583Sdavidxu _thr_cancel_leave(curthread); 352112918Sjeff 353112918Sjeff return ret; 354112918Sjeff} 355112918Sjeff 356160662Sdavidxu__weak_reference(___pselect, pselect); 357135301Smtm 358112918Sjeffint 359160662Sdavidxu___pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds, 360112918Sjeff const struct timespec *timo, const sigset_t *mask) 361112918Sjeff{ 362144518Sdavidxu struct pthread *curthread = _get_curthread(); 363112918Sjeff int ret; 364112918Sjeff 365164583Sdavidxu _thr_cancel_enter(curthread); 366112918Sjeff ret = __pselect(count, rfds, wfds, efds, timo, mask); 367164583Sdavidxu _thr_cancel_leave(curthread); 368112918Sjeff 369112918Sjeff return (ret); 370112918Sjeff} 371112918Sjeff 372144518Sdavidxu__weak_reference(__read, read); 373112918Sjeff 374112918Sjeffssize_t 375144518Sdavidxu__read(int fd, void *buf, size_t nbytes) 376112918Sjeff{ 377144518Sdavidxu struct pthread *curthread = _get_curthread(); 378112918Sjeff ssize_t ret; 379112918Sjeff 380164583Sdavidxu _thr_cancel_enter(curthread); 381112918Sjeff ret = __sys_read(fd, buf, nbytes); 382164583Sdavidxu _thr_cancel_leave(curthread); 383112918Sjeff 384112918Sjeff return ret; 385112918Sjeff} 386112918Sjeff 387144518Sdavidxu__weak_reference(__readv, readv); 388112918Sjeff 389112918Sjeffssize_t 390144518Sdavidxu__readv(int fd, const struct iovec *iov, int iovcnt) 391112918Sjeff{ 392144518Sdavidxu struct pthread *curthread = _get_curthread(); 393112918Sjeff ssize_t ret; 394112918Sjeff 395164583Sdavidxu _thr_cancel_enter(curthread); 396112918Sjeff ret = __sys_readv(fd, iov, iovcnt); 397164583Sdavidxu _thr_cancel_leave(curthread); 398112918Sjeff 399112918Sjeff return ret; 400112918Sjeff} 401112918Sjeff 402144518Sdavidxu__weak_reference(__recvfrom, recvfrom); 403135301Smtm 404135301Smtmssize_t 405144518Sdavidxu__recvfrom(int s, void *b, size_t l, int f, struct sockaddr *from, 406135301Smtm socklen_t *fl) 407135301Smtm{ 408144518Sdavidxu struct pthread *curthread = _get_curthread(); 409135301Smtm ssize_t ret; 410135301Smtm 411164583Sdavidxu _thr_cancel_enter(curthread); 412135301Smtm ret = __sys_recvfrom(s, b, l, f, from, fl); 413164583Sdavidxu _thr_cancel_leave(curthread); 414135301Smtm return (ret); 415135301Smtm} 416135301Smtm 417144518Sdavidxu__weak_reference(__recvmsg, recvmsg); 418135301Smtm 419135301Smtmssize_t 420144518Sdavidxu__recvmsg(int s, struct msghdr *m, int f) 421135301Smtm{ 422144518Sdavidxu struct pthread *curthread = _get_curthread(); 423135301Smtm ssize_t ret; 424135301Smtm 425164583Sdavidxu _thr_cancel_enter(curthread); 426135301Smtm ret = __sys_recvmsg(s, m, f); 427164583Sdavidxu _thr_cancel_leave(curthread); 428135301Smtm return (ret); 429135301Smtm} 430135301Smtm 431144518Sdavidxu__weak_reference(__select, select); 432112918Sjeff 433112918Sjeffint 434144518Sdavidxu__select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 435112918Sjeff struct timeval *timeout) 436112918Sjeff{ 437144518Sdavidxu struct pthread *curthread = _get_curthread(); 438112918Sjeff int ret; 439112918Sjeff 440164583Sdavidxu _thr_cancel_enter(curthread); 441112918Sjeff ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout); 442164583Sdavidxu _thr_cancel_leave(curthread); 443112918Sjeff return ret; 444112918Sjeff} 445112918Sjeff 446144518Sdavidxu__weak_reference(__sendmsg, sendmsg); 447135301Smtm 448135301Smtmssize_t 449144518Sdavidxu__sendmsg(int s, const struct msghdr *m, int f) 450135301Smtm{ 451144518Sdavidxu struct pthread *curthread = _get_curthread(); 452135301Smtm ssize_t ret; 453135301Smtm 454164583Sdavidxu _thr_cancel_enter(curthread); 455135301Smtm ret = __sys_sendmsg(s, m, f); 456164583Sdavidxu _thr_cancel_leave(curthread); 457135301Smtm return (ret); 458135301Smtm} 459135301Smtm 460144518Sdavidxu__weak_reference(__sendto, sendto); 461135301Smtm 462135301Smtmssize_t 463144518Sdavidxu__sendto(int s, const void *m, size_t l, int f, const struct sockaddr *t, 464135301Smtm socklen_t tl) 465135301Smtm{ 466144518Sdavidxu struct pthread *curthread = _get_curthread(); 467135301Smtm ssize_t ret; 468135301Smtm 469164583Sdavidxu _thr_cancel_enter(curthread); 470135301Smtm ret = __sys_sendto(s, m, l, f, t, tl); 471164583Sdavidxu _thr_cancel_leave(curthread); 472135301Smtm return (ret); 473135301Smtm} 474135301Smtm 475160662Sdavidxu__weak_reference(___sleep, sleep); 476148658Sdeischen 477112918Sjeffunsigned int 478160662Sdavidxu___sleep(unsigned int seconds) 479112918Sjeff{ 480144518Sdavidxu struct pthread *curthread = _get_curthread(); 481112918Sjeff unsigned int ret; 482112918Sjeff 483164583Sdavidxu _thr_cancel_enter(curthread); 484112918Sjeff ret = __sleep(seconds); 485164583Sdavidxu _thr_cancel_leave(curthread); 486112918Sjeff 487144518Sdavidxu return (ret); 488112918Sjeff} 489112918Sjeff 490160662Sdavidxu__weak_reference(___system, system); 491112918Sjeff 492112918Sjeffint 493160662Sdavidxu___system(const char *string) 494112918Sjeff{ 495144518Sdavidxu struct pthread *curthread = _get_curthread(); 496112918Sjeff int ret; 497112918Sjeff 498164583Sdavidxu _thr_cancel_enter(curthread); 499112918Sjeff ret = __system(string); 500164583Sdavidxu _thr_cancel_leave(curthread); 501112918Sjeff 502112918Sjeff return ret; 503112918Sjeff} 504112918Sjeff 505160662Sdavidxu__weak_reference(___tcdrain, tcdrain); 506112918Sjeff 507112918Sjeffint 508160662Sdavidxu___tcdrain(int fd) 509112918Sjeff{ 510144518Sdavidxu struct pthread *curthread = _get_curthread(); 511112918Sjeff int ret; 512112918Sjeff 513164583Sdavidxu _thr_cancel_enter(curthread); 514112918Sjeff ret = __tcdrain(fd); 515164583Sdavidxu _thr_cancel_leave(curthread); 516112918Sjeff 517144518Sdavidxu return (ret); 518112918Sjeff} 519112918Sjeff 520160662Sdavidxu__weak_reference(___usleep, usleep); 521148658Sdeischen 522148658Sdeischenint 523160662Sdavidxu___usleep(useconds_t useconds) 524148658Sdeischen{ 525148658Sdeischen struct pthread *curthread = _get_curthread(); 526148658Sdeischen int ret; 527148658Sdeischen 528164583Sdavidxu _thr_cancel_enter(curthread); 529148658Sdeischen ret = __usleep(useconds); 530164583Sdavidxu _thr_cancel_leave(curthread); 531148658Sdeischen 532148658Sdeischen return (ret); 533148658Sdeischen} 534148658Sdeischen 535144518Sdavidxu__weak_reference(_vfork, vfork); 536135301Smtm 537135301Smtmint 538144518Sdavidxu_vfork(void) 539135301Smtm{ 540144518Sdavidxu return (fork()); 541135301Smtm} 542135301Smtm 543160662Sdavidxu__weak_reference(___wait, wait); 544112918Sjeff 545112918Sjeffpid_t 546160662Sdavidxu___wait(int *istat) 547112918Sjeff{ 548144518Sdavidxu struct pthread *curthread = _get_curthread(); 549112918Sjeff pid_t ret; 550112918Sjeff 551164583Sdavidxu _thr_cancel_enter(curthread); 552112918Sjeff ret = __wait(istat); 553164583Sdavidxu _thr_cancel_leave(curthread); 554112918Sjeff 555112918Sjeff return ret; 556112918Sjeff} 557112918Sjeff 558160662Sdavidxu__weak_reference(__wait3, wait3); 559160662Sdavidxu 560160662Sdavidxupid_t 561160662Sdavidxu__wait3(int *status, int options, struct rusage *rusage) 562160662Sdavidxu{ 563160662Sdavidxu struct pthread *curthread = _get_curthread(); 564160662Sdavidxu pid_t ret; 565160662Sdavidxu 566164583Sdavidxu _thr_cancel_enter(curthread); 567160662Sdavidxu ret = _wait4(WAIT_ANY, status, options, rusage); 568164583Sdavidxu _thr_cancel_leave(curthread); 569160662Sdavidxu 570160662Sdavidxu return (ret); 571160662Sdavidxu} 572160662Sdavidxu 573144518Sdavidxu__weak_reference(__wait4, wait4); 574112918Sjeff 575112918Sjeffpid_t 576160662Sdavidxu__wait4(pid_t pid, int *status, int options, struct rusage *rusage) 577112918Sjeff{ 578144518Sdavidxu struct pthread *curthread = _get_curthread(); 579112918Sjeff pid_t ret; 580112918Sjeff 581164583Sdavidxu _thr_cancel_enter(curthread); 582160662Sdavidxu ret = __sys_wait4(pid, status, options, rusage); 583164583Sdavidxu _thr_cancel_leave(curthread); 584112918Sjeff 585112918Sjeff return ret; 586112918Sjeff} 587112918Sjeff 588160662Sdavidxu__weak_reference(___waitpid, waitpid); 589112918Sjeff 590112918Sjeffpid_t 591160662Sdavidxu___waitpid(pid_t wpid, int *status, int options) 592112918Sjeff{ 593144518Sdavidxu struct pthread *curthread = _get_curthread(); 594112918Sjeff pid_t ret; 595112918Sjeff 596164583Sdavidxu _thr_cancel_enter(curthread); 597112918Sjeff ret = __waitpid(wpid, status, options); 598164583Sdavidxu _thr_cancel_leave(curthread); 599112918Sjeff 600112918Sjeff return ret; 601112918Sjeff} 602112918Sjeff 603144518Sdavidxu__weak_reference(__write, write); 604112918Sjeff 605112918Sjeffssize_t 606144518Sdavidxu__write(int fd, const void *buf, size_t nbytes) 607112918Sjeff{ 608144518Sdavidxu struct pthread *curthread = _get_curthread(); 609112918Sjeff ssize_t ret; 610112918Sjeff 611164583Sdavidxu _thr_cancel_enter(curthread); 612112918Sjeff ret = __sys_write(fd, buf, nbytes); 613164583Sdavidxu _thr_cancel_leave(curthread); 614112918Sjeff 615112918Sjeff return ret; 616112918Sjeff} 617112918Sjeff 618144518Sdavidxu__weak_reference(__writev, writev); 619112918Sjeff 620112918Sjeffssize_t 621144518Sdavidxu__writev(int fd, const struct iovec *iov, int iovcnt) 622112918Sjeff{ 623144518Sdavidxu struct pthread *curthread = _get_curthread(); 624112918Sjeff ssize_t ret; 625112918Sjeff 626164583Sdavidxu _thr_cancel_enter(curthread); 627112918Sjeff ret = __sys_writev(fd, iov, iovcnt); 628164583Sdavidxu _thr_cancel_leave(curthread); 629112918Sjeff 630112918Sjeff return ret; 631112918Sjeff} 632