aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newlib/libc/stdio/fgetwc.c6
-rw-r--r--newlib/libc/stdio/fgetwc_u.c3
-rw-r--r--newlib/libc/stdio/fgetws.c3
-rw-r--r--newlib/libc/stdio/fputs.c9
-rw-r--r--newlib/libc/stdio/fputwc.c6
-rw-r--r--newlib/libc/stdio/fputwc_u.c3
-rw-r--r--newlib/libc/stdio/fputws.c6
-rw-r--r--newlib/libc/stdio/fread.c7
-rw-r--r--newlib/libc/stdio/fwrite.c9
-rw-r--r--newlib/libc/stdio/local.h31
-rw-r--r--newlib/libc/stdio/putc.c4
-rw-r--r--newlib/libc/stdio/puts.c9
-rw-r--r--newlib/libc/stdio/refill.c3
-rw-r--r--newlib/libc/stdio/ungetc.c6
-rw-r--r--newlib/libc/stdio/ungetwc.c5
-rw-r--r--newlib/libc/stdio/vfprintf.c5
-rw-r--r--newlib/libc/stdio/vfscanf.c6
-rw-r--r--newlib/libc/stdio/vfwprintf.c5
-rw-r--r--newlib/libc/stdio/vfwscanf.c6
19 files changed, 92 insertions, 40 deletions
diff --git a/newlib/libc/stdio/fgetwc.c b/newlib/libc/stdio/fgetwc.c
index 522697e..38e2db8 100644
--- a/newlib/libc/stdio/fgetwc.c
+++ b/newlib/libc/stdio/fgetwc.c
@@ -177,8 +177,10 @@ _fgetwc_r (struct _reent *ptr,
wint_t r;
_newlib_flockfile_start (fp);
- ORIENT(fp, 1);
- r = __fgetwc (ptr, fp);
+ if (ORIENT(fp, 1) != 1)
+ r = WEOF;
+ else
+ r = __fgetwc (ptr, fp);
_newlib_flockfile_end (fp);
return r;
}
diff --git a/newlib/libc/stdio/fgetwc_u.c b/newlib/libc/stdio/fgetwc_u.c
index cbb9736..007f9c8 100644
--- a/newlib/libc/stdio/fgetwc_u.c
+++ b/newlib/libc/stdio/fgetwc_u.c
@@ -33,7 +33,8 @@ wint_t
_fgetwc_unlocked_r (struct _reent *ptr,
register FILE *fp)
{
- ORIENT(fp, 1);
+ if (ORIENT(fp, 1) != 1)
+ return WEOF;
return __fgetwc (ptr, fp);
}
diff --git a/newlib/libc/stdio/fgetws.c b/newlib/libc/stdio/fgetws.c
index c942806..3b7fa95 100644
--- a/newlib/libc/stdio/fgetws.c
+++ b/newlib/libc/stdio/fgetws.c
@@ -110,7 +110,8 @@ _fgetws_r (struct _reent *ptr,
unsigned char *nl;
_newlib_flockfile_start (fp);
- ORIENT (fp, 1);
+ if (ORIENT (fp, 1) != 1)
+ goto error;
if (n <= 0)
{
diff --git a/newlib/libc/stdio/fputs.c b/newlib/libc/stdio/fputs.c
index 4e9cb75..a4f18df 100644
--- a/newlib/libc/stdio/fputs.c
+++ b/newlib/libc/stdio/fputs.c
@@ -103,8 +103,10 @@ _fputs_r (struct _reent * ptr,
CHECK_INIT(ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
- result = __sfvwrite_r (ptr, fp, &uio);
+ if (ORIENT (fp, -1) != -1)
+ result = EOF;
+ else
+ result = __sfvwrite_r (ptr, fp, &uio);
_newlib_flockfile_end (fp);
return result;
#else
@@ -113,7 +115,8 @@ _fputs_r (struct _reent * ptr,
CHECK_INIT(ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ goto error;
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto error;
diff --git a/newlib/libc/stdio/fputwc.c b/newlib/libc/stdio/fputwc.c
index 9a4e80d..ef2be10 100644
--- a/newlib/libc/stdio/fputwc.c
+++ b/newlib/libc/stdio/fputwc.c
@@ -169,8 +169,10 @@ _fputwc_r (struct _reent *ptr,
wint_t r;
_newlib_flockfile_start (fp);
- ORIENT(fp, 1);
- r = __fputwc(ptr, wc, fp);
+ if (ORIENT(fp, 1) != 1)
+ r = WEOF;
+ else
+ r = __fputwc(ptr, wc, fp);
_newlib_flockfile_end (fp);
return r;
}
diff --git a/newlib/libc/stdio/fputwc_u.c b/newlib/libc/stdio/fputwc_u.c
index d4e5153..a5cc9a5 100644
--- a/newlib/libc/stdio/fputwc_u.c
+++ b/newlib/libc/stdio/fputwc_u.c
@@ -34,7 +34,8 @@ _fputwc_unlocked_r (struct _reent *ptr,
wchar_t wc,
FILE *fp)
{
- ORIENT(fp, 1);
+ if (ORIENT(fp, 1) != 1)
+ return WEOF;
return __fputwc(ptr, wc, fp);
}
diff --git a/newlib/libc/stdio/fputws.c b/newlib/libc/stdio/fputws.c
index 92f2cbf..a9ac9d6 100644
--- a/newlib/libc/stdio/fputws.c
+++ b/newlib/libc/stdio/fputws.c
@@ -105,7 +105,8 @@ _fputws_r (struct _reent *ptr,
struct __siov iov;
_newlib_flockfile_start (fp);
- ORIENT (fp, 1);
+ if (ORIENT (fp, 1) != 1)
+ goto error;
if (cantwrite (ptr, fp) != 0)
goto error;
uio.uio_iov = &iov;
@@ -129,7 +130,8 @@ error:
return (-1);
#else
_newlib_flockfile_start (fp);
- ORIENT (fp, 1);
+ if (ORIENT (fp, 1) != 1)
+ goto error;
if (cantwrite (ptr, fp) != 0)
goto error;
diff --git a/newlib/libc/stdio/fread.c b/newlib/libc/stdio/fread.c
index df83214..8664dc3 100644
--- a/newlib/libc/stdio/fread.c
+++ b/newlib/libc/stdio/fread.c
@@ -158,7 +158,11 @@ _fread_r (struct _reent * ptr,
CHECK_INIT(ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ {
+ count = 0;
+ goto ret;
+ }
if (fp->_r < 0)
fp->_r = 0;
total = resid;
@@ -252,6 +256,7 @@ _fread_r (struct _reent * ptr,
return crlf_r(ptr, fp, buf, total, 0) / size;
}
#endif
+ret:
_newlib_flockfile_end (fp);
return count;
}
diff --git a/newlib/libc/stdio/fwrite.c b/newlib/libc/stdio/fwrite.c
index d499f6f..2d97496 100644
--- a/newlib/libc/stdio/fwrite.c
+++ b/newlib/libc/stdio/fwrite.c
@@ -133,7 +133,11 @@ _fwrite_r (struct _reent * ptr,
CHECK_INIT(ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ {
+ _newlib_flockfile_exit (fp);
+ return 0;
+ }
if (__sfvwrite_r (ptr, fp, &uio) == 0)
{
_newlib_flockfile_exit (fp);
@@ -148,7 +152,8 @@ _fwrite_r (struct _reent * ptr,
CHECK_INIT (ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ goto ret;
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto ret;
diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h
index b34c7c9..3b86cf1 100644
--- a/newlib/libc/stdio/local.h
+++ b/newlib/libc/stdio/local.h
@@ -231,21 +231,24 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *,
* Set the orientation for a stream. If o > 0, the stream has wide-
* orientation. If o < 0, the stream has byte-orientation.
*/
-#define ORIENT(fp,ori) \
- do \
- { \
- if (!((fp)->_flags & __SORD)) \
- { \
- (fp)->_flags |= __SORD; \
- if (ori > 0) \
- (fp)->_flags2 |= __SWID; \
- else \
- (fp)->_flags2 &= ~__SWID; \
- } \
- } \
- while (0)
+#define ORIENT(fp,ori) \
+ ( \
+ ( \
+ ((fp)->_flags & __SORD) ? \
+ 0 \
+ : \
+ ( \
+ ((fp)->_flags |= __SORD), \
+ (ori > 0) ? \
+ ((fp)->_flags2 |= __SWID) \
+ : \
+ ((fp)->_flags2 &= ~__SWID) \
+ ) \
+ ), \
+ ((fp)->_flags2 & __SWID) ? 1 : -1 \
+ )
#else
-#define ORIENT(fp,ori)
+#define ORIENT(fp,ori) (-1)
#endif
/* WARNING: _dcvt is defined in the stdlib directory, not here! */
diff --git a/newlib/libc/stdio/putc.c b/newlib/libc/stdio/putc.c
index 6a410e2..9253419 100644
--- a/newlib/libc/stdio/putc.c
+++ b/newlib/libc/stdio/putc.c
@@ -84,6 +84,8 @@ _putc_r (struct _reent *ptr,
{
int result;
CHECK_INIT (ptr, fp);
+ if (ORIENT (fp, -1) != -1)
+ return EOF;
_newlib_flockfile_start (fp);
result = __sputc_r (ptr, c, fp);
_newlib_flockfile_end (fp);
@@ -100,6 +102,8 @@ putc (int c,
struct _reent *reent = _REENT;
CHECK_INIT (reent, fp);
+ if (ORIENT (fp, -1) != -1)
+ return EOF;
_newlib_flockfile_start (fp);
result = __sputc_r (reent, c, fp);
_newlib_flockfile_end (fp);
diff --git a/newlib/libc/stdio/puts.c b/newlib/libc/stdio/puts.c
index d4d7b7f..20d889b 100644
--- a/newlib/libc/stdio/puts.c
+++ b/newlib/libc/stdio/puts.c
@@ -87,8 +87,10 @@ _puts_r (struct _reent *ptr,
fp = _stdout_r (ptr);
CHECK_INIT (ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
- result = (__sfvwrite_r (ptr, fp, &uio) ? EOF : '\n');
+ if (ORIENT (fp, -1) != -1)
+ result = EOF;
+ else
+ result = (__sfvwrite_r (ptr, fp, &uio) ? EOF : '\n');
_newlib_flockfile_end (fp);
return result;
#else
@@ -100,7 +102,8 @@ _puts_r (struct _reent *ptr,
fp = _stdout_r (ptr);
CHECK_INIT (ptr, fp);
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ goto err;
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto err;
diff --git a/newlib/libc/stdio/refill.c b/newlib/libc/stdio/refill.c
index 7bd3880..c1ef7e1 100644
--- a/newlib/libc/stdio/refill.c
+++ b/newlib/libc/stdio/refill.c
@@ -43,7 +43,8 @@ __srefill_r (struct _reent * ptr,
CHECK_INIT (ptr, fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ return EOF;
fp->_r = 0; /* largely a convenience for callers */
diff --git a/newlib/libc/stdio/ungetc.c b/newlib/libc/stdio/ungetc.c
index 533c28e..79914af 100644
--- a/newlib/libc/stdio/ungetc.c
+++ b/newlib/libc/stdio/ungetc.c
@@ -125,7 +125,11 @@ _ungetc_r (struct _reent *rptr,
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ {
+ _newlib_flockfile_exit (fp);
+ return EOF;
+ }
/* After ungetc, we won't be at eof anymore */
fp->_flags &= ~__SEOF;
diff --git a/newlib/libc/stdio/ungetwc.c b/newlib/libc/stdio/ungetwc.c
index 16d37f2..18636d7 100644
--- a/newlib/libc/stdio/ungetwc.c
+++ b/newlib/libc/stdio/ungetwc.c
@@ -82,8 +82,9 @@ _ungetwc_r (struct _reent *ptr,
size_t len;
_newlib_flockfile_start (fp);
- ORIENT (fp, 1);
- if (wc == WEOF)
+ if (ORIENT (fp, 1) != 1)
+ wc = WEOF;
+ else if (wc == WEOF)
wc = WEOF;
else if ((len = _wcrtomb_r(ptr, buf, wc, &fp->_mbstate)) == (size_t)-1)
{
diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c
index 6a198e2..42272ab 100644
--- a/newlib/libc/stdio/vfprintf.c
+++ b/newlib/libc/stdio/vfprintf.c
@@ -845,7 +845,10 @@ _VFPRINTF_R (struct _reent *data,
CHECK_INIT (data, fp);
_newlib_flockfile_start (fp);
- ORIENT(fp, -1);
+ if (ORIENT(fp, -1) != -1) {
+ _newlib_flockfile_exit (fp);
+ return (EOF);
+ }
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
if (cantwrite (data, fp)) {
diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c
index cfeea98..71e2c3e 100644
--- a/newlib/libc/stdio/vfscanf.c
+++ b/newlib/libc/stdio/vfscanf.c
@@ -589,7 +589,11 @@ __SVFSCANF_R (struct _reent *rptr,
_newlib_flockfile_start (fp);
- ORIENT (fp, -1);
+ if (ORIENT (fp, -1) != -1)
+ {
+ nassigned = EOF;
+ goto all_done;
+ }
nassigned = 0;
nread = 0;
diff --git a/newlib/libc/stdio/vfwprintf.c b/newlib/libc/stdio/vfwprintf.c
index 7807a12..bbabbda 100644
--- a/newlib/libc/stdio/vfwprintf.c
+++ b/newlib/libc/stdio/vfwprintf.c
@@ -588,7 +588,10 @@ _VFWPRINTF_R (struct _reent *data,
CHECK_INIT (data, fp);
_newlib_flockfile_start (fp);
- ORIENT(fp, 1);
+ if (ORIENT(fp, 1) != 1) {
+ _newlib_flockfile_exit (fp);
+ return (EOF);
+ }
/* sorry, fwprintf(read_only_file, "") returns EOF, not 0 */
if (cantwrite (data, fp)) {
diff --git a/newlib/libc/stdio/vfwscanf.c b/newlib/libc/stdio/vfwscanf.c
index df966f9..d2f91dd 100644
--- a/newlib/libc/stdio/vfwscanf.c
+++ b/newlib/libc/stdio/vfwscanf.c
@@ -516,7 +516,11 @@ __SVFWSCANF_R (struct _reent *rptr,
_newlib_flockfile_start (fp);
- ORIENT (fp, 1);
+ if (ORIENT (fp, 1) != 1)
+ {
+ nassigned = EOF;
+ goto all_done;
+ }
nassigned = 0;
nread = 0;