@@ -7,6 +7,7 @@ extern crate wyvern;
77use libc:: { free, malloc} ;
88use std:: ffi:: CStr ;
99use std:: ffi:: c_void;
10+ use std:: mem;
1011use std:: os:: raw:: c_char;
1112use std:: ptr:: write;
1213use std:: slice;
@@ -201,51 +202,60 @@ pub unsafe extern "C" fn wyvern_vk_resource_get_data_float32(obj: *mut wyvern_vk
201202}
202203
203204#[ no_mangle]
204- pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_uint32 ( obj : * mut wyvern_vk_resource_t ) -> wyvern_data_array_uint32_t {
205+ pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_uint32 ( obj : * mut wyvern_vk_resource_t ) -> * mut wyvern_data_array_uint32_t {
205206 let obj = & mut * ( obj as * mut Arc < VkResource > ) ;
206207 if let TokenValue :: Vector ( ConstantVector :: U32 ( value) ) = obj. get_data ( ) {
207208 let data = malloc ( value. len ( ) * 4 ) as * mut u32 ;
208209 for i in 0 ..value. len ( ) {
209210 write ( data. offset ( i as isize ) , value[ i] ) ;
210211 }
211- wyvern_data_array_uint32_t {
212+ let arr = wyvern_data_array_uint32_t {
212213 size : value. len ( ) as u32 ,
213214 data : data,
214- }
215+ } ;
216+ let arr_p = malloc ( mem:: size_of :: < wyvern_data_array_uint32_t > ( ) ) as * mut wyvern_data_array_uint32_t ;
217+ write ( arr_p, arr) ;
218+ arr_p
215219 } else {
216220 panic ! ( "Wrong type requested!" ) ;
217221 }
218222}
219223
220224#[ no_mangle]
221- pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_int32 ( obj : * mut wyvern_vk_resource_t ) -> wyvern_data_array_int32_t {
225+ pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_int32 ( obj : * mut wyvern_vk_resource_t ) -> * mut wyvern_data_array_int32_t {
222226 let obj = & mut * ( obj as * mut Arc < VkResource > ) ;
223227 if let TokenValue :: Vector ( ConstantVector :: I32 ( value) ) = obj. get_data ( ) {
224228 let data = malloc ( value. len ( ) * 4 ) as * mut i32 ;
225229 for i in 0 ..value. len ( ) {
226230 write ( data. offset ( i as isize ) , value[ i] ) ;
227231 }
228- wyvern_data_array_int32_t {
232+ let arr = wyvern_data_array_int32_t {
229233 size : value. len ( ) as u32 ,
230234 data : data,
231- }
235+ } ;
236+ let arr_p = malloc ( mem:: size_of :: < wyvern_data_array_int32_t > ( ) ) as * mut wyvern_data_array_int32_t ;
237+ write ( arr_p, arr) ;
238+ arr_p
232239 } else {
233240 panic ! ( "Wrong type requested!" ) ;
234241 }
235242}
236243
237244#[ no_mangle]
238- pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_float32 ( obj : * mut wyvern_vk_resource_t ) -> wyvern_data_array_float_t {
245+ pub unsafe extern "C" fn wyvern_vk_resource_get_data_array_float32 ( obj : * mut wyvern_vk_resource_t ) -> * mut wyvern_data_array_float_t {
239246 let obj = & mut * ( obj as * mut Arc < VkResource > ) ;
240247 if let TokenValue :: Vector ( ConstantVector :: F32 ( value) ) = obj. get_data ( ) {
241248 let data = malloc ( value. len ( ) * 4 ) as * mut f32 ;
242249 for i in 0 ..value. len ( ) {
243250 write ( data. offset ( i as isize ) , value[ i] ) ;
244251 }
245- wyvern_data_array_float_t {
252+ let arr = wyvern_data_array_float_t {
246253 size : value. len ( ) as u32 ,
247254 data : data,
248- }
255+ } ;
256+ let arr_p = malloc ( mem:: size_of :: < wyvern_data_array_float_t > ( ) ) as * mut wyvern_data_array_float_t ;
257+ write ( arr_p, arr) ;
258+ arr_p
249259 } else {
250260 panic ! ( "Wrong type requested!" ) ;
251261 }
0 commit comments