diff options
| -rw-r--r-- | core/java/com/android/internal/util/ProcFileReader.java | 6 | ||||
| -rw-r--r-- | core/tests/utiltests/src/com/android/internal/util/ProcFileReaderTest.java | 40 |
2 files changed, 46 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/ProcFileReader.java b/core/java/com/android/internal/util/ProcFileReader.java index 6cf241e65d00..ddbb586f150e 100644 --- a/core/java/com/android/internal/util/ProcFileReader.java +++ b/core/java/com/android/internal/util/ProcFileReader.java @@ -89,6 +89,12 @@ public class ProcFileReader implements Closeable { mTail -= count; if (mTail == 0) { fillBuf(); + + if (mTail > 0 && mBuffer[0] == ' ') { + // After filling the buffer, it contains more consecutive + // delimiters that need to be skipped. + consumeBuf(0); + } } } diff --git a/core/tests/utiltests/src/com/android/internal/util/ProcFileReaderTest.java b/core/tests/utiltests/src/com/android/internal/util/ProcFileReaderTest.java index 4c00c1667e3c..9785ca7face5 100644 --- a/core/tests/utiltests/src/com/android/internal/util/ProcFileReaderTest.java +++ b/core/tests/utiltests/src/com/android/internal/util/ProcFileReaderTest.java @@ -216,6 +216,46 @@ public class ProcFileReaderTest { } @Test + public void testBufferSizeWithConsecutiveDelimiters() throws Exception { + // Read numbers using very small buffer size, exercising fillBuf() + // Include more consecutive delimiters than the buffer size. + final ProcFileReader reader = + buildReader("1 21 3 41 5 61 7 81 9 10\n", 3); + + assertEquals(1, reader.nextInt()); + assertEquals(21, reader.nextInt()); + assertEquals(3, reader.nextInt()); + assertEquals(41, reader.nextInt()); + assertEquals(5, reader.nextInt()); + assertEquals(61, reader.nextInt()); + assertEquals(7, reader.nextInt()); + assertEquals(81, reader.nextInt()); + assertEquals(9, reader.nextInt()); + assertEquals(10, reader.nextInt()); + reader.finishLine(); + assertFalse(reader.hasMoreData()); + } + + @Test + public void testBufferSizeWithConsecutiveDelimitersAndMultipleLines() throws Exception { + final ProcFileReader reader = + buildReader("1 21 41 \n 5 7 81 \n 9 10 \n", 3); + + assertEquals(1, reader.nextInt()); + assertEquals(21, reader.nextInt()); + assertEquals(41, reader.nextInt()); + reader.finishLine(); + assertEquals(5, reader.nextInt()); + assertEquals(7, reader.nextInt()); + assertEquals(81, reader.nextInt()); + reader.finishLine(); + assertEquals(9, reader.nextInt()); + assertEquals(10, reader.nextInt()); + reader.finishLine(); + assertFalse(reader.hasMoreData()); + } + + @Test public void testIgnore() throws Exception { final ProcFileReader reader = buildReader("a b c\n"); |