diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-04-05 00:54:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-05 00:54:58 +0200 |
commit | d49c1dda8bf57587c609f3de7b78393f748a9df4 (patch) | |
tree | c1d99b1a32882f0dcecdab7b2c9cfbae41ad2001 | |
parent | e8c39f72fdf19486ef6f3ab276d6d128ee446dc1 (diff) | |
parent | 1fd54f29c19e19c9202a108d621b819ac7b5fba2 (diff) | |
download | rneovim-d49c1dda8bf57587c609f3de7b78393f748a9df4.tar.gz rneovim-d49c1dda8bf57587c609f3de7b78393f748a9df4.tar.bz2 rneovim-d49c1dda8bf57587c609f3de7b78393f748a9df4.zip |
Merge #8228 from mhinz/fix-fgets
-rw-r--r-- | src/nvim/fileio.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 02f72dbce3..25653deb3e 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -4452,7 +4452,7 @@ char *modname(const char *fname, const char *ext, bool prepend_dot) /// @param size size of the buffer /// @param fp file to read from /// -/// @return true for end-of-file. +/// @return true for EOF or error bool vim_fgets(char_u *buf, int size, FILE *fp) FUNC_ATTR_NONNULL_ALL { char *retval; @@ -4463,7 +4463,7 @@ bool vim_fgets(char_u *buf, int size, FILE *fp) FUNC_ATTR_NONNULL_ALL do { errno = 0; retval = fgets((char *)buf, size, fp); - } while (retval == NULL && errno == EINTR); + } while (retval == NULL && errno == EINTR && ferror(fp)); if (buf[size - 2] != NUL && buf[size - 2] != '\n') { char tbuf[200]; @@ -4475,12 +4475,12 @@ bool vim_fgets(char_u *buf, int size, FILE *fp) FUNC_ATTR_NONNULL_ALL tbuf[sizeof(tbuf) - 2] = NUL; errno = 0; retval = fgets((char *)tbuf, sizeof(tbuf), fp); - if (retval == NULL && errno != EINTR) { + if (retval == NULL && (feof(fp) || errno != EINTR)) { break; } } while (tbuf[sizeof(tbuf) - 2] != NUL && tbuf[sizeof(tbuf) - 2] != '\n'); } - return retval ? false : feof(fp); + return retval == NULL; } /// Read 2 bytes from "fd" and turn them into an int, MSB first. |