File 0019-read_acl_-comments-seq-switch-to-next_line.patch of Package acl

From 34d5069ab4187aece1b711a86af705ff121ac62d Mon Sep 17 00:00:00 2001
From: Mike Frysinger <vapier@gentoo.org>
Date: Sun, 19 Jan 2014 01:05:11 -0500
Subject: [PATCH 19/34] read_acl_{comments,seq}: switch to next_line

Rather than use a fixed length buffer, use next_line.  This let's us
handle any arbitrary length and avoid the non-portable PATH_MAX.

Fixes bug 27388 in the acl tracker.
---
 tools/parse.c | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/tools/parse.c b/tools/parse.c
index 6f30cf5..df69c26 100644
--- a/tools/parse.c
+++ b/tools/parse.c
@@ -419,9 +419,7 @@ read_acl_comments(
 	  bytes for "# file: ". Not a good solution but for now it is the
 	  best I can do without too much impact on the code. [tw]
 	*/
-	char linebuf[(4*PATH_MAX)+9];
-	char *cp;
-	char *p;
+	char *line, *cp, *p;
 	int comments_read = 0;
 	
 	if (path_p)
@@ -449,19 +447,20 @@ read_acl_comments(
 		if (lineno)
 			(*lineno)++;
 
-		if (fgets(linebuf, sizeof(linebuf), file) == NULL)
+		line = next_line(file);
+		if (line == NULL)
 			break;
 		
 		comments_read = 1;
 
-		p = strrchr(linebuf, '\0');
-		while (p > linebuf &&
+		p = strrchr(line, '\0');
+		while (p > line &&
 		       (*(p-1)=='\r' || *(p-1)=='\n')) {
 		       	p--;
 			*p = '\0';
 		}
 		
-		cp = linebuf;
+		cp = line;
 		SKIP_WS(cp);
 		if (strncmp(cp, "file:", 5) == 0) {
 			cp += 5;
@@ -542,20 +541,18 @@ read_acl_seq(
 	int *lineno,
 	int *which)
 {
-	char linebuf[1024];
+	char *line;
 	const char *cp;
 	cmd_t cmd;
 
 	if (which)
 		*which = -1;
 
-	for(;;) {
-		if (fgets(linebuf, sizeof(linebuf), file) == NULL)
-			break;
+	while ((line = next_line(file))) {
 		if (lineno)
 			(*lineno)++;
 
-		cp = linebuf;
+		cp = line;
 		SKIP_WS(cp);
 		if (*cp == '\0') {
 			if (!(parse_mode & SEQ_PARSE_MULTI))
@@ -588,7 +585,7 @@ read_acl_seq(
 
 fail:
 	if (which)
-		*which = (cp - linebuf);
+		*which = (cp - line);
 	return -1;
 }
 
-- 
2.5.2
openSUSE Build Service is sponsored by