Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 14bd99fc authored by Jeremy Meyer's avatar Jeremy Meyer Committed by Automerger Merge Worker
Browse files

Merge "Revert "Revert "Revert "Have AssetFileDescriptor.AutoCloseInputStream...

Merge "Revert "Revert "Revert "Have AssetFileDescriptor.AutoCloseInputStream us...""" into tm-dev am: 0308928e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18377375



Change-Id: I667d914095b50e1037d3ba46ff64437438b487cc
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 3ffe3a46 0308928e
Loading
Loading
Loading
Loading
+45 −52
Original line number Original line Diff line number Diff line
@@ -21,8 +21,6 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.Parcelable;
import android.system.ErrnoException;
import android.system.Os;


import java.io.Closeable;
import java.io.Closeable;
import java.io.FileDescriptor;
import java.io.FileDescriptor;
@@ -205,24 +203,19 @@ public class AssetFileDescriptor implements Parcelable, Closeable {
     */
     */
    public static class AutoCloseInputStream
    public static class AutoCloseInputStream
            extends ParcelFileDescriptor.AutoCloseInputStream {
            extends ParcelFileDescriptor.AutoCloseInputStream {
        private final long mSizeFromStartOffset;
        private long mRemaining;
        private final long mStartOffset;
        private long mPosFromStartOffset;


        public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
        public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
            super(fd.getParcelFileDescriptor());
            super(fd.getParcelFileDescriptor());
            // this skip is necessary if getChannel() is called
            super.skip(fd.getStartOffset());
            super.skip(fd.getStartOffset());
            mSizeFromStartOffset = fd.getLength();
            mRemaining = (int) fd.getLength();
            mStartOffset = fd.getStartOffset();
        }
        }


        @Override
        @Override
        public int available() throws IOException {
        public int available() throws IOException {
            long available = mSizeFromStartOffset - mPosFromStartOffset;
            return mRemaining >= 0
            return available >= 0
                    ? (mRemaining < 0x7fffffff ? (int) mRemaining : 0x7fffffff)
                    ? (available < 0x7fffffff ? (int) available : 0x7fffffff)
                    : super.available();
                    : 0;
        }
        }


        @Override
        @Override
@@ -234,24 +227,15 @@ public class AssetFileDescriptor implements Parcelable, Closeable {


        @Override
        @Override
        public int read(byte[] buffer, int offset, int count) throws IOException {
        public int read(byte[] buffer, int offset, int count) throws IOException {
            int available = available();
            if (mRemaining >= 0) {

                if (mRemaining == 0) return -1;
            if (available <= 0) {
                if (count > mRemaining) count = (int) mRemaining;
                return -1;
                int res = super.read(buffer, offset, count);
            } else {
                if (res >= 0) mRemaining -= res;
                if (count > available) count = available;
                try {
                    int res = Os.pread(getFD(), buffer, offset, count,
                            mStartOffset + mPosFromStartOffset);
                    // pread returns 0 at end of file, while java's InputStream interface
                    // requires -1
                    if (res == 0) res = -1;
                    if (res >= 0) mPosFromStartOffset += res;
                return res;
                return res;
                } catch (ErrnoException e) {
                    throw new IOException(e);
                }
            }
            }

            return super.read(buffer, offset, count);
        }
        }


        @Override
        @Override
@@ -261,32 +245,42 @@ public class AssetFileDescriptor implements Parcelable, Closeable {


        @Override
        @Override
        public long skip(long count) throws IOException {
        public long skip(long count) throws IOException {
            int available = available();
            if (mRemaining >= 0) {
            if (available <= 0) {
                if (mRemaining == 0) return -1;
                return -1;
                if (count > mRemaining) count = mRemaining;
            } else {
                long res = super.skip(count);
                if (count > available) count = available;
                if (res >= 0) mRemaining -= res;
                mPosFromStartOffset += count;
                return res;
                return count;
            }
            }

            return super.skip(count);
        }
        }


        @Override
        @Override
        public void mark(int readlimit) {
        public void mark(int readlimit) {
            if (mRemaining >= 0) {
                // Not supported.
                // Not supported.
                return;
                return;
            }
            }
            super.mark(readlimit);
        }


        @Override
        @Override
        public boolean markSupported() {
        public boolean markSupported() {
            if (mRemaining >= 0) {
                return false;
                return false;
            }
            }
            return super.markSupported();
        }


        @Override
        @Override
        public synchronized void reset() throws IOException {
        public synchronized void reset() throws IOException {
            if (mRemaining >= 0) {
                // Not supported.
                // Not supported.
                return;
                return;
            }
            }
            super.reset();
        }
    }
    }


    /**
    /**
@@ -381,7 +375,6 @@ public class AssetFileDescriptor implements Parcelable, Closeable {
        public AssetFileDescriptor createFromParcel(Parcel in) {
        public AssetFileDescriptor createFromParcel(Parcel in) {
            return new AssetFileDescriptor(in);
            return new AssetFileDescriptor(in);
        }
        }

        public AssetFileDescriptor[] newArray(int size) {
        public AssetFileDescriptor[] newArray(int size) {
            return new AssetFileDescriptor[size];
            return new AssetFileDescriptor[size];
        }
        }