Author: ache
Date: Thu Aug 25 21:14:26 2016
New Revision: 304819
URL: https://svnweb.freebsd.org/changeset/base/304819

Log:
  Original fgetln() from 44lite return sucess for line tail errors,
  i.e. partial line, but set __SERR and errno in the same time, which
  is inconsistent.
  Now both OpenBSD and NetBSD return failure, i.e. no line and set error
  indicators for such case, so make our fgetln() and fgetwln()
  (as its wide version) compatible with the rest of *BSD.
  
  PR:     212033
  MFC after:      7 days

Modified:
  head/lib/libc/stdio/fgetln.c
  head/lib/libc/stdio/fgetwln.c

Modified: head/lib/libc/stdio/fgetln.c
==============================================================================
--- head/lib/libc/stdio/fgetln.c        Thu Aug 25 21:13:16 2016        
(r304818)
+++ head/lib/libc/stdio/fgetln.c        Thu Aug 25 21:14:26 2016        
(r304819)
@@ -139,8 +139,11 @@ fgetln(FILE *fp, size_t *lenp)
                (void)memcpy((void *)(fp->_lb._base + off), (void *)fp->_p,
                    len - off);
                off = len;
-               if (__srefill(fp))
-                       break;  /* EOF or error: return partial line */
+               if (__srefill(fp)) {
+                       if (__sfeof(fp))
+                               break;
+                       goto error;
+               }
                if ((p = memchr((void *)fp->_p, '\n', (size_t)fp->_r)) == NULL)
                        continue;
 

Modified: head/lib/libc/stdio/fgetwln.c
==============================================================================
--- head/lib/libc/stdio/fgetwln.c       Thu Aug 25 21:13:16 2016        
(r304818)
+++ head/lib/libc/stdio/fgetwln.c       Thu Aug 25 21:14:26 2016        
(r304819)
@@ -53,7 +53,6 @@ fgetwln_l(FILE * __restrict fp, size_t *
        ORIENT(fp, 1);
 
        len = 0;
-       /* WEOF or error: return partial line, see fgetln(3). */
        while ((wc = __fgetwc(fp, locale)) != WEOF) {
 #define        GROW    512
                if (len * sizeof(wchar_t) >= fp->_lb._size &&
@@ -65,7 +64,7 @@ fgetwln_l(FILE * __restrict fp, size_t *
                if (wc == L'\n')
                        break;
        }
-       if (len == 0)
+       if (len == 0 || (wc == WEOF && !__sfeof(fp)))
                goto error;
 
        FUNLOCKFILE(fp);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to