diff options
author | Elliott Hughes <enh@google.com> | 2014-05-09 17:42:11 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-05-09 17:42:11 -0700 |
commit | 04428d61d7000e17ab21d08a1d672c34eb68f6e2 (patch) | |
tree | 4457796a8121ac76d22b423ede20f2fdb11290b5 /luni/src/main | |
parent | 5b8b1ea0a23702a376c996bac57cddaaf1d9b39b (diff) | |
download | libcore-04428d61d7000e17ab21d08a1d672c34eb68f6e2.zip libcore-04428d61d7000e17ab21d08a1d672c34eb68f6e2.tar.gz libcore-04428d61d7000e17ab21d08a1d672c34eb68f6e2.tar.bz2 |
Add android.system.Os.link for link(2).
Bug: 14683762
Change-Id: Ieeba1d2d0c5e9c05e85c6ffbaeb5a7febc69238c
Diffstat (limited to 'luni/src/main')
-rw-r--r-- | luni/src/main/java/android/system/Os.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/BlockGuardOs.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/ForwardingOs.java | 1 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/Os.java | 1 | ||||
-rw-r--r-- | luni/src/main/java/libcore/io/Posix.java | 1 | ||||
-rw-r--r-- | luni/src/main/native/libcore_io_Posix.cpp | 13 |
6 files changed, 26 insertions, 0 deletions
diff --git a/luni/src/main/java/android/system/Os.java b/luni/src/main/java/android/system/Os.java index 1197c73..e7613df 100644 --- a/luni/src/main/java/android/system/Os.java +++ b/luni/src/main/java/android/system/Os.java @@ -251,6 +251,11 @@ public final class Os { public static void lchown(String path, int uid, int gid) throws ErrnoException { Libcore.os.lchown(path, uid, gid); } /** + * See <a href="http://man7.org/linux/man-pages/man2/link.2.html">link(2)</a>. + */ + public static void link(String oldPath, String newPath) throws ErrnoException { Libcore.os.link(oldPath, newPath); } + + /** * See <a href="http://man7.org/linux/man-pages/man2/listen.2.html">listen(2)</a>. */ public static void listen(FileDescriptor fd, int backlog) throws ErrnoException { Libcore.os.listen(fd, backlog); } diff --git a/luni/src/main/java/libcore/io/BlockGuardOs.java b/luni/src/main/java/libcore/io/BlockGuardOs.java index 238c5bd..0b04e2b 100644 --- a/luni/src/main/java/libcore/io/BlockGuardOs.java +++ b/luni/src/main/java/libcore/io/BlockGuardOs.java @@ -149,6 +149,11 @@ public class BlockGuardOs extends ForwardingOs { os.lchown(path, uid, gid); } + @Override public void link(String oldPath, String newPath) throws ErrnoException { + BlockGuard.getThreadPolicy().onWriteToDisk(); + os.link(oldPath, newPath); + } + @Override public long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException { BlockGuard.getThreadPolicy().onReadFromDisk(); return os.lseek(fd, offset, whence); diff --git a/luni/src/main/java/libcore/io/ForwardingOs.java b/luni/src/main/java/libcore/io/ForwardingOs.java index 9a993c5..d09e442 100644 --- a/luni/src/main/java/libcore/io/ForwardingOs.java +++ b/luni/src/main/java/libcore/io/ForwardingOs.java @@ -100,6 +100,7 @@ public class ForwardingOs implements Os { public boolean isatty(FileDescriptor fd) { return os.isatty(fd); } public void kill(int pid, int signal) throws ErrnoException { os.kill(pid, signal); } public void lchown(String path, int uid, int gid) throws ErrnoException { os.lchown(path, uid, gid); } + public void link(String oldPath, String newPath) throws ErrnoException { os.link(oldPath, newPath); } public void listen(FileDescriptor fd, int backlog) throws ErrnoException { os.listen(fd, backlog); } public long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException { return os.lseek(fd, offset, whence); } public StructStat lstat(String path) throws ErrnoException { return os.lstat(path); } diff --git a/luni/src/main/java/libcore/io/Os.java b/luni/src/main/java/libcore/io/Os.java index e55ae5c..a537aeb 100644 --- a/luni/src/main/java/libcore/io/Os.java +++ b/luni/src/main/java/libcore/io/Os.java @@ -92,6 +92,7 @@ public interface Os { public boolean isatty(FileDescriptor fd); public void kill(int pid, int signal) throws ErrnoException; public void lchown(String path, int uid, int gid) throws ErrnoException; + public void link(String oldPath, String newPath) throws ErrnoException; public void listen(FileDescriptor fd, int backlog) throws ErrnoException; public long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException; public StructStat lstat(String path) throws ErrnoException; diff --git a/luni/src/main/java/libcore/io/Posix.java b/luni/src/main/java/libcore/io/Posix.java index 8d99f5e..7551190 100644 --- a/luni/src/main/java/libcore/io/Posix.java +++ b/luni/src/main/java/libcore/io/Posix.java @@ -94,6 +94,7 @@ public final class Posix implements Os { public native boolean isatty(FileDescriptor fd); public native void kill(int pid, int signal) throws ErrnoException; public native void lchown(String path, int uid, int gid) throws ErrnoException; + public native void link(String oldPath, String newPath) throws ErrnoException; public native void listen(FileDescriptor fd, int backlog) throws ErrnoException; public native long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException; public native StructStat lstat(String path) throws ErrnoException; diff --git a/luni/src/main/native/libcore_io_Posix.cpp b/luni/src/main/native/libcore_io_Posix.cpp index db1a886..b1217c0 100644 --- a/luni/src/main/native/libcore_io_Posix.cpp +++ b/luni/src/main/native/libcore_io_Posix.cpp @@ -922,6 +922,18 @@ static void Posix_lchown(JNIEnv* env, jobject, jstring javaPath, jint uid, jint throwIfMinusOne(env, "lchown", TEMP_FAILURE_RETRY(lchown(path.c_str(), uid, gid))); } +static void Posix_link(JNIEnv* env, jobject, jstring javaOldPath, jstring javaNewPath) { + ScopedUtfChars oldPath(env, javaOldPath); + if (oldPath.c_str() == NULL) { + return; + } + ScopedUtfChars newPath(env, javaNewPath); + if (newPath.c_str() == NULL) { + return; + } + throwIfMinusOne(env, "link", TEMP_FAILURE_RETRY(link(oldPath.c_str(), newPath.c_str()))); +} + static void Posix_listen(JNIEnv* env, jobject, jobject javaFd, jint backlog) { int fd = jniGetFDFromFileDescriptor(env, javaFd); throwIfMinusOne(env, "listen", TEMP_FAILURE_RETRY(listen(fd, backlog))); @@ -1535,6 +1547,7 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(Posix, isatty, "(Ljava/io/FileDescriptor;)Z"), NATIVE_METHOD(Posix, kill, "(II)V"), NATIVE_METHOD(Posix, lchown, "(Ljava/lang/String;II)V"), + NATIVE_METHOD(Posix, link, "(Ljava/lang/String;Ljava/lang/String;)V"), NATIVE_METHOD(Posix, listen, "(Ljava/io/FileDescriptor;I)V"), NATIVE_METHOD(Posix, lseek, "(Ljava/io/FileDescriptor;JI)J"), NATIVE_METHOD(Posix, lstat, "(Ljava/lang/String;)Landroid/system/StructStat;"), |