scanner: Fix oddities in copyright printing

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>
This commit is contained in:
Derek Foreman 2016-02-02 14:56:57 -06:00 committed by Bryce Harrington
parent 816a0ae09b
commit 369b6466a7

View file

@ -1284,25 +1284,29 @@ emit_structs(struct wl_list *message_list, struct interface *interface, enum sid
static void static void
format_copyright(const char *copyright) 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')) { if (bol && (copyright[i] == ' ' || copyright[i] == '\t')) {
continue; continue;
} else if (bol) { } else if (bol) {
bol = 0; bol = 0;
start = i; start = i;
} }
if (copyright[i] == '\n' ||
if (copyright[i] == '\n' || copyright[i] == '\0') { (copyright[i] == '\0' && !(start == i))) {
printf("%s%s%.*s\n", printf("%s%s%.*s\n",
i == 0 ? "/*" : " *", comment_started ? " *" : "/*",
i > start ? " " : "", i > start ? " " : "",
i - start, copyright + start); i - start, copyright + start);
bol = 1; bol = 1;
comment_started = true;
} }
} }
printf(" */\n\n"); if (comment_started)
printf(" */\n\n");
} }
static void static void