From 8973576f21b2f9b1f21924460e1d8842e3e8d5ce Mon Sep 17 00:00:00 2001 From: Nathan Hintz Date: Tue, 21 Feb 2017 05:14:24 +0000 Subject: [PATCH] kmodloader: fix not being able to find some modules 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 --- 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.25.1