summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bio/bss_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/bio/bss_file.c')
-rw-r--r--src/lib/libcrypto/bio/bss_file.c418
1 files changed, 203 insertions, 215 deletions
diff --git a/src/lib/libcrypto/bio/bss_file.c b/src/lib/libcrypto/bio/bss_file.c
index 638572ab7f..794f503a69 100644
--- a/src/lib/libcrypto/bio/bss_file.c
+++ b/src/lib/libcrypto/bio/bss_file.c
@@ -102,8 +102,8 @@ static int file_gets(BIO *h, char *str, int size);
102static long file_ctrl(BIO *h, int cmd, long arg1, void *arg2); 102static long file_ctrl(BIO *h, int cmd, long arg1, void *arg2);
103static int file_new(BIO *h); 103static int file_new(BIO *h);
104static int file_free(BIO *data); 104static int file_free(BIO *data);
105static BIO_METHOD methods_filep= 105
106 { 106static BIO_METHOD methods_filep = {
107 BIO_TYPE_FILE, 107 BIO_TYPE_FILE,
108 "FILE pointer", 108 "FILE pointer",
109 file_write, 109 file_write,
@@ -114,15 +114,16 @@ static BIO_METHOD methods_filep=
114 file_new, 114 file_new,
115 file_free, 115 file_free,
116 NULL, 116 NULL,
117 }; 117};
118 118
119BIO *BIO_new_file(const char *filename, const char *mode) 119BIO
120 { 120*BIO_new_file(const char *filename, const char *mode)
121{
121 BIO *ret; 122 BIO *ret;
122 FILE *file=NULL; 123 FILE *file = NULL;
123 124
124#if defined(_WIN32) && defined(CP_UTF8) 125#if defined(_WIN32) && defined(CP_UTF8)
125 int sz, len_0 = (int)strlen(filename)+1; 126 int sz, len_0 = (int)strlen(filename) + 1;
126 DWORD flags; 127 DWORD flags;
127 128
128 /* 129 /*
@@ -137,173 +138,171 @@ BIO *BIO_new_file(const char *filename, const char *mode)
137 * ERROR_NO_UNICODE_TRANSLATION, in which case we fall 138 * ERROR_NO_UNICODE_TRANSLATION, in which case we fall
138 * back to fopen... 139 * back to fopen...
139 */ 140 */
140 if ((sz=MultiByteToWideChar(CP_UTF8,(flags=MB_ERR_INVALID_CHARS), 141 if ((sz = MultiByteToWideChar(CP_UTF8,(flags = MB_ERR_INVALID_CHARS),
141 filename,len_0,NULL,0))>0 || 142 filename, len_0, NULL, 0)) > 0 ||
142 (GetLastError()==ERROR_INVALID_FLAGS && 143 (GetLastError() == ERROR_INVALID_FLAGS &&
143 (sz=MultiByteToWideChar(CP_UTF8,(flags=0), 144 (sz = MultiByteToWideChar(CP_UTF8,(flags = 0),
144 filename,len_0,NULL,0))>0) 145 filename, len_0, NULL, 0)) > 0)) {
145 )
146 {
147 WCHAR wmode[8]; 146 WCHAR wmode[8];
148 WCHAR *wfilename = _alloca(sz*sizeof(WCHAR)); 147 WCHAR *wfilename = _alloca(sz*sizeof(WCHAR));
149 148
150 if (MultiByteToWideChar(CP_UTF8,flags, 149 if (MultiByteToWideChar(CP_UTF8, flags, filename, len_0,
151 filename,len_0,wfilename,sz) && 150 wfilename, sz) && MultiByteToWideChar(CP_UTF8, 0, mode,
152 MultiByteToWideChar(CP_UTF8,0,mode,strlen(mode)+1, 151 strlen(mode) + 1, wmode,
153 wmode,sizeof(wmode)/sizeof(wmode[0])) && 152 sizeof(wmode) / sizeof(wmode[0])) &&
154 (file=_wfopen(wfilename,wmode))==NULL && 153 (file = _wfopen(wfilename, wmode)) == NULL &&
155 (errno==ENOENT || errno==EBADF) 154 (errno == ENOENT || errno == EBADF)
156 ) /* UTF-8 decode succeeded, but no file, filename 155 ) /* UTF - 8 decode succeeded, but no file, filename
157 * could still have been locale-ized... */ 156 * could still have been locale-ized... */
158 file = fopen(filename,mode); 157 file = fopen(filename, mode);
159 } 158 } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
160 else if (GetLastError()==ERROR_NO_UNICODE_TRANSLATION) 159 file = fopen(filename, mode);
161 { 160 }
162 file = fopen(filename,mode);
163 }
164#else 161#else
165 file=fopen(filename,mode); 162 file = fopen(filename, mode);
163
166#endif 164#endif
167 if (file == NULL) 165 if (file == NULL) {
168 {
169 SYSerr(SYS_F_FOPEN, errno); 166 SYSerr(SYS_F_FOPEN, errno);
170 ERR_add_error_data(5,"fopen('",filename,"','",mode,"')"); 167 ERR_add_error_data(5, "fopen('", filename, "', '", mode, "')");
171 if (errno == ENOENT) 168 if (errno == ENOENT)
172 BIOerr(BIO_F_BIO_NEW_FILE,BIO_R_NO_SUCH_FILE); 169 BIOerr(BIO_F_BIO_NEW_FILE, BIO_R_NO_SUCH_FILE);
173 else 170 else
174 BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB); 171 BIOerr(BIO_F_BIO_NEW_FILE, ERR_R_SYS_LIB);
175 return(NULL); 172 return (NULL);
176 } 173 }
177 if ((ret=BIO_new(BIO_s_file())) == NULL) 174 if ((ret = BIO_new(BIO_s_file())) == NULL) {
178 {
179 fclose(file); 175 fclose(file);
180 return(NULL); 176 return (NULL);
181 }
182
183 BIO_clear_flags(ret,BIO_FLAGS_UPLINK); /* we did fopen -> we disengage UPLINK */
184 BIO_set_fp(ret,file,BIO_CLOSE);
185 return(ret);
186 } 177 }
187 178
188BIO *BIO_new_fp(FILE *stream, int close_flag) 179 BIO_clear_flags(ret, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage UPLINK */
189 { 180 BIO_set_fp(ret, file, BIO_CLOSE);
190 BIO *ret; 181 return (ret);
191 182}
192 if ((ret=BIO_new(BIO_s_file())) == NULL)
193 return(NULL);
194
195 BIO_set_flags(ret,BIO_FLAGS_UPLINK); /* redundant, left for documentation puposes */
196 BIO_set_fp(ret,stream,close_flag);
197 return(ret);
198 }
199 183
200BIO_METHOD *BIO_s_file(void) 184BIO
201 { 185*BIO_new_fp(FILE *stream, int close_flag)
202 return(&methods_filep); 186{
203 } 187 BIO *ret;
204 188
205static int file_new(BIO *bi) 189 if ((ret = BIO_new(BIO_s_file())) == NULL)
206 { 190 return (NULL);
207 bi->init=0; 191
208 bi->num=0; 192 BIO_set_flags(ret, BIO_FLAGS_UPLINK); /* redundant, left for documentation puposes */
209 bi->ptr=NULL; 193 BIO_set_fp(ret, stream, close_flag);
194 return (ret);
195}
196
197BIO_METHOD
198*BIO_s_file(void)
199{
200 return (&methods_filep);
201}
202
203static int
204file_new(BIO *bi)
205{
206 bi->init = 0;
207 bi->num = 0;
208 bi->ptr = NULL;
210 bi->flags=BIO_FLAGS_UPLINK; /* default to UPLINK */ 209 bi->flags=BIO_FLAGS_UPLINK; /* default to UPLINK */
211 return(1); 210 return (1);
212 } 211}
213 212
214static int file_free(BIO *a) 213static int
215 { 214file_free(BIO *a)
216 if (a == NULL) return(0); 215{
217 if (a->shutdown) 216 if (a == NULL)
218 { 217 return (0);
219 if ((a->init) && (a->ptr != NULL)) 218 if (a->shutdown) {
220 { 219 if ((a->init) && (a->ptr != NULL)) {
221 if (a->flags&BIO_FLAGS_UPLINK) 220 if (a->flags&BIO_FLAGS_UPLINK)
222 UP_fclose (a->ptr); 221 UP_fclose (a->ptr);
223 else 222 else
224 fclose (a->ptr); 223 fclose (a->ptr);
225 a->ptr=NULL; 224 a->ptr = NULL;
226 a->flags=BIO_FLAGS_UPLINK; 225 a->flags = BIO_FLAGS_UPLINK;
227 }
228 a->init=0;
229 } 226 }
230 return(1); 227 a->init = 0;
231 } 228 }
232 229 return (1);
233static int file_read(BIO *b, char *out, int outl) 230}
234 {
235 int ret=0;
236 231
237 if (b->init && (out != NULL)) 232static int
238 { 233file_read(BIO *b, char *out, int outl)
234{
235 int ret = 0;
236
237 if (b->init && (out != NULL)) {
239 if (b->flags&BIO_FLAGS_UPLINK) 238 if (b->flags&BIO_FLAGS_UPLINK)
240 ret=UP_fread(out,1,(int)outl,b->ptr); 239 ret = UP_fread(out, 1,(int)outl, b->ptr);
241 else 240 else
242 ret=fread(out,1,(int)outl,(FILE *)b->ptr); 241 ret = fread(out, 1,(int)outl,(FILE *)b->ptr);
243 if(ret == 0 && (b->flags&BIO_FLAGS_UPLINK)?UP_ferror((FILE *)b->ptr):ferror((FILE *)b->ptr)) 242 if (ret == 0 && (b->flags & BIO_FLAGS_UPLINK) ?
244 { 243 UP_ferror((FILE *)b->ptr) : ferror((FILE *)b->ptr)) {
245 SYSerr(SYS_F_FREAD, errno); 244 SYSerr(SYS_F_FREAD, errno);
246 BIOerr(BIO_F_FILE_READ,ERR_R_SYS_LIB); 245 BIOerr(BIO_F_FILE_READ, ERR_R_SYS_LIB);
247 ret=-1; 246 ret = -1;
248 }
249 } 247 }
250 return(ret);
251 } 248 }
249 return (ret);
250}
252 251
253static int file_write(BIO *b, const char *in, int inl) 252static int
254 { 253file_write(BIO *b, const char *in, int inl)
255 int ret=0; 254{
255 int ret = 0;
256 256
257 if (b->init && (in != NULL)) 257 if (b->init && (in != NULL)) {
258 {
259 if (b->flags&BIO_FLAGS_UPLINK) 258 if (b->flags&BIO_FLAGS_UPLINK)
260 ret=UP_fwrite(in,(int)inl,1,b->ptr); 259 ret = UP_fwrite(in,(int)inl, 1, b->ptr);
261 else 260 else
262 ret=fwrite(in,(int)inl,1,(FILE *)b->ptr); 261 ret = fwrite(in,(int)inl, 1,(FILE *)b->ptr);
263 if (ret) 262 if (ret)
264 ret=inl; 263 ret = inl;
265 /* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */ 264 /* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */
266 /* according to Tim Hudson <tjh@cryptsoft.com>, the commented 265 /* according to Tim Hudson <tjh@cryptsoft.com>, the commented
267 * out version above can cause 'inl' write calls under 266 * out version above can cause 'inl' write calls under
268 * some stupid stdio implementations (VMS) */ 267 * some stupid stdio implementations (VMS) */
269 }
270 return(ret);
271 } 268 }
272 269 return (ret);
273static long file_ctrl(BIO *b, int cmd, long num, void *ptr) 270}
274 { 271
275 long ret=1; 272static long
276 FILE *fp=(FILE *)b->ptr; 273file_ctrl(BIO *b, int cmd, long num, void *ptr)
274{
275 long ret = 1;
276 FILE *fp = (FILE *)b->ptr;
277 FILE **fpp; 277 FILE **fpp;
278 char p[4]; 278 char p[4];
279 279
280 switch (cmd) 280 switch (cmd) {
281 {
282 case BIO_C_FILE_SEEK: 281 case BIO_C_FILE_SEEK:
283 case BIO_CTRL_RESET: 282 case BIO_CTRL_RESET:
284 if (b->flags&BIO_FLAGS_UPLINK) 283 if (b->flags&BIO_FLAGS_UPLINK)
285 ret=(long)UP_fseek(b->ptr,num,0); 284 ret = (long)UP_fseek(b->ptr, num, 0);
286 else 285 else
287 ret=(long)fseek(fp,num,0); 286 ret = (long)fseek(fp, num, 0);
288 break; 287 break;
289 case BIO_CTRL_EOF: 288 case BIO_CTRL_EOF:
290 if (b->flags&BIO_FLAGS_UPLINK) 289 if (b->flags&BIO_FLAGS_UPLINK)
291 ret=(long)UP_feof(fp); 290 ret = (long)UP_feof(fp);
292 else 291 else
293 ret=(long)feof(fp); 292 ret = (long)feof(fp);
294 break; 293 break;
295 case BIO_C_FILE_TELL: 294 case BIO_C_FILE_TELL:
296 case BIO_CTRL_INFO: 295 case BIO_CTRL_INFO:
297 if (b->flags&BIO_FLAGS_UPLINK) 296 if (b->flags&BIO_FLAGS_UPLINK)
298 ret=UP_ftell(b->ptr); 297 ret = UP_ftell(b->ptr);
299 else 298 else
300 ret=ftell(fp); 299 ret = ftell(fp);
301 break; 300 break;
302 case BIO_C_SET_FILE_PTR: 301 case BIO_C_SET_FILE_PTR:
303 file_free(b); 302 file_free(b);
304 b->shutdown=(int)num&BIO_CLOSE; 303 b->shutdown = (int)num&BIO_CLOSE;
305 b->ptr=ptr; 304 b->ptr = ptr;
306 b->init=1; 305 b->init = 1;
307#if BIO_FLAGS_UPLINK!=0 306#if BIO_FLAGS_UPLINK!=0
308#if defined(__MINGW32__) && defined(__MSVCRT__) && !defined(_IOB_ENTRIES) 307#if defined(__MINGW32__) && defined(__MSVCRT__) && !defined(_IOB_ENTRIES)
309#define _IOB_ENTRIES 20 308#define _IOB_ENTRIES 20
@@ -311,8 +310,8 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
311#if defined(_IOB_ENTRIES) 310#if defined(_IOB_ENTRIES)
312 /* Safety net to catch purely internal BIO_set_fp calls */ 311 /* Safety net to catch purely internal BIO_set_fp calls */
313 if ((size_t)ptr >= (size_t)stdin && 312 if ((size_t)ptr >= (size_t)stdin &&
314 (size_t)ptr < (size_t)(stdin+_IOB_ENTRIES)) 313 (size_t)ptr < (size_t)(stdin + _IOB_ENTRIES))
315 BIO_clear_flags(b,BIO_FLAGS_UPLINK); 314 BIO_clear_flags(b, BIO_FLAGS_UPLINK);
316#endif 315#endif
317#endif 316#endif
318#ifdef UP_fsetmod 317#ifdef UP_fsetmod
@@ -322,102 +321,94 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
322#endif 321#endif
323 { 322 {
324#if defined(OPENSSL_SYS_WINDOWS) 323#if defined(OPENSSL_SYS_WINDOWS)
325 int fd = _fileno((FILE*)ptr); 324 int fd = _fileno((FILE*)ptr);
326 if (num & BIO_FP_TEXT) 325 if (num & BIO_FP_TEXT)
327 _setmode(fd,_O_TEXT); 326 _setmode(fd, _O_TEXT);
328 else 327 else
329 _setmode(fd,_O_BINARY); 328 _setmode(fd, _O_BINARY);
330#elif defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB) 329#elif defined(OPENSSL_SYS_NETWARE) && defined(NETWARE_CLIB)
331 int fd = fileno((FILE*)ptr); 330 int fd = fileno((FILE*)ptr);
332 /* Under CLib there are differences in file modes */ 331 /* Under CLib there are differences in file modes */
333 if (num & BIO_FP_TEXT) 332 if (num & BIO_FP_TEXT)
334 setmode(fd,O_TEXT); 333 setmode(fd, O_TEXT);
335 else
336 setmode(fd,O_BINARY);
337#elif defined(OPENSSL_SYS_MSDOS)
338 int fd = fileno((FILE*)ptr);
339 /* Set correct text/binary mode */
340 if (num & BIO_FP_TEXT)
341 _setmode(fd,_O_TEXT);
342 /* Dangerous to set stdin/stdout to raw (unless redirected) */
343 else
344 {
345 if (fd == STDIN_FILENO || fd == STDOUT_FILENO)
346 {
347 if (isatty(fd) <= 0)
348 _setmode(fd,_O_BINARY);
349 }
350 else 334 else
351 _setmode(fd,_O_BINARY); 335 setmode(fd, O_BINARY);
336#elif defined(OPENSSL_SYS_MSDOS)
337 int fd = fileno((FILE*)ptr);
338 /* Set correct text/binary mode */
339 if (num & BIO_FP_TEXT)
340 _setmode(fd, _O_TEXT);
341 /* Dangerous to set stdin/stdout to raw (unless redirected) */
342 else {
343 if (fd == STDIN_FILENO || fd == STDOUT_FILENO) {
344 if (isatty(fd) <= 0)
345 _setmode(fd, _O_BINARY);
346 } else
347 _setmode(fd, _O_BINARY);
352 } 348 }
353#elif defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN) 349#elif defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN)
354 int fd = fileno((FILE*)ptr); 350 int fd = fileno((FILE*)ptr);
355 if (num & BIO_FP_TEXT) 351 if (num & BIO_FP_TEXT)
356 setmode(fd, O_TEXT); 352 setmode(fd, O_TEXT);
357 else 353 else
358 setmode(fd, O_BINARY); 354 setmode(fd, O_BINARY);
359#endif 355#endif
360 } 356 }
361 break; 357 break;
362 case BIO_C_SET_FILENAME: 358 case BIO_C_SET_FILENAME:
363 file_free(b); 359 file_free(b);
364 b->shutdown=(int)num&BIO_CLOSE; 360 b->shutdown = (int)num&BIO_CLOSE;
365 if (num & BIO_FP_APPEND) 361 if (num & BIO_FP_APPEND) {
366 {
367 if (num & BIO_FP_READ) 362 if (num & BIO_FP_READ)
368 BUF_strlcpy(p,"a+",sizeof p); 363 BUF_strlcpy(p, "a+", sizeof p);
369 else BUF_strlcpy(p,"a",sizeof p); 364 else BUF_strlcpy(p, "a", sizeof p);
370 } 365 } else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE))
371 else if ((num & BIO_FP_READ) && (num & BIO_FP_WRITE)) 366 BUF_strlcpy(p, "r+", sizeof p);
372 BUF_strlcpy(p,"r+",sizeof p);
373 else if (num & BIO_FP_WRITE) 367 else if (num & BIO_FP_WRITE)
374 BUF_strlcpy(p,"w",sizeof p); 368 BUF_strlcpy(p, "w", sizeof p);
375 else if (num & BIO_FP_READ) 369 else if (num & BIO_FP_READ)
376 BUF_strlcpy(p,"r",sizeof p); 370 BUF_strlcpy(p, "r", sizeof p);
377 else 371 else {
378 { 372 BIOerr(BIO_F_FILE_CTRL, BIO_R_BAD_FOPEN_MODE);
379 BIOerr(BIO_F_FILE_CTRL,BIO_R_BAD_FOPEN_MODE); 373 ret = 0;
380 ret=0;
381 break; 374 break;
382 } 375 }
383#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN) 376#if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_WIN32_CYGWIN)
384 if (!(num & BIO_FP_TEXT)) 377 if (!(num & BIO_FP_TEXT))
385 strcat(p,"b"); 378 strcat(p, "b");
386 else 379 else
387 strcat(p,"t"); 380 strcat(p, "t");
388#endif 381#endif
389#if defined(OPENSSL_SYS_NETWARE) 382#if defined(OPENSSL_SYS_NETWARE)
390 if (!(num & BIO_FP_TEXT)) 383 if (!(num & BIO_FP_TEXT))
391 strcat(p,"b"); 384 strcat(p, "b");
392 else 385 else
393 strcat(p,"t"); 386 strcat(p, "t");
394#endif 387#endif
395 fp=fopen(ptr,p); 388 fp = fopen(ptr, p);
396 if (fp == NULL) 389 if (fp == NULL) {
397 {
398 SYSerr(SYS_F_FOPEN, errno); 390 SYSerr(SYS_F_FOPEN, errno);
399 ERR_add_error_data(5,"fopen('",ptr,"','",p,"')"); 391 ERR_add_error_data(5, "fopen('", ptr, "', '", p, "')");
400 BIOerr(BIO_F_FILE_CTRL,ERR_R_SYS_LIB); 392 BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB);
401 ret=0; 393 ret = 0;
402 break; 394 break;
403 } 395 }
404 b->ptr=fp; 396 b->ptr = fp;
405 b->init=1; 397 b->init = 1;
406 BIO_clear_flags(b,BIO_FLAGS_UPLINK); /* we did fopen -> we disengage UPLINK */ 398 BIO_clear_flags(b, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage UPLINK */
407 break; 399 break;
408 case BIO_C_GET_FILE_PTR: 400 case BIO_C_GET_FILE_PTR:
409 /* the ptr parameter is actually a FILE ** in this case. */ 401 /* the ptr parameter is actually a FILE ** in this case. */
410 if (ptr != NULL) 402 if (ptr != NULL) {
411 { 403 fpp = (FILE **)ptr;
412 fpp=(FILE **)ptr; 404 *fpp = (FILE *)b->ptr;
413 *fpp=(FILE *)b->ptr; 405 }
414 }
415 break; 406 break;
416 case BIO_CTRL_GET_CLOSE: 407 case BIO_CTRL_GET_CLOSE:
417 ret=(long)b->shutdown; 408 ret = (long)b->shutdown;
418 break; 409 break;
419 case BIO_CTRL_SET_CLOSE: 410 case BIO_CTRL_SET_CLOSE:
420 b->shutdown=(int)num; 411 b->shutdown = (int)num;
421 break; 412 break;
422 case BIO_CTRL_FLUSH: 413 case BIO_CTRL_FLUSH:
423 if (b->flags&BIO_FLAGS_UPLINK) 414 if (b->flags&BIO_FLAGS_UPLINK)
@@ -426,7 +417,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
426 fflush((FILE *)b->ptr); 417 fflush((FILE *)b->ptr);
427 break; 418 break;
428 case BIO_CTRL_DUP: 419 case BIO_CTRL_DUP:
429 ret=1; 420 ret = 1;
430 break; 421 break;
431 422
432 case BIO_CTRL_WPENDING: 423 case BIO_CTRL_WPENDING:
@@ -434,44 +425,41 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
434 case BIO_CTRL_PUSH: 425 case BIO_CTRL_PUSH:
435 case BIO_CTRL_POP: 426 case BIO_CTRL_POP:
436 default: 427 default:
437 ret=0; 428 ret = 0;
438 break; 429 break;
439 }
440 return(ret);
441 } 430 }
431 return (ret);
432}
442 433
443static int file_gets(BIO *bp, char *buf, int size) 434static int
444 { 435file_gets(BIO *bp, char *buf, int size)
445 int ret=0; 436{
437 int ret = 0;
446 438
447 buf[0]='\0'; 439 buf[0] = '\0';
448 if (bp->flags&BIO_FLAGS_UPLINK) 440 if (bp->flags&BIO_FLAGS_UPLINK) {
449 { 441 if (!UP_fgets(buf, size, bp->ptr))
450 if (!UP_fgets(buf,size,bp->ptr))
451 goto err; 442 goto err;
452 } 443 } else {
453 else 444 if (!fgets(buf, size,(FILE *)bp->ptr))
454 {
455 if (!fgets(buf,size,(FILE *)bp->ptr))
456 goto err; 445 goto err;
457 }
458 if (buf[0] != '\0')
459 ret=strlen(buf);
460 err:
461 return(ret);
462 } 446 }
447 if (buf[0] != '\0')
448 ret = strlen(buf);
449err:
450 return (ret);
451}
463 452
464static int file_puts(BIO *bp, const char *str) 453static int
465 { 454file_puts(BIO *bp, const char *str)
466 int n,ret; 455{
456 int n, ret;
467 457
468 n=strlen(str); 458 n = strlen(str);
469 ret=file_write(bp,str,n); 459 ret = file_write(bp, str, n);
470 return(ret); 460 return (ret);
471 } 461}
472 462
473#endif /* OPENSSL_NO_STDIO */ 463#endif /* OPENSSL_NO_STDIO */
474 464
475#endif /* HEADER_BSS_FILE_C */ 465#endif /* HEADER_BSS_FILE_C */
476
477