static void cygwinEnvFixup()
{
if (!Settings.IsCygwin)
return;
List<string> lines = new List<string>();
unsafe
{
var ppenvs = GetEnvironmentStringsA();
List<byte> buf = new List<byte>();
byte* envs = (byte*)ppenvs.ToPointer();
for (int i = 0; true; i++)
{
if (envs[i] == (byte)0)
{
lines.Add(System.Text.Encoding.ASCII.GetString(buf.ToArray()));
buf.Clear();
if (envs[i + 1] == (byte)0)
{
break; // end of buffer. yuk..
}
}
else
{
buf.Add(envs[i]);
}
}
Marshal.FreeHGlobal(ppenvs);
}
foreach (var e in lines)
{
var pair = e.Split(new char[] { '=' }, 2);
var haslow = false;
foreach (var c in pair[0])
{
if (char.IsLower(c))
{
haslow = true;
break;
}
}
if (haslow)
{
Environment.SetEnvironmentVariable(pair[0], null);
Environment.SetEnvironmentVariable(pair[0].ToUpper(), pair[1]);
}
}
}