also I noticed this here:
The reverse string-comparison loop "while ((curr_end_ptr != curr_name) && (wanted_end_ptr != wanted_name))" starts both pointers at the NUL terminator and stops as soon as either pointer reaches index 0, so the character at index 0 (the very first character of each name) is never compared, meaning two module names differing only in their first character are incorrectly treated as matching.
also I noticed this here:
The reverse string-comparison loop "while ((curr_end_ptr != curr_name) && (wanted_end_ptr != wanted_name))" starts both pointers at the NUL terminator and stops as soon as either pointer reaches index 0, so the character at index 0 (the very first character of each name) is never compared, meaning two module names differing only in their first character are incorrectly treated as matching.