refill.c (71579) | refill.c (72373) |
---|---|
1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 25 unchanged lines hidden (view full) --- 34 * SUCH DAMAGE. 35 */ 36 37#if defined(LIBC_SCCS) && !defined(lint) 38#if 0 39static char sccsid[] = "@(#)refill.c 8.1 (Berkeley) 6/4/93"; 40#endif 41static const char rcsid[] = | 1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 25 unchanged lines hidden (view full) --- 34 * SUCH DAMAGE. 35 */ 36 37#if defined(LIBC_SCCS) && !defined(lint) 38#if 0 39static char sccsid[] = "@(#)refill.c 8.1 (Berkeley) 6/4/93"; 40#endif 41static const char rcsid[] = |
42 "$FreeBSD: head/lib/libc/stdio/refill.c 71579 2001-01-24 13:01:12Z deischen $"; | 42 "$FreeBSD: head/lib/libc/stdio/refill.c 72373 2001-02-11 22:06:43Z deischen $"; |
43#endif /* LIBC_SCCS and not lint */ 44 | 43#endif /* LIBC_SCCS and not lint */ 44 |
45#include "namespace.h" |
|
45#include <errno.h> 46#include <stdio.h> 47#include <stdlib.h> | 46#include <errno.h> 47#include <stdio.h> 48#include <stdlib.h> |
49#include "un-namespace.h" |
|
48 | 50 |
51#include "libc_private.h" |
|
49#include "local.h" 50 51static int lflush __P((FILE *)); 52 53static int | 52#include "local.h" 53 54static int lflush __P((FILE *)); 55 56static int |
54lflush(fp) 55 FILE *fp; | 57lflush(FILE *fp) |
56{ | 58{ |
59 int ret = 0; |
|
57 | 60 |
58 if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR)) 59 return (__sflush(fp)); 60 return (0); | 61 if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR)) { 62 FLOCKFILE(fp); 63 ret = __sflush(fp); 64 FUNLOCKFILE(fp); 65 } 66 return (ret); |
61} 62 63/* 64 * Refill a stdio buffer. 65 * Return EOF on eof or error, 0 otherwise. 66 */ 67int | 67} 68 69/* 70 * Refill a stdio buffer. 71 * Return EOF on eof or error, 0 otherwise. 72 */ 73int |
68__srefill(fp) 69 register FILE *fp; | 74__srefill(FILE *fp) |
70{ | 75{ |
71 | |
72 /* make sure stdio is set up */ 73 if (!__sdidinit) 74 __sinit(); 75 76 fp->_r = 0; /* largely a convenience for callers */ 77 78 /* SysV does not make this test; take it out for compatibility */ 79 if (fp->_flags & __SEOF) --- 34 unchanged lines hidden (view full) --- 114 if (fp->_bf._base == NULL) 115 __smakebuf(fp); 116 117 /* 118 * Before reading from a line buffered or unbuffered file, 119 * flush all line buffered output files, per the ANSI C 120 * standard. 121 */ | 76 /* make sure stdio is set up */ 77 if (!__sdidinit) 78 __sinit(); 79 80 fp->_r = 0; /* largely a convenience for callers */ 81 82 /* SysV does not make this test; take it out for compatibility */ 83 if (fp->_flags & __SEOF) --- 34 unchanged lines hidden (view full) --- 118 if (fp->_bf._base == NULL) 119 __smakebuf(fp); 120 121 /* 122 * Before reading from a line buffered or unbuffered file, 123 * flush all line buffered output files, per the ANSI C 124 * standard. 125 */ |
122 if (fp->_flags & (__SLBF|__SNBF)) | 126 if (fp->_flags & (__SLBF|__SNBF)) { 127 /* Ignore this file in _fwalk to avoid potential deadlock. */ 128 fp->_flags |= __SIGN; |
123 (void) _fwalk(lflush); | 129 (void) _fwalk(lflush); |
130 fp->_flags &= ~__SIGN; 131 132 /* Now flush this file without locking it. */ 133 if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR)) 134 __sflush(fp); 135 } |
|
124 fp->_p = fp->_bf._base; 125 fp->_r = (*fp->_read)(fp->_cookie, (char *)fp->_p, fp->_bf._size); 126 fp->_flags &= ~__SMOD; /* buffer contents are again pristine */ 127 if (fp->_r <= 0) { 128 if (fp->_r == 0) 129 fp->_flags |= __SEOF; 130 else { 131 fp->_r = 0; 132 fp->_flags |= __SERR; 133 } 134 return (EOF); 135 } 136 return (0); 137} | 136 fp->_p = fp->_bf._base; 137 fp->_r = (*fp->_read)(fp->_cookie, (char *)fp->_p, fp->_bf._size); 138 fp->_flags &= ~__SMOD; /* buffer contents are again pristine */ 139 if (fp->_r <= 0) { 140 if (fp->_r == 0) 141 fp->_flags |= __SEOF; 142 else { 143 fp->_r = 0; 144 fp->_flags |= __SERR; 145 } 146 return (EOF); 147 } 148 return (0); 149} |