summaryrefslogtreecommitdiff
path: root/src/core/common/CharReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/common/CharReader.cpp')
-rw-r--r--src/core/common/CharReader.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/core/common/CharReader.cpp b/src/core/common/CharReader.cpp
index db9bb2e..6966b97 100644
--- a/src/core/common/CharReader.cpp
+++ b/src/core/common/CharReader.cpp
@@ -516,6 +516,18 @@ CharReaderFork CharReader::fork()
return CharReaderFork(buffer, readCursor, peekCursor, coherent);
}
+size_t CharReader::readRaw(char *buf, size_t size)
+{
+ // TODO: This is inefficient, implement ranged read in the Buffer class and
+ // use it
+ size_t res = 0;
+ while (res < size && read(*buf)) {
+ buf++;
+ res++;
+ }
+ return res;
+}
+
SourceContext CharReader::getContextAt(ssize_t maxSize,
Buffer::CursorId referenceCursor)
{
@@ -622,7 +634,7 @@ SourceContext CharReader::getContextAtOffs(ssize_t maxSize, size_t offs)
// Create a new cursor and calculate how far it has to be moved to reach
// the position specified in the location instance
Buffer::CursorId cur = buffer->createCursor();
- ssize_t moveOffs = buffer->offset(cur) - offs;
+ ssize_t moveOffs = offs - buffer->offset(cur);
// Try to move the cursor to the specified position and read the context
SourceContext res;