1 /* 2 * 'OpenSSL for Ruby' team members 3 * Copyright (C) 2003 4 * All rights reserved. 5 */ 6 /* 7 * This program is licensed under the same licence as Ruby. 8 * (See the file 'LICENCE'.) 9 */ 10 #include "ossl.h" 11 12 BIO * ossl_obj2bio(volatile VALUE * pobj)13ossl_obj2bio(volatile VALUE *pobj) 14 { 15 VALUE obj = *pobj; 16 BIO *bio; 17 18 if (RB_TYPE_P(obj, T_FILE)) 19 obj = rb_funcallv(obj, rb_intern("read"), 0, NULL); 20 StringValue(obj); 21 bio = BIO_new_mem_buf(RSTRING_PTR(obj), RSTRING_LENINT(obj)); 22 if (!bio) 23 ossl_raise(eOSSLError, "BIO_new_mem_buf"); 24 *pobj = obj; 25 return bio; 26 } 27 28 VALUE ossl_membio2str(BIO * bio)29ossl_membio2str(BIO *bio) 30 { 31 VALUE ret; 32 int state; 33 BUF_MEM *buf; 34 35 BIO_get_mem_ptr(bio, &buf); 36 ret = ossl_str_new(buf->data, buf->length, &state); 37 BIO_free(bio); 38 if (state) 39 rb_jump_tag(state); 40 41 return ret; 42 } 43