From 4ac33123a76ec76911d599f212e1b47412730614 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 2 Mar 2021 00:52:48 -0500 Subject: [PATCH] Use common strtab generator for error strings. We have a (hopefully better) generic string table generator now. Let's replace this crazy sed nonsense with it. --- Makefile.am | 21 +++++++-------------- src/error.c | 10 ++++++---- src/errors.lst | 2 -- src/errtab.str | 2 ++ src/strtab.sed | 45 --------------------------------------------- 5 files changed, 15 insertions(+), 65 deletions(-) delete mode 100644 src/errors.lst create mode 100644 src/errtab.str delete mode 100644 src/strtab.sed diff --git a/Makefile.am b/Makefile.am index ffbc85f..6556f92 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,14 +23,13 @@ MAINTAINERCLEANFILES = src/scan.c src/scan.h src/scan.stamp \ DISTCLEANFILES = -CLEANFILES = src/validtypes.h src/errtab.h src/namespecs.h src/ordspecs.h \ +CLEANFILES = src/validtypes.h src/namespecs.h src/ordspecs.h \ test/typegen.h $(EXTRA_LTLIBRARIES) EXTRA_DIST = bootstrap $(DX_BASEDIR)/scripts/fix-gnulib.pl m4/gnulib-cache.m4 \ src/types.lst src/validtypes.sed src/specs.lst src/namespecs.sed \ - src/ordspecs.sed src/errors.lst src/strtab.sed test/typegen.sh \ - src/parse.y src/parse.stamp src/scan.l src/scan.stamp \ - COPYING.WTFPL2 README.md INSTALL + src/ordspecs.sed test/typegen.sh src/parse.y src/parse.stamp \ + src/scan.l src/scan.stamp COPYING.WTFPL2 README.md INSTALL dist_man_MANS = doc/man/cdecl99.1 doc/man/libcdecl.3 @@ -45,7 +44,8 @@ libcdecl_la_LDFLAGS = -export-symbols-regex '^cdecl_[[:lower:]]' \ -no-undefined libcdecl_la_SOURCES = src/scan.c src/parse.c src/parse-decl.c src/typemap.c \ src/output.c src/explain.c src/declare.c src/i18n.c \ - src/error.c src/normalize.c src/cdecl-internal.h + src/error.c src/normalize.c src/cdecl-internal.h \ + src/errtab.h libcdecl_la_LIBADD = libgnu.la $(LTLIBINTL) $(LTLIBTHREAD) $(libcdecl_la_OBJECTS): $(gnulib_headers) @@ -106,11 +106,6 @@ src/ordspecs.h: $(srcdir)/src/specs.lst $(srcdir)/src/ordspecs.sed < $(srcdir)/src/specs.lst > $@.tmp $(AM_V_at) mv -f $@.tmp $@ -src/errtab.h: $(srcdir)/src/errors.lst $(srcdir)/src/strtab.sed - $(AM_V_GEN)sed -f $(srcdir)/src/strtab.sed \ - < $(srcdir)/src/errors.lst > $@.tmp - $(AM_V_at)mv -f $@.tmp $@ - test/typegen.h: $(srcdir)/src/types.lst $(srcdir)/test/typegen.sh $(AM_V_GEN) $(SHELL) $(srcdir)/test/typegen.sh \ < $(srcdir)/src/types.lst > $@.tmp @@ -128,11 +123,9 @@ XGETTEXT_OPTS = -D $(builddir) -D $(srcdir) --from-code=utf-8 \ --msgid-bugs-address=$(PACKAGE_BUGREPORT) \ --keyword=_ --keyword=N_ --keyword=PN_:1c,2 -po/$(PACKAGE).pot: $(SOURCES) src/errors.lst +po/$(PACKAGE).pot: $(SOURCES) $(AM_V_at) $(MKDIR_P) $(@D) $(AM_V_GEN) $(XGETTEXT) $(XGETTEXT_OPTS) -o $@.tmp $(SOURCES) - $(AM_V_at) $(XGETTEXT) $(XGETTEXT_OPTS) --omit-header -Lc \ - -ajo $@.tmp src/errors.lst $(AM_V_at) mv -f $@.tmp $@ # These are required to prevent the builtin lex/yacc rules from @@ -201,7 +194,7 @@ $(OPTFILES:.opt=.h): $(DX_BASEDIR)/scripts/gen-options.awk MAINTAINERCLEANFILES += $(OPTFILES:.opt=.h) EXTRA_DIST += $(DX_BASEDIR)/scripts/gen-options.awk $(OPTFILES) -STRFILES = src/commands.str +STRFILES = src/commands.str src/errtab.str .str.h: $(AM_V_GEN) $(AWK) -f $(DX_BASEDIR)/scripts/gen-strtab.awk $< >$@.tmp $(AM_V_at) mv -f $@.tmp $@ diff --git a/src/error.c b/src/error.c index 9b89bac..3d0a38e 100644 --- a/src/error.c +++ b/src/error.c @@ -45,12 +45,14 @@ static struct err_state err_no_mem = { const char *cdecl__strerror(unsigned code) { -# include "errtab.h" +#include "errtab.h" - assert(code < sizeof offtab / sizeof offtab[0]); - assert(offtab[code] != 0); + switch (code) { + case CDECL_ENOMEM: return gettext(strtab+err_enomem); + case CDECL_ENOPARSE: return gettext(strtab+err_enoparse); + } - return gettext((char *)&strtab + offtab[code]); + assert(0); } static void free_err(void *err) diff --git a/src/errors.lst b/src/errors.lst deleted file mode 100644 index f88e92e..0000000 --- a/src/errors.lst +++ /dev/null @@ -1,2 +0,0 @@ -CDECL_ENOMEM "failed to allocate memory" -CDECL_ENOPARSE "syntax error" diff --git a/src/errtab.str b/src/errtab.str new file mode 100644 index 0000000..284f71a --- /dev/null +++ b/src/errtab.str @@ -0,0 +1,2 @@ +&err_enomem failed to allocate memory +&err_enoparse syntax error diff --git a/src/strtab.sed b/src/strtab.sed deleted file mode 100644 index a5ad957..0000000 --- a/src/strtab.sed +++ /dev/null @@ -1,45 +0,0 @@ -#n -1i\ -/*\ - * Copyright © 2011 Nick Bowler.\ - *\ - * License WTFPL2: Do What The Fuck You Want To Public License, version 2.\ - * This is free software: you are free to do what the fuck you want to.\ - * There is NO WARRANTY, to the extent permitted by law.\ - */ -1i\ -/*\ - * This file is automatically generated by strtab.sed.\ - */ -:clear -t clear -s/\([[:upper:]_][[:upper:]_]*\)[[:space:]]*\(".*"\)/\1@#@#@\2/ -t string -p -b -:string -H -${ - g - i\ -static const struct strtab {\ - char _[1]; - s/\n\([^\n]*\)@#@#@\([^\n]*\)/ char \1[sizeof \2];\ -/g - s/\n$// - p - g - i\ -} strtab = { - s/\n\([^\n]*\)@#@#@\([^\n]*\)/ .\1 = N_(\2),\ -/g - s/$/};/ - p - g - i\ -static const size_t offtab[] = { - s/\n\([^\n]*\)@#@#@\([^\n]*\)/ [\1] = offsetof(struct strtab, \1),\ -/g - s/$/};/ - p -} -- 2.43.0