# HG changeset patch # User Michael Starzinger # Date 1302472330 -7200 # Node ID 3ec98ede8a062bfc178b1af625d21f4579c2d8b1 # Parent 1f55b68e19b01f34b002b4b4f870b3bdbb48e644 Added compatibility wrapper for block guard. * dalvik/package-info.java: Added package description. * dalvik/system/BlockGuard.java: Added new compatibility wrapper. diff -r 1f55b68e19b0 -r 3ec98ede8a06 src/main/java/dalvik/package-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/dalvik/package-info.java Sun Apr 10 23:52:10 2011 +0200 @@ -0,0 +1,44 @@ +/* + * Daneel - Dalvik to Java bytecode compiler + * Copyright (C) 2011 IcedRobot team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * This file is subject to the "Classpath" exception: + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under terms + * of your choice, provided that you also meet, for each linked independent + * module, the terms and conditions of the license of that module. An + * independent module is a module which is not derived from or based on + * this library. If you modify this library, you may extend this exception + * to your version of the library, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ + +/** + * This package contains Dalvik VM compatibility wrappers which make Daneel into + * a "VM compatible to Dalvik". Note that Daneel is a clean-room implementation + * and does not contain any Dalvik sources, it merely provides wrapper classes + * having the same interface. + */ +package dalvik; diff -r 1f55b68e19b0 -r 3ec98ede8a06 src/main/java/dalvik/system/BlockGuard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/dalvik/system/BlockGuard.java Sun Apr 10 23:52:10 2011 +0200 @@ -0,0 +1,107 @@ +/* + * Daneel - Dalvik to Java bytecode compiler + * Copyright (C) 2011 IcedRobot team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * This file is subject to the "Classpath" exception: + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under terms + * of your choice, provided that you also meet, for each linked independent + * module, the terms and conditions of the license of that module. An + * independent module is a module which is not derived from or based on + * this library. If you modify this library, you may extend this exception + * to your version of the library, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ + +package dalvik.system; + +/** + * Compatibility wrapper for Dalvik VM interface. The block guard allows + * applications to specify what operations each thread is allowed to perform. + * The block guard has to be implemented on a best-effort basis, so we can + * safely ignore it and just provide an empty stub. + */ +public class BlockGuard { + + public static final int DISALLOW_DISK_WRITE = 1; + public static final int DISALLOW_DISK_READ = 2; + public static final int DISALLOW_NETWORK = 4; + public static final int PASS_RESTRICTIONS_VIA_RPC = 8; + public static final int PENALTY_LOG = 16; + public static final int PENALTY_DIALOG = 32; + public static final int PENALTY_DEATH = 64; + + /** + * The interface for a block guard policy specifying what operations a + * thread is allowed to perform. + */ + public static interface Policy { + int getPolicyMask(); + void onNetwork(); + void onReadFromDisk(); + void onWriteToDisk(); + }; + + /** + * The initial block guard policy that each thread starts out with, if not + * specified explicitly. + */ + public static final Policy LAX_POLICY = new Policy() { + public int getPolicyMask() { return 0; } + public void onNetwork() {} + public void onReadFromDisk() {} + public void onWriteToDisk() {} + }; + + /** + * Gets the block guard policy for the current thread. + * @return The block guard policy. + */ + public static Policy getPolicy() { + return threadPolicy.get(); + } + + /** + * Sets the block guard policy for the current thread. + * @param policy The block guard policy. + */ + public static void setPolicy(Policy policy) { + threadPolicy.set(policy); + } + + private static final ThreadLocal threadPolicy; + static { + threadPolicy = new ThreadLocal() { + @Override + protected Policy initialValue() { + return LAX_POLICY; + } + }; + } + + private BlockGuard() { + // No instances of this class. + } +}