infra: add CYG_ARRAY_SIZE() macro

Andrew Lunn andrew@lunn.ch
Fri May 19 10:18:00 GMT 2006


On Wed, May 17, 2006 at 05:35:52PM +0100, David Vrabel wrote:
> Andrew Lunn wrote:
> > On Wed, May 17, 2006 at 05:13:47PM +0100, David Vrabel wrote:
> >> I've had to use something like this quite a bit so I guess it's useful
> >> enough to include.  It does the same thing as Linux's ARRAY_SIZE macro.
> > 
> > I've always called this NELEM.
> 
> That would be a more descriptive name.  Have another patch so you can
> choose which (if any) to apply.

Thanks

I also change most of the current NELEM's to CYG_NELEM.

  Andrew
-------------- next part --------------
Index: packages/infra/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/infra/current/ChangeLog,v
retrieving revision 1.54
diff -u -r1.54 ChangeLog
--- packages/infra/current/ChangeLog	8 May 2006 17:41:55 -0000	1.54
+++ packages/infra/current/ChangeLog	19 May 2006 10:13:30 -0000
@@ -1,3 +1,8 @@
+2006-05-17  David Vrabel <dvrabel@arcom.com>
+ 
+	* include/cyg_type.h: #define CYG_NELEM to calculate the
+ 	number of elements in a (statically allocated) array.
+ 
 2006-05-08  Sergei Gavrikov <sg@belvok.com>
 	
 	* src/buffer.cxx: Fix the compiler warnings.
Index: packages/infra/current/include/cyg_type.h
===================================================================
RCS file: /cvs/ecos/ecos/packages/infra/current/include/cyg_type.h,v
retrieving revision 1.23
diff -u -r1.23 cyg_type.h
--- packages/infra/current/include/cyg_type.h	22 Jul 2005 09:20:45 -0000	1.23
+++ packages/infra/current/include/cyg_type.h	19 May 2006 10:13:30 -0000
@@ -251,6 +251,11 @@
 typedef cyg_haladdrword CYG_ADDRWORD;
 
 // -------------------------------------------------------------------------
+// Number of elements in a (statically allocated) array.
+
+#define CYG_NELEM(a) (sizeof(a) / sizeof((a)[0]))
+
+// -------------------------------------------------------------------------
 // Constructor ordering macros.  These are added as annotations to all
 // static objects to order the constuctors appropriately.
 
Index: packages/net/ns/dns/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos-opt/net/net/ns/dns/current/ChangeLog,v
retrieving revision 1.20
diff -u -r1.20 ChangeLog
--- packages/net/ns/dns/current/ChangeLog	30 Jul 2005 11:26:29 -0000	1.20
+++ packages/net/ns/dns/current/ChangeLog	19 May 2006 10:13:31 -0000
@@ -1,3 +1,7 @@
+2006-05-19  Andrew Lunn  <andrew.lunn@ascom.ch>
+
+	* tests/dns1.c (dns_test_thread): Use CYG_NELEM from infra.
+
 2005-07-29  Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* src/dns.c Various casts and type fixes to stop gcc 4 warnings.
Index: packages/net/ns/dns/current/tests/dns1.c
===================================================================
RCS file: /cvs/ecos/ecos-opt/net/net/ns/dns/current/tests/dns1.c,v
retrieving revision 1.8
diff -u -r1.8 dns1.c
--- packages/net/ns/dns/current/tests/dns1.c	30 Jul 2005 11:26:29 -0000	1.8
+++ packages/net/ns/dns/current/tests/dns1.c	19 May 2006 10:13:32 -0000
@@ -67,8 +67,6 @@
 static cyg_thread thread_data;
 static cyg_handle_t thread_handle;
 
-#define NELEM(x) (sizeof(x) / sizeof(x[0]))
-
 struct test_info_s {
     char * dns_server_v4;
     char * dns_server_v6;
@@ -908,7 +906,7 @@
 
     CYG_TEST_INFO("Starting dns1 test");
     
-    for (i = 0; i < NELEM(test_info); i++) {
+    for (i = 0; i < CYG_NELEM(test_info); i++) {
       dns_test(&test_info[i]);
     }
     
Index: packages/net/bsd_tcpip/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos-opt/net/net/bsd_tcpip/current/ChangeLog,v
retrieving revision 1.59
diff -u -r1.59 ChangeLog
--- packages/net/bsd_tcpip/current/ChangeLog	8 May 2006 17:21:36 -0000	1.59
+++ packages/net/bsd_tcpip/current/ChangeLog	19 May 2006 10:13:33 -0000
@@ -1,3 +1,7 @@
+2006-05-19  Andrew Lunn  <andrew.lunn@ascom.ch>
+
+	* tests/sysctl1.c: Use CYG_NELEM from infra. 
+
 2006-05-08  Andy Jackson <andy@grapevinetech.co.uk>
 
 	* src/ecos/support.c (cyg_net_show_mbufs): Use %p in diag_printf
Index: packages/net/bsd_tcpip/current/tests/sysctl1.c
===================================================================
RCS file: /cvs/ecos/ecos-opt/net/net/bsd_tcpip/current/tests/sysctl1.c,v
retrieving revision 1.2
diff -u -r1.2 sysctl1.c
--- packages/net/bsd_tcpip/current/tests/sysctl1.c	2 Jun 2004 07:33:33 -0000	1.2
+++ packages/net/bsd_tcpip/current/tests/sysctl1.c	19 May 2006 10:13:34 -0000
@@ -33,9 +33,6 @@
 #include <sys/sysctl.h>
 
 #include <cyg/infra/testcase.h>
-#ifndef NELEM
-#define NELEM(x) sizeof(x)/sizeof(*x)
-#endif
 
 #define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000)
 static char stack[STACK_SIZE];
@@ -65,7 +62,7 @@
 
     /* Test the OID to name function of sysctl*/
     oldbuffsize = sizeof(oldbuff);
-    ret = sysctl(mib_name_debug_name, NELEM(mib_name_debug_name), 
+    ret = sysctl(mib_name_debug_name, CYG_NELEM(mib_name_debug_name), 
                  oldbuff, &oldbuffsize, NULL, 0);
     if (ret == -1) CYG_TEST_FAIL("sysclt(mib_name) failed");
     CYG_TEST_INFO(oldbuff);
@@ -73,7 +70,7 @@
 
     /* Test the name to OID function of sysclt */
     oldbuffsize = sizeof(oldbuff);
-    ret = sysctl(mib_name2oid, NELEM(mib_name2oid), oldbuff, &oldbuffsize, 
+    ret = sysctl(mib_name2oid, CYG_NELEM(mib_name2oid), oldbuff, &oldbuffsize, 
                  name2oid, sizeof(name2oid));
     if (ret == -1) CYG_TEST_FAIL("sysclt(mib_name) failed");
     CYG_TEST_PASS_FAIL(((ret == 8 ) && 
@@ -82,8 +79,8 @@
                        "sysctl.name2oid");
     
     /* Walk the table using the next function of sysclt */
-    num_elem = NELEM(mib_next)+1;
-    new_oid = mib + NELEM(mib_next);
+    num_elem = CYG_NELEM(mib_next)+1;
+    new_oid = mib + CYG_NELEM(mib_next);
     mib[2] = 0;
     do {
       memcpy(mib,mib_next,sizeof(mib_next));
@@ -97,7 +94,7 @@
         }
       }
       p = pbuff;
-      num_elem = NELEM(mib_next) + (ret / 4);
+      num_elem = CYG_NELEM(mib_next) + (ret / 4);
       i=0;
       while (ret > 0) {
         p+=diag_sprintf(p, "%d ",new_oid[i++]);
@@ -166,7 +163,7 @@
     } while (ret != -1);
 
     /* Tests for sysctlnametomib */
-    num_elem = NELEM(mib);
+    num_elem = CYG_NELEM(mib);
     ret = sysctlnametomib(name2oid, mib,&num_elem);
     if (ret == -1) CYG_TEST_FAIL("sysctlnametomib failed");
     CYG_TEST_PASS_FAIL(((num_elem == 2 ) && 
@@ -180,7 +177,7 @@
     CYG_TEST_PASS_FAIL((ret == -1) && (errno = ENOMEM), 
                        "sysctlnametooid2");
     /* This time with an unknown name */
-    num_elem = NELEM(mib);
+    num_elem = CYG_NELEM(mib);
     ret = sysctlnametomib("unknown.unknown", mib,&num_elem);
     CYG_TEST_PASS_FAIL((ret == -1) && (errno = ENOENT), 
                        "sysctlnametooid3");
Index: packages/kernel/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/kernel/current/ChangeLog,v
retrieving revision 1.134
diff -u -r1.134 ChangeLog
--- packages/kernel/current/ChangeLog	9 May 2006 16:12:53 -0000	1.134
+++ packages/kernel/current/ChangeLog	19 May 2006 10:13:40 -0000
@@ -1,3 +1,8 @@
+2006-05-19  Andrew Lunn  <andrew.lunn@ascom.ch>
+
+	* host/instr/dump_instr.c: Use CYG_NELEM from infra.
+	* src/instrmnt/meminst.cxx: Use CYG_NELEM from infra.
+
 2006-05-09  Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* tests/stress_threads.c: Add string.h to avoid compiler warning.
Index: packages/kernel/current/host/instr/dump_instr.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/kernel/current/host/instr/dump_instr.c,v
retrieving revision 1.3
diff -u -r1.3 dump_instr.c
--- packages/kernel/current/host/instr/dump_instr.c	12 Dec 2002 18:31:42 -0000	1.3
+++ packages/kernel/current/host/instr/dump_instr.c	19 May 2006 10:13:40 -0000
@@ -1,4 +1,3 @@
-
 #include <pkgconf/kernel.h>
 #include <cyg/kernel/ktypes.h>         // base kernel types
 #include <cyg/kernel/instrmnt.h>
@@ -23,7 +22,7 @@
 #ifdef CYGDBG_KERNEL_INSTRUMENT_MSGS
 #define CYGDBG_KERNEL_INSTRUMENT_MSGS_DEFINE_TABLE
 #include <cyg/kernel/instrument_desc.h>
-#define NELEM(x) (sizeof(x)/sizeof*(x))
+
 externC char * cyg_instrument_msg(CYG_WORD16 type) {
 
   struct instrument_desc_s *record;
@@ -31,7 +30,7 @@
   CYG_WORD cl, event;
 
   record = instrument_desc;
-  end_record = &instrument_desc[NELEM(instrument_desc)-1];
+  end_record = &instrument_desc[CYG_NELEM(instrument_desc)-1];
   cl = type & 0xff00;
   event = type & 0x00ff;
 
Index: packages/kernel/current/src/instrmnt/meminst.cxx
===================================================================
RCS file: /cvs/ecos/ecos/packages/kernel/current/src/instrmnt/meminst.cxx,v
retrieving revision 1.10
diff -u -r1.10 meminst.cxx
--- packages/kernel/current/src/instrmnt/meminst.cxx	12 Dec 2002 18:31:50 -0000	1.10
+++ packages/kernel/current/src/instrmnt/meminst.cxx	19 May 2006 10:13:40 -0000
@@ -226,7 +226,7 @@
 #ifdef CYGDBG_KERNEL_INSTRUMENT_MSGS
 #define CYGDBG_KERNEL_INSTRUMENT_MSGS_DEFINE_TABLE
 #include <cyg/kernel/instrument_desc.h>
-#define NELEM(x) (sizeof(x)/sizeof*(x))
+
 externC char * cyg_instrument_msg(CYG_WORD16 type) {
 
   struct instrument_desc_s *record;
@@ -234,7 +234,7 @@
   CYG_WORD cl, event;
 
   record = instrument_desc;
-  end_record = &instrument_desc[NELEM(instrument_desc)-1];
+  end_record = &instrument_desc[CYG_NELEM(instrument_desc)-1];
   cl = type & 0xff00;
   event = type & 0x00ff;
 


More information about the Ecos-patches mailing list