[vlc-devel] [PATCH] use ARRAY_SIZE when applicable

Alexandre Janniaux ajanni at videolabs.io
Sun Feb 23 16:19:38 CET 2020


It's easier to read than sizeof(x)/sizeof(*x) and provides more
information than using a define on this previous value.
---
 src/misc/actions.c                  | 15 +++++++--------
 src/misc/fourcc.c                   | 15 ++++++---------
 src/misc/keystore.c                 |  3 +--
 src/misc/threads.c                  |  4 ++--
 src/misc/update.c                   |  2 +-
 src/network/httpd.c                 |  4 ++--
 src/posix/thread.c                  |  2 +-
 src/test/dictionary.c               |  2 +-
 src/test/extensions.c               |  2 +-
 src/test/url.c                      |  2 +-
 src/video_output/vout_subpictures.c |  2 +-
 test/libvlc/slaves.c                | 22 ++++++++++------------
 test/modules/demux/dashuri.cpp      |  3 ++-
 test/modules/keystore/test.c        |  2 +-
 test/src/input/stream.c             |  2 +-
 test/src/input/thumbnail.c          |  2 +-
 test/src/misc/keystore.c            |  2 +-
 17 files changed, 40 insertions(+), 46 deletions(-)

diff --git a/src/misc/actions.c b/src/misc/actions.c
index 54996e6ce8..b10b07936e 100644
--- a/src/misc/actions.c
+++ b/src/misc/actions.c
@@ -117,7 +117,6 @@ static const struct key_descriptor
     { N_("Zoom In"),           KEY_ZOOM_IN           },
     { N_("Zoom Out"),          KEY_ZOOM_OUT          },
 };
-#define KEYS_COUNT (sizeof(s_keys)/sizeof(s_keys[0]))
 
 static int keystrcmp (const void *key, const void *elem)
 {
@@ -197,7 +196,7 @@ uint_fast32_t vlc_str2keycode (const char *name)
         name += len + 1;
     }
 
-    struct key_descriptor *d = bsearch (name, s_keys, KEYS_COUNT,
+    struct key_descriptor *d = bsearch (name, s_keys, ARRAY_SIZE(s_keys),
                                         sizeof (s_keys[0]), keystrcmp);
     if (d != NULL)
         code = d->i_code;
@@ -230,7 +229,7 @@ char *vlc_keycode2str (uint_fast32_t code, bool locale)
     char *str, buf[5];
     uintptr_t key = code & ~KEY_MODIFIER;
 
-    for (size_t i = 0; i < KEYS_COUNT; i++)
+    for (size_t i = 0; i < ARRAY_SIZE(s_keys); i++)
         if (s_keys[i].i_code == key)
         {
             name = s_keys[i].psz;
@@ -377,7 +376,6 @@ static const struct name2action
     { "zoom-original", ACTIONID_ZOOM_ORIGINAL, },
     { "zoom-quarter", ACTIONID_ZOOM_QUARTER, },
 };
-#define ACTIONS_COUNT (sizeof (s_names2actions) / sizeof (s_names2actions[0]))
 
 struct mapping
 {
@@ -505,7 +503,7 @@ int libvlc_InternalActionsInit (libvlc_int_t *libvlc)
     assert(libvlc != NULL);
 
     vlc_object_t *obj = VLC_OBJECT(libvlc);
-    vlc_actions_t *as = malloc (sizeof (*as) + (1 + ACTIONS_COUNT)
+    vlc_actions_t *as = malloc (sizeof (*as) + (1 + ARRAY_SIZE(s_names2actions))
                       * sizeof (*as->ppsz_keys));
 
     if (unlikely(as == NULL))
@@ -518,7 +516,7 @@ int libvlc_InternalActionsInit (libvlc_int_t *libvlc)
     var_Create (obj, "key-action", VLC_VAR_INTEGER);
 
     /* Initialize from configuration */
-    for (size_t i = 0; i < ACTIONS_COUNT; i++)
+    for (size_t i = 0; i < ARRAY_SIZE(s_names2actions); i++)
     {
 #ifndef NDEBUG
         if (i > 0
@@ -537,7 +535,7 @@ int libvlc_InternalActionsInit (libvlc_int_t *libvlc)
         init_action (obj, &as->map, name + 7, s_names2actions[i].id);
         init_action (obj, &as->global_map, name, s_names2actions[i].id);
     }
-    as->ppsz_keys[ACTIONS_COUNT] = NULL;
+    as->ppsz_keys[ARRAY_SIZE(s_names2actions)] = NULL;
 
     /* Initialize mouse wheel events */
     add_wheel_mapping (&as->map, KEY_MOUSEWHEELRIGHT, KEY_MOUSEWHEELLEFT,
@@ -593,7 +591,8 @@ vlc_actions_get_id (const char *name)
         return ACTIONID_NONE;
     name += 4;
 
-    act = bsearch(name, s_names2actions, ACTIONS_COUNT, sizeof(*act), actcmp);
+    act = bsearch(name, s_names2actions, ARRAY_SIZE(s_names2actions),
+                  sizeof(*act), actcmp);
     return (act != NULL) ? act->id : ACTIONID_NONE;
 }
 
diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c
index 7211b7d745..32234dfb1a 100644
--- a/src/misc/fourcc.c
+++ b/src/misc/fourcc.c
@@ -72,23 +72,20 @@ static vlc_fourcc_t Lookup(vlc_fourcc_t fourcc, const char **restrict dsc,
 
 static vlc_fourcc_t LookupVideo(vlc_fourcc_t fourcc, const char **restrict dsc)
 {
-    return Lookup(fourcc, dsc, mapping_video,
-                  sizeof (mapping_video) / sizeof (mapping_video[0]),
-                  desc_video, sizeof (desc_video) / sizeof (desc_video[0]));
+    return Lookup(fourcc, dsc, mapping_video, ARRAY_SIZE(mapping_video),
+                  desc_video, ARRAY_SIZE(desc_video));
 }
 
 static vlc_fourcc_t LookupAudio(vlc_fourcc_t fourcc, const char **restrict dsc)
 {
-    return Lookup(fourcc, dsc, mapping_audio,
-                  sizeof (mapping_audio) / sizeof (mapping_audio[0]),
-                  desc_audio, sizeof (desc_audio) / sizeof (desc_audio[0]));
+    return Lookup(fourcc, dsc, mapping_audio, ARRAY_SIZE(mapping_audio),
+                  desc_audio, ARRAY_SIZE(desc_audio));
 }
 
 static vlc_fourcc_t LookupSpu(vlc_fourcc_t fourcc, const char **restrict dsc)
 {
-    return Lookup(fourcc, dsc, mapping_spu,
-                  sizeof (mapping_spu) / sizeof (mapping_spu[0]),
-                  desc_spu, sizeof (desc_spu) / sizeof (desc_spu[0]));
+    return Lookup(fourcc, dsc, mapping_spu, ARRAY_SIZE(mapping_spu),
+                  desc_spu, ARRAY_SIZE(desc_spu));
 }
 
 static vlc_fourcc_t LookupCat(vlc_fourcc_t fourcc, const char **restrict dsc,
diff --git a/src/misc/keystore.c b/src/misc/keystore.c
index 55b094350d..b5b4cc7e50 100644
--- a/src/misc/keystore.c
+++ b/src/misc/keystore.c
@@ -234,8 +234,7 @@ protocol_set_port(const vlc_url_t *p_url, char *psz_port)
         i_port = p_url->i_port;
     else
     {
-        for (unsigned int i = 0; i < sizeof(protocol_default_ports)
-                                   / sizeof(*protocol_default_ports); ++i)
+        for (unsigned int i = 0; i < ARRAY_SIZE(protocol_default_ports); ++i)
         {
             if (strcasecmp(p_url->psz_protocol,
                            protocol_default_ports[i].psz_protocol) == 0)
diff --git a/src/misc/threads.c b/src/misc/threads.c
index 7855ae11b9..81855ed7fe 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -41,9 +41,9 @@ void vlc_global_mutex (unsigned n, bool acquire)
         VLC_STATIC_MUTEX, // For MTA holder
 #endif
     };
-    static_assert (VLC_MAX_MUTEX == (sizeof (locks) / sizeof (locks[0])),
+    static_assert (VLC_MAX_MUTEX == ARRAY_SIZE(locks),
                    "Wrong number of global mutexes");
-    assert (n < (sizeof (locks) / sizeof (locks[0])));
+    assert (n < ARRAY_SIZE(locks));
 
     vlc_mutex_t *lock = locks + n;
     if (acquire)
diff --git a/src/misc/update.c b/src/misc/update.c
index f5d6dc4ebe..864e525bd3 100644
--- a/src/misc/update.c
+++ b/src/misc/update.c
@@ -449,7 +449,7 @@ bool update_NeedUpgrade( update_t *p_update )
         p_update->release.i_extra
     };
 
-    for (unsigned i = 0; i < sizeof latest / sizeof *latest; i++) {
+    for (unsigned i = 0; i < ARRAY_SIZE( latest ); i++) {
         /* there is a new version available */
         if (latest[i] > current[i])
             return true;
diff --git a/src/network/httpd.c b/src/network/httpd.c
index 2b56c178a1..6853611574 100644
--- a/src/network/httpd.c
+++ b/src/network/httpd.c
@@ -1740,7 +1740,7 @@ static void httpdLoop(httpd_host_t *host)
         }
 
         struct pollfd *pufd = ufd + nfd;
-        assert (pufd < ufd + (sizeof (ufd) / sizeof (ufd[0])));
+        assert (pufd < ufd + ARRAY_SIZE (ufd));
 
         pufd->events = pufd->revents = 0;
 
@@ -1990,7 +1990,7 @@ static void httpdLoop(httpd_host_t *host)
     vlc_list_foreach(cl, &host->clients, node) {
         const struct pollfd *pufd = &ufd[nfd];
 
-        assert(pufd < &ufd[sizeof(ufd) / sizeof(ufd[0])]);
+        assert(pufd < &ufd[ARRAY_SIZE(ufd)]);
 
         if (vlc_tls_GetFD(cl->sock) != pufd->fd)
             continue; // we were not waiting for this client
diff --git a/src/posix/thread.c b/src/posix/thread.c
index dfe0ea7c9d..8accd05187 100644
--- a/src/posix/thread.c
+++ b/src/posix/thread.c
@@ -71,7 +71,7 @@ void vlc_trace (const char *fn, const char *file, unsigned line)
      fflush (stderr); /* needed before switch to low-level I/O */
 #ifdef HAVE_BACKTRACE
      void *stack[20];
-     int len = backtrace (stack, sizeof (stack) / sizeof (stack[0]));
+     int len = backtrace (stack, ARRAY_SIZE (stack) );
      backtrace_symbols_fd (stack, len, 2);
 #endif
      fsync (2);
diff --git a/src/test/dictionary.c b/src/test/dictionary.c
index 92b1d82328..3c00a50dff 100644
--- a/src/test/dictionary.c
+++ b/src/test/dictionary.c
@@ -65,7 +65,7 @@ int main (void)
     static const char * our_keys[] = {
         "Hello", "Hella", "flowmeter", "Frostnipped", "frostnipped", "remiform", "quadrifoliolate", "singularity", "unafflicted"
     };
-    const int size = sizeof(our_keys)/sizeof(our_keys[0]);
+    const int size = ARRAY_SIZE(our_keys);
     char ** keys;
     intptr_t i = 0;
 
diff --git a/src/test/extensions.c b/src/test/extensions.c
index 378570f996..ab71111cad 100644
--- a/src/test/extensions.c
+++ b/src/test/extensions.c
@@ -39,7 +39,7 @@ static void check_extensions( const char* const* extensions, size_t nb_exts )
      do \
      { \
         const char* const exts[] = { ext_list }; \
-        check_extensions( exts, sizeof( exts ) / sizeof( exts[0] ) ); \
+        check_extensions( exts, ARRAY_SIZE( exts ) ); \
      } while(0);
 
 int main(void)
diff --git a/src/test/url.c b/src/test/url.c
index a3a7c77847..d2b4361169 100644
--- a/src/test/url.c
+++ b/src/test/url.c
@@ -221,7 +221,7 @@ int main (void)
     }
 
     char buf[256];
-    char *tmpdir = getcwd(buf, sizeof (buf) / sizeof (*buf));
+    char *tmpdir = getcwd(buf, ARRAY_SIZE (buf));
     if (tmpdir == NULL)
     {
         perror("getcwd");
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 3efd76ff1d..67db53aeb0 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -1161,7 +1161,7 @@ static subpicture_t *SpuRenderSubpictures(spu_t *spu,
     size_t subtitle_area_count = 0;
 
     subtitle_area = subtitle_area_buffer;
-    if (subtitle_region_count > sizeof(subtitle_area_buffer)/sizeof(*subtitle_area_buffer))
+    if (subtitle_region_count > ARRAY_SIZE(subtitle_area_buffer))
         subtitle_area = calloc(subtitle_region_count, sizeof(*subtitle_area));
 
     /* Process all subpictures and regions (in the right order) */
diff --git a/test/libvlc/slaves.c b/test/libvlc/slaves.c
index 7b2c24fa43..03510e3e5f 100644
--- a/test/libvlc/slaves.c
+++ b/test/libvlc/slaves.c
@@ -172,8 +172,7 @@ main (void)
         { NULL, libvlc_media_slave_type_subtitle, 0 /* none */ },
     };
 
-    #define EXPECTED_SLAVES_COUNT (sizeof(p_expected_slaves) / sizeof(*p_expected_slaves))
-    static_assert((sizeof(pp_slave_paths) / sizeof(*pp_slave_paths)) == EXPECTED_SLAVES_COUNT,
+    static_assert(ARRAY_SIZE(pp_slave_paths) == ARRAY_SIZE(p_expected_slaves),
                   "pp_slave_paths and p_expected_slaves mismatch");
 
     const char *pp_args[] = {
@@ -182,13 +181,12 @@ main (void)
         "--codec", "none", /* to ensure we don't depend on codec modules */
         NULL /* "sub-autodetect-file" place holder */
     };
-    #define ARGC (sizeof(pp_args) / sizeof(*pp_args))
 
-    libvlc_instance_t *p_vlc = libvlc_new(ARGC - 1, pp_args);
+    libvlc_instance_t *p_vlc = libvlc_new(ARRAY_SIZE(pp_args) - 1, pp_args);
     assert(p_vlc != NULL);
 
     /* Fill p_expected_slaves with correct VLC mrls */
-    for (unsigned int i = 0; i < EXPECTED_SLAVES_COUNT; ++i)
+    for (unsigned int i = 0; i < ARRAY_SIZE(p_expected_slaves); ++i)
     {
         p_expected_slaves[i].psz_uri = path_to_mrl(p_vlc, pp_slave_paths[i]);
         assert(p_expected_slaves[i].psz_uri != NULL);
@@ -197,12 +195,12 @@ main (void)
     printf("== Testing --sub-autodetect-fuzzy 1 (everything) ==\n");
     test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4",
                                       p_expected_slaves,
-                                      EXPECTED_SLAVES_COUNT);
+                                      ARRAY_SIZE(p_expected_slaves));
     libvlc_release(p_vlc);
 
     printf("== Testing --sub-autodetect-fuzzy 2 (full, left, and right match) ==\n");
     pp_args[2] = "2";
-    p_vlc = libvlc_new(ARGC - 1, pp_args);
+    p_vlc = libvlc_new(ARRAY_SIZE(pp_args) - 1, pp_args);
     assert(p_vlc != NULL);
     test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4",
                                       p_expected_slaves, 3);
@@ -214,7 +212,7 @@ main (void)
 
     printf("== Testing --sub-autodetect-fuzzy 3 (full and left match) ==\n");
     pp_args[2] = "3";
-    p_vlc = libvlc_new(ARGC - 1, pp_args);
+    p_vlc = libvlc_new(ARRAY_SIZE(pp_args) - 1, pp_args);
     assert(p_vlc != NULL);
     test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4",
                                       p_expected_slaves, 2);
@@ -222,20 +220,20 @@ main (void)
 
     printf("== Testing --sub-autodetect-fuzzy 4 (full match) ==\n");
     pp_args[2] = "4";
-    p_vlc = libvlc_new(ARGC - 1, pp_args);
+    p_vlc = libvlc_new(ARRAY_SIZE(pp_args) - 1, pp_args);
     assert(p_vlc != NULL);
     test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4",
                                       p_expected_slaves, 1);
     libvlc_release(p_vlc);
 
     printf("== Testing  --no-sub-autodetect-file (no match) ==\n");
-    pp_args[ARGC - 1] = "--no-sub-autodetect-file";
-    p_vlc = libvlc_new(ARGC, pp_args);
+    pp_args[ARRAY_SIZE(pp_args) - 1] = "--no-sub-autodetect-file";
+    p_vlc = libvlc_new(ARRAY_SIZE(pp_args), pp_args);
     assert(p_vlc != NULL);
     test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4", NULL, 0);
     libvlc_release(p_vlc);
 
-    for (unsigned int i = 0; i < EXPECTED_SLAVES_COUNT; ++i)
+    for (unsigned int i = 0; i < ARRAY_SIZE(p_expected_slaves); ++i)
         free(p_expected_slaves[i].psz_uri);
 
     return 0;
diff --git a/test/modules/demux/dashuri.cpp b/test/modules/demux/dashuri.cpp
index fb2be90e4a..925665002f 100644
--- a/test/modules/demux/dashuri.cpp
+++ b/test/modules/demux/dashuri.cpp
@@ -25,6 +25,7 @@
 
 #include <iostream>
 #include <cstring>
+#include <vlc_common.h>
 
 using namespace dash::mpd;
 
@@ -105,7 +106,7 @@ static const struct
 
 int main(int, char **)
 {
-    for(size_t i=0; i<sizeof(dataset)/sizeof(dataset[0]); i++)
+    for(size_t i=0; i<ARRAY_SIZE(dataset); i++)
     {
         std::string str = std::string(dataset[i].src);
 
diff --git a/test/modules/keystore/test.c b/test/modules/keystore/test.c
index 0ddb82758a..38e9ad9aab 100644
--- a/test/modules/keystore/test.c
+++ b/test/modules/keystore/test.c
@@ -309,7 +309,7 @@ main(int i_argc, char *ppsz_argv[])
     libvlc_instance_t *p_libvlc = libvlc_new(0, NULL);
     assert(p_libvlc != NULL);
 
-    for (unsigned int i = 0; i < sizeof(keystore_args)/sizeof(*keystore_args); ++i)
+    for (unsigned int i = 0; i < ARRAY_SIZE(keystore_args); ++i)
     {
         const char *psz_module = keystore_args[i].psz_module;
 
diff --git a/test/src/input/stream.c b/test/src/input/stream.c
index 86adbbae21..d5538e8a4b 100644
--- a/test/src/input/stream.c
+++ b/test/src/input/stream.c
@@ -199,7 +199,7 @@ stream_open( const char *psz_url )
     p_reader = calloc( 1, sizeof(struct reader) );
     assert( p_reader );
 
-    p_vlc = libvlc_new( sizeof(argv) / sizeof(argv[0]), argv );
+    p_vlc = libvlc_new( ARRAY_SIZE(argv), argv );
     assert( p_vlc != NULL );
 
     p_reader->u.s = vlc_stream_NewURL( p_vlc->p_libvlc_int, psz_url );
diff --git a/test/src/input/thumbnail.c b/test/src/input/thumbnail.c
index b7dc26f978..3a3e61a28e 100644
--- a/test/src/input/thumbnail.c
+++ b/test/src/input/thumbnail.c
@@ -115,7 +115,7 @@ static void test_thumbnails( libvlc_instance_t* p_vlc )
     vlc_cond_init( &ctx.cond );
     vlc_mutex_init( &ctx.lock );
 
-    for ( size_t i = 0; i < sizeof(test_params) / sizeof(test_params[0]); ++i)
+    for ( size_t i = 0; i < ARRAY_SIZE(test_params); ++i)
     {
         char* psz_mrl;
 
diff --git a/test/src/misc/keystore.c b/test/src/misc/keystore.c
index 36d07169e7..d510b5d1cf 100644
--- a/test/src/misc/keystore.c
+++ b/test/src/misc/keystore.c
@@ -353,7 +353,7 @@ main(void)
 
     libvlc_instance_t *p_libvlc = create_libvlc(i_vlc_argc, ppsz_vlc_argv);
 
-    for (unsigned int i = 0; i < sizeof(testcases)/sizeof(*testcases); ++i)
+    for (unsigned int i = 0; i < ARRAY_SIZE(testcases); ++i)
     {
         if (testcases[i].psz_url == NULL)
         {
-- 
2.25.1



More information about the vlc-devel mailing list