Skip to content

Commit 7725ad0

Browse files
committed
fastcover.rs: make dict a Box
1 parent 1068018 commit 7725ad0

File tree

1 file changed

+29
-33
lines changed

1 file changed

+29
-33
lines changed

lib/dictBuilder/fastcover.rs

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -436,43 +436,39 @@ unsafe fn FASTCOVER_tryParameters(opaque: *mut core::ffi::c_void) {
436436
let dictBufferCapacity = (*data).dictBufferCapacity;
437437
let totalCompressedSize = Error::GENERIC.to_error_code();
438438
let mut segmentFreqs: Box<[u16]> = Box::from(vec![0u16; 1 << ctx.f]);
439-
let dict = malloc(dictBufferCapacity) as *mut u8;
439+
let mut dict: Box<[u8]> = Box::from(vec![0; dictBufferCapacity]);
440440
let mut selection = COVER_dictSelectionError(Error::GENERIC.to_error_code());
441441
let displayLevel = ctx.displayLevel;
442442
let mut freqs = ctx.freqs.clone();
443-
if dict.is_null() {
444-
if displayLevel >= 1 {
445-
eprintln!("Failed to allocate buffers: out of memory");
446-
}
447-
} else {
448-
let tail = FASTCOVER_buildDictionary(
449-
ctx,
450-
&mut freqs,
451-
dict as *mut core::ffi::c_void,
452-
dictBufferCapacity,
453-
parameters,
454-
&mut segmentFreqs,
455-
);
456-
let nbFinalizeSamples =
457-
(ctx.nbTrainSamples * ctx.accelParams.finalize as size_t / 100) as core::ffi::c_uint;
458-
selection = COVER_selectDict(
459-
dict.add(tail),
460-
dictBufferCapacity,
461-
dictBufferCapacity.wrapping_sub(tail),
462-
ctx.samples.as_ptr(),
463-
ctx.samplesSizes.as_ptr(),
464-
nbFinalizeSamples,
465-
ctx.nbTrainSamples,
466-
ctx.nbSamples,
467-
parameters,
468-
ctx.offsets.as_ptr().cast_mut(),
469-
totalCompressedSize,
470-
);
471-
if COVER_dictSelectionIsError(selection) != 0 && displayLevel >= 1 {
472-
eprintln!("Failed to select dictionary");
473-
}
443+
444+
let tail = FASTCOVER_buildDictionary(
445+
ctx,
446+
&mut freqs,
447+
dict.as_mut_ptr() as *mut core::ffi::c_void,
448+
dictBufferCapacity,
449+
parameters,
450+
&mut segmentFreqs,
451+
);
452+
let nbFinalizeSamples =
453+
(ctx.nbTrainSamples * ctx.accelParams.finalize as size_t / 100) as core::ffi::c_uint;
454+
selection = COVER_selectDict(
455+
dict.as_mut_ptr().add(tail),
456+
dictBufferCapacity,
457+
dictBufferCapacity.wrapping_sub(tail),
458+
ctx.samples.as_ptr(),
459+
ctx.samplesSizes.as_ptr(),
460+
nbFinalizeSamples,
461+
ctx.nbTrainSamples,
462+
ctx.nbSamples,
463+
parameters,
464+
ctx.offsets.as_ptr().cast_mut(),
465+
totalCompressedSize,
466+
);
467+
if COVER_dictSelectionIsError(selection) != 0 && displayLevel >= 1 {
468+
eprintln!("Failed to select dictionary");
474469
}
475-
free(dict as *mut core::ffi::c_void);
470+
471+
drop(dict);
476472
COVER_best_finish((*data).best.as_mut().unwrap(), parameters, selection);
477473
free(data as *mut core::ffi::c_void);
478474
drop(segmentFreqs);

0 commit comments

Comments
 (0)