int Wflag(const char *str) { size_t i; int set, err; if (strcmp("all", str) == 0) return Wset(W_ALL); if (strcmp("extra", str) == 0) return Wset(W_EXTRA); if (strcmp("W", str) == 0) return Wset(0); set = 1; err = 0; if (strcmp("error", str) != 0) { if (strncmp("no-", str, 3) == 0) { str += 3; set = 0; } if (strncmp("error=", str, 6) == 0) { str += 6; err = 1; } } for (i = 0; i < ARRAYLEN(Warns); i++) { if (strcmp(Warns[i].name, str) == 0) { if (set) Warns[i].flag |= W_SET; else Warns[i].flag &= ~W_SET; if (err) Warns[i].flag |= W_ERR; else Warns[i].flag &= ~W_ERR; return 1; } } return 0; }
/* * gcc-specific pragmas. */ int pragmas_gcc(char *t) { char u; extern char *pragstore; if (strcmp((t = pragtok(NULL)), "diagnostic") == 0) { int warn, err; if (strcmp((t = pragtok(NULL)), "ignored") == 0) warn = 0, err = 0; else if (strcmp(t, "warning") == 0) warn = 1, err = 0; else if (strcmp(t, "error") == 0) warn = 1, err = 1; else return 1; if (eat('\"') || eat('-')) return 1; for (t = pragstore; *t && *t != '\"'; t++) ; u = *t; *t = 0; Wset(pragstore + 1, warn, err); *t = u; } else if (strcmp(t, "poison") == 0) { /* currently ignore */; } else if (strcmp(t, "visibility") == 0) { /* currently ignore */; } else if (strcmp(t, "system_header") == 0) { /* currently ignore */; } else werror("gcc pragma unsupported"); return 0; }