Mercurial > prosody-hg
diff util/dbuffer.lua @ 11636:11e0a0a08da3
util.dbuffer: Add read_until() method
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 29 Jun 2021 13:48:14 +0100 |
| parents | f243836c449a |
| children | 19cddf92fcc2 |
line wrap: on
line diff
--- a/util/dbuffer.lua Thu May 27 13:09:18 2021 +0200 +++ b/util/dbuffer.lua Tue Jun 29 13:48:14 2021 +0100 @@ -76,6 +76,20 @@ return table.concat(chunks); end +-- Read to, and including, the specified character sequence (return nil if not found) +function dbuffer_methods:read_until(char) + local buffer_pos = 0; + for i, chunk in self.items:items() do + local start = 1 + self.front_consumed; + local char_pos = chunk:find(char, start, true); + if char_pos then + return self:read(buffer_pos + (char_pos - start) + #char); + end + buffer_pos = buffer_pos + #chunk; + end + return nil; +end + function dbuffer_methods:discard(requested_bytes) if requested_bytes > self._length then return nil;
