private static VersionInfo ParseAsciiVersion()

in src/Microsoft.Diagnostics.Runtime/src/Extensions/UnixDataReaderExtensions.cs [47:95]


        private static VersionInfo ParseAsciiVersion(ReadOnlySpan<byte> span)
        {
            int major = 0, minor = 0, rev = 0, patch = 0;

            int position = 0;
            long curr = 0;

            for (int i = 0; ; i++)
            {
                if (i == span.Length || span[i] == '.' || span[i] == ' ')
                {
                    switch (position)
                    {
                        case 0:
                            major = (int)curr;
                            break;

                        case 1:
                            minor = (int)curr;
                            break;

                        case 2:
                            rev = (int)curr;
                            break;

                        case 3:
                            patch = (int)curr;
                            break;
                    }

                    curr = 0;
                    if (i == span.Length)
                        break;

                    if (++position == 4 || span[i] == ' ')
                        break;
                }

                // skip bits like "-beta"
                if ('0' <= span[i] && span[i] <= '9')
                    curr = curr * 10 + (span[i] - '0');

                // In this case I don't know what we are parsing but it's not a version
                if (curr > int.MaxValue)
                    return default;
            }

            return new VersionInfo(major, minor, rev, patch, true);
        }