[PATCH wayland] scanner: Fix oddities in copyright printing

Derek Foreman derekf at osg.samsung.com
Tue Feb 2 20:56:57 UTC 2016


Some copyright strings could result in broken generated header files with
unmatched */

This change:
Runs the loop long enough so the copyright[i] == 0 test can actually
happen. (if there was no \n no copyright text was printed, */ still was)

Prints the opening /* even if there was whitespace at the start of
the very first line.

Only emits a */ if a /* was printed.

Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
 src/scanner.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/scanner.c b/src/scanner.c
index dda5473..d3e2328 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -1284,25 +1284,29 @@ emit_structs(struct wl_list *message_list, struct interface *interface, enum sid
 static void
 format_copyright(const char *copyright)
 {
-	int bol = 1, start = 0, i;
+	int bol = 1, start = 0, i, length;
+	bool comment_started = false;
 
-	for (i = 0; copyright[i]; i++) {
+	length = strlen(copyright);
+	for (i = 0; i <= length; i++) {
 		if (bol && (copyright[i] == ' ' || copyright[i] == '\t')) {
 			continue;
 		} else if (bol) {
 			bol = 0;
 			start = i;
 		}
-
-		if (copyright[i] == '\n' || copyright[i] == '\0') {
+		if (copyright[i] == '\n' ||
+		    (copyright[i] == '\0' && !(start == i))) {
 			printf("%s%s%.*s\n",
-			       i == 0 ? "/*" : " *",
+			       comment_started ? " *" : "/*",
 			       i > start ? " " : "",
 			       i - start, copyright + start);
 			bol = 1;
+			comment_started = true;
 		}
 	}
-	printf(" */\n\n");
+	if (comment_started)
+		printf(" */\n\n");
 }
 
 static void
-- 
2.7.0



More information about the wayland-devel mailing list