[PATCH v5 4/4] src/: Use countof() instead of sizeof division

Alejandro Colomar <[email protected]>
Newsgroups gmane.comp.printing.groff.general
Message-ID <49f759a68b0e1d71b28bf6ef32705cd8a6fcd3fd.1765122824.git.alx@kernel.org>
countof() is safer, simpler, and is standard (ISO C2y).

Signed-off-by: Alejandro Colomar <[email protected]>
---
 src/libs/libgroff/uniglyph.cpp  | 6 +++---
 src/preproc/eqn/delim.cpp       | 4 +++-
 src/preproc/eqn/text.cpp        | 6 +++---
 src/preproc/pic/lex.cpp         | 3 ++-
 src/preproc/refer/command.cpp   | 5 +++--
 src/preproc/refer/ref.cpp       | 4 +++-
 src/utils/hpftodit/hpuni.cpp    | 6 +++---
 src/utils/tfmtodit/tfmtodit.cpp | 7 ++++---
 8 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/src/libs/libgroff/uniglyph.cpp b/src/libs/libgroff/uniglyph.cpp
index c6b54ed24..3790c3568 100644
--- a/src/libs/libgroff/uniglyph.cpp
+++ b/src/libs/libgroff/uniglyph.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include "lib.h"
 
 #include "stringclass.h"
@@ -431,9 +433,7 @@ static struct unicode_to_glyph_init {
 
 unicode_to_glyph_init::unicode_to_glyph_init()
 {
-  for (unsigned int i = 0;
-       i < sizeof(unicode_to_glyph_list)/sizeof(unicode_to_glyph_list[0]);
-       i++) {
+  for (unsigned int i = 0; i < countof(unicode_to_glyph_list); i++) {
     unicode_to_glyph *utg = new unicode_to_glyph[1];
     utg->value = (char *)unicode_to_glyph_list[i].value;
     unicode_to_glyph_table.define(unicode_to_glyph_list[i].key, utg);
diff --git a/src/preproc/eqn/delim.cpp b/src/preproc/eqn/delim.cpp
index 452826c13..cfbcb2782 100644
--- a/src/preproc/eqn/delim.cpp
+++ b/src/preproc/eqn/delim.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include <assert.h>
 
 #include "eqn.h"
@@ -162,7 +164,7 @@ struct delimiter {
   },
 };
 
-const int DELIM_TABLE_SIZE = int(sizeof(delim_table)/sizeof(delim_table[0]));
+const int DELIM_TABLE_SIZE = int(countof(delim_table));
 
 class delim_box : public box {
 private:
diff --git a/src/preproc/eqn/text.cpp b/src/preproc/eqn/text.cpp
index 59e39e698..5e024f551 100644
--- a/src/preproc/eqn/text.cpp
+++ b/src/preproc/eqn/text.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include <ctype.h>
 #include <stdlib.h>
 #include "eqn.h"
@@ -396,9 +398,7 @@ struct map entity_table[] = {
 const char *special_to_entity(const char *sp)
 {
   struct map *mp;
-  for (mp = entity_table; 
-       mp < entity_table + sizeof(entity_table)/sizeof(entity_table[0]); 
-       mp++) {
+  for (mp = entity_table; mp < entity_table + countof(entity_table); mp++) {
     if (strcmp(mp->from, sp) == 0)
       return mp->to;
   }
diff --git a/src/preproc/pic/lex.cpp b/src/preproc/pic/lex.cpp
index d81781031..50efa7cbd 100644
--- a/src/preproc/pic/lex.cpp
+++ b/src/preproc/pic/lex.cpp
@@ -23,6 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <assert.h>
 #include <errno.h>
 #include <math.h> // pow()
+#include <stdcountof.h>
 #include <stdio.h> // EOF, FILE, fclose(), fopen(), getc(), ungetc()
 #include <string.h> // strerror()
 
@@ -571,7 +572,7 @@ int lookup_keyword(const char *str, int len)
   };
   
   const keyword *start = table;
-  const keyword *end = table + sizeof(table)/sizeof(table[0]);
+  const keyword *end = table + countof(table);
   while (start < end) {
     // start <= target < end
     const keyword *mid = start + (end - start)/2;
diff --git a/src/preproc/refer/command.cpp b/src/preproc/refer/command.cpp
index f24a08111..eef7ca3af 100644
--- a/src/preproc/refer/command.cpp
+++ b/src/preproc/refer/command.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include "refer.h"
 #include "refid.h"
 #include "search.h"
@@ -758,8 +760,7 @@ static int check_args(const char *types, const char *name,
 
 static void execute_command(const char *name, int argc, argument *argv)
 {
-  for (unsigned int i = 0;
-       i < sizeof(command_table)/sizeof(command_table[0]); i++)
+  for (unsigned int i = 0; i < countof(command_table); i++)
     if (strcmp(name, command_table[i].name) == 0) {
       if (check_args(command_table[i].arg_types, name, argc, argv))
 	(*command_table[i].func)(argc, argv);
diff --git a/src/preproc/refer/ref.cpp b/src/preproc/refer/ref.cpp
index 0cb9f632e..64e9817a4 100644
--- a/src/preproc/refer/ref.cpp
+++ b/src/preproc/refer/ref.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include "refer.h"
 #include "refid.h"
 #include "ref.h"
@@ -955,7 +957,7 @@ static int find_month(const char *start, const char *end)
     while (ptr < end && csalpha(*ptr))
       ptr++;
     if (ptr - start >= 3) {
-      for (unsigned int i = 0; i < sizeof(months)/sizeof(months[0]); i++) {
+      for (unsigned int i = 0; i < countof(months); i++) {
 	const char *q = months[i];
 	const char *p = start;
 	for (; p < ptr; p++, q++)
diff --git a/src/utils/hpftodit/hpuni.cpp b/src/utils/hpftodit/hpuni.cpp
index b1b17d650..7fc5ad9d0 100644
--- a/src/utils/hpftodit/hpuni.cpp
+++ b/src/utils/hpftodit/hpuni.cpp
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include <config.h>
 #endif
 
+#include <stdcountof.h>
+
 #include "lib.h"
 
 #include "stringclass.h"
@@ -685,9 +687,7 @@ static struct hp_msl_to_unicode_init {
 } _hp_msl_to_unicode_init;
 
 hp_msl_to_unicode_init::hp_msl_to_unicode_init() {
-  for (unsigned int i = 0;
-       i < sizeof(hp_msl_to_unicode_list)/sizeof(hp_msl_to_unicode_list[0]);
-       i++) {
+  for (unsigned int i = 0; i < countof(hp_msl_to_unicode_list); i++) {
     hp_msl_to_unicode *ptu = new hp_msl_to_unicode[1];
     ptu->value = (char *)hp_msl_to_unicode_list[i].value;
     hp_msl_to_unicode_table.define(hp_msl_to_unicode_list[i].key, ptu);
diff --git a/src/utils/tfmtodit/tfmtodit.cpp b/src/utils/tfmtodit/tfmtodit.cpp
index b8183f635..a86d6e52c 100644
--- a/src/utils/tfmtodit/tfmtodit.cpp
+++ b/src/utils/tfmtodit/tfmtodit.cpp
@@ -53,6 +53,7 @@ both be zero. */
 #include <assert.h>
 #include <errno.h>
 #include <math.h> // atan2()
+#include <stdcountof.h>
 #include <stdlib.h> // exit(), EXIT_SUCCESS, strtol()
 
 #include <getopt.h> // getopt_long()
@@ -807,8 +808,8 @@ int main(int argc, char **argv)
   // Print the list of ligatures.
   // First find the indices of each character that can participate in
   // a ligature.
-  size_t lig_char_entries = sizeof(lig_chars)/sizeof(lig_chars[0]);
-  size_t lig_table_entries = sizeof(lig_table)/sizeof(lig_table[0]);
+  size_t lig_char_entries = countof(lig_chars);
+  size_t lig_table_entries = countof(lig_table);
   for (i = 0; i < 256; i++)
     for (unsigned int j = 0; j < lig_char_entries; j++)
       for (char_list *p = table[i]; p; p = p->next)
@@ -869,7 +870,7 @@ int main(int argc, char **argv)
       m[5] = g.get_right_adjustment(i);
       printf("%s\t%d", p->ch, m[0]*MULTIPLIER);
       int j;
-      for (j = int(sizeof(m)/sizeof(m[0])) - 1; j > 0; j--)
+      for (j = int(countof(m)) - 1; j > 0; j--)
 	if (m[j] != 0)
 	  break;
       for (k = 1; k <= j; k++)
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.