internal static unsafe void* GetNativeTextInfo(int cultureID) {
// First, assume this culture does not has exceptions. I.e. we should use the default casingg table.
// So we assign the native NativeTextInfo for the default casing table to it.
void *pNativeTextInfo = m_pDefaultCasingTable;
// Now, go thru the exception table to see if it has exception or not.
for (int i = 0; i < m_exceptionCount; i++) {
if (m_exceptionTable[i].langID == cultureID) {
// This culture has exceptions.
if (m_exceptionNativeTextInfo[i] == 0) {
lock (InternalSyncObject) {
// Read the exception casing file.
if (m_pExceptionFile == null) {
m_pExceptionFile = GlobalizationAssembly.GetGlobalizationResourceBytePtr(typeof(TextInfo).Assembly, CASING_EXCEPTIONS_FILE_NAME);
}
long tempPtr = (long)(InternalAllocateCasingTable(m_pExceptionFile, m_exceptionTable[i].exceptIndex));
System.Threading.Thread.MemoryBarrier();
m_exceptionNativeTextInfo[i] = tempPtr;
}
}
pNativeTextInfo = (void*)m_exceptionNativeTextInfo[i];
break;
}
}
return (pNativeTextInfo);
}