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)13 ossl_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)29 ossl_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