summaryrefslogtreecommitdiff
path: root/lib/libcrypto/man/BIO_new.3
blob: 5f5030cdfa25d2ea4bf772b1d4c35b19f6157532 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
.Dd July 17, 2014
.Dt BIO_NEW 3
.Os
.Sh NAME
.Nm BIO_new ,
.Nm BIO_set ,
.Nm BIO_free ,
.Nm BIO_vfree ,
.Nm BIO_free_all
.Nd BIO allocation and freeing functions
.Sh SYNOPSIS
.In openssl/bio.h
.Ft BIO *
.Fo BIO_new
.Fa "BIO_METHOD *type"
.Fc
.Ft int
.Fo BIO_set
.Fa "BIO *a"
.Fa "BIO_METHOD *type"
.Fc
.Ft int
.Fo BIO_free
.Fa "BIO *a"
.Fc
.Ft void
.Fo BIO_vfree
.Fa "BIO *a"
.Fc
.Ft void
.Fo BIO_free_all
.Fa "BIO *a"
.Fc
.Sh DESCRIPTION
The
.Fn BIO_new
function returns a new BIO using method
.Fa type .
.Pp
.Fn BIO_set
sets the method of an already existing BIO.
.Pp
.Fn BIO_free
frees up a single BIO,
.Fn BIO_vfree
also frees up a single BIO, but it does not return a value.
Calling
.Fn BIO_free
may also have some effect on the underlying I/O structure,
for example it may close the file being
referred to under certain circumstances.
For more details see the individual
.Vt BIO_METHOD
descriptions.
.Pp
.Fn BIO_free_all
frees up an entire BIO chain.
It does not halt if an error occurs
freeing up an individual BIO in the chain.
.Sh RETURN VALUES
.Fn BIO_new
returns a newly created BIO or
.Dv NULL
if the call fails.
.Pp
.Fn BIO_set
and
.Fn BIO_free
return 1 for success and 0 for failure.
.Pp
.Fn BIO_free_all
and
.Fn BIO_vfree
do not return values.
.Sh NOTES
Some BIOs (such as memory BIOs) can be used immediately after calling
.Fn BIO_new .
Others (such as file BIOs) need some additional initialization, and
frequently a utility function exists to create and initialize such BIOs.
.Pp
If
.Fn BIO_free
is called on a BIO chain, it will only free one BIO,
resulting in a memory leak.
.Pp
Calling
.Fn BIO_free_all
on a single BIO has the same effect as calling
.Fn BIO_free
on it other than the discarded return value.
.Pp
Normally the
.Fa type
argument is supplied by a function which returns a pointer to a
.Vt BIO_METHOD .
There is a naming convention for such functions:
a source/sink BIO is normally called
.Fn BIO_s_*
and a filter BIO
.Fn BIO_f_* .
.Sh EXAMPLES
Create a memory BIO:
.Pp
.Dl BIO *mem = BIO_new(BIO_s_mem());