Skip to content

Commit 25340cc

Browse files
tankf33derblackshirt
authored andcommitted
os: fix swap_bytes_u64 (vlang#24033)
1 parent 9a47693 commit 25340cc

File tree

2 files changed

+39
-14
lines changed

2 files changed

+39
-14
lines changed

vlib/os/file_le_be.c.v

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,34 @@ pub fn (mut f File) read_u8() !u8 {
7474

7575
@[inline]
7676
fn swap_bytes_u16(x u16) u16 {
77-
return ((x >> 8) & 0x00FF) | ((x << 8) & 0xFF00)
77+
// vfmt off
78+
return ((x >> 8) & 0x00FF) |
79+
((x << 8) & 0xFF00)
80+
// vfmt on
7881
}
7982

8083
@[inline]
8184
fn swap_bytes_u32(x u32) u32 {
82-
return ((x >> 24) & 0x0000_00FF) | ((x >> 8) & 0x0000_FF00) | ((x << 8) & 0x00FF_0000) | ((x << 24) & 0xFF00_0000)
85+
// vfmt off
86+
return ((x >> 24) & 0x0000_00FF) |
87+
((x >> 8) & 0x0000_FF00) |
88+
((x << 8) & 0x00FF_0000) |
89+
((x << 24) & 0xFF00_0000)
90+
// vfmt on
8391
}
8492

8593
@[inline]
8694
fn swap_bytes_u64(x u64) u64 {
87-
return ((x >> 40) & 0x00000000_0000FF00) | ((x >> 24) & 0x00000000_00FF0000) | ((x >> 8) & 0x00000000_FF000000) | ((x << 8) & 0x000000FF_00000000) | ((x << 24) & 0x0000FF00_00000000) | ((x << 40) & 0x00FF0000_00000000) | ((x << 56) & 0xFF000000_00000000)
95+
// vfmt off
96+
return ((x >> 56) & 0x00000000_000000FF) |
97+
((x >> 40) & 0x00000000_0000FF00) |
98+
((x >> 24) & 0x00000000_00FF0000) |
99+
((x >> 8) & 0x00000000_FF000000) |
100+
((x << 8) & 0x000000FF_00000000) |
101+
((x << 24) & 0x0000FF00_00000000) |
102+
((x << 40) & 0x00FF0000_00000000) |
103+
((x << 56) & 0xFF000000_00000000)
104+
// vfmt on
88105
}
89106

90107
fn swap_bytes[T](input T) T {

vlib/os/file_le_be_test.v

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,46 +19,54 @@ fn test_write_be_read_be() {
1919
mut f := os.open_file(fname, 'wb')!
2020
f.write_be[u8](0x08)!
2121
f.write_be[u16](0x1617)!
22-
f.write_be[u32](0x3233)!
23-
f.write_be[u64](0x6465)!
22+
f.write_be[u32](0x30313233)!
23+
f.write_be[u64](0x5859606162636465)!
2424
f.write_u8(123)!
2525
f.write_u8(42)!
2626
f.close()
2727
// vfmt off
2828
assert os.read_bytes(fname)! == [
2929
u8(0x08),
3030
0x16, 0x17,
31-
0x00, 0x00, 0x32, 0x33,
32-
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65,
31+
0x30, 0x31, 0x32, 0x33,
32+
0x58, 0x59, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
3333
123, 42
3434
]
3535
// vfmt on
36+
mut r := os.open_file(fname, 'rb')!
37+
assert r.read_be[u8]()! == 0x08
38+
assert r.read_be[u16]()! == 0x1617
39+
assert r.read_be[u32]()! == 0x30313233
40+
assert r.read_be[u64]()! == 0x5859606162636465
41+
assert r.read_u8()! == 123
42+
assert r.read_u8()! == 42
43+
r.close()
3644
}
3745

3846
fn test_write_le_read_le() {
3947
fname := os.join_path(tfolder, 'f_le')
4048
mut f := os.open_file(fname, 'wb')!
4149
f.write_le[u8](0x08)!
4250
f.write_le[u16](0x1617)!
43-
f.write_le[u32](0x3233)!
44-
f.write_le[u64](0x6465)!
51+
f.write_le[u32](0x30313233)!
52+
f.write_le[u64](0x5859606162636465)!
4553
f.write_u8(12)!
4654
f.write_u8(34)!
4755
f.close()
4856
// vfmt off
49-
assert os.read_bytes('f_le')! == [
57+
assert os.read_bytes(fname)! == [
5058
u8(0x08),
5159
0x17, 0x16,
52-
0x33, 0x32, 0x00, 0x00,
53-
0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60+
0x33, 0x32, 0x31, 0x30,
61+
0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x59, 0x58,
5462
12, 34
5563
]
5664
// vfmt on
5765
mut r := os.open_file(fname, 'rb')!
5866
assert r.read_le[u8]()! == 0x08
5967
assert r.read_le[u16]()! == 0x1617
60-
assert r.read_le[u32]()! == 0x3233
61-
assert r.read_le[u64]()! == 0x6465
68+
assert r.read_le[u32]()! == 0x30313233
69+
assert r.read_le[u64]()! == 0x5859606162636465
6270
assert r.read_u8()! == 12
6371
assert r.read_u8()! == 34
6472
r.close()

0 commit comments

Comments
 (0)