jnr.posix.SpawnFileAction Maven / Gradle / Ivy
package jnr.posix;
import jnr.ffi.Pointer;
public abstract class SpawnFileAction {
abstract boolean act(POSIX posix, Pointer nativeFileActions);
public static SpawnFileAction dup(int fd, int newfd) {
return new Dup(fd, newfd);
}
public static SpawnFileAction open(String path, int fd, int flags, int mode) {
return new Open(path, fd, flags, mode);
}
public static SpawnFileAction close(int fd) {
return new Close(fd);
}
private static final class Dup extends SpawnFileAction {
final int fd, newfd;
public Dup(int fd, int newfd) {
this.fd = fd;
this.newfd = newfd;
}
final boolean act(POSIX posix, Pointer nativeFileActions) {
return ((UnixLibC) posix.libc()).posix_spawn_file_actions_adddup2(nativeFileActions, fd, newfd) == 0;
}
}
private static final class Open extends SpawnFileAction {
final String path;
final int fd;
final int flags, mode;
public Open(String path, int fd, int flags, int mode) {
this.path = path;
this.fd = fd;
this.flags = flags;
this.mode = mode;
}
final boolean act(POSIX posix, Pointer nativeFileActions) {
return ((UnixLibC) posix.libc()).posix_spawn_file_actions_addopen(nativeFileActions, fd, path, flags, mode) == 0;
}
}
private static final class Close extends SpawnFileAction {
final int fd;
public Close(int fd) {
this.fd = fd;
}
final boolean act(POSIX posix, Pointer nativeFileActions) {
return ((UnixLibC) posix.libc()).posix_spawn_file_actions_addclose(nativeFileActions, fd) == 0;
}
}
}