svn commit: r305584 - stable/11/lib/libc/stdio
Andrey A. Chernov
ache at FreeBSD.org
Thu Sep 8 07:16:16 UTC 2016
Author: ache
Date: Thu Sep 8 07:16:15 2016
New Revision: 305584
URL: https://svnweb.freebsd.org/changeset/base/305584
Log:
MFC r305413
Fix error handling.
Modified:
stable/11/lib/libc/stdio/fgets.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/lib/libc/stdio/fgets.c
==============================================================================
--- stable/11/lib/libc/stdio/fgets.c Thu Sep 8 07:14:48 2016 (r305583)
+++ stable/11/lib/libc/stdio/fgets.c Thu Sep 8 07:16:15 2016 (r305584)
@@ -37,6 +37,7 @@ static char sccsid[] = "@(#)fgets.c 8.2
__FBSDID("$FreeBSD$");
#include "namespace.h"
+#include <errno.h>
#include <stdio.h>
#include <string.h>
#include "un-namespace.h"
@@ -55,11 +56,16 @@ fgets(char * __restrict buf, int n, FILE
char *s;
unsigned char *p, *t;
- if (n <= 0) /* sanity check */
- return (NULL);
-
FLOCKFILE(fp);
ORIENT(fp, -1);
+
+ if (n <= 0) { /* sanity check */
+ fp->_flags |= __SERR;
+ errno = EINVAL;
+ FUNLOCKFILE(fp);
+ return (NULL);
+ }
+
s = buf;
n--; /* leave space for NUL */
while (n != 0) {
@@ -69,7 +75,7 @@ fgets(char * __restrict buf, int n, FILE
if ((len = fp->_r) <= 0) {
if (__srefill(fp)) {
/* EOF/error: stop with partial or no line */
- if (s == buf) {
+ if (!__sfeof(fp) || s == buf) {
FUNLOCKFILE(fp);
return (NULL);
}
More information about the svn-src-stable-11
mailing list