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;
}