У нас есть kext, который проверяет, является ли путь подкаталогом другого пути, и творит чудеса, если это так.
Все это работает нормально, пока у нас нет специальных символов в нашем пути (таких как ë
)
Мы передаем некоторые рабочие пути в систему с помощью вспомогательного приложения, которое может взаимодействовать с kext.
Я выделил проблему для этого кода:
#include <stdio.h>
#include <string.h>
int main ()
{
char* path = "/Users/user/test/tëst/test"; //Sent by the system
char* wp = "/Users/user/test/tëst"; //Some path we claim to be ours
size_t wp_len = strlen(wp);
if (strncmp (wp,path,wp_len) == 0) //Check is path is a subpath
{
printf ("matched %s\n", path);
}else {
printf ("could not match\n");
}
return 0;
}
Я создал Gist, поэтому кодировка не потеряется в браузере: https://gist.github.com/fvandepitte/ec28f4321a48061808d0095853af7bd7
Кто-нибудь знает, как я могу проверить, является ли path
подпутью wp
, не теряя при этом слишком много производительности (этот код работает в ядре)?