-
Notifications
You must be signed in to change notification settings - Fork 105
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Compiling fails on FreeBSD #151
Comments
This would be a start: diff --git a/src/addr_validate.rs b/src/addr_validate.rs
index 9e9a34c..6094d6c 100644
--- a/src/addr_validate.rs
+++ b/src/addr_validate.rs
@@ -41,6 +41,29 @@ fn create_pipe() -> nix::Result<(i32, i32)> {
Ok((read_fd, write_fd))
}
+#[inline]
+#[cfg(target_os = "freebsd")]
+fn create_pipe() -> nix::Result<(i32, i32)> {
+ use nix::fcntl::{fcntl, FcntlArg, FdFlag, OFlag};
+ use nix::unistd::pipe;
+ use std::os::unix::io::RawFd;
+
+ fn set_flags(fd: RawFd) -> nix::Result<()> {
+ let mut flags = FdFlag::from_bits(fcntl(fd, FcntlArg::F_GETFD)?).unwrap();
+ flags |= FdFlag::FD_CLOEXEC;
+ fcntl(fd, FcntlArg::F_SETFD(flags))?;
+ let mut flags = OFlag::from_bits(fcntl(fd, FcntlArg::F_GETFL)?).unwrap();
+ flags |= OFlag::O_NONBLOCK;
+ fcntl(fd, FcntlArg::F_SETFL(flags))?;
+ Ok(())
+ }
+
+ let (read_fd, write_fd) = pipe()?;
+ set_flags(read_fd)?;
+ set_flags(write_fd)?;
+ Ok((read_fd, write_fd))
+}
+
fn open_pipe() -> nix::Result<()> {
MEM_VALIDATE_PIPE.with(|pipes| {
let mut pipes = pipes.borrow_mut();
diff --git a/src/profiler.rs b/src/profiler.rs
index 4bc72ad..52fcb86 100644
--- a/src/profiler.rs
+++ b/src/profiler.rs
@@ -208,6 +208,11 @@ impl ErrnoProtector {
let errno = *libc::__errno_location();
Self(errno)
}
+ #[cfg(target_os = "freebsd")]
+ {
+ let errno = *libc::__error();
+ Self(errno)
+ }
#[cfg(target_os = "macos")]
{
let errno = *libc::__error(); |
Or even better: diff --git a/src/addr_validate.rs b/src/addr_validate.rs
index 9e9a34c..7ceafd0 100644
--- a/src/addr_validate.rs
+++ b/src/addr_validate.rs
@@ -19,7 +19,7 @@ fn create_pipe() -> nix::Result<(i32, i32)> {
}
#[inline]
-#[cfg(target_os = "macos")]
+#[cfg(any(target_os = "macos", target_os = "freebsd"))]
fn create_pipe() -> nix::Result<(i32, i32)> {
use nix::fcntl::{fcntl, FcntlArg, FdFlag, OFlag};
use nix::unistd::pipe;
diff --git a/src/profiler.rs b/src/profiler.rs
index 4bc72ad..d89c164 100644
--- a/src/profiler.rs
+++ b/src/profiler.rs
@@ -208,7 +208,7 @@ impl ErrnoProtector {
let errno = *libc::__errno_location();
Self(errno)
}
- #[cfg(target_os = "macos")]
+ #[cfg(any(target_os = "macos", target_os = "freebsd"))]
{
let errno = *libc::__error();
Self(errno) |
Good! #150 is working on separating multiple implementations on different platforms. It would be better to take *bsd into consideration https://doc.rust-lang.org/reference/conditional-compilation.html#target_os . |
Thank you. I'll test this patch (and add some other modification, if needed) on freebsd tonight. Let's make |
Merged
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The text was updated successfully, but these errors were encountered: