Я думаю, что это должно быть возможно, по крайней мере, с точки зрения записи времени непосредственно в заданный буфер, но вам все равно нужно будет использовать BIO.
В идеале подойдет BIO_new_mem_buf
, учитывая, что он создает BIO в памяти, используя заданный буфер в качестве источника. К сожалению, эта функция рассматривает данный буфер как доступный только для чтения, а это не то, что нам нужно. Однако мы можем создать собственную функцию (назовем ее BIO_new_mem_buf2
) на основе BIO_new_mem_buf
исходный код:
BIO *BIO_new_mem_buf2(void *buf, int len)
{
BIO *ret;
BUF_MEM *b;
size_t sz;
if (!buf) {
BIOerr(BIO_F_BIO_NEW_MEM_BUF, BIO_R_NULL_PARAMETER);
return NULL;
}
sz = (size_t)len;
if (!(ret = BIO_new(BIO_s_mem())))
return NULL;
b = (BUF_MEM *)ret->ptr;
b->data = buf;
b->length = sz;
b->max = sz;
return ret;
}
Это то же самое, что и BIO_new_mem_buf
, за исключением того, что a) аргумент len
должен указывать размер данного буфера, и b)< /em> BIO не помечен как "только для чтения".
С учетом вышеизложенного вы теперь сможете вызывать:
ASN1_TIME_print(bio, tm)
и время появится в вашем заданном буфере.
Обратите внимание, что приведенный выше код не тестировался, поэтому YMMV. Надеюсь это поможет!
person
Castaglia
schedule
21.02.2016