Implement PII stripper in incidentd, part 1
1. automatically parse privacy options and generate lookup table
2. create FdBuffer iterator API in order to remove dependency on Reporter.h
Bug: 64687253
Test: Unit test for iterator API, and manually tested lookup table
Change-Id: I1ea376a4481fc4afc7bdf447936f767b63690fd3
diff --git a/cmds/incidentd/src/FdBuffer.cpp b/cmds/incidentd/src/FdBuffer.cpp
index 7743301..4d6a36c 100644
--- a/cmds/incidentd/src/FdBuffer.cpp
+++ b/cmds/incidentd/src/FdBuffer.cpp
@@ -174,7 +174,7 @@
if (rpos >= wpos) {
amt = ::read(fd, cirBuf + rpos, BUFFER_SIZE - rpos);
} else {
- amt = :: read(fd, cirBuf + rpos, wpos - rpos);
+ amt = ::read(fd, cirBuf + rpos, wpos - rpos);
}
if (amt < 0) {
if (!(errno == EAGAIN || errno == EWOULDBLOCK)) {
@@ -241,6 +241,7 @@
size_t
FdBuffer::size()
{
+ if (mBuffers.empty()) return 0;
return ((mBuffers.size() - 1) * BUFFER_SIZE) + mCurrentWritten;
}
@@ -255,4 +256,30 @@
return NO_ERROR;
}
+FdBuffer::iterator
+FdBuffer::end()
+{
+ if (mBuffers.empty() || mCurrentWritten < 0) return begin();
+ if (mCurrentWritten == BUFFER_SIZE)
+ // FdBuffer doesn't allocate another buf since no more bytes to read.
+ return FdBuffer::iterator(*this, mBuffers.size(), 0);
+ return FdBuffer::iterator(*this, mBuffers.size() - 1, mCurrentWritten);
+}
+FdBuffer::iterator&
+FdBuffer::iterator::operator+(size_t offset)
+{
+ size_t newOffset = mOffset + offset;
+ while (newOffset >= BUFFER_SIZE) {
+ mIndex++;
+ newOffset -= BUFFER_SIZE;
+ }
+ mOffset = newOffset;
+ return *this;
+}
+
+size_t
+FdBuffer::iterator::bytesRead()
+{
+ return mIndex * BUFFER_SIZE + mOffset;
+}