0
0
Fork 0
haikuports/sys-apps/bat/patches/termios-0.3.1.patchset

299 lines
9.5 KiB
Plaintext

From 94cf66b9fbca3fee55a7dfa31fc2201b761ac6cb Mon Sep 17 00:00:00 2001
From: Nikolay Korotkiy <sikmir@gmail.com>
Date: Thu, 20 Jun 2019 12:10:22 +0300
Subject: Add Haiku support
diff --git a/termios-0.3.1/src/os/haiku.rs b/termios-0.3.1/src/os/haiku.rs
new file mode 100644
index 0000000..12dbcc8
--- /dev/null
+++ b/termios-0.3.1/src/os/haiku.rs
@@ -0,0 +1,157 @@
+#![allow(non_camel_case_types)]
+
+use libc::{c_int,c_uint,c_uchar};
+
+pub type cc_t = c_uchar;
+pub type speed_t = c_uchar;
+pub type tcflag_t = c_uint;
+
+#[derive(Debug,Copy,Clone,Eq,PartialEq)]
+#[repr(C)]
+pub struct termios {
+ pub c_iflag: tcflag_t,
+ pub c_oflag: tcflag_t,
+ pub c_cflag: tcflag_t,
+ pub c_lflag: tcflag_t,
+ c_line: cc_t,
+ c_ispeed: speed_t,
+ c_ospeed: speed_t,
+ pub c_cc: [cc_t; NCCS]
+}
+
+pub const NCCS: usize = 11;
+
+// c_cc characters
+pub const VINTR: usize = 0;
+pub const VQUIT: usize = 1;
+pub const VERASE: usize = 2;
+pub const VKILL: usize = 3;
+pub const VEOF: usize = 4;
+pub const VEOL: usize = 5;
+pub const VMIN: usize = 4;
+pub const VTIME: usize = 5;
+pub const VEOL2: usize = 6;
+pub const VSWTCH: usize = 7;
+pub const VSTART: usize = 8;
+pub const VSTOP: usize = 9;
+pub const VSUSP: usize = 10;
+
+// c_iflag bits
+pub const IGNBRK: tcflag_t = 0x01;
+pub const BRKINT: tcflag_t = 0x02;
+pub const IGNPAR: tcflag_t = 0x04;
+pub const PARMRK: tcflag_t = 0x08;
+pub const INPCK: tcflag_t = 0x10;
+pub const ISTRIP: tcflag_t = 0x20;
+pub const INLCR: tcflag_t = 0x40;
+pub const IGNCR: tcflag_t = 0x80;
+pub const ICRNL: tcflag_t = 0x100;
+pub const IUCLC: tcflag_t = 0x200;
+pub const IXON: tcflag_t = 0x400;
+pub const IXANY: tcflag_t = 0x800;
+pub const IXOFF: tcflag_t = 0x1000;
+
+// c_oflag bits
+pub const OPOST: tcflag_t = 0x01;
+pub const OLCUC: tcflag_t = 0x02;
+pub const ONLCR: tcflag_t = 0x04;
+pub const OCRNL: tcflag_t = 0x08;
+pub const ONOCR: tcflag_t = 0x10;
+pub const ONLRET: tcflag_t = 0x20;
+pub const OFILL: tcflag_t = 0x40;
+pub const OFDEL: tcflag_t = 0x80;
+pub const NLDLY: tcflag_t = 0x100;
+pub const NL0: tcflag_t = 0x000;
+pub const NL1: tcflag_t = 0x100;
+pub const CRDLY: tcflag_t = 0x600;
+pub const CR0: tcflag_t = 0x000;
+pub const CR1: tcflag_t = 0x200;
+pub const CR2: tcflag_t = 0x400;
+pub const CR3: tcflag_t = 0x600;
+pub const TABDLY: tcflag_t = 0x1800;
+pub const TAB0: tcflag_t = 0x0000;
+pub const TAB1: tcflag_t = 0x0800;
+pub const TAB2: tcflag_t = 0x1000;
+pub const TAB3: tcflag_t = 0x1800;
+pub const BSDLY: tcflag_t = 0x2000;
+pub const BS0: tcflag_t = 0x0000;
+pub const BS1: tcflag_t = 0x2000;
+pub const VTDLY: tcflag_t = 0x4000;
+pub const VT0: tcflag_t = 0x0000;
+pub const VT1: tcflag_t = 0x4000;
+pub const FFDLY: tcflag_t = 0x8000;
+pub const FF0: tcflag_t = 0x0000;
+pub const FF1: tcflag_t = 0x8000;
+
+// c_cflag bits
+pub const CBAUD: tcflag_t = 0x1F;
+pub const CSIZE: tcflag_t = 0x20;
+pub const CS5: tcflag_t = 0x00;
+pub const CS6: tcflag_t = 0x00;
+pub const CS7: tcflag_t = 0x00;
+pub const CS8: tcflag_t = 0x20;
+pub const CSTOPB: tcflag_t = 0x40;
+pub const CREAD: tcflag_t = 0x80;
+pub const PARENB: tcflag_t = 0x100;
+pub const PARODD: tcflag_t = 0x200;
+pub const HUPCL: tcflag_t = 0x400;
+pub const CLOCAL: tcflag_t = 0x800;
+pub const XLOBLK: tcflag_t = 0x1000;
+pub const CTSFLOW: tcflag_t = 0x2000;
+pub const RTSFLOW: tcflag_t = 0x4000;
+pub const CRTSCTS: tcflag_t = 0x6000;
+
+// c_lflag bits
+pub const ISIG: tcflag_t = 0x01;
+pub const ICANON: tcflag_t = 0x02;
+pub const XCASE: tcflag_t = 0x04;
+pub const ECHO: tcflag_t = 0x08;
+pub const ECHOE: tcflag_t = 0x10;
+pub const ECHOK: tcflag_t = 0x20;
+pub const ECHONL: tcflag_t = 0x40;
+pub const NOFLSH: tcflag_t = 0x80;
+pub const TOSTOP: tcflag_t = 0x100;
+pub const IEXTEN: tcflag_t = 0x200;
+pub const ECHOCTL: tcflag_t = 0x400;
+pub const ECHOPRT: tcflag_t = 0x800;
+pub const ECHOKE: tcflag_t = 0x1000;
+pub const FLUSHO: tcflag_t = 0x2000;
+pub const PENDIN: tcflag_t = 0x4000;
+
+// baud rates
+pub const B0: speed_t = 0x00;
+pub const B50: speed_t = 0x01;
+pub const B75: speed_t = 0x02;
+pub const B110: speed_t = 0x03;
+pub const B134: speed_t = 0x04;
+pub const B150: speed_t = 0x05;
+pub const B200: speed_t = 0x06;
+pub const B300: speed_t = 0x07;
+pub const B600: speed_t = 0x08;
+pub const B1200: speed_t = 0x09;
+pub const B1800: speed_t = 0x0A;
+pub const B2400: speed_t = 0x0B;
+pub const B4800: speed_t = 0x0C;
+pub const B9600: speed_t = 0x0D;
+pub const B19200: speed_t = 0x0E;
+pub const B38400: speed_t = 0x0F;
+pub const B57600: speed_t = 0x10;
+pub const B115200: speed_t = 0x11;
+pub const B230400: speed_t = 0x12;
+pub const B31250: speed_t = 0x13;
+
+// tcsetattr()
+pub const TCSANOW: c_int = 0x01;
+pub const TCSADRAIN: c_int = 0x02;
+pub const TCSAFLUSH: c_int = 0x04;
+
+// tcflow()
+pub const TCOOFF: c_int = 0x01;
+pub const TCOON: c_int = 0x02;
+pub const TCIOFF: c_int = 0x04;
+pub const TCION: c_int = 0x08;
+
+// tcflush()
+pub const TCIFLUSH: c_int = 0x01;
+pub const TCOFLUSH: c_int = 0x02;
+pub const TCIOFLUSH: c_int = 0x03;
diff --git a/termios-0.3.1/src/os/mod.rs b/termios-0.3.1/src/os/mod.rs
index 519723c..af8f5be 100644
--- a/termios-0.3.1/src/os/mod.rs
+++ b/termios-0.3.1/src/os/mod.rs
@@ -6,6 +6,7 @@
#[cfg(target_os = "freebsd")] pub use self::freebsd as target;
#[cfg(target_os = "openbsd")] pub use self::openbsd as target;
#[cfg(target_os = "dragonfly")] pub use self::dragonfly as target;
+#[cfg(target_os = "haiku")] pub use self::haiku as target;
#[cfg(target_os = "linux")] pub mod linux;
#[cfg(target_os = "android")] pub mod android;
@@ -13,3 +14,4 @@
#[cfg(target_os = "freebsd")] pub mod freebsd;
#[cfg(target_os = "openbsd")] pub mod openbsd;
#[cfg(target_os = "dragonfly")] pub mod dragonfly;
+#[cfg(target_os = "haiku")] pub mod haiku;
--
2.21.0
From 66ac406b463a239019cbdf1abc8c50fd5e61db2d Mon Sep 17 00:00:00 2001
From: Crestwave <crestwave@users.noreply.github.com>
Date: Tue, 1 Oct 2019 08:44:17 +0000
Subject: Fix Haiku build
diff --git a/termios-0.3.1/src/ffi.rs b/termios-0.3.1/src/ffi.rs
index 89e2084..faf59d2 100644
--- a/termios-0.3.1/src/ffi.rs
+++ b/termios-0.3.1/src/ffi.rs
@@ -2,7 +2,7 @@
use libc::{c_int,pid_t};
-#[link(name = "c")]
+#[cfg_attr(not(target_os = "haiku"), link(name = "c"))]
extern "C" {
pub fn tcgetattr(fd: c_int, termios_p: *mut ::os::target::termios) -> c_int;
pub fn tcsetattr(fd: c_int, optional_actions: c_int, termios_p: *const ::os::target::termios) -> c_int;
--
2.23.0
From 5bf7c2c51d9461ea0667e46e2210ca36fcd01a8b Mon Sep 17 00:00:00 2001
From: Crestwave <crest.wave@yahoo.com>
Date: Mon, 7 Oct 2019 01:22:57 +0000
Subject: Fix tests on Haiku
diff --git a/termios-0.3.1/src/ffi.rs b/termios-0.3.1/src/ffi.rs
index faf59d2..7bd15ad 100644
--- a/termios-0.3.1/src/ffi.rs
+++ b/termios-0.3.1/src/ffi.rs
@@ -1,6 +1,8 @@
//! Unsafe FFI bindings.
-use libc::{c_int,pid_t};
+use libc::c_int;
+#[cfg(not(target_os = "haiku"))]
+use libc::pid_t;
#[cfg_attr(not(target_os = "haiku"), link(name = "c"))]
extern "C" {
@@ -15,6 +17,8 @@ extern "C" {
pub fn cfgetospeed(termios_p: *const ::os::target::termios) -> ::os::target::speed_t;
pub fn cfsetispeed(termios_p: *mut ::os::target::termios, speed: ::os::target::speed_t) -> c_int;
pub fn cfsetospeed(termios_p: *mut ::os::target::termios, speed: ::os::target::speed_t) -> c_int;
+ #[cfg(not(target_os = "haiku"))]
pub fn cfsetspeed(termios_p: *mut ::os::target::termios, speed: ::os::target::speed_t) -> c_int;
+ #[cfg(not(target_os = "haiku"))]
pub fn tcgetsid(fd: c_int) -> pid_t;
}
diff --git a/termios-0.3.1/src/lib.rs b/termios-0.3.1/src/lib.rs
index d229427..4870118 100644
--- a/termios-0.3.1/src/lib.rs
+++ b/termios-0.3.1/src/lib.rs
@@ -76,6 +76,7 @@
//! example of a portable function that sets the maximum speed on a `Termios` struct.
//!
//! ```no_run
+//! # #[cfg(not(target_os = "haiku"))] {
//! use std::io;
//! use termios::{Termios,cfsetspeed};
//!
@@ -107,6 +108,7 @@
//! # let fd = 1;
//! let mut termios = Termios::from_fd(fd).unwrap();
//! set_fastest_speed(&mut termios).unwrap();
+//! # }
//! ```
extern crate libc;
@@ -116,7 +118,9 @@ use std::mem;
use std::ops::{Deref,DerefMut};
use std::os::unix::io::RawFd;
-use libc::{c_int,pid_t};
+use libc::c_int;
+#[cfg(not(target_os = "haiku"))]
+use libc::pid_t;
pub use ::os::target::{cc_t,speed_t,tcflag_t}; // types
pub use ::os::target::{VEOF,VEOL,VERASE,VINTR,VKILL,VMIN,VQUIT,VSTART,VSTOP,VSUSP,VTIME}; // c_cc subscripts
@@ -161,6 +165,7 @@ pub mod os;
/// termios.c_cc[VMIN] = 0;
/// termios.c_cc[VTIME] = 0;
///
+/// #[cfg(not(target_os = "haiku"))]
/// try!(cfsetspeed(&mut termios, B9600));
/// try!(tcsetattr(fd, TCSANOW, &mut termios));
///
@@ -366,6 +371,7 @@ pub fn cfsetospeed(termios: &mut Termios, speed: speed_t) -> io::Result<()> {
///
/// This function is not part of the IEEE Std 1003.1 ("POSIX.1") specification, but it is available
/// on Linux, BSD, and OS X.
+#[cfg(not(target_os = "haiku"))]
pub fn cfsetspeed(termios: &mut Termios, speed: speed_t) -> io::Result<()> {
io_result(unsafe { ffi::cfsetspeed(termios.inner_mut(), speed) })
}
@@ -474,6 +480,7 @@ pub fn tcsetattr(fd: RawFd, action: c_int, termios: &Termios) -> io::Result<()>
/// # Parameters
///
/// * `fd` should be an open file descriptor associated with a controlling terminal.
+#[cfg(not(target_os = "haiku"))]
pub fn tcgetsid(fd: RawFd) -> pid_t {
unsafe { ffi::tcgetsid(fd) }
}
--
2.23.0