Fix command line handling of warning flags.

Prevent an overflow of command line flags if the -Wall argument
is used multiple times, and fix processing of individual flags
that may be in the beginning of the warnings flag buffer.
This commit is contained in:
Gyorgy Jeney 2007-12-16 21:15:55 -08:00 committed by Stephen Williams
parent 1506a0bf8c
commit e67b6d2b4b
1 changed files with 9 additions and 8 deletions

View File

@ -342,31 +342,32 @@ static int t_default(char*cmd, unsigned ncmd)
static void process_warning_switch(const char*name) static void process_warning_switch(const char*name)
{ {
if (strcmp(name,"all") == 0) { if (strcmp(name,"all") == 0) {
strcat(warning_flags, "ipt"); process_warning_switch("implicit");
process_warning_switch("portbind");
process_warning_switch("timescale");
} else if (strcmp(name,"implicit") == 0) { } else if (strcmp(name,"implicit") == 0) {
if (! strchr(warning_flags+2, 'i')) if (! strchr(warning_flags, 'i'))
strcat(warning_flags, "i"); strcat(warning_flags, "i");
} else if (strcmp(name,"portbind") == 0) { } else if (strcmp(name,"portbind") == 0) {
if (! strchr(warning_flags+2, 'p')) if (! strchr(warning_flags, 'p'))
strcat(warning_flags, "p"); strcat(warning_flags, "p");
} else if (strcmp(name,"timescale") == 0) { } else if (strcmp(name,"timescale") == 0) {
if (! strchr(warning_flags+2, 't')) if (! strchr(warning_flags, 't'))
strcat(warning_flags, "t"); strcat(warning_flags, "t");
} else if (strcmp(name,"no-implicit") == 0) { } else if (strcmp(name,"no-implicit") == 0) {
char*cp = strchr(warning_flags+2, 'i'); char*cp = strchr(warning_flags, 'i');
if (cp) while (*cp) { if (cp) while (*cp) {
cp[0] = cp[1]; cp[0] = cp[1];
cp += 1; cp += 1;
} }
} else if (strcmp(name,"no-portbind") == 0) { } else if (strcmp(name,"no-portbind") == 0) {
char*cp = strchr(warning_flags+2, 'p'); char*cp = strchr(warning_flags, 'p');
if (cp) while (*cp) { if (cp) while (*cp) {
cp[0] = cp[1]; cp[0] = cp[1];
cp += 1; cp += 1;
} }
} else if (strcmp(name,"no-timescale") == 0) { } else if (strcmp(name,"no-timescale") == 0) {
char*cp = strchr(warning_flags+2, 't'); char*cp = strchr(warning_flags, 't');
if (cp) while (*cp) { if (cp) while (*cp) {
cp[0] = cp[1]; cp[0] = cp[1];
cp += 1; cp += 1;