in ktor-io/common/src/io/ktor/utils/io/core/internal/UTF8.kt [24:85]
public suspend fun decodeUTF8LineLoopSuspend(
out: Appendable,
limit: Int,
nextChunk: suspend (Int) -> AbstractInput?
): Boolean {
var decoded = 0
var size = 1
var cr = false
var end = false
while (!end && size != 0) {
val chunk = nextChunk(size) ?: break
chunk.takeWhileSize { buffer ->
var skip = 0
size = buffer.decodeUTF8 { ch ->
when (ch) {
'\r' -> {
if (cr) {
end = true
return@decodeUTF8 false
}
cr = true
true
}
'\n' -> {
end = true
skip = 1
false
}
else -> {
if (cr) {
end = true
return@decodeUTF8 false
}
if (decoded == limit) {
throw BufferLimitExceededException("Too many characters in line: limit $limit exceeded")
}
decoded++
out.append(ch)
true
}
}
}
if (skip > 0) {
buffer.discardExact(skip)
}
size = if (end) 0 else size.coerceAtLeast(1)
size
}
}
if (size > 1) prematureEndOfStreamUtf(size)
if (cr) {
end = true
}
return decoded > 0 || end
}