summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-08-16 00:54:56 +0000
committerpfg <pfg@FreeBSD.org>2014-08-16 00:54:56 +0000
commitcc4d94d41f4dc42906a0f06a9c4beb8f612e0526 (patch)
treed813214a944b79cb450a1698ad3ee9833e970a13 /lib
parent5b8c39f44b953ecbb0160f46a7b3e4ed1e5453e0 (diff)
downloadFreeBSD-src-cc4d94d41f4dc42906a0f06a9c4beb8f612e0526.zip
FreeBSD-src-cc4d94d41f4dc42906a0f06a9c4beb8f612e0526.tar.gz
MFC r269015:
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)
Diffstat (limited to 'lib')
-rw-r--r--lib/libutil/fparseln.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/libutil/fparseln.c b/lib/libutil/fparseln.c
index 0624f0e..d03357e 100644
--- a/lib/libutil/fparseln.c
+++ b/lib/libutil/fparseln.c
@@ -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, int esc)
/* 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 *lineno, const char str[3], int flags)
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);
OpenPOWER on IntegriCloud