diff options
author | Florian Weimer <fweimer@redhat.com> | 2019-02-03 09:37:30 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2019-02-03 09:38:24 +0100 |
commit | ee9941f94ea838774c34f60b3397fba07a803d92 (patch) | |
tree | 082d81424de2bb74bd63f0087869c956ea437ad7 /debug/gets_chk.c | |
parent | c70824b9a4645c0ecd049da8cfdb2c28ae7ada23 (diff) | |
download | glibc-ee9941f94ea838774c34f60b3397fba07a803d92.zip glibc-ee9941f94ea838774c34f60b3397fba07a803d92.tar.gz glibc-ee9941f94ea838774c34f60b3397fba07a803d92.tar.bz2 |
libio: Use stdin consistently for input functions [BZ #24153]
The internal _IO_stdin_ variable is not updated when the application
assigns to stdin, which is a GNU extension.
Diffstat (limited to 'debug/gets_chk.c')
-rw-r--r-- | debug/gets_chk.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/debug/gets_chk.c b/debug/gets_chk.c index 4b5e13d..fc6557a 100644 --- a/debug/gets_chk.c +++ b/debug/gets_chk.c @@ -37,8 +37,8 @@ __gets_chk (char *buf, size_t size) if (size == 0) __chk_fail (); - _IO_acquire_lock (_IO_stdin); - ch = _IO_getc_unlocked (_IO_stdin); + _IO_acquire_lock (stdin); + ch = _IO_getc_unlocked (stdin); if (ch == EOF) { retval = NULL; @@ -51,24 +51,24 @@ __gets_chk (char *buf, size_t size) /* This is very tricky since a file descriptor may be in the non-blocking mode. The error flag doesn't mean much in this case. We return an error only when there is a new error. */ - int old_error = _IO_stdin->_flags & _IO_ERR_SEEN; - _IO_stdin->_flags &= ~_IO_ERR_SEEN; + int old_error = stdin->_flags & _IO_ERR_SEEN; + stdin->_flags &= ~_IO_ERR_SEEN; buf[0] = (char) ch; - count = _IO_getline (_IO_stdin, buf + 1, size - 1, '\n', 0) + 1; - if (_IO_stdin->_flags & _IO_ERR_SEEN) + count = _IO_getline (stdin, buf + 1, size - 1, '\n', 0) + 1; + if (stdin->_flags & _IO_ERR_SEEN) { retval = NULL; goto unlock_return; } else - _IO_stdin->_flags |= old_error; + stdin->_flags |= old_error; } if (count >= size) __chk_fail (); buf[count] = 0; retval = buf; unlock_return: - _IO_release_lock (_IO_stdin); + _IO_release_lock (stdin); return retval; } |