Skip to content

Commit 6812634

Browse files
committed
make dict buffers Box
1 parent 72e9f37 commit 6812634

File tree

1 file changed

+32
-40
lines changed

1 file changed

+32
-40
lines changed

lib/dictBuilder/cover.rs

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ struct COVER_tryParameters_data_t<'a, 'b> {
113113
#[derive(Clone)]
114114
#[repr(C)]
115115
pub(super) struct COVER_dictSelection_t {
116-
dictContent: *mut u8,
116+
dictContent: Box<[u8]>,
117117
dictSize: size_t,
118118
totalCompressedSize: size_t,
119119
}
@@ -979,7 +979,7 @@ pub(super) unsafe fn COVER_best_finish(
979979
parameters: ZDICT_cover_params_t,
980980
selection: &COVER_dictSelection_t,
981981
) {
982-
let dict = selection.dictContent as *mut core::ffi::c_void;
982+
let dict = selection.dictContent.as_ptr() as *const core::ffi::c_void;
983983
let compressedSize = selection.totalCompressedSize;
984984
let dictSize = selection.dictSize;
985985
let mut liveJobs: size_t = 0;
@@ -1003,29 +1003,25 @@ pub(super) unsafe fn COVER_best_finish(
10031003
}
10041004
}
10051005

1006-
fn setDictSelection(buf: *mut u8, s: size_t, csz: size_t) -> COVER_dictSelection_t {
1007-
let mut ds = COVER_dictSelection_t {
1008-
dictContent: core::ptr::null_mut::<u8>(),
1009-
dictSize: 0,
1010-
totalCompressedSize: 0,
1011-
};
1012-
ds.dictContent = buf;
1013-
ds.dictSize = s;
1014-
ds.totalCompressedSize = csz;
1015-
ds
1006+
fn setDictSelection(buf: Box<[u8]>, s: size_t, csz: size_t) -> COVER_dictSelection_t {
1007+
COVER_dictSelection_t {
1008+
dictContent: buf,
1009+
dictSize: s,
1010+
totalCompressedSize: csz,
1011+
}
10161012
}
10171013

10181014
pub(super) fn COVER_dictSelectionError(error: size_t) -> COVER_dictSelection_t {
1019-
setDictSelection(core::ptr::null_mut(), 0, error)
1015+
setDictSelection(Box::default(), 0, error)
10201016
}
10211017

10221018
pub(super) fn COVER_dictSelectionIsError(selection: &COVER_dictSelection_t) -> core::ffi::c_uint {
1023-
(ERR_isError(selection.totalCompressedSize) || selection.dictContent.is_null())
1019+
(ERR_isError(selection.totalCompressedSize) || selection.dictContent.is_empty())
10241020
as core::ffi::c_int as core::ffi::c_uint
10251021
}
10261022

10271023
pub(super) unsafe fn COVER_dictSelectionFree(selection: COVER_dictSelection_t) {
1028-
free(selection.dictContent as *mut core::ffi::c_void);
1024+
drop(selection)
10291025
}
10301026

10311027
pub(super) unsafe fn COVER_selectDict(
@@ -1044,22 +1040,17 @@ pub(super) unsafe fn COVER_selectDict(
10441040
let mut largestDict = 0;
10451041
let mut largestCompressed = 0;
10461042
let customDictContentEnd = customDictContent.add(dictContentSize);
1047-
let largestDictbuffer = malloc(dictBufferCapacity) as *mut u8;
1048-
let candidateDictBuffer = malloc(dictBufferCapacity) as *mut u8;
1043+
let mut largestDictbuffer: Box<[u8]> = Box::from(vec![0u8; dictBufferCapacity]);
1044+
let mut candidateDictBuffer: Box<[u8]> = Box::from(vec![0; dictBufferCapacity]);
10491045
let regressionTolerance =
10501046
params.shrinkDictMaxRegression as core::ffi::c_double / 100.0f64 + 1.00f64;
1051-
if largestDictbuffer.is_null() || candidateDictBuffer.is_null() {
1052-
free(largestDictbuffer as *mut core::ffi::c_void);
1053-
free(candidateDictBuffer as *mut core::ffi::c_void);
1054-
return COVER_dictSelectionError(dictContentSize);
1055-
}
10561047
memcpy(
1057-
largestDictbuffer as *mut core::ffi::c_void,
1048+
largestDictbuffer.as_mut_ptr() as *mut core::ffi::c_void,
10581049
customDictContent as *const core::ffi::c_void,
10591050
dictContentSize,
10601051
);
10611052
dictContentSize = ZDICT_finalizeDictionary(
1062-
largestDictbuffer as *mut core::ffi::c_void,
1053+
largestDictbuffer.as_mut_ptr() as *mut core::ffi::c_void,
10631054
dictBufferCapacity,
10641055
customDictContent as *const core::ffi::c_void,
10651056
dictContentSize,
@@ -1069,8 +1060,8 @@ pub(super) unsafe fn COVER_selectDict(
10691060
params.zParams,
10701061
);
10711062
if ZDICT_isError(dictContentSize) != 0 {
1072-
free(largestDictbuffer as *mut core::ffi::c_void);
1073-
free(candidateDictBuffer as *mut core::ffi::c_void);
1063+
drop(largestDictbuffer);
1064+
drop(candidateDictBuffer);
10741065
return COVER_dictSelectionError(dictContentSize);
10751066
}
10761067
totalCompressedSize = COVER_checkTotalCompressedSize(
@@ -1080,29 +1071,29 @@ pub(super) unsafe fn COVER_selectDict(
10801071
offsets,
10811072
nbCheckSamples,
10821073
nbSamples,
1083-
largestDictbuffer,
1074+
largestDictbuffer.as_mut_ptr(),
10841075
dictContentSize,
10851076
);
10861077
if ERR_isError(totalCompressedSize) {
1087-
free(largestDictbuffer as *mut core::ffi::c_void);
1088-
free(candidateDictBuffer as *mut core::ffi::c_void);
1078+
drop(largestDictbuffer);
1079+
drop(candidateDictBuffer);
10891080
return COVER_dictSelectionError(totalCompressedSize);
10901081
}
10911082
if params.shrinkDict == 0 {
1092-
free(candidateDictBuffer as *mut core::ffi::c_void);
1083+
drop(candidateDictBuffer);
10931084
return setDictSelection(largestDictbuffer, dictContentSize, totalCompressedSize);
10941085
}
10951086
largestDict = dictContentSize;
10961087
largestCompressed = totalCompressedSize;
10971088
dictContentSize = ZDICT_DICTSIZE_MIN as size_t;
10981089
while dictContentSize < largestDict {
10991090
memcpy(
1100-
candidateDictBuffer as *mut core::ffi::c_void,
1101-
largestDictbuffer as *const core::ffi::c_void,
1091+
candidateDictBuffer.as_mut_ptr() as *mut core::ffi::c_void,
1092+
largestDictbuffer.as_ptr() as *const core::ffi::c_void,
11021093
largestDict,
11031094
);
11041095
dictContentSize = ZDICT_finalizeDictionary(
1105-
candidateDictBuffer as *mut core::ffi::c_void,
1096+
candidateDictBuffer.as_mut_ptr() as *mut core::ffi::c_void,
11061097
dictBufferCapacity,
11071098
customDictContentEnd.offset(-(dictContentSize as isize)) as *const core::ffi::c_void,
11081099
dictContentSize,
@@ -1112,8 +1103,8 @@ pub(super) unsafe fn COVER_selectDict(
11121103
params.zParams,
11131104
);
11141105
if ZDICT_isError(dictContentSize) != 0 {
1115-
free(largestDictbuffer as *mut core::ffi::c_void);
1116-
free(candidateDictBuffer as *mut core::ffi::c_void);
1106+
drop(largestDictbuffer);
1107+
drop(candidateDictBuffer);
11171108
return COVER_dictSelectionError(dictContentSize);
11181109
}
11191110
totalCompressedSize = COVER_checkTotalCompressedSize(
@@ -1123,27 +1114,28 @@ pub(super) unsafe fn COVER_selectDict(
11231114
offsets,
11241115
nbCheckSamples,
11251116
nbSamples,
1126-
candidateDictBuffer,
1117+
candidateDictBuffer.as_mut_ptr(),
11271118
dictContentSize,
11281119
);
11291120
if ERR_isError(totalCompressedSize) {
1130-
free(largestDictbuffer as *mut core::ffi::c_void);
1131-
free(candidateDictBuffer as *mut core::ffi::c_void);
1121+
drop(largestDictbuffer);
1122+
drop(candidateDictBuffer);
11321123
return COVER_dictSelectionError(totalCompressedSize);
11331124
}
11341125
if totalCompressedSize as core::ffi::c_double
11351126
<= largestCompressed as core::ffi::c_double * regressionTolerance
11361127
{
1137-
free(largestDictbuffer as *mut core::ffi::c_void);
1128+
drop(largestDictbuffer);
11381129
return setDictSelection(candidateDictBuffer, dictContentSize, totalCompressedSize);
11391130
}
11401131
dictContentSize *= 2;
11411132
}
11421133
dictContentSize = largestDict;
11431134
totalCompressedSize = largestCompressed;
1144-
free(candidateDictBuffer as *mut core::ffi::c_void);
1135+
drop(candidateDictBuffer);
11451136
setDictSelection(largestDictbuffer, dictContentSize, totalCompressedSize)
11461137
}
1138+
11471139
unsafe fn COVER_tryParameters(opaque: *mut core::ffi::c_void) {
11481140
let data = opaque as *mut COVER_tryParameters_data_t;
11491141
let ctx = (*data).ctx.cast_mut();

0 commit comments

Comments
 (0)