private static void wrapReturnValue()

in sdk/enclave/src/main/java/org/apache/teaclave/javasdk/enclave/InvocationWrapper.java [56:76]


    private static void wrapReturnValue(EncData result, CallBacks callBacks, EnclaveInvocationResult ret) throws IOException {
        byte[] returnedValBytes;
        returnedValBytes = SerializationHelper.serialize(ret);
        int returnedValLen = returnedValBytes.length;
        /*
         * Data returned to C world should be allocated by the callback function in the C world. The memory hold by
         * returnedValBytes shall be freed in the explicit finally clause.
         */
        try (CTypeConversion.CCharPointerHolder byteHolder = CTypeConversion.toCBytes(returnedValBytes)) {
            CCharPointer returned;
            if (callBacks.isNonNull() && callBacks.getMemCpyCCharPointerFunctionPointer().isNonNull()) {
                returned = callBacks.getMemCpyCCharPointerFunctionPointer().invoke(byteHolder.get(), returnedValLen);
            } else {
                returned = byteHolder.get();
                System.out.println("Warning: Not calling call backs in native, there is memory leak risk.");
                //throw new RuntimeException("Function pointer memcpy_char_pointer is not set");
            }
            result.setData(returned);
            result.setLen(returnedValLen);
        }
    }