[vlc-devel] [PATCH 2/2] modules: allow NULL for matched module names

RĂ©mi Denis-Courmont remi at remlab.net
Fri Sep 25 21:15:38 CEST 2020


This just returns the non-zero priority modules. This matches the
behaviour of vlc_module_load() and module_need(), to simplify some of
the call sites.
---
 include/vlc_modules.h      |  3 ++-
 modules/codec/avcodec/va.c |  2 +-
 src/modules/modules.c      | 48 ++++++++++++++++++++------------------
 src/network/tls.c          |  4 ++--
 4 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/include/vlc_modules.h b/include/vlc_modules.h
index ec3c602934..6dbb891240 100644
--- a/include/vlc_modules.h
+++ b/include/vlc_modules.h
@@ -43,7 +43,8 @@ struct vlc_logger;
  * table.
  *
  * \param capability capability, i.e. class of module
- * \param names string of comma-separated requested module shortcut names
+ * \param names string of comma-separated requested module shortcut names,
+ *              or NULL for defaults
  * \param strict whether to exclude modules with no unmatching shortcut names
  * \param modules storage location for the base address of a sorted table
  *                of candidate modules (NULL on error) [OUT]
diff --git a/modules/codec/avcodec/va.c b/modules/codec/avcodec/va.c
index f9497759e9..5f747ed46d 100644
--- a/modules/codec/avcodec/va.c
+++ b/modules/codec/avcodec/va.c
@@ -109,7 +109,7 @@ vlc_va_t *vlc_va_New(vlc_object_t *obj, AVCodecContext *avctx,
         return NULL;
 
     module_t **mods;
-    ssize_t total = vlc_module_match("hw decoder", "any", false, &mods, NULL);
+    ssize_t total = vlc_module_match("hw decoder", NULL, false, &mods, NULL);
 
     for (ssize_t i = 0; i < total; i++) {
         vlc_va_open open = vlc_module_map(obj->logger, mods[i]);
diff --git a/src/modules/modules.c b/src/modules/modules.c
index 531f96ad96..2b9ed30fe0 100644
--- a/src/modules/modules.c
+++ b/src/modules/modules.c
@@ -125,32 +125,34 @@ ssize_t vlc_module_match(const char *capability, const char *names,
     *modules = sorted;
 
     /* Go through the list of module shortcut names. */
-    while (names[0] != '\0') {
-        const char *shortcut = names;
-        size_t slen = strcspn(names, ",");
-
-        names += slen;
-        names += strspn(names, ",");
-
-        /* "none" matches nothing and ends the search */
-        if (slen == 4 && strncasecmp("none", shortcut, 4) == 0) {
-            total = 0;
-            break;
-        }
+    if (names != NULL) {
+        while (names[0] != '\0') {
+            const char *shortcut = names;
+            size_t slen = strcspn(names, ",");
+
+            names += slen;
+            names += strspn(names, ",");
+
+            /* "none" matches nothing and ends the search */
+            if (slen == 4 && strncasecmp("none", shortcut, 4) == 0) {
+                total = 0;
+                break;
+            }
 
-        /* "any" matches everything with strictly positive score */
-        if (slen == 3 && strncasecmp("any", shortcut, 3) == 0) {
-            strict = false;
-            break;
-        }
+            /* "any" matches everything with strictly positive score */
+            if (slen == 3 && strncasecmp("any", shortcut, 3) == 0) {
+                strict = false;
+                break;
+            }
 
-        for (size_t i = 0; i < total; i++) {
-            module_t *cand = unsorted[i];
+            for (size_t i = 0; i < total; i++) {
+                module_t *cand = unsorted[i];
 
-            if (cand != NULL && module_match_name(cand, shortcut, slen)) {
-                assert(matches < total);
-                sorted[matches++] = cand;
-                unsorted[i] = NULL;
+                if (cand != NULL && module_match_name(cand, shortcut, slen)) {
+                    assert(matches < total);
+                    sorted[matches++] = cand;
+                    unsorted[i] = NULL;
+                }
             }
         }
     }
diff --git a/src/network/tls.c b/src/network/tls.c
index 25f1c95bdc..0bbcee8e00 100644
--- a/src/network/tls.c
+++ b/src/network/tls.c
@@ -59,7 +59,7 @@ vlc_tls_ServerCreate (vlc_object_t *obj, const char *cert_path,
         key_path = cert_path;
 
     module_t **mods;
-    ssize_t total = vlc_module_match("tls server", "any", false, &mods, NULL);
+    ssize_t total = vlc_module_match("tls server", NULL, false, &mods, NULL);
 
     for (ssize_t i = 0; i < total; i++) {
         int (*probe)(vlc_tls_server_t *, const char *, const char *);
@@ -98,7 +98,7 @@ vlc_tls_client_t *vlc_tls_ClientCreate(vlc_object_t *obj)
         return NULL;
 
     module_t **mods;
-    ssize_t total = vlc_module_match("tls client", "any", false, &mods, NULL);
+    ssize_t total = vlc_module_match("tls client", NULL, false, &mods, NULL);
 
     for (ssize_t i = 0; i < total; i++) {
         int (*probe)(vlc_tls_client_t *);
-- 
2.28.0



More information about the vlc-devel mailing list