diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2024-05-06 20:59:31 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-06 20:59:31 +0000 |
commit | f4d84e1a293402e054afde5a1d8efbc8236f51ea (patch) | |
tree | 4ea1c74fd4084e30e30716658ba30a0e251f5260 | |
parent | 01b799252ac7b5ea3335ddab15b3f1514c58dbe6 (diff) | |
parent | dc0a5b1fb3ffbd481a073ec23ae12c24d7de529b (diff) | |
download | base-f4d84e1a293402e054afde5a1d8efbc8236f51ea.tar.gz |
Merge "Consume consecutive delimiters at beginning of refilled buffer" into main
-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"); |