summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authordchagin <dchagin@FreeBSD.org>2009-05-31 12:04:01 +0000
committerdchagin <dchagin@FreeBSD.org>2009-05-31 12:04:01 +0000
commitab797d42e47bd545852aab8db4db5d162e9a0e38 (patch)
tree0f342d61f89ceaf3b41414217633b966d37b3795 /sys/compat
parentfbb545b6849d6e28632c082abf30bd6b222ed6d3 (diff)
downloadFreeBSD-src-ab797d42e47bd545852aab8db4db5d162e9a0e38.zip
FreeBSD-src-ab797d42e47bd545852aab8db4db5d162e9a0e38.tar.gz
Move new socket flags handling into a separate function as Linux
introduced more syscalls which uses these flags. Approved by: kib (mentor) MFC after: 1 month
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_socket.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index d732c2b..3b7ce05 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -475,6 +475,24 @@ bsd_to_linux_msghdr(const struct msghdr *bhdr, struct l_msghdr *lhdr)
}
static int
+linux_set_socket_flags(struct thread *td, int s, int flags)
+{
+ int error;
+
+ if (flags & LINUX_SOCK_NONBLOCK) {
+ error = kern_fcntl(td, s, F_SETFL, O_NONBLOCK);
+ if (error)
+ return (error);
+ }
+ if (flags & LINUX_SOCK_CLOEXEC) {
+ error = kern_fcntl(td, s, F_SETFD, FD_CLOEXEC);
+ if (error)
+ return (error);
+ }
+ return (0);
+}
+
+static int
linux_sendit(struct thread *td, int s, struct msghdr *mp, int flags,
struct mbuf *control, enum uio_seg segflg)
{
@@ -608,21 +626,11 @@ linux_socket(struct thread *td, struct linux_socket_args *args)
if (retval_socket)
return (retval_socket);
- if (socket_flags & LINUX_SOCK_NONBLOCK) {
- retval_socket = kern_fcntl(td, td->td_retval[0],
- F_SETFL, O_NONBLOCK);
- if (retval_socket) {
- (void)kern_close(td, td->td_retval[0]);
- goto out;
- }
- }
- if (socket_flags & LINUX_SOCK_CLOEXEC) {
- retval_socket = kern_fcntl(td, td->td_retval[0],
- F_SETFD, FD_CLOEXEC);
- if (retval_socket) {
- (void)kern_close(td, td->td_retval[0]);
- goto out;
- }
+ retval_socket = linux_set_socket_flags(td, td->td_retval[0],
+ socket_flags);
+ if (retval_socket) {
+ (void)kern_close(td, td->td_retval[0]);
+ goto out;
}
if (bsd_args.type == SOCK_RAW
OpenPOWER on IntegriCloud