bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Implement getsockopt (fd, SOL_SOCKET, SO_TYPE, ...)


From: Emilio Pozuelo Monfort
Subject: Re: [PATCH] Implement getsockopt (fd, SOL_SOCKET, SO_TYPE, ...)
Date: Thu, 15 Jul 2010 16:49:10 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.10) Gecko/20100619 Icedove/3.0.5

On 15/07/10 16:36, Jérémie Koenig wrote:
> On Thu, Jul 15, 2010 at 4:07 PM, Emilio Pozuelo Monfort
> <pochu27@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 <pochu27@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 <miles@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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]