@@ -49,22 +49,20 @@ pub unsafe extern "C" fn full_merge_callback(
49
49
success : * mut u8 ,
50
50
new_value_length : * mut size_t ,
51
51
) -> * mut c_char {
52
- unsafe {
53
- let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
54
- let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
55
- let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
56
- let oldval: & [ u8 ] =
57
- slice:: from_raw_parts ( existing_value as * const u8 , existing_value_len as usize ) ;
58
- let mut result = ( cb. merge_fn ) ( key, Some ( oldval) , operands) ;
59
- result. shrink_to_fit ( ) ;
60
- // TODO(tan) investigate zero-copy techniques to improve performance
61
- let buf = libc:: malloc ( result. len ( ) as size_t ) ;
62
- assert ! ( !buf. is_null( ) ) ;
63
- * new_value_length = result. len ( ) as size_t ;
64
- * success = 1 as u8 ;
65
- ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
66
- buf as * mut c_char
67
- }
52
+ let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
53
+ let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
54
+ let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
55
+ let oldval: & [ u8 ] =
56
+ slice:: from_raw_parts ( existing_value as * const u8 , existing_value_len as usize ) ;
57
+ let mut result = ( cb. merge_fn ) ( key, Some ( oldval) , operands) ;
58
+ result. shrink_to_fit ( ) ;
59
+ // TODO(tan) investigate zero-copy techniques to improve performance
60
+ let buf = libc:: malloc ( result. len ( ) as size_t ) ;
61
+ assert ! ( !buf. is_null( ) ) ;
62
+ * new_value_length = result. len ( ) as size_t ;
63
+ * success = 1 as u8 ;
64
+ ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
65
+ buf as * mut c_char
68
66
}
69
67
70
68
pub unsafe extern "C" fn partial_merge_callback (
@@ -77,20 +75,18 @@ pub unsafe extern "C" fn partial_merge_callback(
77
75
success : * mut u8 ,
78
76
new_value_length : * mut size_t ,
79
77
) -> * mut c_char {
80
- unsafe {
81
- let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
82
- let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
83
- let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
84
- let mut result = ( cb. merge_fn ) ( key, None , operands) ;
85
- result. shrink_to_fit ( ) ;
86
- // TODO(tan) investigate zero-copy techniques to improve performance
87
- let buf = libc:: malloc ( result. len ( ) as size_t ) ;
88
- assert ! ( !buf. is_null( ) ) ;
89
- * new_value_length = result. len ( ) as size_t ;
90
- * success = 1 as u8 ;
91
- ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
92
- buf as * mut c_char
93
- }
78
+ let cb: & mut MergeOperatorCallback = & mut * ( raw_cb as * mut MergeOperatorCallback ) ;
79
+ let operands = & mut MergeOperands :: new ( operands_list, operands_list_len, num_operands) ;
80
+ let key: & [ u8 ] = slice:: from_raw_parts ( raw_key as * const u8 , key_len as usize ) ;
81
+ let mut result = ( cb. merge_fn ) ( key, None , operands) ;
82
+ result. shrink_to_fit ( ) ;
83
+ // TODO(tan) investigate zero-copy techniques to improve performance
84
+ let buf = libc:: malloc ( result. len ( ) as size_t ) ;
85
+ assert ! ( !buf. is_null( ) ) ;
86
+ * new_value_length = result. len ( ) as size_t ;
87
+ * success = 1 as u8 ;
88
+ ptr:: copy ( result. as_ptr ( ) as * mut c_void , & mut * buf, result. len ( ) ) ;
89
+ buf as * mut c_char
94
90
}
95
91
96
92
pub struct MergeOperands {
0 commit comments