scanner: Fix oddities in copyright printing
authorDerek Foreman <derekf@osg.samsung.com>
Tue, 2 Feb 2016 20:56:57 +0000 (14:56 -0600)
committerBryce Harrington <bryce@bryceharrington.org>
Thu, 4 Feb 2016 19:11:21 +0000 (11:11 -0800)
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@osg.samsung.com>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
src/scanner.c

index dda5473..d3e2328 100644 (file)
@@ -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