Skip to content

Commit

Permalink
Make futimes avaialable.
Browse files Browse the repository at this point in the history
  • Loading branch information
lance committed Aug 8, 2014
1 parent 5e8a6c7 commit 96225d8
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/main/java/jnr/posix/BaseNativePOSIX.java
Expand Up @@ -364,6 +364,16 @@ public int utimes(String path, long[] atimeval, long[] mtimeval) {
return libc().utimes(path, times);
}

public int futimes(int fd, long[] atimeval, long[] mtimeval) {
Timeval[] times = null;
if (atimeval != null && mtimeval != null) {
times = Struct.arrayOf(getRuntime(), DefaultNativeTimeval.class, 2);
times[0].setTime(atimeval);
times[1].setTime(mtimeval);
}
return libc().futimes(fd, times);
}

public int fork() {
return libc().fork();
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/jnr/posix/CheckedPOSIX.java
Expand Up @@ -300,6 +300,10 @@ public int utimes(String path, long[] atimeval, long[] mtimeval) {
try { return posix.utimes(path, atimeval, mtimeval); } catch (UnsatisfiedLinkError ule) { return unimplementedInt(); }
}

public int futimes(int fd, long[] atimeval, long[] mtimeval) {
try { return posix.futimes(fd, atimeval, mtimeval); } catch (UnsatisfiedLinkError ule) { return unimplementedInt(); }
}

public int wait(int[] status) {
try { return posix.wait(status); } catch (UnsatisfiedLinkError ule) { return unimplementedInt(); }
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/jnr/posix/JavaPOSIX.java
Expand Up @@ -369,6 +369,11 @@ public int utimes(String path, long[] atimeval, long[] mtimeval) {
new File(path).setLastModified(mtimeMillis);
return 0;
}

public int futimes(int fd, long[] atimeval, long[] mtimeval) {
handler.unimplementedError("futimes");
return unimplementedInt("futimes");
}

public int wait(int[] status) {
return unimplementedInt("wait");
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/jnr/posix/LazyPOSIX.java
Expand Up @@ -297,6 +297,10 @@ public int utimes(String path, long[] atimeval, long[] mtimeval) {
return posix().utimes(path, atimeval, mtimeval);
}

public int futimes(int fd, long[] atimeval, long[] mtimeval) {
return posix().futimes(fd, atimeval, mtimeval);
}

public int wait(int[] status) {
return posix().wait(status);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/jnr/posix/LibC.java
Expand Up @@ -105,6 +105,7 @@ public interface LibCSignalHandler {
@IgnoreError int umask(int mask);
int unsetenv(CharSequence envName);
int utimes(CharSequence path, @In Timeval[] times);
int futimes(int fd, @In Timeval[] times);
int fork();
int waitpid(long pid, @Out int[] status, int options);
int wait(@Out int[] status);
Expand Down
1 change: 1 addition & 0 deletions src/main/java/jnr/posix/POSIX.java
Expand Up @@ -84,6 +84,7 @@ public interface POSIX {
int umask(int mask);
int unsetenv(String envName);
int utimes(String path, long[] atimeval, long[] mtimeval);
int futimes(int fd, long[] atimeval, long[] mtimeval);
int waitpid(int pid, int[] status, int flags);
int waitpid(long pid, int[] status, int flags);
int wait(int[] status);
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/jnr/posix/FileTest.java
Expand Up @@ -36,6 +36,19 @@ public void utimeTest() throws Throwable {
assertTrue("mtime failed", newTime > oldTime);
}

@Test
public void futimeTest() throws Throwable {
File f = File.createTempFile("jnr-posix-futime", "tmp");
long oldTime = posix.stat(f.getAbsolutePath()).mtime();
Thread.sleep(2000);
int fd = posix.open(f.getAbsolutePath(), OpenFlags.O_RDWR.intValue(), 0666);
int rval = posix.futimes(fd, null, null);
assertEquals("futime did not return 0", 0, rval);
long newTime = posix.stat(f.getAbsolutePath()).mtime();
f.delete();
assertTrue("mtime failed", newTime > oldTime);
}

@Test
public void linkTest() throws Throwable {
File f1 = File.createTempFile("utime", null);
Expand Down

0 comments on commit 96225d8

Please sign in to comment.