in src/Tasks/Microsoft.NET.Build.Tasks/AppHost.cs [133:165]
private static unsafe int KMPSearch(byte[] pattern, byte* bytes, long bytesLength)
{
int m = 0;
int i = 0;
int[] table = ComputeKMPFailureFunction(pattern);
while (m + i < bytesLength)
{
if (pattern[i] == bytes[m + i])
{
if (i == pattern.Length - 1)
{
return m;
}
i++;
}
else
{
if (table[i] > -1)
{
m = m + i - table[i];
i = table[i];
}
else
{
m++;
i = 0;
}
}
}
return -1;
}