Skip to content

Commit 7be889f

Browse files
Hoist varlena encoding fn (pgcentralfoundation#2208)
They may see more use in this factored-out form.
1 parent b093672 commit 7be889f

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

pgrx/src/varlena.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,23 @@ pub unsafe fn set_varsize_4b(ptr: *mut pg_sys::varlena, len: i32) {
3030
let header = &mut (*ptr.cast::<pg_sys::varattrib_4b>()).va_4byte.deref_mut().va_header;
3131
// Using core::ptr::write(), which never calls drop(), to prevent
3232
// automatically dropping a field of a ManuallyDrop<T>
33+
core::ptr::write(header, encode_vlen_4b(len))
34+
}
35+
36+
pub(crate) fn encode_vlen_4b(len: i32) -> u32 {
3337
#[cfg(target_endian = "big")]
3438
let value = (len as u32) & 0x3FFFFFFFu32;
3539
#[cfg(target_endian = "little")]
3640
let value = (len as u32) << 2u32;
37-
core::ptr::write(header, value)
41+
value
42+
}
43+
44+
pub(crate) fn encode_vlen_1b(len: i32) -> u8 {
45+
#[cfg(target_endian = "big")]
46+
let value = (len as u8) | 0x80;
47+
#[cfg(target_endian = "little")]
48+
let value = ((len as u8) << 1) | 0x01;
49+
value
3850
}
3951

4052
/// # Safety
@@ -62,11 +74,7 @@ pub unsafe fn set_varsize_1b(ptr: *mut pg_sys::varlena, len: i32) {
6274
// #endif
6375

6476
// SAFETY: A varlena can be safely cast to a varattrib_1b
65-
#[cfg(target_endian = "big")]
66-
let value = (len as u8) | 0x80;
67-
#[cfg(target_endian = "little")]
68-
let value = ((len as u8) << 1) | 0x01;
69-
(*ptr.cast::<pg_sys::varattrib_1b>()).va_header = value;
77+
(*ptr.cast::<pg_sys::varattrib_1b>()).va_header = encode_vlen_1b(len);
7078
}
7179

7280
/// # Safety

0 commit comments

Comments
 (0)