string ReadLine ()
{
// CRLF or LF are ok as line endings.
bool got_cr = false;
int b = 0;
sb.Length = 0;
while (true) {
b = data.ReadByte ();
if (b == -1) {
return null;
}
if (b == LF) {
break;
}
got_cr = (b == CR);
sb.Append ((char) b);
}
if (got_cr)
sb.Length--;
return sb.ToString ();
}