summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjb <jb@FreeBSD.org>1998-05-31 23:48:30 +0000
committerjb <jb@FreeBSD.org>1998-05-31 23:48:30 +0000
commit4e33c259ce10dfa889d642abb2f6aa16e99725ec (patch)
tree7256d0e8f8b3c9acb20cd8dd73908ae6d86543b5
parentd1ff6ac11883cb96428f9a21659377bae35b4d8f (diff)
downloadFreeBSD-src-4e33c259ce10dfa889d642abb2f6aa16e99725ec.zip
FreeBSD-src-4e33c259ce10dfa889d642abb2f6aa16e99725ec.tar.gz
Add some missing syscall wrappers.
-rw-r--r--lib/libc_r/uthread/Makefile.inc6
-rw-r--r--lib/libc_r/uthread/uthread_recv.c72
-rw-r--r--lib/libc_r/uthread/uthread_recvmsg.c72
-rw-r--r--lib/libc_r/uthread/uthread_send.c71
-rw-r--r--lib/libc_r/uthread/uthread_sendmsg.c71
-rw-r--r--lib/libkse/thread/Makefile.inc6
-rw-r--r--lib/libpthread/thread/Makefile.inc6
7 files changed, 301 insertions, 3 deletions
diff --git a/lib/libc_r/uthread/Makefile.inc b/lib/libc_r/uthread/Makefile.inc
index 924453f..3d2f562 100644
--- a/lib/libc_r/uthread/Makefile.inc
+++ b/lib/libc_r/uthread/Makefile.inc
@@ -1,4 +1,4 @@
-# $Id: Makefile.inc,v 1.10 1997/11/24 23:04:29 alex Exp $
+# $Id: Makefile.inc,v 1.11 1998/04/29 09:58:27 jb Exp $
# uthread sources
.PATH: ${.CURDIR}/uthread
@@ -64,10 +64,14 @@ SRCS+= \
uthread_queue.c \
uthread_read.c \
uthread_readv.c \
+ uthread_recv.c \
uthread_recvfrom.c \
+ uthread_recvmsg.c \
uthread_resume_np.c \
uthread_select.c \
uthread_self.c \
+ uthread_send.c \
+ uthread_sendmsg.c \
uthread_sendto.c \
uthread_seterrno.c \
uthread_setprio.c \
diff --git a/lib/libc_r/uthread/uthread_recv.c b/lib/libc_r/uthread/uthread_recv.c
new file mode 100644
index 0000000..cfa0f73
--- /dev/null
+++ b/lib/libc_r/uthread/uthread_recv.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Birrell.
+ * 4. 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 JOHN BIRRELL 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.
+ *
+ */
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#ifdef _THREAD_SAFE
+#include <pthread.h>
+#include "pthread_private.h"
+
+ssize_t
+recv(int fd, void *buf, size_t len, int flags)
+{
+ int ret;
+
+ if ((ret = _thread_fd_lock(fd, FD_READ, NULL, __FILE__, __LINE__)) == 0) {
+ while ((ret = _thread_sys_recv(fd, buf, len, flags)) < 0) {
+ if (!(_thread_fd_table[fd]->flags & O_NONBLOCK) && ((errno == EWOULDBLOCK) || (errno == EAGAIN))) {
+ _thread_run->data.fd.fd = fd;
+
+ /* Set the timeout: */
+ _thread_kern_set_timeout(NULL);
+ _thread_run->interrupted = 0;
+ _thread_kern_sched_state(PS_FDR_WAIT, __FILE__, __LINE__);
+
+ /* Check if the wait was interrupted: */
+ if (_thread_run->interrupted) {
+ /* Return an error status: */
+ errno = EINTR;
+ ret = -1;
+ break;
+ }
+ } else {
+ ret = -1;
+ break;
+ }
+ }
+ _thread_fd_unlock(fd, FD_READ);
+ }
+ return (ret);
+}
+#endif
diff --git a/lib/libc_r/uthread/uthread_recvmsg.c b/lib/libc_r/uthread/uthread_recvmsg.c
new file mode 100644
index 0000000..a0ae08a
--- /dev/null
+++ b/lib/libc_r/uthread/uthread_recvmsg.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Birrell.
+ * 4. 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 JOHN BIRRELL 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.
+ *
+ */
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#ifdef _THREAD_SAFE
+#include <pthread.h>
+#include "pthread_private.h"
+
+ssize_t
+recvmsg(int fd, struct msghdr *msg, int flags)
+{
+ int ret;
+
+ if ((ret = _thread_fd_lock(fd, FD_READ, NULL, __FILE__, __LINE__)) == 0) {
+ while ((ret = _thread_sys_recvmsg(fd, msg, flags)) < 0) {
+ if (!(_thread_fd_table[fd]->flags & O_NONBLOCK) && ((errno == EWOULDBLOCK) || (errno == EAGAIN))) {
+ _thread_run->data.fd.fd = fd;
+
+ /* Set the timeout: */
+ _thread_kern_set_timeout(NULL);
+ _thread_run->interrupted = 0;
+ _thread_kern_sched_state(PS_FDR_WAIT, __FILE__, __LINE__);
+
+ /* Check if the wait was interrupted: */
+ if (_thread_run->interrupted) {
+ /* Return an error status: */
+ errno = EINTR;
+ ret = -1;
+ break;
+ }
+ } else {
+ ret = -1;
+ break;
+ }
+ }
+ _thread_fd_unlock(fd, FD_READ);
+ }
+ return (ret);
+}
+#endif
diff --git a/lib/libc_r/uthread/uthread_send.c b/lib/libc_r/uthread/uthread_send.c
new file mode 100644
index 0000000..712129c
--- /dev/null
+++ b/lib/libc_r/uthread/uthread_send.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Birrell.
+ * 4. 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 JOHN BIRRELL 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.
+ *
+ */
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#ifdef _THREAD_SAFE
+#include <pthread.h>
+#include "pthread_private.h"
+
+ssize_t
+send(int fd, const void *msg, size_t len, int flags)
+{
+ int ret;
+
+ if ((ret = _thread_fd_lock(fd, FD_WRITE, NULL, __FILE__, __LINE__)) == 0) {
+ while ((ret = _thread_sys_send(fd, msg, len, flags)) < 0) {
+ if (!(_thread_fd_table[fd]->flags & O_NONBLOCK) && ((errno == EWOULDBLOCK) || (errno == EAGAIN))) {
+ _thread_run->data.fd.fd = fd;
+
+ /* Set the timeout: */
+ _thread_kern_set_timeout(NULL);
+ _thread_run->interrupted = 0;
+ _thread_kern_sched_state(PS_FDW_WAIT, __FILE__, __LINE__);
+
+ /* Check if the operation was interrupted: */
+ if (_thread_run->interrupted) {
+ errno = EINTR;
+ ret = -1;
+ break;
+ }
+ } else {
+ ret = -1;
+ break;
+ }
+ }
+ _thread_fd_unlock(fd, FD_WRITE);
+ }
+ return (ret);
+}
+#endif
diff --git a/lib/libc_r/uthread/uthread_sendmsg.c b/lib/libc_r/uthread/uthread_sendmsg.c
new file mode 100644
index 0000000..82c23e7
--- /dev/null
+++ b/lib/libc_r/uthread/uthread_sendmsg.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Birrell.
+ * 4. 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 JOHN BIRRELL 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.
+ *
+ */
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#ifdef _THREAD_SAFE
+#include <pthread.h>
+#include "pthread_private.h"
+
+ssize_t
+sendmsg(int fd, const struct msghdr *msg, int flags)
+{
+ int ret;
+
+ if ((ret = _thread_fd_lock(fd, FD_WRITE, NULL, __FILE__, __LINE__)) == 0) {
+ while ((ret = _thread_sys_sendmsg(fd, msg, flags)) < 0) {
+ if (!(_thread_fd_table[fd]->flags & O_NONBLOCK) && ((errno == EWOULDBLOCK) || (errno == EAGAIN))) {
+ _thread_run->data.fd.fd = fd;
+
+ /* Set the timeout: */
+ _thread_kern_set_timeout(NULL);
+ _thread_run->interrupted = 0;
+ _thread_kern_sched_state(PS_FDW_WAIT, __FILE__, __LINE__);
+
+ /* Check if the operation was interrupted: */
+ if (_thread_run->interrupted) {
+ errno = EINTR;
+ ret = -1;
+ break;
+ }
+ } else {
+ ret = -1;
+ break;
+ }
+ }
+ _thread_fd_unlock(fd, FD_WRITE);
+ }
+ return (ret);
+}
+#endif
diff --git a/lib/libkse/thread/Makefile.inc b/lib/libkse/thread/Makefile.inc
index 924453f..3d2f562 100644
--- a/lib/libkse/thread/Makefile.inc
+++ b/lib/libkse/thread/Makefile.inc
@@ -1,4 +1,4 @@
-# $Id: Makefile.inc,v 1.10 1997/11/24 23:04:29 alex Exp $
+# $Id: Makefile.inc,v 1.11 1998/04/29 09:58:27 jb Exp $
# uthread sources
.PATH: ${.CURDIR}/uthread
@@ -64,10 +64,14 @@ SRCS+= \
uthread_queue.c \
uthread_read.c \
uthread_readv.c \
+ uthread_recv.c \
uthread_recvfrom.c \
+ uthread_recvmsg.c \
uthread_resume_np.c \
uthread_select.c \
uthread_self.c \
+ uthread_send.c \
+ uthread_sendmsg.c \
uthread_sendto.c \
uthread_seterrno.c \
uthread_setprio.c \
diff --git a/lib/libpthread/thread/Makefile.inc b/lib/libpthread/thread/Makefile.inc
index 924453f..3d2f562 100644
--- a/lib/libpthread/thread/Makefile.inc
+++ b/lib/libpthread/thread/Makefile.inc
@@ -1,4 +1,4 @@
-# $Id: Makefile.inc,v 1.10 1997/11/24 23:04:29 alex Exp $
+# $Id: Makefile.inc,v 1.11 1998/04/29 09:58:27 jb Exp $
# uthread sources
.PATH: ${.CURDIR}/uthread
@@ -64,10 +64,14 @@ SRCS+= \
uthread_queue.c \
uthread_read.c \
uthread_readv.c \
+ uthread_recv.c \
uthread_recvfrom.c \
+ uthread_recvmsg.c \
uthread_resume_np.c \
uthread_select.c \
uthread_self.c \
+ uthread_send.c \
+ uthread_sendmsg.c \
uthread_sendto.c \
uthread_seterrno.c \
uthread_setprio.c \
OpenPOWER on IntegriCloud