diff options
| author | 2024-05-06 21:17:59 +0000 | |
|---|---|---|
| committer | 2024-05-06 21:17:59 +0000 | |
| commit | 959cc55b112ce7a6647ef280b0f5fe5bcedcdbe4 (patch) | |
| tree | 4ea1c74fd4084e30e30716658ba30a0e251f5260 | |
| parent | 5fd5eb2e48cd59abcb4598f7d8c5a056495f1125 (diff) | |
| parent | f4d84e1a293402e054afde5a1d8efbc8236f51ea (diff) | |
Merge "Consume consecutive delimiters at beginning of refilled buffer" into main am: f4d84e1a29
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3073613
Change-Id: I6c86bc4dac98995ae2826b6b69a09ce2d0acc0bc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -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"); |