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

Nathan Hintz nlhintz at hotmail.com
Mon Feb 20 09:54:10 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>
---
 kmodloader.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/kmodloader.c b/kmodloader.c
index 465d3de..8343836 100644
--- a/kmodloader.c
+++ b/kmodloader.c
@@ -985,20 +985,23 @@ out:
 	return 0;
 }
 
+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