CClash.Compiler.cygwinEnvFixup C# (CSharp) Method

cygwinEnvFixup() static private method

static private cygwinEnvFixup ( ) : void
return void
        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]);
                }
            }

        }