src/com/pty4j/unix/linux/OSFacadeImpl.java (125 lines of code) (raw):

/* * JPty - A small PTY interface for Java. * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package com.pty4j.unix.linux; import com.pty4j.unix.CLibrary; import com.pty4j.unix.PtyHelpers; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.ptr.IntByReference; /** * Provides a {@link com.pty4j.unix.PtyHelpers.OSFacade} implementation for Linux. */ public class OSFacadeImpl implements PtyHelpers.OSFacade { // INNER TYPES private interface C_lib extends Library { int kill(int pid, int signal); int waitpid(int pid, int[] stat, int options); int sigprocmask(int how, IntByReference set, IntByReference oldset); String strerror(int errno); int grantpt(int fdm); int unlockpt(int fdm); int close(int fd); String ptsname(int fd); int open(String pts_name, int o_rdwr); int killpg(int pid, int sig); int fork(); int setsid(); int getpid(); int setpgid(int pid, int pgid); void dup2(int fd, int fileno); int getppid(); void unsetenv(String s); void chdir(String dirpath); } public interface Linux_Util_lib extends Library { int login_tty(int fd); } private static final C_lib m_Clib = Native.loadLibrary("c", C_lib.class); private static final Linux_Util_lib m_Utillib = Native.loadLibrary("util", Linux_Util_lib.class); // CONSTUCTORS /** * Creates a new {@link OSFacadeImpl} instance. */ public OSFacadeImpl() { PtyHelpers.ONLCR = 0x04; PtyHelpers.VINTR = 0; PtyHelpers.VQUIT = 1; PtyHelpers.VERASE = 2; PtyHelpers.VKILL = 3; PtyHelpers.VSUSP = 10; PtyHelpers.VREPRINT = 12; PtyHelpers.VWERASE = 14; PtyHelpers.ECHOKE = 0x01; PtyHelpers.ECHOCTL = 0x40; } // METHODS @Override public int kill(int pid, int signal) { return m_Clib.kill(pid, signal); } @Override public int waitpid(int pid, int[] stat, int options) { return m_Clib.waitpid(pid, stat, options); } @Override public int sigprocmask(int how, IntByReference set, IntByReference oldset) { return m_Clib.sigprocmask(how, set, oldset); } @Override public String strerror(int errno) { return m_Clib.strerror(errno); } @Override public int getpt() { return CLibrary.open("/dev/ptmx", CLibrary.O_RDWR | CLibrary.O_NOCTTY); } @Override public int grantpt(int fd) { return m_Clib.grantpt(fd); } @Override public int unlockpt(int fd) { return m_Clib.unlockpt(fd); } @Override public int close(int fd) { return m_Clib.close(fd); } @Override public String ptsname(int fd) { return m_Clib.ptsname(fd); } @Override public int killpg(int pid, int sig) { return m_Clib.killpg(pid, sig); } @Override public int fork() { return m_Clib.fork(); } @Override public int pipe(int[] pipe2) { return CLibrary.pipe(pipe2); } @Override public int setsid() { return m_Clib.setsid(); } @Override public int getpid() { return m_Clib.getpid(); } @Override public int setpgid(int pid, int pgid) { return m_Clib.setpgid(pid, pgid); } @Override public void dup2(int fds, int fileno) { m_Clib.dup2(fds, fileno); } @Override public int getppid() { return m_Clib.getppid(); } @Override public void unsetenv(String s) { m_Clib.unsetenv(s); } @Override public int login_tty(int fd) { return m_Utillib.login_tty(fd); } @Override public void chdir(String dirpath) { m_Clib.chdir(dirpath); } }