Skip to content

Commit dbe88ae

Browse files
committed
fix: ci
1 parent 4e06ddb commit dbe88ae

File tree

4 files changed

+150
-3
lines changed

4 files changed

+150
-3
lines changed

.github/workflows/CI.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ jobs:
310310
node -e "
311311
if ('${{ matrix.target }}'.endsWith('-musl')) {
312312
console.log('IMAGE=node:${{ matrix.node }}-alpine')
313+
} else if ('${{ matrix.target }}' === 'x86_64-unknown-linux-gnu') {
314+
console.log('IMAGE=node:${{ matrix.node }}-bookworm')
313315
} else {
314316
console.log('IMAGE=node:${{ matrix.node }}-bullseye')
315317
}
@@ -342,10 +344,14 @@ jobs:
342344
# 检查 le16toh 符号是否可用
343345
echo "Checking for le16toh symbol..."
344346
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep le16toh || echo "le16toh not found in libc"
347+
# 检查是否有 le16toh 的替代函数
348+
echo "Checking for alternative byte order functions..."
349+
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep -E "(htole16|htons|ntohs)" || echo "No alternative functions found"
345350
# 设置环境变量确保正确的链接
346351
export RUSTFLAGS="-C link-arg=-Wl,--allow-multiple-definition"
347-
# 尝试重新构建原生模块
348-
npm rebuild
352+
# 清理并重新安装依赖
353+
rm -rf node_modules package-lock.json pnpm-lock.yaml
354+
pnpm install --force
349355
npm run test
350356
351357
publish:

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
extern crate napi_build;
22

33
fn main() {
4-
napi_build::setup();
4+
napi_build::setup();
55
}

src/utils/byteorder.rs

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// 自定义字节序转换函数,用于解决 le16toh 符号缺失问题
2+
3+
/// 将小端序的 16 位整数转换为主机字节序
4+
/// 如果系统是小端序,则直接返回;如果是大端序,则进行字节交换
5+
#[inline]
6+
pub fn le16toh(val: u16) -> u16 {
7+
if cfg!(target_endian = "little") {
8+
val
9+
} else {
10+
val.swap_bytes()
11+
}
12+
}
13+
14+
/// 将主机字节序的 16 位整数转换为小端序
15+
#[inline]
16+
pub fn htole16(val: u16) -> u16 {
17+
if cfg!(target_endian = "little") {
18+
val
19+
} else {
20+
val.swap_bytes()
21+
}
22+
}
23+
24+
/// 将大端序的 16 位整数转换为主机字节序
25+
#[inline]
26+
pub fn be16toh(val: u16) -> u16 {
27+
if cfg!(target_endian = "big") {
28+
val
29+
} else {
30+
val.swap_bytes()
31+
}
32+
}
33+
34+
/// 将主机字节序的 16 位整数转换为大端序
35+
#[inline]
36+
pub fn htobe16(val: u16) -> u16 {
37+
if cfg!(target_endian = "big") {
38+
val
39+
} else {
40+
val.swap_bytes()
41+
}
42+
}
43+
44+
/// 将小端序的 32 位整数转换为主机字节序
45+
#[inline]
46+
pub fn le32toh(val: u32) -> u32 {
47+
if cfg!(target_endian = "little") {
48+
val
49+
} else {
50+
val.swap_bytes()
51+
}
52+
}
53+
54+
/// 将主机字节序的 32 位整数转换为小端序
55+
#[inline]
56+
pub fn htole32(val: u32) -> u32 {
57+
if cfg!(target_endian = "little") {
58+
val
59+
} else {
60+
val.swap_bytes()
61+
}
62+
}
63+
64+
/// 将大端序的 32 位整数转换为主机字节序
65+
#[inline]
66+
pub fn be32toh(val: u32) -> u32 {
67+
if cfg!(target_endian = "big") {
68+
val
69+
} else {
70+
val.swap_bytes()
71+
}
72+
}
73+
74+
/// 将主机字节序的 32 位整数转换为大端序
75+
#[inline]
76+
pub fn htobe32(val: u32) -> u32 {
77+
if cfg!(target_endian = "big") {
78+
val
79+
} else {
80+
val.swap_bytes()
81+
}
82+
}
83+
84+
/// 将小端序的 64 位整数转换为主机字节序
85+
#[inline]
86+
pub fn le64toh(val: u64) -> u64 {
87+
if cfg!(target_endian = "little") {
88+
val
89+
} else {
90+
val.swap_bytes()
91+
}
92+
}
93+
94+
/// 将主机字节序的 64 位整数转换为小端序
95+
#[inline]
96+
pub fn htole64(val: u64) -> u64 {
97+
if cfg!(target_endian = "little") {
98+
val
99+
} else {
100+
val.swap_bytes()
101+
}
102+
}
103+
104+
/// 将大端序的 64 位整数转换为主机字节序
105+
#[inline]
106+
pub fn be64toh(val: u64) -> u64 {
107+
if cfg!(target_endian = "big") {
108+
val
109+
} else {
110+
val.swap_bytes()
111+
}
112+
}
113+
114+
/// 将主机字节序的 64 位整数转换为大端序
115+
#[inline]
116+
pub fn htobe64(val: u64) -> u64 {
117+
if cfg!(target_endian = "big") {
118+
val
119+
} else {
120+
val.swap_bytes()
121+
}
122+
}
123+
124+
#[cfg(test)]
125+
mod tests {
126+
use super::*;
127+
128+
#[test]
129+
fn test_le16toh() {
130+
// 在小端序系统上,le16toh 应该直接返回原值
131+
let val = 0x1234u16;
132+
assert_eq!(le16toh(val), val);
133+
}
134+
135+
#[test]
136+
fn test_htole16() {
137+
let val = 0x1234u16;
138+
assert_eq!(htole16(val), val);
139+
}
140+
}

src/utils/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
pub mod byteorder;
12
pub mod qualifier;
23
pub mod uri;

0 commit comments

Comments
 (0)