From: Nathan Hintz Date: Tue, 21 Feb 2017 05:14:24 +0000 (+0000) Subject: kmodloader: fix not being able to find some modules X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8973576f21b2f9b1f21924460e1d8842e3e8d5ce;p=oweals%2Fubox.git 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 --- 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)