@@ -593,8 +593,6 @@ unsafe fn ZDICT_trainBuffer_legacy(
593593 mut minRatio : core:: ffi:: c_uint ,
594594 notificationLevel : u32 ,
595595) -> size_t {
596- let mut suffix = vec ! [ 0u32 ; bufferSize] ;
597- let reverseSuffix = malloc ( bufferSize. wrapping_mul ( :: core:: mem:: size_of :: < u32 > ( ) ) ) as * mut u32 ;
598596 let doneMarks = malloc (
599597 bufferSize
600598 . wrapping_add ( 16 )
@@ -610,7 +608,7 @@ unsafe fn ZDICT_trainBuffer_legacy(
610608 if notificationLevel >= 2 {
611609 eprintln ! ( "\r {:70 }\r " , "" ) ; // clean display line
612610 }
613- if reverseSuffix . is_null ( ) || doneMarks. is_null ( ) || filePos. is_null ( ) {
611+ if doneMarks. is_null ( ) || filePos. is_null ( ) {
614612 result = Error :: memory_allocation. to_error_code ( ) ;
615613 } else {
616614 if minRatio < MINRATIO {
@@ -638,6 +636,7 @@ unsafe fn ZDICT_trainBuffer_legacy(
638636 bufferSize >> 20 ,
639637 ) ;
640638 }
639+ let mut suffix = vec ! [ 0u32 ; bufferSize] ;
641640 let divSuftSortResult = divsufsort (
642641 core:: slice:: from_raw_parts ( buffer as * const u8 , bufferSize) ,
643642 std:: mem:: transmute :: < & mut [ u32 ] , & mut [ i32 ] > ( & mut suffix[ ..] ) ,
@@ -647,10 +646,11 @@ unsafe fn ZDICT_trainBuffer_legacy(
647646 result = Error :: GENERIC . to_error_code ( ) ;
648647 } else {
649648 // build reverse suffix sort
649+ let mut reverseSuffix = vec ! [ 0u32 ; bufferSize] ;
650650 let mut pos: size_t = 0 ;
651651 pos = 0 ;
652652 while pos < bufferSize {
653- * reverseSuffix. offset ( suffix[ pos] as isize ) = pos as u32 ;
653+ reverseSuffix[ suffix[ pos] as usize ] = pos as u32 ;
654654 pos = pos. wrapping_add ( 1 ) ;
655655 }
656656 // Note: filePos tracks borders between samples.
@@ -681,7 +681,7 @@ unsafe fn ZDICT_trainBuffer_legacy(
681681 solution = ZDICT_analyzePos (
682682 doneMarks,
683683 & suffix,
684- * reverseSuffix. offset ( cursor as isize ) ,
684+ reverseSuffix[ cursor as usize ] ,
685685 buffer,
686686 minRatio,
687687 notificationLevel,
@@ -707,7 +707,6 @@ unsafe fn ZDICT_trainBuffer_legacy(
707707 }
708708 }
709709 }
710- free ( reverseSuffix as * mut core:: ffi:: c_void ) ;
711710 free ( doneMarks as * mut core:: ffi:: c_void ) ;
712711 free ( filePos as * mut core:: ffi:: c_void ) ;
713712 result
0 commit comments