summaryrefslogtreecommitdiffstats
path: root/ext/openssl/ossl_bio.c
diff options
context:
space:
mode:
authormichal <michal@ruby-lang.org>2003-09-12 13:46:48 +0000
committermichal <michal@ruby-lang.org>2003-09-12 13:46:48 +0000
commit87fc7b6f8e4989203bb961b1ad4842e259ae3589 (patch)
tree627c8d7c7fec4ed24e24c44512ac04b553628fc3 /ext/openssl/ossl_bio.c
parentc1a2bc7b81987de1478e7cf3af092b6b32540827 (diff)
downloadruby-openssl-history-87fc7b6f8e4989203bb961b1ad4842e259ae3589.tar.gz
OpenSSL update
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/openssl/ossl_bio.c')
-rw-r--r--ext/openssl/ossl_bio.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/ext/openssl/ossl_bio.c b/ext/openssl/ossl_bio.c
new file mode 100644
index 0000000..364e2ed
--- /dev/null
+++ b/ext/openssl/ossl_bio.c
@@ -0,0 +1,58 @@
+/*
+ * $Id$
+ * 'OpenSSL for Ruby' team members
+ * Copyright (C) 2003
+ * All rights reserved.
+ */
+/*
+ * This program is licenced under the same licence as Ruby.
+ * (See the file 'LICENCE'.)
+ */
+#include "ossl.h"
+
+BIO *
+ossl_obj2bio(VALUE obj)
+{
+ BIO *bio;
+
+ if (TYPE(obj) == T_FILE) {
+ OpenFile *fptr;
+ GetOpenFile(obj, fptr);
+ rb_io_check_readable(fptr);
+ bio = BIO_new_fp(fptr->f, BIO_NOCLOSE);
+ }
+ else {
+ StringValue(obj);
+ bio = BIO_new_mem_buf(RSTRING(obj)->ptr, RSTRING(obj)->len);
+ }
+ if (!bio) ossl_raise(eOSSLError, NULL);
+
+ return bio;
+}
+
+BIO *
+ossl_protect_obj2bio(VALUE obj, int *status)
+{
+ BIO *ret = NULL;
+ ret = (BIO*)rb_protect((VALUE(*)_((VALUE)))ossl_obj2bio, obj, status);
+ return ret;
+}
+
+VALUE
+ossl_membio2str(BIO *bio)
+{
+ VALUE ret;
+ BUF_MEM *buf;
+
+ BIO_get_mem_ptr(bio, &buf);
+ ret = rb_str_new(buf->data, buf->length);
+
+ return ret;
+}
+
+VALUE
+ossl_protect_membio2str(BIO *bio, int *status)
+{
+ return rb_protect((VALUE(*)_((VALUE)))ossl_membio2str, (VALUE)bio, status);
+}
+