@@ -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