OpenCoverage

bss_fd.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/bio/bss_fd.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: bss_fd.c,v 1.19 2018/05/01 13:29:09 tb Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 * -
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 * -
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 * -
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from -
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 * -
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 * -
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <errno.h>-
60#include <stdio.h>-
61#include <string.h>-
62#include <unistd.h>-
63-
64#include <openssl/opensslconf.h>-
65-
66#include <openssl/bio.h>-
67-
68static int fd_write(BIO *h, const char *buf, int num);-
69static int fd_read(BIO *h, char *buf, int size);-
70static int fd_puts(BIO *h, const char *str);-
71static int fd_gets(BIO *h, char *buf, int size);-
72static long fd_ctrl(BIO *h, int cmd, long arg1, void *arg2);-
73static int fd_new(BIO *h);-
74static int fd_free(BIO *data);-
75int BIO_fd_should_retry(int s);-
76-
77static const BIO_METHOD methods_fdp = {-
78 .type = BIO_TYPE_FD,-
79 .name = "file descriptor",-
80 .bwrite = fd_write,-
81 .bread = fd_read,-
82 .bputs = fd_puts,-
83 .bgets = fd_gets,-
84 .ctrl = fd_ctrl,-
85 .create = fd_new,-
86 .destroy = fd_free-
87};-
88-
89const BIO_METHOD *-
90BIO_s_fd(void)-
91{-
92 return (&methods_fdp);
never executed: return (&methods_fdp);
0
93}-
94-
95BIO *-
96BIO_new_fd(int fd, int close_flag)-
97{-
98 BIO *ret;-
99 ret = BIO_new(BIO_s_fd());-
100 if (ret == NULL)
ret == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
101 return (NULL);
never executed: return ( ((void *)0) );
0
102 BIO_set_fd(ret, fd, close_flag);-
103 return (ret);
never executed: return (ret);
0
104}-
105-
106static int-
107fd_new(BIO *bi)-
108{-
109 bi->init = 0;-
110 bi->num = -1;-
111 bi->ptr = NULL;-
112 bi->flags=0;-
113 return (1);
never executed: return (1);
0
114}-
115-
116static int-
117fd_free(BIO *a)-
118{-
119 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
120 return (0);
never executed: return (0);
0
121 if (a->shutdown) {
a->shutdownDescription
TRUEnever evaluated
FALSEnever evaluated
0
122 if (a->init) {
a->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
123 close(a->num);-
124 }
never executed: end of block
0
125 a->init = 0;-
126 a->flags = 0;-
127 }
never executed: end of block
0
128 return (1);
never executed: return (1);
0
129}-
130-
131static int-
132fd_read(BIO *b, char *out, int outl)-
133{-
134 int ret = 0;-
135-
136 if (out != NULL) {
out != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
137 errno = 0;-
138 ret = read(b->num, out, outl);-
139 BIO_clear_retry_flags(b);-
140 if (ret <= 0) {
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
141 if (BIO_fd_should_retry(ret))
BIO_fd_should_retry(ret)Description
TRUEnever evaluated
FALSEnever evaluated
0
142 BIO_set_retry_read(b);
never executed: BIO_set_flags(b, (0x01|0x08));
0
143 }
never executed: end of block
0
144 }
never executed: end of block
0
145 return (ret);
never executed: return (ret);
0
146}-
147-
148static int-
149fd_write(BIO *b, const char *in, int inl)-
150{-
151 int ret;-
152 errno = 0;-
153 ret = write(b->num, in, inl);-
154 BIO_clear_retry_flags(b);-
155 if (ret <= 0) {
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
156 if (BIO_fd_should_retry(ret))
BIO_fd_should_retry(ret)Description
TRUEnever evaluated
FALSEnever evaluated
0
157 BIO_set_retry_write(b);
never executed: BIO_set_flags(b, (0x02|0x08));
0
158 }
never executed: end of block
0
159 return (ret);
never executed: return (ret);
0
160}-
161-
162static long-
163fd_ctrl(BIO *b, int cmd, long num, void *ptr)-
164{-
165 long ret = 1;-
166 int *ip;-
167-
168 switch (cmd) {-
169 case BIO_CTRL_RESET:
never executed: case 1:
0
170 num = 0;-
171 case BIO_C_FILE_SEEK:
code before this statement never executed: case 128:
never executed: case 128:
0
172 ret = (long)lseek(b->num, num, 0);-
173 break;
never executed: break;
0
174 case BIO_C_FILE_TELL:
never executed: case 133:
0
175 case BIO_CTRL_INFO:
never executed: case 3:
0
176 ret = (long)lseek(b->num, 0, 1);-
177 break;
never executed: break;
0
178 case BIO_C_SET_FD:
never executed: case 104:
0
179 fd_free(b);-
180 b->num= *((int *)ptr);-
181 b->shutdown = (int)num;-
182 b->init = 1;-
183 break;
never executed: break;
0
184 case BIO_C_GET_FD:
never executed: case 105:
0
185 if (b->init) {
b->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
186 ip = (int *)ptr;-
187 if (ip != NULL)
ip != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
188 *ip = b->num;
never executed: *ip = b->num;
0
189 ret = b->num;-
190 } else
never executed: end of block
0
191 ret = -1;
never executed: ret = -1;
0
192 break;
never executed: break;
0
193 case BIO_CTRL_GET_CLOSE:
never executed: case 8:
0
194 ret = b->shutdown;-
195 break;
never executed: break;
0
196 case BIO_CTRL_SET_CLOSE:
never executed: case 9:
0
197 b->shutdown = (int)num;-
198 break;
never executed: break;
0
199 case BIO_CTRL_PENDING:
never executed: case 10:
0
200 case BIO_CTRL_WPENDING:
never executed: case 13:
0
201 ret = 0;-
202 break;
never executed: break;
0
203 case BIO_CTRL_DUP:
never executed: case 12:
0
204 case BIO_CTRL_FLUSH:
never executed: case 11:
0
205 ret = 1;-
206 break;
never executed: break;
0
207 default:
never executed: default:
0
208 ret = 0;-
209 break;
never executed: break;
0
210 }-
211 return (ret);
never executed: return (ret);
0
212}-
213-
214static int-
215fd_puts(BIO *bp, const char *str)-
216{-
217 int n, ret;-
218-
219 n = strlen(str);-
220 ret = fd_write(bp, str, n);-
221 return (ret);
never executed: return (ret);
0
222}-
223-
224static int-
225fd_gets(BIO *bp, char *buf, int size)-
226{-
227 int ret = 0;-
228 char *ptr = buf;-
229 char *end = buf + size - 1;-
230-
231 while ((ptr < end) && (fd_read(bp, ptr, 1) > 0) && (ptr[0] != '\n'))
(ptr < end)Description
TRUEnever evaluated
FALSEnever evaluated
(fd_read(bp, ptr, 1) > 0)Description
TRUEnever evaluated
FALSEnever evaluated
(ptr[0] != '\n')Description
TRUEnever evaluated
FALSEnever evaluated
0
232 ptr++;
never executed: ptr++;
0
233-
234 ptr[0] = '\0';-
235-
236 if (buf[0] != '\0')
buf[0] != '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
237 ret = strlen(buf);
never executed: ret = strlen(buf);
0
238 return (ret);
never executed: return (ret);
0
239}-
240-
241int-
242BIO_fd_should_retry(int i)-
243{-
244 int err;-
245-
246 if ((i == 0) || (i == -1)) {
(i == 0)Description
TRUEnever evaluated
FALSEnever evaluated
(i == -1)Description
TRUEnever evaluated
FALSEnever evaluated
0
247 err = errno;-
248 return (BIO_fd_non_fatal_error(err));
never executed: return (BIO_fd_non_fatal_error(err));
0
249 }-
250 return (0);
never executed: return (0);
0
251}-
252-
253int-
254BIO_fd_non_fatal_error(int err)-
255{-
256 switch (err) {-
257 case ENOTCONN:
never executed: case 107 :
0
258 case EINTR:
never executed: case 4 :
0
259 case EAGAIN:
never executed: case 11 :
0
260 case EINPROGRESS:
never executed: case 115 :
0
261 case EALREADY:
never executed: case 114 :
0
262 return (1);
never executed: return (1);
0
263 default:
never executed: default:
0
264 break;
never executed: break;
0
265 }-
266 return (0);
never executed: return (0);
0
267}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2