Skip to content

Commit

Permalink
Add support for macOS
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorn3 committed Nov 12, 2024
1 parent 84e6a56 commit 53e2d75
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 16 deletions.
16 changes: 8 additions & 8 deletions .github/workflows/checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ jobs:
os: ubuntu-latest
features: ""
target: "x86_64-unknown-linux-gnu"
# - rust: "stable"
# os: macos-latest
# features: ""
# target: "x86_64-apple-darwin"
# - rust: "stable"
# os: macos-14
# features: ""
# target: "aarch64-apple-darwin"
- rust: "stable"
os: macos-latest
features: ""
target: "x86_64-apple-darwin"
- rust: "stable"
os: macos-14
features: ""
target: "aarch64-apple-darwin"
# - rust: stable-x86_64-gnu
# os: windows-2022
# features: ""
Expand Down
22 changes: 17 additions & 5 deletions bzip2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,24 @@ use libbzip2_rs_sys::{
use libc::{
_exit, close, exit, fclose, fdopen, ferror, fflush, fgetc, fileno, fopen, fread, fwrite, open,
perror, remove, rewind, signal, stat, strcat, strcmp, strlen, strncpy, ungetc, utimbuf, write,
FILE,
FILE, O_CREAT, O_EXCL, O_WRONLY, S_IRUSR, S_IWUSR,
};

// FIXME remove this
extern "C" {
#[cfg(all(target_os = "linux", target_env = "gnu"))]
static mut stdin: *mut FILE;
#[cfg(all(target_os = "linux", target_env = "gnu"))]
static mut stdout: *mut FILE;

#[cfg(target_os = "macos")]
#[link_name = "__stdinp"]
static mut stdin: *mut FILE;
#[cfg(target_os = "macos")]
#[link_name = "__stdoutp"]
static mut stdout: *mut FILE;
}

type Bool = libc::c_uchar;

type IntNative = libc::c_int;
Expand Down Expand Up @@ -907,8 +919,8 @@ unsafe fn fileExists(name: *mut c_char) -> Bool {
unsafe fn fopen_output_safely(name: *mut c_char, mode: *const libc::c_char) -> *mut FILE {
let fh = open(
name,
0o1 as libc::c_int | 0o100 as libc::c_int | 0o200 as libc::c_int,
0o200 as libc::c_int | 0o400 as libc::c_int,
O_WRONLY | O_CREAT | O_EXCL,
S_IWUSR as libc::c_uint | S_IRUSR as libc::c_uint,
);
if fh == -1 as libc::c_int {
return std::ptr::null_mut::<FILE>();
Expand Down Expand Up @@ -971,13 +983,13 @@ unsafe fn countHardLinks(name: *mut c_char) -> i32 {

#[cfg(unix)]
fn count_hardlinks(path: &Path) -> u64 {
use std::os::linux::fs::MetadataExt;
use std::os::unix::fs::MetadataExt;

let Ok(metadata) = path.metadata() else {
return 0;
};

metadata.st_nlink().saturating_sub(1)
metadata.nlink().saturating_sub(1)
}

#[cfg(not(unix))]
Expand Down
3 changes: 2 additions & 1 deletion bzip2recover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,8 @@ fn main_help(program_name: &Path, in_filename: &Path) -> Result<(), Error> {
options.write(true).create(true);

#[cfg(unix)]
options.mode(libc::S_IWUSR | libc::S_IRUSR);
#[allow(clippy::unnecessary_cast)]
options.mode(libc::S_IWUSR as u32 | libc::S_IRUSR as u32);

#[cfg(unix)]
options.custom_flags(libc::O_EXCL);
Expand Down
14 changes: 12 additions & 2 deletions bzlib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,19 @@ use crate::decompress::{self, decompress};
use crate::libbzip2_rs_sys_version;
use crate::BZ_MAX_UNUSED;

// FIXME remove this
extern "C" {
static stdin: *mut FILE;
static stdout: *mut FILE;
#[cfg(all(target_os = "linux", target_env = "gnu"))]
static mut stdin: *mut FILE;
#[cfg(all(target_os = "linux", target_env = "gnu"))]
static mut stdout: *mut FILE;

#[cfg(target_os = "macos")]
#[link_name = "__stdinp"]
static mut stdin: *mut FILE;
#[cfg(target_os = "macos")]
#[link_name = "__stdoutp"]
static mut stdout: *mut FILE;
}

pub(crate) const BZ_MAX_ALPHA_SIZE: usize = 258;
Expand Down

0 comments on commit 53e2d75

Please sign in to comment.