[LEDE-DEV] [PATCH, v2] kmodloader: fix not being able to find some modules

Nathan Hintz nlhintz at hotmail.com
Mon Feb 20 21:14:24 PST 2017


kmodloader is using slightly different criteria for ordering the AVL tree
versus what it uses to traverse it.  This sometimes results in not being
able to find some modules.

Reference: https://bugs.lede-project.org/index.php?do=details&task_id=443

Signed-off-by: Nathan Hintz <nlhintz at hotmail.com>
---

v2: changed "inline" to "static inline"

 kmodloader.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/kmodloader.c b/kmodloader.c
index 465d3de..ac14bac 100644
--- a/kmodloader.c
+++ b/kmodloader.c
@@ -985,20 +985,23 @@ out:
 	return 0;
 }
 
+static inline char weight(char c)
+{
+	return c == '_' ? '-' : c;
+}
+
 static int avl_modcmp(const void *k1, const void *k2, void *ptr)
 {
 	const char *s1 = k1;
 	const char *s2 = k2;
 
-	while (*s1 && ((*s1 == *s2) ||
-	               ((*s1 == '_') && (*s2 == '-')) ||
-	               ((*s1 == '-') && (*s2 == '_'))))
+	while (*s1 && (weight(*s1) == weight(*s2)))
 	{
 		s1++;
 		s2++;
 	}
 
-	return *(const unsigned char *)s1 - *(const unsigned char *)s2;
+	return (unsigned char)weight(*s1) - (unsigned char)weight(*s2);
 }
 
 int main(int argc, char **argv)
-- 
2.9.3




More information about the Lede-dev mailing list