mirror of
https://github.com/denoland/deno.git
synced 2025-09-22 10:22:34 +00:00

Some checks are pending
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build libs (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
Fix build error on Android. Patches from https://github.com/cions/termux-deno
279 lines
9.2 KiB
Rust
279 lines
9.2 KiB
Rust
// Copyright 2018-2025 the Deno authors. MIT license.
|
|
|
|
use deno_core::op2;
|
|
use serde::Serialize;
|
|
|
|
#[derive(Debug, Serialize)]
|
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
|
/// https://github.com/nodejs/node/blob/ce4a16f50ae289bf6c7834b592ca47ad4634dd79/src/node_constants.cc#L1044-L1225
|
|
pub struct FsConstants {
|
|
uv_fs_symlink_dir: i32,
|
|
uv_fs_symlink_junction: i32,
|
|
o_rdonly: i32,
|
|
o_wronly: i32,
|
|
o_rdwr: i32,
|
|
uv_dirent_unknown: i32,
|
|
uv_dirent_file: i32,
|
|
uv_dirent_dir: i32,
|
|
uv_dirent_link: i32,
|
|
uv_dirent_fifo: i32,
|
|
uv_dirent_socket: i32,
|
|
uv_dirent_char: i32,
|
|
uv_dirent_block: i32,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifmt: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifreg: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifdir: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifchr: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifblk: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ififo: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_iflnk: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ifsock: Option<i32>,
|
|
o_creat: i32,
|
|
o_excl: i32,
|
|
uv_fs_o_filemap: i32,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_noctty: Option<i32>,
|
|
o_trunc: i32,
|
|
o_append: i32,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_directory: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_noatime: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_nofollow: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_sync: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_dsync: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_symlink: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_direct: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
o_nonblock: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_irwxu: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_irusr: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_iwusr: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ixusr: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_irwxg: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_irgrp: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_iwgrp: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ixgrp: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_irwxo: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_iroth: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_iwoth: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
s_ixoth: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
f_ok: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
r_ok: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
w_ok: Option<i32>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
x_ok: Option<i32>,
|
|
uv_fs_copyfile_excl: i32,
|
|
copyfile_excl: i32,
|
|
uv_fs_copyfile_ficlone: i32,
|
|
copyfile_ficlone: i32,
|
|
uv_fs_copyfile_ficlone_force: i32,
|
|
copyfile_ficlone_force: i32,
|
|
}
|
|
|
|
// https://github.com/nodejs/node/blob/9d2368f64329bf194c4e82b349e76fdad879d32a/deps/uv/include/uv.h#L1616-L1626
|
|
pub const UV_FS_SYMLINK_DIR: i32 = 1;
|
|
pub const UV_FS_SYMLINK_JUNCTION: i32 = 2;
|
|
|
|
// https://github.com/nodejs/node/blob/9d2368f64329bf194c4e82b349e76fdad879d32a/deps/uv/include/uv.h#L1254-L1263
|
|
pub const UV_DIRENT_UNKNOWN: i32 = 0;
|
|
pub const UV_DIRENT_FILE: i32 = 1;
|
|
pub const UV_DIRENT_DIR: i32 = 2;
|
|
pub const UV_DIRENT_LINK: i32 = 3;
|
|
pub const UV_DIRENT_FIFO: i32 = 4;
|
|
pub const UV_DIRENT_SOCKET: i32 = 5;
|
|
pub const UV_DIRENT_CHAR: i32 = 6;
|
|
pub const UV_DIRENT_BLOCK: i32 = 7;
|
|
|
|
// https://github.com/nodejs/node/blob/9d2368f64329bf194c4e82b349e76fdad879d32a/deps/uv/include/uv.h#L1485-L1501
|
|
pub const UV_FS_COPYFILE_EXCL: i32 = 1;
|
|
pub const UV_FS_COPYFILE_FICLONE: i32 = 2;
|
|
pub const UV_FS_COPYFILE_FICLONE_FORCE: i32 = 4;
|
|
|
|
#[cfg(unix)]
|
|
/// https://github.com/nodejs/node/blob/9d2368f64329bf194c4e82b349e76fdad879d32a/deps/uv/include/uv/unix.h#L506
|
|
pub const UV_FS_O_FILEMAP: i32 = 0;
|
|
#[cfg(not(unix))]
|
|
/// https://github.com/nodejs/node/blob/4dafa7747f7d2804aed3f3400d04f1ec6af24160/deps/uv/include/uv/win.h#L678
|
|
pub const UV_FS_O_FILEMAP: i32 = 0x20000000;
|
|
|
|
impl Default for FsConstants {
|
|
fn default() -> Self {
|
|
FsConstants {
|
|
uv_fs_symlink_dir: UV_FS_SYMLINK_DIR,
|
|
uv_fs_symlink_junction: UV_FS_SYMLINK_JUNCTION,
|
|
o_rdonly: libc::O_RDONLY,
|
|
o_wronly: libc::O_WRONLY,
|
|
o_rdwr: libc::O_RDWR,
|
|
uv_dirent_unknown: UV_DIRENT_UNKNOWN,
|
|
uv_dirent_file: UV_DIRENT_FILE,
|
|
uv_dirent_dir: UV_DIRENT_DIR,
|
|
uv_dirent_link: UV_DIRENT_LINK,
|
|
uv_dirent_fifo: UV_DIRENT_FIFO,
|
|
uv_dirent_socket: UV_DIRENT_SOCKET,
|
|
uv_dirent_char: UV_DIRENT_CHAR,
|
|
uv_dirent_block: UV_DIRENT_BLOCK,
|
|
s_ifmt: None,
|
|
s_ifreg: None,
|
|
s_ifdir: None,
|
|
s_ifchr: None,
|
|
s_ifblk: None,
|
|
s_ififo: None,
|
|
s_iflnk: None,
|
|
s_ifsock: None,
|
|
o_creat: libc::O_CREAT,
|
|
o_excl: libc::O_EXCL,
|
|
uv_fs_o_filemap: UV_FS_O_FILEMAP,
|
|
o_noctty: None,
|
|
o_trunc: libc::O_TRUNC,
|
|
o_append: libc::O_APPEND,
|
|
o_directory: None,
|
|
o_noatime: None,
|
|
o_nofollow: None,
|
|
o_sync: None,
|
|
o_dsync: None,
|
|
o_symlink: None,
|
|
o_direct: None,
|
|
o_nonblock: None,
|
|
s_irwxu: None,
|
|
s_irusr: None,
|
|
s_iwusr: None,
|
|
s_ixusr: None,
|
|
s_irwxg: None,
|
|
s_irgrp: None,
|
|
s_iwgrp: None,
|
|
s_ixgrp: None,
|
|
s_irwxo: None,
|
|
s_iroth: None,
|
|
s_iwoth: None,
|
|
s_ixoth: None,
|
|
f_ok: None,
|
|
r_ok: None,
|
|
w_ok: None,
|
|
x_ok: None,
|
|
uv_fs_copyfile_excl: UV_FS_COPYFILE_EXCL,
|
|
copyfile_excl: UV_FS_COPYFILE_EXCL,
|
|
uv_fs_copyfile_ficlone: UV_FS_COPYFILE_FICLONE,
|
|
copyfile_ficlone: UV_FS_COPYFILE_FICLONE,
|
|
uv_fs_copyfile_ficlone_force: UV_FS_COPYFILE_FICLONE_FORCE,
|
|
copyfile_ficlone_force: UV_FS_COPYFILE_FICLONE_FORCE,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(unix)]
|
|
fn common_unix_fs_constants() -> FsConstants {
|
|
FsConstants {
|
|
s_ifmt: Some(libc::S_IFMT as i32),
|
|
s_ifreg: Some(libc::S_IFREG as i32),
|
|
s_ifdir: Some(libc::S_IFDIR as i32),
|
|
s_ifchr: Some(libc::S_IFCHR as i32),
|
|
s_ifblk: Some(libc::S_IFBLK as i32),
|
|
s_ififo: Some(libc::S_IFIFO as i32),
|
|
s_iflnk: Some(libc::S_IFLNK as i32),
|
|
s_ifsock: Some(libc::S_IFSOCK as i32),
|
|
o_noctty: Some(libc::O_NOCTTY),
|
|
o_directory: Some(libc::O_DIRECTORY),
|
|
o_nofollow: Some(libc::O_NOFOLLOW),
|
|
o_sync: Some(libc::O_SYNC),
|
|
o_dsync: Some(libc::O_DSYNC),
|
|
o_nonblock: Some(libc::O_NONBLOCK),
|
|
s_irwxu: Some(libc::S_IRWXU as i32),
|
|
s_irusr: Some(libc::S_IRUSR as i32),
|
|
s_iwusr: Some(libc::S_IWUSR as i32),
|
|
s_ixusr: Some(libc::S_IXUSR as i32),
|
|
s_irwxg: Some(libc::S_IRWXG as i32),
|
|
s_irgrp: Some(libc::S_IRGRP as i32),
|
|
s_iwgrp: Some(libc::S_IWGRP as i32),
|
|
s_ixgrp: Some(libc::S_IXGRP as i32),
|
|
s_irwxo: Some(libc::S_IRWXO as i32),
|
|
s_iroth: Some(libc::S_IROTH as i32),
|
|
s_iwoth: Some(libc::S_IWOTH as i32),
|
|
s_ixoth: Some(libc::S_IXOTH as i32),
|
|
f_ok: Some(libc::F_OK),
|
|
r_ok: Some(libc::R_OK),
|
|
w_ok: Some(libc::W_OK),
|
|
x_ok: Some(libc::X_OK),
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
#[cfg(target_os = "macos")]
|
|
#[op2]
|
|
#[serde]
|
|
pub fn op_node_fs_constants() -> FsConstants {
|
|
let mut constants = common_unix_fs_constants();
|
|
constants.o_symlink = Some(libc::O_SYMLINK);
|
|
constants
|
|
}
|
|
|
|
#[cfg(any(target_os = "android", target_os = "linux"))]
|
|
#[op2]
|
|
#[serde]
|
|
pub fn op_node_fs_constants() -> FsConstants {
|
|
let mut constants = common_unix_fs_constants();
|
|
constants.o_noatime = Some(libc::O_NOATIME);
|
|
constants.o_direct = Some(libc::O_DIRECT);
|
|
constants
|
|
}
|
|
|
|
#[cfg(windows)]
|
|
#[op2]
|
|
#[serde]
|
|
pub fn op_node_fs_constants() -> FsConstants {
|
|
let mut constants = FsConstants::default();
|
|
// https://github.com/nodejs/node/blob/4dafa7747f7d2804aed3f3400d04f1ec6af24160/deps/uv/include/uv/win.h#L65-L68
|
|
// https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_stat_lx_information
|
|
const S_IFIFO: i32 = 0x1000;
|
|
// https://github.com/nodejs/node/blob/4dafa7747f7d2804aed3f3400d04f1ec6af24160/deps/uv/include/uv/win.h#L61-L63
|
|
const S_IFLNK: i32 = 0xA000;
|
|
// https://github.com/nodejs/node/blob/4dafa7747f7d2804aed3f3400d04f1ec6af24160/deps/uv/include/uv/win.h#L661-L672
|
|
const F_OK: i32 = 0;
|
|
const R_OK: i32 = 4;
|
|
const W_OK: i32 = 2;
|
|
const X_OK: i32 = 1;
|
|
|
|
// https://github.com/nodejs/node/blob/9d2368f64329bf194c4e82b349e76fdad879d32a/src/node_constants.cc#L52-L57
|
|
constants.s_irusr = Some(libc::S_IREAD);
|
|
constants.s_iwusr = Some(libc::S_IWRITE);
|
|
|
|
constants.s_ifmt = Some(libc::S_IFMT);
|
|
constants.s_ifreg = Some(libc::S_IFREG);
|
|
constants.s_ifdir = Some(libc::S_IFDIR);
|
|
constants.s_ifchr = Some(libc::S_IFCHR);
|
|
constants.f_ok = Some(F_OK);
|
|
constants.r_ok = Some(R_OK);
|
|
constants.w_ok = Some(W_OK);
|
|
constants.x_ok = Some(X_OK);
|
|
constants.s_iflnk = Some(S_IFLNK);
|
|
constants.s_ififo = Some(S_IFIFO);
|
|
constants
|
|
}
|