При получении строки из функции с включенным ConvertEOL в OraSession и при условии, что перевод строки #10, возвращаемая строка получается меньше ожидаемой, при чем обрезаются данные.
После копания в коде обнаружил функцию, которая добавляет недостающий #13 в строку
Код: Выделить всё
function AddCRString(Source, Dest: IntPtr; Count: integer): integer;
Код: Выделить всё
DestEnd := PtrOffset(Dest, Count);
while (PtrCompare(Source, SourceEnd) < 0) and (PtrCompare(Dest, DestEnd) < 0)
Мы не достигнем конца источника, если добавлен хотя бы один #13, второе условие сработает раньше.
Правильнее будет
Код: Выделить всё
DestEnd := PtrOffset(Dest, Count);
while (PtrCompare(Source, SourceEnd) < 0)
...
и
// if PtrCompare(Dest, DestEnd) > 0 then // last char was CRLF
// Dest := DestEnd;
Код: Выделить всё
function AddCRUnicode(Source, Dest: IntPtr; Count: integer): integer;