Deleted Added
full compact
linux_socket.c (73353) linux_socket.c (83221)
1/*-
2 * Copyright (c) 1995 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
1/*-
2 * Copyright (c) 1995 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: head/sys/compat/linux/linux_socket.c 73353 2001-03-02 19:29:53Z jlemon $
28 * $FreeBSD: head/sys/compat/linux/linux_socket.c 83221 2001-09-08 19:07:04Z marcel $
29 */
30
31/* XXX we use functions that might not exist. */
32#include "opt_compat.h"
33
34#ifndef COMPAT_43
35#error "Unable to compile Linux-emulator due to missing COMPAT_43 option!"
36#endif

--- 381 unchanged lines hidden (view full) ---

418 * error getsockopt(SOL_SOCKET, SO_ERROR) would return on BSD.
419 */
420 error = holdsock(p->p_fd, linux_args.s, &fp);
421 if (error)
422 return (error);
423 error = EISCONN;
424 if (fp->f_flag & FNONBLOCK) {
425 so = (struct socket *)fp->f_data;
29 */
30
31/* XXX we use functions that might not exist. */
32#include "opt_compat.h"
33
34#ifndef COMPAT_43
35#error "Unable to compile Linux-emulator due to missing COMPAT_43 option!"
36#endif

--- 381 unchanged lines hidden (view full) ---

418 * error getsockopt(SOL_SOCKET, SO_ERROR) would return on BSD.
419 */
420 error = holdsock(p->p_fd, linux_args.s, &fp);
421 if (error)
422 return (error);
423 error = EISCONN;
424 if (fp->f_flag & FNONBLOCK) {
425 so = (struct socket *)fp->f_data;
426 if ((u_int)so->so_emuldata == 0)
426 if (so->so_emuldata == 0)
427 error = so->so_error;
428 so->so_emuldata = (void *)1;
429 }
430 fdrop(fp, p);
431 return (error);
432}
433
434#ifndef __alpha__

--- 430 unchanged lines hidden (view full) ---

865 bsd_args.val = linux_args.optval;
866 bsd_args.avalsize = linux_args.optlen;
867 return (getsockopt(p, &bsd_args));
868}
869
870int
871linux_socketcall(struct proc *p, struct linux_socketcall_args *args)
872{
427 error = so->so_error;
428 so->so_emuldata = (void *)1;
429 }
430 fdrop(fp, p);
431 return (error);
432}
433
434#ifndef __alpha__

--- 430 unchanged lines hidden (view full) ---

865 bsd_args.val = linux_args.optval;
866 bsd_args.avalsize = linux_args.optlen;
867 return (getsockopt(p, &bsd_args));
868}
869
870int
871linux_socketcall(struct proc *p, struct linux_socketcall_args *args)
872{
873 void *arg = (void *)args->args;
873
874 switch (args->what) {
875 case LINUX_SOCKET:
874
875 switch (args->what) {
876 case LINUX_SOCKET:
876 return (linux_socket(p, args->args));
877 return (linux_socket(p, arg));
877 case LINUX_BIND:
878 case LINUX_BIND:
878 return (linux_bind(p, args->args));
879 return (linux_bind(p, arg));
879 case LINUX_CONNECT:
880 case LINUX_CONNECT:
880 return (linux_connect(p, args->args));
881 return (linux_connect(p, arg));
881 case LINUX_LISTEN:
882 case LINUX_LISTEN:
882 return (linux_listen(p, args->args));
883 return (linux_listen(p, arg));
883 case LINUX_ACCEPT:
884 case LINUX_ACCEPT:
884 return (linux_accept(p, args->args));
885 return (linux_accept(p, arg));
885 case LINUX_GETSOCKNAME:
886 case LINUX_GETSOCKNAME:
886 return (linux_getsockname(p, args->args));
887 return (linux_getsockname(p, arg));
887 case LINUX_GETPEERNAME:
888 case LINUX_GETPEERNAME:
888 return (linux_getpeername(p, args->args));
889 return (linux_getpeername(p, arg));
889 case LINUX_SOCKETPAIR:
890 case LINUX_SOCKETPAIR:
890 return (linux_socketpair(p, args->args));
891 return (linux_socketpair(p, arg));
891 case LINUX_SEND:
892 case LINUX_SEND:
892 return (linux_send(p, args->args));
893 return (linux_send(p, arg));
893 case LINUX_RECV:
894 case LINUX_RECV:
894 return (linux_recv(p, args->args));
895 return (linux_recv(p, arg));
895 case LINUX_SENDTO:
896 case LINUX_SENDTO:
896 return (linux_sendto(p, args->args));
897 return (linux_sendto(p, arg));
897 case LINUX_RECVFROM:
898 case LINUX_RECVFROM:
898 return (linux_recvfrom(p, args->args));
899 return (linux_recvfrom(p, arg));
899 case LINUX_SHUTDOWN:
900 case LINUX_SHUTDOWN:
900 return (linux_shutdown(p, args->args));
901 return (linux_shutdown(p, arg));
901 case LINUX_SETSOCKOPT:
902 case LINUX_SETSOCKOPT:
902 return (linux_setsockopt(p, args->args));
903 return (linux_setsockopt(p, arg));
903 case LINUX_GETSOCKOPT:
904 case LINUX_GETSOCKOPT:
904 return (linux_getsockopt(p, args->args));
905 return (linux_getsockopt(p, arg));
905 case LINUX_SENDMSG:
906 do {
907 int error;
908 int level;
909 caddr_t control;
910 struct {
911 int s;
912 const struct msghdr *msg;
913 int flags;
906 case LINUX_SENDMSG:
907 do {
908 int error;
909 int level;
910 caddr_t control;
911 struct {
912 int s;
913 const struct msghdr *msg;
914 int flags;
914 } *uap = args->args;
915 } *uap = arg;
915
916 error = copyin(&uap->msg->msg_control, &control,
917 sizeof(caddr_t));
918 if (error)
919 return (error);
920
921 if (control == NULL)
922 goto done;

--- 11 unchanged lines hidden (view full) ---

934 level = SOL_SOCKET;
935 error = copyout(&level,
936 &((struct cmsghdr *)control)->cmsg_level,
937 sizeof(int));
938 if (error)
939 return (error);
940 }
941 done:
916
917 error = copyin(&uap->msg->msg_control, &control,
918 sizeof(caddr_t));
919 if (error)
920 return (error);
921
922 if (control == NULL)
923 goto done;

--- 11 unchanged lines hidden (view full) ---

935 level = SOL_SOCKET;
936 error = copyout(&level,
937 &((struct cmsghdr *)control)->cmsg_level,
938 sizeof(int));
939 if (error)
940 return (error);
941 }
942 done:
942 return (sendmsg(p, args->args));
943 return (sendmsg(p, arg));
943 } while (0);
944 case LINUX_RECVMSG:
944 } while (0);
945 case LINUX_RECVMSG:
945 return (linux_recvmsg(p, args->args));
946 return (linux_recvmsg(p, arg));
946 }
947
948 uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what);
949 return (ENOSYS);
950}
951#endif /*!__alpha__*/
947 }
948
949 uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what);
950 return (ENOSYS);
951}
952#endif /*!__alpha__*/