1207 fclose(in); |
1207 fclose(in); |
1208 |
1208 |
1209 return util_hexstr(hash, DAV_SHA256_DIGEST_LENGTH); |
1209 return util_hexstr(hash, DAV_SHA256_DIGEST_LENGTH); |
1210 } |
1210 } |
1211 |
1211 |
1212 struct regdestructor { |
|
1213 cx_destructor_func destructor; |
|
1214 void *data; |
|
1215 }; |
|
1216 |
|
1217 static void call_destructor(struct regdestructor *d) { |
|
1218 d->destructor(d->data); |
|
1219 } |
|
1220 |
|
1221 int util_regdestr(CxMempool *mp, void *data, cx_destructor_func destructor) { |
|
1222 // the ucx maintainer doesn't like me anymore and forces me to |
|
1223 // implement basic stuff by myself |
|
1224 struct regdestructor *reg = cxMalloc(mp->allocator, sizeof(struct regdestructor)); |
|
1225 if(!reg) { |
|
1226 return 1; |
|
1227 } |
|
1228 reg->destructor = destructor; |
|
1229 reg->data = data; |
|
1230 cxMempoolSetDestructor(mp, reg, (cx_destructor_func)call_destructor); |
|
1231 return 0; |
|
1232 } |
|