diff options
author | Narayan Kamath <narayan@google.com> | 2015-01-16 17:51:59 +0000 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2015-01-16 18:49:12 +0000 |
commit | c8d9ea662de6f4856b28907b4119087cfc5a44d2 (patch) | |
tree | 20dfc61e0f134a3f5770ec95fcafbf7909206cbf | |
parent | 7861c3e60b7769a9cce11015a48842f1b1712360 (diff) | |
download | libcore-c8d9ea662de6f4856b28907b4119087cfc5a44d2.zip libcore-c8d9ea662de6f4856b28907b4119087cfc5a44d2.tar.gz libcore-c8d9ea662de6f4856b28907b4119087cfc5a44d2.tar.bz2 |
Add fcntlInt.
Hidden for now, for use from the frameworks.
Change-Id: I30d95b28ecbc422aaa5bf28fb2f288c3ca026493
-rw-r--r-- | luni/src/main/java/android/system/Os.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/ForwardingOs.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/Os.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/Posix.java | 5 | ||||
-rw-r--r-- | luni/src/main/native/libcore_io_Posix.cpp | 30 | ||||
-rw-r--r-- | luni/src/test/java/libcore/io/OsTest.java | 14 |
6 files changed, 44 insertions, 20 deletions
diff --git a/luni/src/main/java/android/system/Os.java b/luni/src/main/java/android/system/Os.java index 1cdaf14..73b999a 100644 --- a/luni/src/main/java/android/system/Os.java +++ b/luni/src/main/java/android/system/Os.java @@ -109,9 +109,10 @@ public final class Os { */ public static void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException { Libcore.os.fchown(fd, uid, gid); } - /** @hide */ public static int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return Libcore.os.fcntlVoid(fd, cmd); } - /** @hide */ public static int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return Libcore.os.fcntlLong(fd, cmd, arg); } /** @hide */ public static int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException { return Libcore.os.fcntlFlock(fd, cmd, arg); } + /** @hide */ public static int fcntlInt(FileDescriptor fd, int cmd, int arg) throws ErrnoException { return Libcore.os.fcntlInt(fd, cmd, arg); } + /** @hide */ public static int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return Libcore.os.fcntlLong(fd, cmd, arg); } + /** @hide */ public static int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return Libcore.os.fcntlVoid(fd, cmd); } /** * See <a href="http://man7.org/linux/man-pages/man2/fdatasync.2.html">fdatasync(2)</a>. diff --git a/luni/src/main/java/libcore/io/ForwardingOs.java b/luni/src/main/java/libcore/io/ForwardingOs.java index 667add3..caa7218 100644 --- a/luni/src/main/java/libcore/io/ForwardingOs.java +++ b/luni/src/main/java/libcore/io/ForwardingOs.java @@ -65,9 +65,10 @@ public class ForwardingOs implements Os { public void execve(String filename, String[] argv, String[] envp) throws ErrnoException { os.execve(filename, argv, envp); } public void fchmod(FileDescriptor fd, int mode) throws ErrnoException { os.fchmod(fd, mode); } public void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException { os.fchown(fd, uid, gid); } - public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return os.fcntlVoid(fd, cmd); } - public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return os.fcntlLong(fd, cmd, arg); } public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException { return os.fcntlFlock(fd, cmd, arg); } + public int fcntlInt(FileDescriptor fd, int cmd, int arg) throws ErrnoException { return os.fcntlInt(fd, cmd, arg); } + public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException { return os.fcntlLong(fd, cmd, arg); } + public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException { return os.fcntlVoid(fd, cmd); } public void fdatasync(FileDescriptor fd) throws ErrnoException { os.fdatasync(fd); } public StructStat fstat(FileDescriptor fd) throws ErrnoException { return os.fstat(fd); } public StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException { return os.fstatvfs(fd); } diff --git a/luni/src/main/java/libcore/io/Os.java b/luni/src/main/java/libcore/io/Os.java index 5ae666b..15d0744 100644 --- a/luni/src/main/java/libcore/io/Os.java +++ b/luni/src/main/java/libcore/io/Os.java @@ -56,9 +56,10 @@ public interface Os { public void execve(String filename, String[] argv, String[] envp) throws ErrnoException; public void fchmod(FileDescriptor fd, int mode) throws ErrnoException; public void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException; - public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException; - public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException; public int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException; + public int fcntlInt(FileDescriptor fd, int cmd, int arg) throws ErrnoException; + public int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException; + public int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException; public void fdatasync(FileDescriptor fd) throws ErrnoException; public StructStat fstat(FileDescriptor fd) throws ErrnoException; public StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException; diff --git a/luni/src/main/java/libcore/io/Posix.java b/luni/src/main/java/libcore/io/Posix.java index 66d8ec7..3575256 100644 --- a/luni/src/main/java/libcore/io/Posix.java +++ b/luni/src/main/java/libcore/io/Posix.java @@ -59,9 +59,10 @@ public final class Posix implements Os { public native void execve(String filename, String[] argv, String[] envp) throws ErrnoException; public native void fchmod(FileDescriptor fd, int mode) throws ErrnoException; public native void fchown(FileDescriptor fd, int uid, int gid) throws ErrnoException; - public native int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException; - public native int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException; public native int fcntlFlock(FileDescriptor fd, int cmd, StructFlock arg) throws ErrnoException, InterruptedIOException; + public native int fcntlInt(FileDescriptor fd, int cmd, int arg) throws ErrnoException; + public native int fcntlLong(FileDescriptor fd, int cmd, long arg) throws ErrnoException; + public native int fcntlVoid(FileDescriptor fd, int cmd) throws ErrnoException; public native void fdatasync(FileDescriptor fd) throws ErrnoException; public native StructStat fstat(FileDescriptor fd) throws ErrnoException; public native StructStatVfs fstatvfs(FileDescriptor fd) throws ErrnoException; diff --git a/luni/src/main/native/libcore_io_Posix.cpp b/luni/src/main/native/libcore_io_Posix.cpp index 7cfa9e2..adb1f3b 100644 --- a/luni/src/main/native/libcore_io_Posix.cpp +++ b/luni/src/main/native/libcore_io_Posix.cpp @@ -578,16 +578,6 @@ static void Posix_fchown(JNIEnv* env, jobject, jobject javaFd, jint uid, jint gi throwIfMinusOne(env, "fchown", TEMP_FAILURE_RETRY(fchown(fd, uid, gid))); } -static jint Posix_fcntlVoid(JNIEnv* env, jobject, jobject javaFd, jint cmd) { - int fd = jniGetFDFromFileDescriptor(env, javaFd); - return throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd))); -} - -static jint Posix_fcntlLong(JNIEnv* env, jobject, jobject javaFd, jint cmd, jlong arg) { - int fd = jniGetFDFromFileDescriptor(env, javaFd); - return throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd, arg))); -} - static jint Posix_fcntlFlock(JNIEnv* env, jobject, jobject javaFd, jint cmd, jobject javaFlock) { static jfieldID typeFid = env->GetFieldID(JniConstants::structFlockClass, "l_type", "S"); static jfieldID whenceFid = env->GetFieldID(JniConstants::structFlockClass, "l_whence", "S"); @@ -614,6 +604,21 @@ static jint Posix_fcntlFlock(JNIEnv* env, jobject, jobject javaFd, jint cmd, job return rc; } +static jint Posix_fcntlInt(JNIEnv* env, jobject, jobject javaFd, jint cmd, jint arg) { + int fd = jniGetFDFromFileDescriptor(env, javaFd); + return throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd, arg))); +} + +static jint Posix_fcntlLong(JNIEnv* env, jobject, jobject javaFd, jint cmd, jlong arg) { + int fd = jniGetFDFromFileDescriptor(env, javaFd); + return throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd, arg))); +} + +static jint Posix_fcntlVoid(JNIEnv* env, jobject, jobject javaFd, jint cmd) { + int fd = jniGetFDFromFileDescriptor(env, javaFd); + return throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd))); +} + static void Posix_fdatasync(JNIEnv* env, jobject, jobject javaFd) { int fd = jniGetFDFromFileDescriptor(env, javaFd); throwIfMinusOne(env, "fdatasync", TEMP_FAILURE_RETRY(fdatasync(fd))); @@ -1603,9 +1608,10 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(Posix, execve, "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"), NATIVE_METHOD(Posix, fchmod, "(Ljava/io/FileDescriptor;I)V"), NATIVE_METHOD(Posix, fchown, "(Ljava/io/FileDescriptor;II)V"), - NATIVE_METHOD(Posix, fcntlVoid, "(Ljava/io/FileDescriptor;I)I"), - NATIVE_METHOD(Posix, fcntlLong, "(Ljava/io/FileDescriptor;IJ)I"), NATIVE_METHOD(Posix, fcntlFlock, "(Ljava/io/FileDescriptor;ILandroid/system/StructFlock;)I"), + NATIVE_METHOD(Posix, fcntlInt, "(Ljava/io/FileDescriptor;II)I"), + NATIVE_METHOD(Posix, fcntlLong, "(Ljava/io/FileDescriptor;IJ)I"), + NATIVE_METHOD(Posix, fcntlVoid, "(Ljava/io/FileDescriptor;I)I"), NATIVE_METHOD(Posix, fdatasync, "(Ljava/io/FileDescriptor;)V"), NATIVE_METHOD(Posix, fstat, "(Ljava/io/FileDescriptor;)Landroid/system/StructStat;"), NATIVE_METHOD(Posix, fstatvfs, "(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs;"), diff --git a/luni/src/test/java/libcore/io/OsTest.java b/luni/src/test/java/libcore/io/OsTest.java index a0d1e5a..0848e77 100644 --- a/luni/src/test/java/libcore/io/OsTest.java +++ b/luni/src/test/java/libcore/io/OsTest.java @@ -44,6 +44,20 @@ public class OsTest extends TestCase { s.close(); } + public void testFcntlInt() throws Exception { + File f = File.createTempFile("OsTest", "tst"); + FileInputStream fis = null; + try { + fis = new FileInputStream(f); + Libcore.os.fcntlInt(fis.getFD(), F_SETFD, FD_CLOEXEC); + int flags = Libcore.os.fcntlVoid(fis.getFD(), F_GETFD); + assertTrue((flags & FD_CLOEXEC) != 0); + } finally { + IoUtils.closeQuietly(fis); + f.delete(); + } + } + public void testUnixDomainSockets_in_file_system() throws Exception { String path = System.getProperty("java.io.tmpdir") + "/test_unix_socket"; new File(path).delete(); |