On 15/07/10 16:36, Jérémie Koenig wrote: > On Thu, Jul 15, 2010 at 4:07 PM, Emilio Pozuelo Monfort > <poch...@gmail.com> wrote: >> error_t >> S_socket_getopt (struct sock_user *user, >> int level, int opt, >> char **value, size_t *value_len) >> { >> + if (level == SOL_SOCKET) >> + { >> + if (opt == SO_TYPE) >> + { > > Maybe switch statements would be more future-friendly? > (just my 2 nitpicking cents) >
Here it goes, with a good commit message: >From ea7065824e13227f25a190978f19a691e704689e Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort <poch...@gmail.com> Date: Wed, 14 Jul 2010 18:40:36 +0200 Subject: [PATCH] Implement getsockopt (fd, SOL_SOCKET, SO_TYPE, ...) * pflocal/socket.c (S_socket_getopt): Add SO_TYPE support for SOL_SOCKET sockets. --- pflocal/socket.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pflocal/socket.c b/pflocal/socket.c index 06777ca..464bbc1 100644 --- a/pflocal/socket.c +++ b/pflocal/socket.c @@ -1,6 +1,6 @@ /* Socket-specific operations - Copyright (C) 1995, 2008 Free Software Foundation, Inc. + Copyright (C) 1995, 2008, 2010 Free Software Foundation, Inc. Written by Miles Bader <mi...@gnu.ai.mit.edu> @@ -410,14 +410,24 @@ S_socket_recv (struct sock_user *user, return err; } - -/* Stubs for currently unsupported rpcs. */ error_t S_socket_getopt (struct sock_user *user, int level, int opt, char **value, size_t *value_len) { + if (level == SOL_SOCKET) + { + if (opt == SO_TYPE) + { + if (value_len == NULL || value == NULL || *value == NULL) + return EINVAL; + *(int*)*value = user->sock->pipe_class->sock_type; + *value_len = sizeof (user->sock->pipe_class->sock_type); + return 0; + } + } + return EOPNOTSUPP; } -- 1.7.1