summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorJeremy Meyer <jakmcbane@google.com>2021-10-15 21:56:42 +0000
committerJeremy Meyer <jakmcbane@google.com>2021-10-15 21:56:42 +0000
commit6f8b71e87ab14ace321fa431b47d440fccf09c99 (patch)
tree29ca323b464aed0eb306a63d9cad6e8b0a5be27d /core/java
parent9d0352210d3bc1933d84f1d855004edc9b20345a (diff)
Revert "Have AssetFileDescriptor.AutoCloseInputStream use pread"
Revert "Add cts test to verify 2 AssetFileDescriptors work indep..." Revert submission 15961171-168310122 Reason for revert: breaks presubmit tests Reverted Changes: I6c9f9d1de:Have AssetFileDescriptor.AutoCloseInputStream use ... I061bf9ab4:Add cts test to verify 2 AssetFileDescriptors work... Change-Id: Ib22b0fef51e7ac203ceb04f8d8a398829e0149b8
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/res/AssetFileDescriptor.java71
1 files changed, 35 insertions, 36 deletions
diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java
index c622ca461c05..e93ec00468f5 100644
--- a/core/java/android/content/res/AssetFileDescriptor.java
+++ b/core/java/android/content/res/AssetFileDescriptor.java
@@ -21,8 +21,6 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
-import android.system.ErrnoException;
-import android.system.Os;
import java.io.Closeable;
import java.io.FileDescriptor;
@@ -205,22 +203,19 @@ public class AssetFileDescriptor implements Parcelable, Closeable {
*/
public static class AutoCloseInputStream
extends ParcelFileDescriptor.AutoCloseInputStream {
- private long mTotalSize;
- private final long mFileOffset;
- private long mOffset;
+ private long mRemaining;
public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
super(fd.getParcelFileDescriptor());
- mTotalSize = fd.getLength();
- mFileOffset = fd.getStartOffset();
+ super.skip(fd.getStartOffset());
+ mRemaining = (int)fd.getLength();
}
@Override
public int available() throws IOException {
- long available = mTotalSize - mOffset;
- return available >= 0
- ? (available < 0x7fffffff ? (int) available : 0x7fffffff)
- : 0;
+ return mRemaining >= 0
+ ? (mRemaining < 0x7fffffff ? (int)mRemaining : 0x7fffffff)
+ : super.available();
}
@Override
@@ -232,21 +227,15 @@ public class AssetFileDescriptor implements Parcelable, Closeable {
@Override
public int read(byte[] buffer, int offset, int count) throws IOException {
- int available = available();
- if (available <= 0) {
- return -1;
- }
-
- if (count > available) count = available;
- try {
- int res = Os.pread(getFD(), buffer, offset, count, mFileOffset + mOffset);
- // pread returns 0 at end of file, while java's InputStream interface requires -1
- if (res == 0) res = -1;
- if (res >= 0) mOffset += res;
+ if (mRemaining >= 0) {
+ if (mRemaining == 0) return -1;
+ if (count > mRemaining) count = (int)mRemaining;
+ int res = super.read(buffer, offset, count);
+ if (res >= 0) mRemaining -= res;
return res;
- } catch (ErrnoException e) {
- throw new IOException(e);
}
+
+ return super.read(buffer, offset, count);
}
@Override
@@ -256,31 +245,41 @@ public class AssetFileDescriptor implements Parcelable, Closeable {
@Override
public long skip(long count) throws IOException {
- int available = available();
- if (available <= 0) {
- return -1;
+ if (mRemaining >= 0) {
+ if (mRemaining == 0) return -1;
+ if (count > mRemaining) count = mRemaining;
+ long res = super.skip(count);
+ if (res >= 0) mRemaining -= res;
+ return res;
}
-
- if (count > available) count = available;
- mOffset += count;
- return count;
+
+ return super.skip(count);
}
@Override
public void mark(int readlimit) {
- // Not supported.
- return;
+ if (mRemaining >= 0) {
+ // Not supported.
+ return;
+ }
+ super.mark(readlimit);
}
@Override
public boolean markSupported() {
- return false;
+ if (mRemaining >= 0) {
+ return false;
+ }
+ return super.markSupported();
}
@Override
public synchronized void reset() throws IOException {
- // Not supported.
- return;
+ if (mRemaining >= 0) {
+ // Not supported.
+ return;
+ }
+ super.reset();
}
}