Module Name: src Committed By: rillig Date: Fri Jul 1 21:25:39 UTC 2022
Modified Files: src/usr.bin/xlint/lint1: err.c externs1.h lint1.h main1.c Log Message: lint: move error handling code from main1.c to err.c No functional change. To generate a diff of this commit: cvs rdiff -u -r1.177 -r1.178 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.162 -r1.163 src/usr.bin/xlint/lint1/externs1.h cvs rdiff -u -r1.154 -r1.155 src/usr.bin/xlint/lint1/lint1.h cvs rdiff -u -r1.63 -r1.64 src/usr.bin/xlint/lint1/main1.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.177 src/usr.bin/xlint/lint1/err.c:1.178 --- src/usr.bin/xlint/lint1/err.c:1.177 Fri Jul 1 20:53:13 2022 +++ src/usr.bin/xlint/lint1/err.c Fri Jul 1 21:25:39 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.177 2022/07/01 20:53:13 rillig Exp $ */ +/* $NetBSD: err.c,v 1.178 2022/07/01 21:25:39 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,11 +37,14 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: err.c,v 1.177 2022/07/01 20:53:13 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.178 2022/07/01 21:25:39 rillig Exp $"); #endif +#include <errno.h> +#include <limits.h> #include <stdarg.h> #include <stdlib.h> +#include <string.h> #include "lint1.h" @@ -264,7 +267,7 @@ static const char *const msgs[] = { "break outside loop or switch", /* 208 */ "continue outside loop", /* 209 */ "enum type mismatch between '%s' and '%s' in initialization", /* 210 */ - "function has return type '%s' but returns '%s'", /* 211 */ + "function has return type '%s' but returns '%s'", /* 211 */ "cannot return incomplete type", /* 212 */ "void function '%s' cannot return value", /* 213 */ "function '%s' expects to return value", /* 214 */ @@ -405,12 +408,46 @@ static const char *const msgs[] = { "non type argument to alignof is a GCC extension", /* 349 */ }; +#define ERR_SETSIZE 1024 +#define __NERRBITS (sizeof(unsigned int)) + +typedef struct err_set { + unsigned int errs_bits[(ERR_SETSIZE + __NERRBITS-1) / __NERRBITS]; +} err_set; + +#define ERR_SET(n, p) \ + ((p)->errs_bits[(n)/__NERRBITS] |= (1 << ((n) % __NERRBITS))) +#define ERR_CLR(n, p) \ + ((p)->errs_bits[(n)/__NERRBITS] &= ~(1 << ((n) % __NERRBITS))) +#define ERR_ISSET(n, p) \ + (((p)->errs_bits[(n)/__NERRBITS] & (1 << ((n) % __NERRBITS))) != 0) +#define ERR_ZERO(p) (void)memset((p), 0, sizeof(*(p))) + +static err_set msgset; + static struct include_level { const char *filename; int lineno; struct include_level *by; } *includes; +void +suppress_messages(char *ids) +{ + char *ptr, *end; + long id; + + for (ptr = strtok(ids, ","); ptr != NULL; ptr = strtok(NULL, ",")) { + errno = 0; + id = strtol(ptr, &end, 0); + if ((id == TARG_LONG_MIN || id == TARG_LONG_MAX) && + errno == ERANGE) + err(1, "invalid error message id '%s'", ptr); + if (*end != '\0' || ptr == end || id < 0 || id >= ERR_SETSIZE) + errx(1, "invalid error message id '%s'", ptr); + ERR_SET(id, &msgset); + } +} void update_location(const char *filename, int lineno, bool is_begin, bool is_end) Index: src/usr.bin/xlint/lint1/externs1.h diff -u src/usr.bin/xlint/lint1/externs1.h:1.162 src/usr.bin/xlint/lint1/externs1.h:1.163 --- src/usr.bin/xlint/lint1/externs1.h:1.162 Wed Jun 15 18:29:21 2022 +++ src/usr.bin/xlint/lint1/externs1.h Fri Jul 1 21:25:39 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: externs1.h,v 1.162 2022/06/15 18:29:21 rillig Exp $ */ +/* $NetBSD: externs1.h,v 1.163 2022/07/01 21:25:39 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -168,6 +168,7 @@ extern void internal_error(const char *, extern void assert_failed(const char *, int, const char *, const char *) __attribute__((__noreturn__)); extern void update_location(const char *, int, bool, bool); +extern void suppress_messages(char *); /* * decl.c Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.154 src/usr.bin/xlint/lint1/lint1.h:1.155 --- src/usr.bin/xlint/lint1/lint1.h:1.154 Thu May 26 13:40:49 2022 +++ src/usr.bin/xlint/lint1/lint1.h Fri Jul 1 21:25:39 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.154 2022/05/26 13:40:49 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.155 2022/07/01 21:25:39 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -442,21 +442,6 @@ typedef struct { #include "externs1.h" -#define ERR_SETSIZE 1024 -#define __NERRBITS (sizeof(unsigned int)) - -typedef struct err_set { - unsigned int errs_bits[(ERR_SETSIZE + __NERRBITS-1) / __NERRBITS]; -} err_set; - -#define ERR_SET(n, p) \ - ((p)->errs_bits[(n)/__NERRBITS] |= (1 << ((n) % __NERRBITS))) -#define ERR_CLR(n, p) \ - ((p)->errs_bits[(n)/__NERRBITS] &= ~(1 << ((n) % __NERRBITS))) -#define ERR_ISSET(n, p) \ - (((p)->errs_bits[(n)/__NERRBITS] & (1 << ((n) % __NERRBITS))) != 0) -#define ERR_ZERO(p) (void)memset((p), 0, sizeof(*(p))) - #define INTERNAL_ERROR(fmt, args...) \ internal_error(__FILE__, __LINE__, fmt, ##args) @@ -466,9 +451,6 @@ typedef struct err_set { assert_failed(__FILE__, __LINE__, __func__, #cond); \ } while (false) -extern err_set msgset; - - #ifdef DEBUG # include "err-msgs.h" Index: src/usr.bin/xlint/lint1/main1.c diff -u src/usr.bin/xlint/lint1/main1.c:1.63 src/usr.bin/xlint/lint1/main1.c:1.64 --- src/usr.bin/xlint/lint1/main1.c:1.63 Mon May 30 15:13:25 2022 +++ src/usr.bin/xlint/lint1/main1.c Fri Jul 1 21:25:39 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: main1.c,v 1.63 2022/05/30 15:13:25 rillig Exp $ */ +/* $NetBSD: main1.c,v 1.64 2022/07/01 21:25:39 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,12 +37,10 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: main1.c,v 1.63 2022/05/30 15:13:25 rillig Exp $"); +__RCSID("$NetBSD: main1.c,v 1.64 2022/07/01 21:25:39 rillig Exp $"); #endif #include <sys/types.h> -#include <errno.h> -#include <limits.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> @@ -120,8 +118,6 @@ bool allow_c99; bool allow_c11; bool allow_gcc; -err_set msgset; - sig_atomic_t fpe; static void usage(void); @@ -174,24 +170,6 @@ sigfpe(int s) fpe = 1; } -static void -suppress_messages(char *ids) -{ - char *ptr, *end; - long id; - - for (ptr = strtok(ids, ","); ptr != NULL; ptr = strtok(NULL, ",")) { - errno = 0; - id = strtol(ptr, &end, 0); - if ((id == TARG_LONG_MIN || id == TARG_LONG_MAX) && - errno == ERANGE) - err(1, "invalid error message id '%s'", ptr); - if (*end != '\0' || ptr == end || id < 0 || id >= ERR_SETSIZE) - errx(1, "invalid error message id '%s'", ptr); - ERR_SET(id, &msgset); - } -} - int main(int argc, char *argv[]) { @@ -199,7 +177,6 @@ main(int argc, char *argv[]) setprogname(argv[0]); - ERR_ZERO(&msgset); while ((c = getopt(argc, argv, "abceghmprstuvwyzA:FPR:STX:")) != -1) { switch (c) { case 'a': aflag++; break;