blob: 164a52ec6c1679b1fc1a1657bc2672950f1738f1 [file] [log] [blame] [edit]
package jnr.posix.util;
import jnr.posix.SignalHandler;
import sun.misc.Signal;
public class SunMiscSignal {
public static SignalHandler signal(jnr.constants.platform.Signal sig, final SignalHandler handler) {
Signal s = new Signal(sig.name().substring("SIG".length()));
sun.misc.SignalHandler oldHandler = Signal.handle(s, new SunMiscSignalHandler(handler));
if (oldHandler instanceof SunMiscSignalHandler) {
return ((SunMiscSignalHandler)oldHandler).handler;
} else if (oldHandler != null) {
return new SignalHandler() {
@Override
public void handle(int signal) {
oldHandler.handle(s);
}
};
} else {
return null;
}
}
private static class SunMiscSignalHandler implements sun.misc.SignalHandler {
final SignalHandler handler;
public SunMiscSignalHandler(SignalHandler handler) {
this.handler = handler;
}
public void handle(Signal signal) {
handler.handle(signal.getNumber());
}
}
}