Ruby: ext/openssl/ossl_bio.c Source File

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

ossl_bio.c
Go to the documentation of this file.
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
12BIO *
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
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}
RSTRING_PTR
#define RSTRING_PTR(string)
Definition: fbuffer.h:19
rb_jump_tag
void rb_jump_tag(int tag)
Continues the exception caught by rb_protect() and rb_eval_string_protect().
Definition: eval.c:921
rb_intern
ID rb_intern(const char *)
Definition: symbol.c:785
rb_funcallv
#define rb_funcallv(...)
Definition: internal.h:77
buf
voidpf void * buf
Definition: ioapi.h:138
ossl_str_new
VALUE ossl_str_new(const char *ptr, long len, int *pstate)
Definition: ossl.c:101
ossl_raise
void ossl_raise(VALUE exc, const char *fmt,...)
Definition: ossl.c:293
eOSSLError
VALUE eOSSLError
Definition: ossl.c:236
ossl.h
ossl_obj2bio
BIO * ossl_obj2bio(volatile VALUE *pobj)
Definition: ossl_bio.c:13
ossl_membio2str
VALUE ossl_membio2str(BIO *bio)
Definition: ossl_bio.c:29
NULL
#define NULL
Definition: regenc.h:69
StringValue
#define StringValue(v)
Definition: rstring.h:50
state
Definition: blast.c:41
VALUE
unsigned long VALUE
Definition: value.h:38
T_FILE
#define T_FILE
Definition: value_type.h:61