Source-Changes archive

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

Re: CVS commit: src/sys/compat/linux/common



On Thu, Feb 24, 2005 at 08:15:53AM +0000, Martin Husemann wrote:
> 
> Module Name:  src
> Committed By: martin
> Date:         Thu Feb 24 08:15:53 UTC 2005
> 
> Modified Files:
>       src/sys/compat/linux/common: linux_socket.c
> 
> Log Message:
> Fix number of elements calculation when converting socket options.
> Fixes bugs 4 and 5 reported by Ted Unangst on tech-kern.

I like this patch better, what do you think?

[Really, a common idiom like NELTS() belongs in sys/cdefs.h.  Perhaps it
should be called __arraycount().]

Dave

-- 
David Young             OJC Technologies
dyoung%ojctech.com@localhost      Urbana, IL * (217) 278-3933
Index: sys/compat/linux/common/linux_socket.c
===================================================================
RCS file: /cvsroot/src/sys/compat/linux/common/linux_socket.c,v
retrieving revision 1.53
diff -u -r1.53 linux_socket.c
--- sys/compat/linux/common/linux_socket.c      12 Sep 2004 15:32:55 -0000      
1.53
+++ sys/compat/linux/common/linux_socket.c      24 Feb 2005 08:32:00 -0000
@@ -182,25 +182,30 @@
        -1,             /* pseudo_AF_HDRCMPLT */
 };
 
-static const int bsd_to_linux_msg_flags_[] = {
-       MSG_OOB,                LINUX_MSG_OOB,
-       MSG_PEEK,               LINUX_MSG_PEEK,
-       MSG_DONTROUTE,          LINUX_MSG_DONTROUTE,
-       MSG_EOR,                LINUX_MSG_EOR,
-       MSG_TRUNC,              LINUX_MSG_TRUNC,
-       MSG_CTRUNC,             LINUX_MSG_CTRUNC,
-       MSG_WAITALL,            LINUX_MSG_WAITALL,
-       MSG_DONTWAIT,           LINUX_MSG_DONTWAIT,
-       MSG_BCAST,              0,              /* not supported, clear */
-       MSG_MCAST,              0,              /* not supported, clear */
-       -1, /* not supp */      LINUX_MSG_PROBE,
-       -1, /* not supp */      LINUX_MSG_FIN,
-       -1, /* not supp */      LINUX_MSG_SYN,
-       -1, /* not supp */      LINUX_MSG_CONFIRM,
-       -1, /* not supp */      LINUX_MSG_RST,
-       -1, /* not supp */      LINUX_MSG_ERRQUEUE,
-       -1, /* not supp */      LINUX_MSG_NOSIGNAL,
-       -1, /* not supp */      LINUX_MSG_MORE,
+#define        NELTS(__x)      (sizeof(__x) / sizeof(__x[0]))
+
+static const struct {
+       int bfl;
+       int lfl;
+} bsd_to_linux_msg_flags_[] = {
+       {MSG_OOB,               LINUX_MSG_OOB},
+       {MSG_PEEK,              LINUX_MSG_PEEK},
+       {MSG_DONTROUTE,         LINUX_MSG_DONTROUTE},
+       {MSG_EOR,               LINUX_MSG_EOR},
+       {MSG_TRUNC,             LINUX_MSG_TRUNC},
+       {MSG_CTRUNC,            LINUX_MSG_CTRUNC},
+       {MSG_WAITALL,           LINUX_MSG_WAITALL},
+       {MSG_DONTWAIT,          LINUX_MSG_DONTWAIT},
+       {MSG_BCAST,             0},             /* not supported, clear */
+       {MSG_MCAST,             0},             /* not supported, clear */
+       {-1, /* not supp */     LINUX_MSG_PROBE},
+       {-1, /* not supp */     LINUX_MSG_FIN},
+       {-1, /* not supp */     LINUX_MSG_SYN},
+       {-1, /* not supp */     LINUX_MSG_CONFIRM},
+       {-1, /* not supp */     LINUX_MSG_RST},
+       {-1, /* not supp */     LINUX_MSG_ERRQUEUE},
+       {-1, /* not supp */     LINUX_MSG_NOSIGNAL},
+       {-1, /* not supp */     LINUX_MSG_MORE},
 };
 
 /*
@@ -239,9 +244,9 @@
        if (lflag == 0)
                return (0);
 
-       for(i=0; i < sizeof(bsd_to_linux_msg_flags_)/2; i += 2) {
-               bfl = bsd_to_linux_msg_flags_[i];
-               lfl = bsd_to_linux_msg_flags_[i+1];
+       for(i = 0; i < NELTS(bsd_to_linux_msg_flags_); i++) {
+               bfl = bsd_to_linux_msg_flags_[i].bfl;
+               lfl = bsd_to_linux_msg_flags_[i].lfl;
 
                if (lfl == 0)
                        continue;
@@ -267,9 +272,9 @@
        if (bflag == 0)
                return (0);
 
-       for(i=0; i < sizeof(bsd_to_linux_msg_flags_)/2; i += 2) {
-               bfl = bsd_to_linux_msg_flags_[i];
-               lfl = bsd_to_linux_msg_flags_[i+1];
+       for(i = 0; i < NELTS(bsd_to_linux_msg_flags_); i++) {
+               bfl = bsd_to_linux_msg_flags_[i].bfl;
+               lfl = bsd_to_linux_msg_flags_[i].lfl;
 
                if (bfl <= 0)
                        continue;


Home | Main Index | Thread Index | Old Index