Указатель - это просто адрес памяти, без какой-либо информации о размере области памяти, на которую он указывает.
Однако - если я правильно понимаю задачу - что вы на самом делепотребность - это количество байтов, записанных в основанную на памяти BIO.Вот для чего BIO_get_mem_data
.К сожалению, библиотека OpenSSL реализует это как макрос
# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)
, который не импортируется в Swift, так что вам придется напрямую вызывать BIO_ctrl
.
Пример (проверка ошибок для краткости опущена):
// Create memory-based BIO:
let membio = BIO_new(BIO_s_mem())
// Write to BIO:
let status = i2d_X509_REQ_bio(membio, x509_REQ)
// Get pointer to the start of the memory BIOs data
// and amount of data available:
var ptr: UnsafeMutableRawPointer?
let len = BIO_ctrl(membio, BIO_CTRL_INFO, 0, &ptr)
// Create `Data` object from that memory region:
let data = Data(bytes: ptr!, count: len)
// Release BIO:
BIO_vfree(membio)