diff options
author | Jeff Sharkey <jsharkey@android.com> | 2014-07-08 11:28:00 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2014-07-09 16:55:56 -0700 |
commit | ec55ef0934b8e0d1bb705434947de817f7be57f1 (patch) | |
tree | 4855af37aa2c312bc2a645f5d94c463a2859d516 /core/java/com | |
parent | 2cfc8482267707a671cbe4275ea8927c1aef991a (diff) | |
download | frameworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.zip frameworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.tar.gz frameworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.tar.bz2 |
Extend pm to support sessions and split APKs.
Separate commands to create an install session, stream files into the
staging area, and then commit the install. Streaming can accept data
from stdin across adb, avoiding extra copy from push.
Extend FileBridge to support blocking close(). Always destroy
session regardless of result.
Bug: 14975160
Change-Id: Ic3f462e7d1901079b785e210228950cdfa676466
Diffstat (limited to 'core/java/com')
-rw-r--r-- | core/java/com/android/internal/util/SizedInputStream.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/SizedInputStream.java b/core/java/com/android/internal/util/SizedInputStream.java new file mode 100644 index 0000000..00a729d --- /dev/null +++ b/core/java/com/android/internal/util/SizedInputStream.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import libcore.io.Streams; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Reads exact number of bytes from wrapped stream, returning EOF once those + * bytes have been read. + */ +public class SizedInputStream extends InputStream { + private final InputStream mWrapped; + private long mLength; + + public SizedInputStream(InputStream wrapped, long length) { + mWrapped = wrapped; + mLength = length; + } + + @Override + public void close() throws IOException { + super.close(); + mWrapped.close(); + } + + @Override + public int read() throws IOException { + return Streams.readSingleByte(this); + } + + @Override + public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException { + if (mLength <= 0) { + return -1; + } else if (byteCount > mLength) { + byteCount = (int) mLength; + } + + final int n = mWrapped.read(buffer, byteOffset, byteCount); + if (n == -1) { + if (mLength > 0) { + throw new IOException("Unexpected EOF; expected " + mLength + " more bytes"); + } + } else { + mLength -= n; + } + return n; + } +} |