diff options
35 files changed, 258 insertions, 118 deletions
diff --git a/luni/src/main/java/android/system/OsConstants.java b/luni/src/main/java/android/system/OsConstants.java index 3e1f007d0c..83a1b41a16 100644 --- a/luni/src/main/java/android/system/OsConstants.java +++ b/luni/src/main/java/android/system/OsConstants.java @@ -368,6 +368,7 @@ public final class OsConstants { public static final int O_APPEND = placeholder(); public static final int O_CLOEXEC = placeholder(); public static final int O_CREAT = placeholder(); + /** @hide */ public static final int O_DIRECT = placeholder(); public static final int O_EXCL = placeholder(); public static final int O_NOCTTY = placeholder(); public static final int O_NOFOLLOW = placeholder(); diff --git a/luni/src/main/java/libcore/net/MimeUtils.java b/luni/src/main/java/libcore/net/MimeUtils.java index 693b6da458..3ab4300132 100644 --- a/luni/src/main/java/libcore/net/MimeUtils.java +++ b/luni/src/main/java/libcore/net/MimeUtils.java @@ -114,6 +114,7 @@ public final class MimeUtils { add("application/vnd.sun.xml.writer.global", "sxg"); add("application/vnd.sun.xml.writer.template", "stw"); add("application/vnd.visio", "vsd"); + add("application/vnd.youtube.yt", "yt"); add("application/x-abiword", "abw"); add("application/x-apple-diskimage", "dmg"); add("application/x-bcpio", "bcpio"); diff --git a/luni/src/main/native/android_system_OsConstants.cpp b/luni/src/main/native/android_system_OsConstants.cpp index 993b1f7a78..bab6a70a39 100644 --- a/luni/src/main/native/android_system_OsConstants.cpp +++ b/luni/src/main/native/android_system_OsConstants.cpp @@ -394,6 +394,7 @@ static void OsConstants_initConstants(JNIEnv* env, jclass c) { initConstant(env, c, "O_APPEND", O_APPEND); initConstant(env, c, "O_CLOEXEC", O_CLOEXEC); initConstant(env, c, "O_CREAT", O_CREAT); + initConstant(env, c, "O_DIRECT", O_DIRECT); initConstant(env, c, "O_EXCL", O_EXCL); initConstant(env, c, "O_NOCTTY", O_NOCTTY); initConstant(env, c, "O_NOFOLLOW", O_NOFOLLOW); diff --git a/luni/src/test/java/libcore/libcore/net/MimeUtilsTest.java b/luni/src/test/java/libcore/libcore/net/MimeUtilsTest.java index 76e6336b37..f9ff9dfa08 100644 --- a/luni/src/test/java/libcore/libcore/net/MimeUtilsTest.java +++ b/luni/src/test/java/libcore/libcore/net/MimeUtilsTest.java @@ -87,4 +87,7 @@ public class MimeUtilsTest extends TestCase { assertEquals("video/ogg", MimeUtils.guessMimeTypeFromExtension("ogv")); } + public void test_70851634() { + assertEquals("application/vnd.youtube.yt", MimeUtils.guessMimeTypeFromExtension("yt")); + } } diff --git a/ojluni/src/main/java/java/nio/BufferOverflowException.java b/ojluni/src/main/java/java/nio/BufferOverflowException.java index f359e603af..d141a82d93 100644 --- a/ojluni/src/main/java/java/nio/BufferOverflowException.java +++ b/ojluni/src/main/java/java/nio/BufferOverflowException.java @@ -38,14 +38,14 @@ package java.nio; */ public class BufferOverflowException - extends RuntimeException { + extends RuntimeException +{ private static final long serialVersionUID = -5484897634319144535L; /** * Constructs an instance of this class. */ - public BufferOverflowException() { - } + public BufferOverflowException() { } } diff --git a/ojluni/src/main/java/java/nio/BufferUnderflowException.java b/ojluni/src/main/java/java/nio/BufferUnderflowException.java index 8226c95e6d..d7a062a336 100644 --- a/ojluni/src/main/java/java/nio/BufferUnderflowException.java +++ b/ojluni/src/main/java/java/nio/BufferUnderflowException.java @@ -38,14 +38,14 @@ package java.nio; */ public class BufferUnderflowException - extends RuntimeException { + extends RuntimeException +{ private static final long serialVersionUID = -1713313658691622206L; /** * Constructs an instance of this class. */ - public BufferUnderflowException() { - } + public BufferUnderflowException() { } } diff --git a/ojluni/src/main/java/java/nio/InvalidMarkException.java b/ojluni/src/main/java/java/nio/InvalidMarkException.java index 328c02cd65..ed1a059f1e 100644 --- a/ojluni/src/main/java/java/nio/InvalidMarkException.java +++ b/ojluni/src/main/java/java/nio/InvalidMarkException.java @@ -38,14 +38,14 @@ package java.nio; */ public class InvalidMarkException - extends IllegalStateException { + extends IllegalStateException +{ private static final long serialVersionUID = 1698329710438510774L; /** * Constructs an instance of this class. */ - public InvalidMarkException() { - } + public InvalidMarkException() { } } diff --git a/ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java b/ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java index 08392aeb26..0f1c594fd7 100644 --- a/ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java +++ b/ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java @@ -25,6 +25,9 @@ package sun.nio.ch; +import sun.misc.*; + + /** * Manipulates a native array of pollfd structs. * diff --git a/ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java b/ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java index 64a505fec6..6f1f8e86f0 100644 --- a/ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java @@ -28,6 +28,8 @@ package sun.nio.ch; import java.io.IOException; import java.nio.channels.*; import java.nio.channels.spi.*; +import java.util.*; +import sun.misc.*; /** diff --git a/ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java index 740ff8a6cd..1a8e56bdfc 100644 --- a/ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java @@ -127,7 +127,7 @@ class DatagramChannelImpl // -- End of fields protected by stateLock - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); public DatagramChannelImpl(SelectorProvider sp) @@ -141,7 +141,7 @@ class DatagramChannelImpl this.fd = Net.socket(family, false); this.fdVal = IOUtil.fdVal(fd); this.state = ST_UNCONNECTED; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. // Net#socket will set |fd| if it succeeds. if (fd != null && fd.valid()) { guard.open("close"); @@ -173,7 +173,7 @@ class DatagramChannelImpl this.fd = Net.socket(family, false); this.fdVal = IOUtil.fdVal(fd); this.state = ST_UNCONNECTED; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. // Net#socket will set |fd| if it succeeds. if (fd != null && fd.valid()) { guard.open("close"); @@ -190,7 +190,7 @@ class DatagramChannelImpl this.fdVal = IOUtil.fdVal(fd); this.state = ST_UNCONNECTED; this.localAddress = Net.localAddress(fd); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (fd != null && fd.valid()) { guard.open("close"); } @@ -1052,7 +1052,7 @@ class DatagramChannelImpl protected void implCloseSelectableChannel() throws IOException { synchronized (stateLock) { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); if (state != ST_KILLED) nd.preClose(fd); @@ -1088,7 +1088,7 @@ class DatagramChannelImpl protected void finalize() throws Throwable { try { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (guard != null) { guard.warnIfOpen(); } diff --git a/ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java b/ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java index 87a6992188..97caa1a8ff 100644 --- a/ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java +++ b/ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java @@ -60,17 +60,21 @@ public class DefaultAsynchronousChannelProvider { * Returns the default AsynchronousChannelProvider. */ public static AsynchronousChannelProvider create() { - // Android-changed: Android is Linux based. - // String osname = AccessController - // .doPrivileged(new GetPropertyAction("os.name")); - // - // if (osname.equals("SunOS")) - // return new SolarisAsynchronousChannelProvider(); - // if (osname.equals("Linux")) + // BEGIN Android-changed: Hardcode AsynchronousChannelProvider provider. + /* + String osname = AccessController + .doPrivileged(new GetPropertyAction("os.name")); + if (osname.equals("SunOS")) + return createProvider("sun.nio.ch.SolarisAsynchronousChannelProvider"); + if (osname.equals("Linux")) + return createProvider("sun.nio.ch.LinuxAsynchronousChannelProvider"); + if (osname.contains("OS X")) + return createProvider("sun.nio.ch.BsdAsynchronousChannelProvider"); + if (osname.equals("AIX")) + return createProvider("sun.nio.ch.AixAsynchronousChannelProvider"); + throw new InternalError("platform not recognized"); + */ return createProvider("sun.nio.ch.LinuxAsynchronousChannelProvider"); - // if (osname.contains("OS X")) - // return new BsdAsynchronousChannelProvider(); - // throw new InternalError("platform not recognized"); + // END Android-changed: Hardcode AsynchronousChannelProvider provider. } - } diff --git a/ojluni/src/main/java/sun/nio/ch/EPoll.java b/ojluni/src/main/java/sun/nio/ch/EPoll.java index dc89056e95..0e99c4f936 100644 --- a/ojluni/src/main/java/sun/nio/ch/EPoll.java +++ b/ojluni/src/main/java/sun/nio/ch/EPoll.java @@ -111,4 +111,11 @@ class EPoll { static native int epollWait(int epfd, long pollAddress, int numfds) throws IOException; + + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + IOUtil.load(); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/ch/EPollPort.java b/ojluni/src/main/java/sun/nio/ch/EPollPort.java index 4d0bbd3b5a..162a8baa97 100644 --- a/ojluni/src/main/java/sun/nio/ch/EPollPort.java +++ b/ojluni/src/main/java/sun/nio/ch/EPollPort.java @@ -316,4 +316,11 @@ final class EPollPort private static native void drain1(int fd) throws IOException; private static native void close0(int fd); + + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + IOUtil.load(); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java index de78c68891..758514b66a 100644 --- a/ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java @@ -85,7 +85,7 @@ public class FileChannelImpl // Lock for operations involving position and size private final Object positionLock = new Object(); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); private FileChannelImpl(FileDescriptor fd, String path, boolean readable, @@ -98,7 +98,7 @@ public class FileChannelImpl this.parent = parent; this.path = path; this.nd = new FileDispatcherImpl(append); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (fd != null && fd.valid()) { guard.open("close"); } @@ -129,7 +129,7 @@ public class FileChannelImpl // -- Standard channel operations -- protected void implCloseChannel() throws IOException { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); // Release and invalidate any locks that we still hold if (fileLockTable != null) { diff --git a/ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java b/ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java index b530b3ad12..d1d2867c5f 100644 --- a/ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,10 +27,19 @@ package sun.nio.ch; import dalvik.system.BlockGuard; -import java.io.*; +import java.io.FileDescriptor; +import java.io.IOException; class FileDispatcherImpl extends FileDispatcher { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + IOUtil.load(); + init(); + } + */ + FileDispatcherImpl(boolean append) { /* append is ignored */ } @@ -39,6 +48,7 @@ class FileDispatcherImpl extends FileDispatcher { } int read(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onReadFromDisk(); return read0(fd, address, len); } @@ -46,16 +56,19 @@ class FileDispatcherImpl extends FileDispatcher { int pread(FileDescriptor fd, long address, int len, long position) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onReadFromDisk(); return pread0(fd, address, len, position); } long readv(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onReadFromDisk(); return readv0(fd, address, len); } int write(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return write0(fd, address, len); } @@ -63,6 +76,7 @@ class FileDispatcherImpl extends FileDispatcher { int pwrite(FileDescriptor fd, long address, int len, long position) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return pwrite0(fd, address, len, position); } @@ -70,21 +84,25 @@ class FileDispatcherImpl extends FileDispatcher { long writev(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return writev0(fd, address, len); } int force(FileDescriptor fd, boolean metaData) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return force0(fd, metaData); } int truncate(FileDescriptor fd, long size) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return truncate0(fd, size); } long size(FileDescriptor fd) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onReadFromDisk(); return size0(fd); } @@ -92,11 +110,13 @@ class FileDispatcherImpl extends FileDispatcher { int lock(FileDescriptor fd, boolean blocking, long pos, long size, boolean shared) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); return lock0(fd, blocking, pos, size, shared); } void release(FileDescriptor fd, long pos, long size) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onWriteToDisk(); release0(fd, pos, size); } @@ -163,4 +183,7 @@ class FileDispatcherImpl extends FileDispatcher { static native void closeIntFD(int fd) throws IOException; + // Android-removed: Code to load native libraries, doesn't make sense on Android. + // static native void init(); + } diff --git a/ojluni/src/main/java/sun/nio/ch/FileKey.java b/ojluni/src/main/java/sun/nio/ch/FileKey.java index 1adaab32b7..cb2ce53b46 100644 --- a/ojluni/src/main/java/sun/nio/ch/FileKey.java +++ b/ojluni/src/main/java/sun/nio/ch/FileKey.java @@ -67,4 +67,12 @@ public class FileKey { } private native void init(FileDescriptor fd) throws IOException; + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + private static native void initIDs(); + + static { + initIDs(); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/ch/Invoker.java b/ojluni/src/main/java/sun/nio/ch/Invoker.java index cf925e69ac..386f7366e9 100644 --- a/ojluni/src/main/java/sun/nio/ch/Invoker.java +++ b/ojluni/src/main/java/sun/nio/ch/Invoker.java @@ -133,16 +133,18 @@ class Invoker { // clear thread locals when in default thread pool // Android-changed: System.getSecurityManager always returns null. - // if (System.getSecurityManager() != null) { - // Thread me = Thread.currentThread(); - // if (me instanceof sun.misc.InnocuousThread) { - // GroupAndInvokeCount thisGroupAndInvokeCount = myGroupAndInvokeCount.get(); - // ((sun.misc.InnocuousThread)me).eraseThreadLocals(); - // if (thisGroupAndInvokeCount != null) { - // myGroupAndInvokeCount.set(thisGroupAndInvokeCount); - // } - // } - // } + /* + if (System.getSecurityManager() != null) { + Thread me = Thread.currentThread(); + if (me instanceof sun.misc.InnocuousThread) { + GroupAndInvokeCount thisGroupAndInvokeCount = myGroupAndInvokeCount.get(); + ((sun.misc.InnocuousThread)me).eraseThreadLocals(); + if (thisGroupAndInvokeCount != null) { + myGroupAndInvokeCount.set(thisGroupAndInvokeCount); + } + } + } + */ } /** diff --git a/ojluni/src/main/java/sun/nio/ch/NativeThread.java b/ojluni/src/main/java/sun/nio/ch/NativeThread.java index de3487ae95..d6e77a28fd 100644 --- a/ojluni/src/main/java/sun/nio/ch/NativeThread.java +++ b/ojluni/src/main/java/sun/nio/ch/NativeThread.java @@ -50,4 +50,15 @@ public class NativeThread { // no effect. // public static native void signal(long nt); + + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + private static native void init(); + + static { + IOUtil.load(); + init(); + } + */ + } diff --git a/ojluni/src/main/java/sun/nio/ch/Net.java b/ojluni/src/main/java/sun/nio/ch/Net.java index d9686622da..5f10414d97 100644 --- a/ojluni/src/main/java/sun/nio/ch/Net.java +++ b/ojluni/src/main/java/sun/nio/ch/Net.java @@ -95,10 +95,10 @@ public class Net { public static InetSocketAddress checkAddress(SocketAddress sa) { if (sa == null) - // BEGIN Android-changed + // BEGIN Android-changed: Throw IllegalArgumentException not NullPointerException. //throw new NullPointerException(); throw new IllegalArgumentException("sa == null"); - // END Android-changed + // END Android-changed: Throw IllegalArgumentException not NullPointerException. if (!(sa instanceof InetSocketAddress)) throw new UnsupportedAddressTypeException(); // ## needs arg @@ -135,8 +135,8 @@ public class Net { nx = new SocketException("Unsupported address type"); else if (x instanceof UnresolvedAddressException) { nx = new SocketException("Unresolved address"); + // Android-added: Handling for AlreadyConnectedException. } else if (x instanceof AlreadyConnectedException) { - // Android-added. nx = new SocketException("Already connected"); } if (nx != x) @@ -458,6 +458,7 @@ public class Net { static int connect(ProtocolFamily family, FileDescriptor fd, InetAddress remote, int remotePort) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onNetwork(); boolean preferIPv6 = isIPv6Available() && @@ -609,6 +610,9 @@ public class Net { static native int getInterface6(FileDescriptor fd) throws IOException; + // Android-removed: Code to load native libraries, doesn't make sense on Android. + // private static native void initIDs(); + /** * Event masks for the various poll system calls. * They will be set platform dependant in the static initializer below. @@ -628,6 +632,11 @@ public class Net { static native short pollconnValue(); static { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + IOUtil.load(); + initIDs(); + */ POLLIN = pollinValue(); POLLOUT = polloutValue(); diff --git a/ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java b/ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java index 49c0f51ade..bb27acf80b 100644 --- a/ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java +++ b/ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java @@ -124,4 +124,10 @@ public class PollArrayWrapper extends AbstractPollArrayWrapper { private static native void interrupt(int fd); + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + IOUtil.load(); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java b/ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java index c84c53f9e8..28102d78fc 100644 --- a/ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java @@ -25,6 +25,7 @@ package sun.nio.ch; +import java.io.IOException; import java.nio.channels.*; import java.nio.channels.spi.*; diff --git a/ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java index 447e75d54f..e6cad717d1 100644 --- a/ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java @@ -106,7 +106,6 @@ class ServerSocketChannelImpl public ServerSocket socket() { synchronized (stateLock) { if (socket == null) - socket = ServerSocketAdaptor.create(this); return socket; } @@ -437,6 +436,8 @@ class ServerSocketChannelImpl private static native void initIDs(); static { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + // IOUtil.load(); initIDs(); nd = new SocketDispatcher(); } diff --git a/ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java index 25ce62640f..a997351a31 100644 --- a/ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java @@ -118,7 +118,7 @@ class SocketChannelImpl // -- End of fields protected by stateLock - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); // Constructor for normal connecting sockets @@ -129,7 +129,7 @@ class SocketChannelImpl this.fdVal = IOUtil.fdVal(fd); this.state = ST_UNCONNECTED; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. // Net#socket will set |fd| if it succeeds. if (fd != null && fd.valid()) { guard.open("close"); @@ -146,7 +146,7 @@ class SocketChannelImpl this.fdVal = IOUtil.fdVal(fd); this.state = ST_UNCONNECTED; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (fd != null && fd.valid()) { guard.open("close"); } @@ -167,7 +167,7 @@ class SocketChannelImpl this.state = ST_CONNECTED; this.localAddress = Net.localAddress(fd); this.remoteAddress = remote; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (fd != null && fd.valid()) { guard.open("close"); } @@ -878,7 +878,7 @@ class SocketChannelImpl // meantime and allocated to an entirely different channel. // if (state != ST_KILLED) { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); nd.preClose(fd); } diff --git a/ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java b/ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java index 8dde1f929c..2b63b97d52 100644 --- a/ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java +++ b/ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java @@ -38,21 +38,25 @@ class SocketDispatcher extends NativeDispatcher { int read(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onNetwork(); return FileDispatcherImpl.read0(fd, address, len); } long readv(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onNetwork(); return FileDispatcherImpl.readv0(fd, address, len); } int write(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onNetwork(); return FileDispatcherImpl.write0(fd, address, len); } long writev(FileDescriptor fd, long address, int len) throws IOException { + // Android-added: BlockGuard support. BlockGuard.getThreadPolicy().onNetwork(); return FileDispatcherImpl.writev0(fd, address, len); } diff --git a/ojluni/src/main/java/sun/nio/ch/ThreadPool.java b/ojluni/src/main/java/sun/nio/ch/ThreadPool.java index bea3c16d1a..485fbe5d2c 100644 --- a/ojluni/src/main/java/sun/nio/ch/ThreadPool.java +++ b/ojluni/src/main/java/sun/nio/ch/ThreadPool.java @@ -71,23 +71,31 @@ public class ThreadPool { } static ThreadFactory defaultThreadFactory() { - // Android-changed: System.getSecurityManager always returns null. - // if (System.getSecurityManager() == null) { + // BEGIN Android-changed: System.getSecurityManager always returns null. + /* + if (System.getSecurityManager() == null) { + return (Runnable r) -> { + Thread t = new Thread(r); + t.setDaemon(true); + return t; + }; + } else { + return (Runnable r) -> { + PrivilegedAction<Thread> action = () -> { + Thread t = new sun.misc.InnocuousThread(r); + t.setDaemon(true); + return t; + }; + return AccessController.doPrivileged(action); + }; + } + */ return (Runnable r) -> { Thread t = new Thread(r); t.setDaemon(true); return t; }; - // } else { - // return (Runnable r) -> { - // PrivilegedAction<Thread> action = () -> { - // Thread t = new sun.misc.InnocuousThread(r); - // t.setDaemon(true); - // return t; - // }; - // return AccessController.doPrivileged(action); - // }; - // } + // END Android-changed: System.getSecurityManager always returns null. } private static class DefaultThreadPoolHolder { diff --git a/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java index c12862f6a2..aad7cad334 100644 --- a/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java @@ -25,20 +25,15 @@ package sun.nio.ch; -import java.io.FileDescriptor; +import java.nio.channels.*; +import java.util.concurrent.*; import java.io.IOException; +import java.io.FileDescriptor; import java.net.InetSocketAddress; -import java.nio.channels.AcceptPendingException; -import java.nio.channels.AsynchronousCloseException; -import java.nio.channels.AsynchronousSocketChannel; -import java.nio.channels.ClosedChannelException; -import java.nio.channels.CompletionHandler; -import java.nio.channels.NotYetBoundException; +import java.util.concurrent.atomic.AtomicBoolean; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicBoolean; import dalvik.system.CloseGuard; @@ -74,7 +69,7 @@ class UnixAsynchronousServerSocketChannelImpl // context for permission check when security manager set private AccessControlContext acceptAcc; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); @@ -94,13 +89,13 @@ class UnixAsynchronousServerSocketChannelImpl // add mapping from file descriptor to this channel port.register(fdVal, this); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.open("close"); } @Override void implClose() throws IOException { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); // remove the mapping port.unregister(fdVal); @@ -133,6 +128,7 @@ class UnixAsynchronousServerSocketChannelImpl } } + // Android-added: CloseGuard support. protected void finalize() throws Throwable { try { if (guard != null) { @@ -382,6 +378,8 @@ class UnixAsynchronousServerSocketChannelImpl throws IOException; static { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + // IOUtil.load(); initIDs(); } } diff --git a/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java index 3df6a99e4d..ce33a8601c 100644 --- a/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java +++ b/ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java @@ -25,27 +25,18 @@ package sun.nio.ch; -import java.io.FileDescriptor; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.SocketAddress; +import java.nio.channels.*; import java.nio.ByteBuffer; -import java.nio.channels.AlreadyConnectedException; -import java.nio.channels.AsynchronousChannel; -import java.nio.channels.AsynchronousCloseException; -import java.nio.channels.ClosedChannelException; -import java.nio.channels.CompletionHandler; -import java.nio.channels.ConnectionPendingException; -import java.nio.channels.InterruptedByTimeoutException; -import java.nio.channels.ShutdownChannelGroupException; +import java.net.*; +import java.util.concurrent.*; +import java.io.IOException; +import java.io.FileDescriptor; import java.security.AccessController; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -import dalvik.system.CloseGuard; import sun.net.NetHooks; import sun.security.action.GetPropertyAction; +import dalvik.system.CloseGuard; + /** * Unix implementation of AsynchronousSocketChannel */ @@ -100,7 +91,7 @@ class UnixAsynchronousSocketChannelImpl private PendingFuture<Number,Object> writeFuture; private Future<?> writeTimer; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); UnixAsynchronousSocketChannelImpl(Port port) @@ -121,7 +112,7 @@ class UnixAsynchronousSocketChannelImpl // add mapping from file descriptor to this channel port.register(fdVal, this); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.open("close"); } @@ -145,6 +136,7 @@ class UnixAsynchronousSocketChannelImpl } this.port = port; + // Android-added: CloseGuard support. guard.open("close"); } @@ -231,7 +223,7 @@ class UnixAsynchronousSocketChannelImpl @Override void implClose() throws IOException { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); // remove the mapping port.unregister(fdVal); @@ -243,6 +235,7 @@ class UnixAsynchronousSocketChannelImpl finish(false, true, true); } + // Android-added: CloseGuard support. protected void finalize() throws Throwable { try { if (guard != null) { @@ -775,4 +768,11 @@ class UnixAsynchronousSocketChannelImpl // -- Native methods -- private static native void checkConnect(int fdVal) throws IOException; + + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + IOUtil.load(); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java b/ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java index b7ecd6bf53..ca7aac0100 100644 --- a/ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java +++ b/ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java index 8ccfb68475..a3f27d28db 100644 --- a/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java +++ b/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java @@ -121,6 +121,14 @@ class LinuxNativeDispatcher extends UnixNativeDispatcher { private static native void init(); static { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + AccessController.doPrivileged(new PrivilegedAction<Void>() { + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + */ init(); } } diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java b/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java index d69347af72..5c42d54ce6 100644 --- a/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java +++ b/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java @@ -194,7 +194,7 @@ class LinuxWatchService // address of read buffer private final long address; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); Poller(UnixFileSystem fs, LinuxWatchService watcher, int ifd, int[] sp) { @@ -204,7 +204,7 @@ class LinuxWatchService this.socketpair = sp; this.wdToKey = new HashMap<Integer,LinuxWatchKey>(); this.address = unsafe.allocateMemory(BUFFER_SIZE); - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.open("close"); } @@ -302,7 +302,7 @@ class LinuxWatchService // close watch service @Override void implCloseAll() { - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); // invalidate all keys for (Map.Entry<Integer,LinuxWatchKey> entry: wdToKey.entrySet()) { @@ -317,6 +317,7 @@ class LinuxWatchService UnixNativeDispatcher.close(ifd); } + // Android-added: CloseGuard support. protected void finalize() throws Throwable { try { if (guard != null) { @@ -488,4 +489,15 @@ class LinuxWatchService private static native void socketpair(int[] sv) throws UnixException; private static native int poll(int fd1, int fd2) throws UnixException; + + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + AccessController.doPrivileged(new PrivilegedAction<Void>() { + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + } + */ } diff --git a/ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java b/ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java index f8d8600f4d..67b4695b71 100644 --- a/ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java +++ b/ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java @@ -605,4 +605,16 @@ class UnixCopyFile { static native void transfer(int dst, int src, long addressToPollForCancel) throws UnixException; + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + static { + AccessController.doPrivileged(new PrivilegedAction<Void>() { + @Override + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + } + */ + } diff --git a/ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java b/ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java index dd3e05ef0c..3a3c715b69 100644 --- a/ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java +++ b/ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java @@ -61,7 +61,7 @@ class UnixDirectoryStream // directory iterator private Iterator<Path> iterator; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); /** @@ -72,7 +72,7 @@ class UnixDirectoryStream this.dp = dp; this.filter = filter; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.open("close"); } @@ -101,7 +101,7 @@ class UnixDirectoryStream throw new IOException(x.errorString()); } - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); return true; } else { @@ -234,10 +234,7 @@ class UnixDirectoryStream } } - /** - * Cleans up if the user forgets to close it. - */ - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. protected void finalize() throws IOException { if (guard != null) { guard.warnIfOpen(); diff --git a/ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java b/ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java index 37249560b0..b25ccd872b 100644 --- a/ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java +++ b/ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java @@ -359,17 +359,20 @@ public abstract class UnixFileSystemProvider @Override public FileStore getFileStore(Path obj) throws IOException { - // Android-changed: Complete information about file systems is neither available to regular - // apps nor the system server due to SELinux policies. - // - // UnixPath file = UnixPath.toUnixPath(obj); - // SecurityManager sm = System.getSecurityManager(); - // if (sm != null) { - // sm.checkPermission(new RuntimePermission("getFileStoreAttributes")); - // file.checkRead(); - // } - // return getFileStore(file); + // BEGIN Android-changed: getFileStore(Path) always throws SecurityException. + // Complete information about file systems is neither available to regular apps nor the + // system server due to SELinux policies. + /* + UnixPath file = UnixPath.toUnixPath(obj); + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission(new RuntimePermission("getFileStoreAttributes")); + file.checkRead(); + } + return getFileStore(file); + */ throw new SecurityException("getFileStore"); + // END Android-changed: getFileStore(Path) always throws SecurityException. } @Override diff --git a/ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java index 82e818491c..09901f3da3 100644 --- a/ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java +++ b/ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java @@ -568,6 +568,14 @@ class UnixNativeDispatcher { private static native int init(); static { + // Android-removed: Code to load native libraries, doesn't make sense on Android. + /* + AccessController.doPrivileged(new PrivilegedAction<Void>() { + public Void run() { + System.loadLibrary("nio"); + return null; + }}); + */ capabilities = init(); } } diff --git a/ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java b/ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java index 8692b6307d..321b4d0207 100644 --- a/ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java +++ b/ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java @@ -47,7 +47,7 @@ class UnixSecureDirectoryStream private final UnixDirectoryStream ds; private final int dfd; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. private final CloseGuard guard = CloseGuard.get(); UnixSecureDirectoryStream(UnixPath dir, @@ -57,7 +57,7 @@ class UnixSecureDirectoryStream { this.ds = new UnixDirectoryStream(dir, dp, filter); this.dfd = dfd; - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. if (dfd != -1) { guard.open("close"); } @@ -75,7 +75,7 @@ class UnixSecureDirectoryStream } finally { ds.writeLock().unlock(); } - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. guard.close(); } @@ -569,7 +569,7 @@ class UnixSecureDirectoryStream /** * Cleans up if the user forgets to close it. */ - // Android-changed: Add CloseGuard support. + // Android-added: CloseGuard support. protected void finalize() throws IOException { if (guard != null) { guard.warnIfOpen(); |