internal static int GetNewLine()

in AdlsDotNetSDK/FileTransfer/Jobs/CopyFileJob.cs [313:360]


        internal static int GetNewLine(byte[] buffer, int offset, int length, Encoding encoding, bool reverse)
        {
            int bytesPerChar;
            switch (encoding.CodePage)
            {
                // Big Endian Unicode (UTF-16)
                case 1201:
                // Unicode (UTF-16)
                case 1200:
                    bytesPerChar = 2;
                    break;
                // UTF-32
                case 12000:
                    bytesPerChar = 4;
                    break;
                // ASCII case 20127:
                // UTF-8 case 65001:
                // UTF-7 case 65000:
                // Default to UTF-8
                default:
                    bytesPerChar = 1;
                    break;
            }
            int result = -1;
            int lastIndex = offset + length - 1;
            char prevChar = 'a';
            for (int charPos = reverse ? lastIndex : offset; reverse ? charPos >= offset : charPos <= lastIndex; charPos += (reverse ? -1 : 1) * bytesPerChar)
            {
                prevChar = bytesPerChar == 1 ? (char)buffer[charPos]
                    : encoding.GetString(buffer, reverse ? charPos - bytesPerChar + 1 : charPos, bytesPerChar).ToCharArray()[0];
                if (prevChar == '\r' || prevChar == '\n')
                {
                    result = reverse ? charPos : charPos + bytesPerChar - 1;
                    break;
                }
            }
            if (result == -1)
            {
                return -1;
            }
            if (!reverse && result < lastIndex && prevChar == '\r' && '\n' == (bytesPerChar == 1
                    ? (char)buffer[result + 1]
                    : encoding.GetString(buffer, result + 1, bytesPerChar).ToCharArray()[0]))
            {
                result += bytesPerChar;
            }
            return result;
        }