thr_syscalls.c revision 189549
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 189549 2009-03-09 02:34:02Z 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. 46165967Simp * 3. Neither the name of the author nor the names of any co-contributors 47112918Sjeff * may be used to endorse or promote products derived from this software 48112918Sjeff * without specific prior written permission. 49112918Sjeff * 50112918Sjeff * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND 51112918Sjeff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 53112918Sjeff * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 54112918Sjeff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 55112918Sjeff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56112918Sjeff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57112918Sjeff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58112918Sjeff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59112918Sjeff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60112918Sjeff * SUCH DAMAGE. 61112918Sjeff * 62112918Sjeff */ 63112918Sjeff 64157457Sdavidxu#include "namespace.h" 65144518Sdavidxu#include <sys/types.h> 66112918Sjeff#include <sys/mman.h> 67112918Sjeff#include <sys/param.h> 68112918Sjeff#include <sys/select.h> 69144518Sdavidxu#include <sys/signalvar.h> 70135301Smtm#include <sys/socket.h> 71144518Sdavidxu#include <sys/stat.h> 72112918Sjeff#include <sys/time.h> 73112918Sjeff#include <sys/uio.h> 74112918Sjeff#include <sys/wait.h> 75112918Sjeff#include <aio.h> 76112918Sjeff#include <dirent.h> 77112918Sjeff#include <errno.h> 78112918Sjeff#include <fcntl.h> 79112918Sjeff#include <poll.h> 80112918Sjeff#include <signal.h> 81112918Sjeff#include <stdarg.h> 82112918Sjeff#include <stdio.h> 83112918Sjeff#include <stdlib.h> 84112918Sjeff#include <string.h> 85112918Sjeff#include <termios.h> 86112918Sjeff#include <unistd.h> 87144518Sdavidxu#include <pthread.h> 88157457Sdavidxu#include "un-namespace.h" 89112918Sjeff 90112918Sjeff#include "thr_private.h" 91112918Sjeff 92157457Sdavidxuextern int __creat(const char *, mode_t); 93157457Sdavidxuextern int __pselect(int, fd_set *, fd_set *, fd_set *, 94157457Sdavidxu const struct timespec *, const sigset_t *); 95157457Sdavidxuextern unsigned __sleep(unsigned int); 96157457Sdavidxuextern int __system(const char *); 97157457Sdavidxuextern int __tcdrain(int); 98157457Sdavidxuextern int __usleep(useconds_t); 99157457Sdavidxuextern pid_t __wait(int *); 100157457Sdavidxuextern pid_t __waitpid(pid_t, int *, int); 101157457Sdavidxuextern int __sys_aio_suspend(const struct aiocb * const[], int, 102157457Sdavidxu const struct timespec *); 103157457Sdavidxuextern int __sys_accept(int, struct sockaddr *, socklen_t *); 104157457Sdavidxuextern int __sys_connect(int, const struct sockaddr *, socklen_t); 105157457Sdavidxuextern int __sys_fsync(int); 106157457Sdavidxuextern int __sys_msync(void *, size_t, int); 107157457Sdavidxuextern int __sys_poll(struct pollfd *, unsigned, int); 108157457Sdavidxuextern ssize_t __sys_recv(int, void *, size_t, int); 109157457Sdavidxuextern ssize_t __sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); 110157457Sdavidxuextern ssize_t __sys_recvmsg(int, struct msghdr *, int); 111157457Sdavidxuextern int __sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); 112157457Sdavidxuextern int __sys_sendfile(int, int, off_t, size_t, struct sf_hdtr *, 113157457Sdavidxu off_t *, int); 114157457Sdavidxuextern ssize_t __sys_sendmsg(int, const struct msghdr *, int); 115157457Sdavidxuextern ssize_t __sys_sendto(int, const void *,size_t, int, const struct sockaddr *, socklen_t); 116157457Sdavidxuextern ssize_t __sys_readv(int, const struct iovec *, int); 117157457Sdavidxuextern pid_t __sys_wait4(pid_t, int *, int, struct rusage *); 118157457Sdavidxuextern ssize_t __sys_writev(int, const struct iovec *, int); 119115260Smtm 120157457Sdavidxuint ___creat(const char *, mode_t); 121160662Sdavidxuint ___pselect(int, fd_set *, fd_set *, fd_set *, 122160662Sdavidxu const struct timespec *, const sigset_t *); 123160662Sdavidxuunsigned ___sleep(unsigned); 124160662Sdavidxuint ___system(const char *); 125160662Sdavidxuint ___tcdrain(int); 126160662Sdavidxuint ___usleep(useconds_t useconds); 127160662Sdavidxupid_t ___wait(int *); 128160662Sdavidxupid_t ___waitpid(pid_t, int *, int); 129157457Sdavidxuint __accept(int, struct sockaddr *, socklen_t *); 130160662Sdavidxuint __aio_suspend(const struct aiocb * const iocbs[], int, 131160662Sdavidxu const struct timespec *); 132157457Sdavidxuint __close(int); 133157457Sdavidxuint __connect(int, const struct sockaddr *, socklen_t); 134157457Sdavidxuint __fcntl(int, int,...); 135189549Sdavidxu#ifdef SYSCALL_COMPAT 136179434Sdfrextern int __fcntl_compat(int, int,...); 137189549Sdavidxu#endif 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); 155157457Sdavidxu 156144518Sdavidxu__weak_reference(__accept, accept); 157157457Sdavidxu 158135301Smtmint 159144518Sdavidxu__accept(int s, struct sockaddr *addr, socklen_t *addrlen) 160135301Smtm{ 161144518Sdavidxu struct pthread *curthread; 162135301Smtm int ret; 163135301Smtm 164144518Sdavidxu curthread = _get_curthread(); 165164583Sdavidxu _thr_cancel_enter(curthread); 166135301Smtm ret = __sys_accept(s, addr, addrlen); 167164583Sdavidxu _thr_cancel_leave(curthread); 168144518Sdavidxu 169144518Sdavidxu return (ret); 170135301Smtm} 171135301Smtm 172160662Sdavidxu__weak_reference(__aio_suspend, aio_suspend); 173112918Sjeff 174112918Sjeffint 175160662Sdavidxu__aio_suspend(const struct aiocb * const iocbs[], int niocb, const struct 176112918Sjeff timespec *timeout) 177112918Sjeff{ 178144518Sdavidxu struct pthread *curthread = _get_curthread(); 179144518Sdavidxu int ret; 180112918Sjeff 181164583Sdavidxu _thr_cancel_enter(curthread); 182112918Sjeff ret = __sys_aio_suspend(iocbs, niocb, timeout); 183164583Sdavidxu _thr_cancel_leave(curthread); 184112918Sjeff 185144518Sdavidxu return (ret); 186112918Sjeff} 187112918Sjeff 188144518Sdavidxu__weak_reference(__close, close); 189112918Sjeff 190112918Sjeffint 191144518Sdavidxu__close(int fd) 192112918Sjeff{ 193144518Sdavidxu struct pthread *curthread = _get_curthread(); 194112918Sjeff int ret; 195112918Sjeff 196164583Sdavidxu _thr_cancel_enter(curthread); 197112918Sjeff ret = __sys_close(fd); 198164583Sdavidxu _thr_cancel_leave(curthread); 199112918Sjeff 200144518Sdavidxu return (ret); 201112918Sjeff} 202135301Smtm 203144518Sdavidxu__weak_reference(__connect, connect); 204135301Smtm 205135301Smtmint 206144518Sdavidxu__connect(int fd, const struct sockaddr *name, socklen_t namelen) 207135301Smtm{ 208144518Sdavidxu struct pthread *curthread = _get_curthread(); 209135301Smtm int ret; 210135301Smtm 211164583Sdavidxu _thr_cancel_enter(curthread); 212144518Sdavidxu ret = __sys_connect(fd, name, namelen); 213164583Sdavidxu _thr_cancel_leave(curthread); 214144518Sdavidxu 215144518Sdavidxu return (ret); 216135301Smtm} 217112918Sjeff 218144518Sdavidxu__weak_reference(___creat, creat); 219144518Sdavidxu 220112918Sjeffint 221144518Sdavidxu___creat(const char *path, mode_t mode) 222112918Sjeff{ 223144518Sdavidxu struct pthread *curthread = _get_curthread(); 224144518Sdavidxu int ret; 225112918Sjeff 226164583Sdavidxu _thr_cancel_enter(curthread); 227112918Sjeff ret = __creat(path, mode); 228164583Sdavidxu _thr_cancel_leave(curthread); 229112918Sjeff 230112918Sjeff return ret; 231112918Sjeff} 232112918Sjeff 233144518Sdavidxu__weak_reference(__fcntl, fcntl); 234112918Sjeff 235112918Sjeffint 236144518Sdavidxu__fcntl(int fd, int cmd,...) 237112918Sjeff{ 238144518Sdavidxu struct pthread *curthread = _get_curthread(); 239112918Sjeff int ret; 240112918Sjeff va_list ap; 241112918Sjeff 242164583Sdavidxu _thr_cancel_enter(curthread); 243112918Sjeff 244112918Sjeff va_start(ap, cmd); 245112918Sjeff switch (cmd) { 246144518Sdavidxu case F_DUPFD: 247144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 248144518Sdavidxu break; 249144518Sdavidxu case F_SETFD: 250144518Sdavidxu case F_SETFL: 251144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 252144518Sdavidxu break; 253144518Sdavidxu case F_GETFD: 254144518Sdavidxu case F_GETFL: 255144518Sdavidxu ret = __sys_fcntl(fd, cmd); 256144518Sdavidxu break; 257144518Sdavidxu default: 258189549Sdavidxu#ifdef SYSCALL_COMPAT 259179434Sdfr ret = __fcntl_compat(fd, cmd, va_arg(ap, void *)); 260189549Sdavidxu#else 261189549Sdavidxu ret = EOPNOTSUPP; 262189549Sdavidxu#endif 263112918Sjeff } 264112918Sjeff va_end(ap); 265112918Sjeff 266164583Sdavidxu _thr_cancel_leave(curthread); 267112918Sjeff 268144518Sdavidxu return (ret); 269112918Sjeff} 270112918Sjeff 271144518Sdavidxu__weak_reference(__fsync, fsync); 272131181Smtm 273131181Smtmint 274144518Sdavidxu__fsync(int fd) 275131181Smtm{ 276144518Sdavidxu struct pthread *curthread = _get_curthread(); 277131181Smtm int ret; 278131181Smtm 279164583Sdavidxu _thr_cancel_enter(curthread); 280112918Sjeff ret = __sys_fsync(fd); 281164583Sdavidxu _thr_cancel_leave(curthread); 282112918Sjeff 283144518Sdavidxu return (ret); 284112918Sjeff} 285112918Sjeff 286144518Sdavidxu__weak_reference(__msync, msync); 287135301Smtm 288135301Smtmint 289144518Sdavidxu__msync(void *addr, size_t len, int flags) 290135301Smtm{ 291144518Sdavidxu struct pthread *curthread = _get_curthread(); 292112918Sjeff int ret; 293112918Sjeff 294164583Sdavidxu _thr_cancel_enter(curthread); 295112918Sjeff ret = __sys_msync(addr, len, flags); 296164583Sdavidxu _thr_cancel_leave(curthread); 297112918Sjeff 298112918Sjeff return ret; 299112918Sjeff} 300112918Sjeff 301144518Sdavidxu__weak_reference(__nanosleep, nanosleep); 302112918Sjeff 303112918Sjeffint 304144518Sdavidxu__nanosleep(const struct timespec *time_to_sleep, 305144518Sdavidxu struct timespec *time_remaining) 306112918Sjeff{ 307144518Sdavidxu struct pthread *curthread = _get_curthread(); 308144518Sdavidxu int ret; 309112918Sjeff 310164583Sdavidxu _thr_cancel_enter(curthread); 311112918Sjeff ret = __sys_nanosleep(time_to_sleep, time_remaining); 312164583Sdavidxu _thr_cancel_leave(curthread); 313112918Sjeff 314144518Sdavidxu return (ret); 315112918Sjeff} 316112918Sjeff 317144518Sdavidxu__weak_reference(__open, open); 318112918Sjeff 319112918Sjeffint 320144518Sdavidxu__open(const char *path, int flags,...) 321112918Sjeff{ 322144518Sdavidxu struct pthread *curthread = _get_curthread(); 323112918Sjeff int ret; 324112918Sjeff int mode = 0; 325112918Sjeff va_list ap; 326112918Sjeff 327164583Sdavidxu _thr_cancel_enter(curthread); 328112918Sjeff 329112918Sjeff /* Check if the file is being created: */ 330112918Sjeff if (flags & O_CREAT) { 331112918Sjeff /* Get the creation mode: */ 332112918Sjeff va_start(ap, flags); 333112918Sjeff mode = va_arg(ap, int); 334112918Sjeff va_end(ap); 335112918Sjeff } 336112918Sjeff 337112918Sjeff ret = __sys_open(path, flags, mode); 338112918Sjeff 339164583Sdavidxu _thr_cancel_leave(curthread); 340144518Sdavidxu 341112918Sjeff return ret; 342112918Sjeff} 343112918Sjeff 344144518Sdavidxu__weak_reference(__poll, poll); 345112918Sjeff 346112918Sjeffint 347144518Sdavidxu__poll(struct pollfd *fds, unsigned int nfds, int timeout) 348112918Sjeff{ 349144518Sdavidxu struct pthread *curthread = _get_curthread(); 350112918Sjeff int ret; 351112918Sjeff 352164583Sdavidxu _thr_cancel_enter(curthread); 353112918Sjeff ret = __sys_poll(fds, nfds, timeout); 354164583Sdavidxu _thr_cancel_leave(curthread); 355112918Sjeff 356112918Sjeff return ret; 357112918Sjeff} 358112918Sjeff 359160662Sdavidxu__weak_reference(___pselect, pselect); 360135301Smtm 361112918Sjeffint 362160662Sdavidxu___pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds, 363112918Sjeff const struct timespec *timo, const sigset_t *mask) 364112918Sjeff{ 365144518Sdavidxu struct pthread *curthread = _get_curthread(); 366112918Sjeff int ret; 367112918Sjeff 368164583Sdavidxu _thr_cancel_enter(curthread); 369112918Sjeff ret = __pselect(count, rfds, wfds, efds, timo, mask); 370164583Sdavidxu _thr_cancel_leave(curthread); 371112918Sjeff 372112918Sjeff return (ret); 373112918Sjeff} 374112918Sjeff 375144518Sdavidxu__weak_reference(__read, read); 376112918Sjeff 377112918Sjeffssize_t 378144518Sdavidxu__read(int fd, void *buf, size_t nbytes) 379112918Sjeff{ 380144518Sdavidxu struct pthread *curthread = _get_curthread(); 381112918Sjeff ssize_t ret; 382112918Sjeff 383164583Sdavidxu _thr_cancel_enter(curthread); 384112918Sjeff ret = __sys_read(fd, buf, nbytes); 385164583Sdavidxu _thr_cancel_leave(curthread); 386112918Sjeff 387112918Sjeff return ret; 388112918Sjeff} 389112918Sjeff 390144518Sdavidxu__weak_reference(__readv, readv); 391112918Sjeff 392112918Sjeffssize_t 393144518Sdavidxu__readv(int fd, const struct iovec *iov, int iovcnt) 394112918Sjeff{ 395144518Sdavidxu struct pthread *curthread = _get_curthread(); 396112918Sjeff ssize_t ret; 397112918Sjeff 398164583Sdavidxu _thr_cancel_enter(curthread); 399112918Sjeff ret = __sys_readv(fd, iov, iovcnt); 400164583Sdavidxu _thr_cancel_leave(curthread); 401112918Sjeff 402112918Sjeff return ret; 403112918Sjeff} 404112918Sjeff 405144518Sdavidxu__weak_reference(__recvfrom, recvfrom); 406135301Smtm 407135301Smtmssize_t 408144518Sdavidxu__recvfrom(int s, void *b, size_t l, int f, struct sockaddr *from, 409135301Smtm socklen_t *fl) 410135301Smtm{ 411144518Sdavidxu struct pthread *curthread = _get_curthread(); 412135301Smtm ssize_t ret; 413135301Smtm 414164583Sdavidxu _thr_cancel_enter(curthread); 415135301Smtm ret = __sys_recvfrom(s, b, l, f, from, fl); 416164583Sdavidxu _thr_cancel_leave(curthread); 417135301Smtm return (ret); 418135301Smtm} 419135301Smtm 420144518Sdavidxu__weak_reference(__recvmsg, recvmsg); 421135301Smtm 422135301Smtmssize_t 423144518Sdavidxu__recvmsg(int s, struct msghdr *m, int f) 424135301Smtm{ 425144518Sdavidxu struct pthread *curthread = _get_curthread(); 426135301Smtm ssize_t ret; 427135301Smtm 428164583Sdavidxu _thr_cancel_enter(curthread); 429135301Smtm ret = __sys_recvmsg(s, m, f); 430164583Sdavidxu _thr_cancel_leave(curthread); 431135301Smtm return (ret); 432135301Smtm} 433135301Smtm 434144518Sdavidxu__weak_reference(__select, select); 435112918Sjeff 436112918Sjeffint 437144518Sdavidxu__select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 438112918Sjeff struct timeval *timeout) 439112918Sjeff{ 440144518Sdavidxu struct pthread *curthread = _get_curthread(); 441112918Sjeff int ret; 442112918Sjeff 443164583Sdavidxu _thr_cancel_enter(curthread); 444112918Sjeff ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout); 445164583Sdavidxu _thr_cancel_leave(curthread); 446112918Sjeff return ret; 447112918Sjeff} 448112918Sjeff 449144518Sdavidxu__weak_reference(__sendmsg, sendmsg); 450135301Smtm 451135301Smtmssize_t 452144518Sdavidxu__sendmsg(int s, const struct msghdr *m, int f) 453135301Smtm{ 454144518Sdavidxu struct pthread *curthread = _get_curthread(); 455135301Smtm ssize_t ret; 456135301Smtm 457164583Sdavidxu _thr_cancel_enter(curthread); 458135301Smtm ret = __sys_sendmsg(s, m, f); 459164583Sdavidxu _thr_cancel_leave(curthread); 460135301Smtm return (ret); 461135301Smtm} 462135301Smtm 463144518Sdavidxu__weak_reference(__sendto, sendto); 464135301Smtm 465135301Smtmssize_t 466144518Sdavidxu__sendto(int s, const void *m, size_t l, int f, const struct sockaddr *t, 467135301Smtm socklen_t tl) 468135301Smtm{ 469144518Sdavidxu struct pthread *curthread = _get_curthread(); 470135301Smtm ssize_t ret; 471135301Smtm 472164583Sdavidxu _thr_cancel_enter(curthread); 473135301Smtm ret = __sys_sendto(s, m, l, f, t, tl); 474164583Sdavidxu _thr_cancel_leave(curthread); 475135301Smtm return (ret); 476135301Smtm} 477135301Smtm 478160662Sdavidxu__weak_reference(___sleep, sleep); 479148658Sdeischen 480112918Sjeffunsigned int 481160662Sdavidxu___sleep(unsigned int seconds) 482112918Sjeff{ 483144518Sdavidxu struct pthread *curthread = _get_curthread(); 484112918Sjeff unsigned int ret; 485112918Sjeff 486164583Sdavidxu _thr_cancel_enter(curthread); 487112918Sjeff ret = __sleep(seconds); 488164583Sdavidxu _thr_cancel_leave(curthread); 489112918Sjeff 490144518Sdavidxu return (ret); 491112918Sjeff} 492112918Sjeff 493160662Sdavidxu__weak_reference(___system, system); 494112918Sjeff 495112918Sjeffint 496160662Sdavidxu___system(const char *string) 497112918Sjeff{ 498144518Sdavidxu struct pthread *curthread = _get_curthread(); 499112918Sjeff int ret; 500112918Sjeff 501164583Sdavidxu _thr_cancel_enter(curthread); 502112918Sjeff ret = __system(string); 503164583Sdavidxu _thr_cancel_leave(curthread); 504112918Sjeff 505112918Sjeff return ret; 506112918Sjeff} 507112918Sjeff 508160662Sdavidxu__weak_reference(___tcdrain, tcdrain); 509112918Sjeff 510112918Sjeffint 511160662Sdavidxu___tcdrain(int fd) 512112918Sjeff{ 513144518Sdavidxu struct pthread *curthread = _get_curthread(); 514112918Sjeff int ret; 515112918Sjeff 516164583Sdavidxu _thr_cancel_enter(curthread); 517112918Sjeff ret = __tcdrain(fd); 518164583Sdavidxu _thr_cancel_leave(curthread); 519112918Sjeff 520144518Sdavidxu return (ret); 521112918Sjeff} 522112918Sjeff 523160662Sdavidxu__weak_reference(___usleep, usleep); 524148658Sdeischen 525148658Sdeischenint 526160662Sdavidxu___usleep(useconds_t useconds) 527148658Sdeischen{ 528148658Sdeischen struct pthread *curthread = _get_curthread(); 529148658Sdeischen int ret; 530148658Sdeischen 531164583Sdavidxu _thr_cancel_enter(curthread); 532148658Sdeischen ret = __usleep(useconds); 533164583Sdavidxu _thr_cancel_leave(curthread); 534148658Sdeischen 535148658Sdeischen return (ret); 536148658Sdeischen} 537148658Sdeischen 538160662Sdavidxu__weak_reference(___wait, wait); 539112918Sjeff 540112918Sjeffpid_t 541160662Sdavidxu___wait(int *istat) 542112918Sjeff{ 543144518Sdavidxu struct pthread *curthread = _get_curthread(); 544112918Sjeff pid_t ret; 545112918Sjeff 546164583Sdavidxu _thr_cancel_enter(curthread); 547112918Sjeff ret = __wait(istat); 548164583Sdavidxu _thr_cancel_leave(curthread); 549112918Sjeff 550112918Sjeff return ret; 551112918Sjeff} 552112918Sjeff 553160662Sdavidxu__weak_reference(__wait3, wait3); 554160662Sdavidxu 555160662Sdavidxupid_t 556160662Sdavidxu__wait3(int *status, int options, struct rusage *rusage) 557160662Sdavidxu{ 558160662Sdavidxu struct pthread *curthread = _get_curthread(); 559160662Sdavidxu pid_t ret; 560160662Sdavidxu 561164583Sdavidxu _thr_cancel_enter(curthread); 562160662Sdavidxu ret = _wait4(WAIT_ANY, status, options, rusage); 563164583Sdavidxu _thr_cancel_leave(curthread); 564160662Sdavidxu 565160662Sdavidxu return (ret); 566160662Sdavidxu} 567160662Sdavidxu 568144518Sdavidxu__weak_reference(__wait4, wait4); 569112918Sjeff 570112918Sjeffpid_t 571160662Sdavidxu__wait4(pid_t pid, int *status, int options, struct rusage *rusage) 572112918Sjeff{ 573144518Sdavidxu struct pthread *curthread = _get_curthread(); 574112918Sjeff pid_t ret; 575112918Sjeff 576164583Sdavidxu _thr_cancel_enter(curthread); 577160662Sdavidxu ret = __sys_wait4(pid, status, options, rusage); 578164583Sdavidxu _thr_cancel_leave(curthread); 579112918Sjeff 580112918Sjeff return ret; 581112918Sjeff} 582112918Sjeff 583160662Sdavidxu__weak_reference(___waitpid, waitpid); 584112918Sjeff 585112918Sjeffpid_t 586160662Sdavidxu___waitpid(pid_t wpid, int *status, int options) 587112918Sjeff{ 588144518Sdavidxu struct pthread *curthread = _get_curthread(); 589112918Sjeff pid_t ret; 590112918Sjeff 591164583Sdavidxu _thr_cancel_enter(curthread); 592112918Sjeff ret = __waitpid(wpid, status, options); 593164583Sdavidxu _thr_cancel_leave(curthread); 594112918Sjeff 595112918Sjeff return ret; 596112918Sjeff} 597112918Sjeff 598144518Sdavidxu__weak_reference(__write, write); 599112918Sjeff 600112918Sjeffssize_t 601144518Sdavidxu__write(int fd, const void *buf, size_t nbytes) 602112918Sjeff{ 603144518Sdavidxu struct pthread *curthread = _get_curthread(); 604112918Sjeff ssize_t ret; 605112918Sjeff 606164583Sdavidxu _thr_cancel_enter(curthread); 607112918Sjeff ret = __sys_write(fd, buf, nbytes); 608164583Sdavidxu _thr_cancel_leave(curthread); 609112918Sjeff 610112918Sjeff return ret; 611112918Sjeff} 612112918Sjeff 613144518Sdavidxu__weak_reference(__writev, writev); 614112918Sjeff 615112918Sjeffssize_t 616144518Sdavidxu__writev(int fd, const struct iovec *iov, int iovcnt) 617112918Sjeff{ 618144518Sdavidxu struct pthread *curthread = _get_curthread(); 619112918Sjeff ssize_t ret; 620112918Sjeff 621164583Sdavidxu _thr_cancel_enter(curthread); 622112918Sjeff ret = __sys_writev(fd, iov, iovcnt); 623164583Sdavidxu _thr_cancel_leave(curthread); 624112918Sjeff 625112918Sjeff return ret; 626112918Sjeff} 627