svn commit: r269015 - head/lib/libutil

Pedro F. Giffuni pfg at FreeBSD.org
Wed Jul 23 14:57:15 UTC 2014


Author: pfg
Date: Wed Jul 23 14:57:15 2014
New Revision: 269015
URL: http://svnweb.freebsd.org/changeset/base/269015

Log:
  fparseln(3): Update from NetBSD sources.
  
  -fix a condition so that fparseln() doesn't report spurious empty lines
   eg after 2 comment lines, or on EOF after a single comment line
  -no escape character means no escaped characters
  
  modify the previous fix so that no pointless realloc()s are done in
  the case of multiple empty continuation lines, and comment the code
  to make the logics obvious
  
  fparseln is now part of libc in NetBSD so this changes the previous
  revision numbering.
  
  Obtained from:	NetBSD (CVS Rev. 1.6-1.7)
  MFC after:	2 weeks

Modified:
  head/lib/libutil/fparseln.c

Modified: head/lib/libutil/fparseln.c
==============================================================================
--- head/lib/libutil/fparseln.c	Wed Jul 23 14:30:58 2014	(r269014)
+++ head/lib/libutil/fparseln.c	Wed Jul 23 14:57:15 2014	(r269015)
@@ -1,4 +1,4 @@
-/*	$NetBSD: fparseln.c,v 1.9 1999/09/20 04:48:06 lukem Exp $	*/
+/*	$NetBSD: fparseln.c,v 1.7 2007/03/08 19:57:53 drochner Exp $	*/
 
 /*
  * Copyright (c) 1997 Christos Zoulas.  All rights reserved.
@@ -59,7 +59,7 @@ isescaped(const char *sp, const char *p,
 
 	/* No escape character */
 	if (esc == '\0')
-		return 1;
+		return 0;
 
 	/* Count the number of escape characters that precede ours */
 	for (ne = 0, cp = p; --cp >= sp && *cp == esc; ne++)
@@ -135,13 +135,19 @@ fparseln(FILE *fp, size_t *size, size_t 
 			cp = &ptr[s - 1];
 
 			if (*cp == con && !isescaped(ptr, cp, esc)) {
-				s--;	/* forget escape */
+				s--;	/* forget continuation char */
 				cnt = 1;
 			}
 		}
 
-		if (s == 0 && buf != NULL)
-			continue;
+		if (s == 0) {
+			/*
+			 * nothing to add, skip realloc except in case
+			 * we need a minimal buf to return an empty line
+			 */
+			if (cnt || buf != NULL)
+				continue;
+		}
 
 		if ((cp = realloc(buf, len + s + 1)) == NULL) {
 			free(buf);


More information about the svn-src-all mailing list