-secp256k1_context* secp256k1_context_clone(const secp256k1_context* ctx) {
- secp256k1_context* ret;
- size_t prealloc_size = ROUND_TO_ALIGN(sizeof(secp256k1_context));
- if (secp256k1_ecmult_gen_context_is_built(&ctx->ecmult_gen_ctx)) {
- prealloc_size += SECP256K1_ECMULT_GEN_CONTEXT_PREALLOCATED_SIZE;
- }
- if (secp256k1_ecmult_context_is_built(&ctx->ecmult_ctx)) {
- prealloc_size += SECP256K1_ECMULT_CONTEXT_PREALLOCATED_SIZE;
- }
- ret = checked_malloc(&ctx->error_callback, prealloc_size);
+secp256k1_context* secp256k1_context_preallocated_clone(const secp256k1_context* ctx, void* prealloc) {
+ size_t prealloc_size = secp256k1_context_preallocated_clone_size(ctx);
+ secp256k1_context* ret = (secp256k1_context*)prealloc;