From 5dced3d1b3deca80e01415a2e35dc7972dcbfae7 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 11:25:10 +0200 Subject: Adding upstream version 1.47.0. Signed-off-by: Daniel Baumann --- lib/ss/Android.bp | 39 ++++++++ lib/ss/Makefile.in | 234 ++++++++++++++++++++++++++++++++++++++++++++ lib/ss/ct_c.awk | 75 ++++++++++++++ lib/ss/ct_c.sed | 160 ++++++++++++++++++++++++++++++ lib/ss/data.c | 20 ++++ lib/ss/error.c | 77 +++++++++++++++ lib/ss/execute_cmd.c | 229 +++++++++++++++++++++++++++++++++++++++++++ lib/ss/get_readline.c | 100 +++++++++++++++++++ lib/ss/help.c | 185 ++++++++++++++++++++++++++++++++++ lib/ss/invocation.c | 132 +++++++++++++++++++++++++ lib/ss/list_rqs.c | 92 +++++++++++++++++ lib/ss/listen.c | 200 +++++++++++++++++++++++++++++++++++++ lib/ss/mit-sipb-copyright.h | 19 ++++ lib/ss/mk_cmds.1 | 59 +++++++++++ lib/ss/mk_cmds.sh.in | 56 +++++++++++ lib/ss/pager.c | 152 ++++++++++++++++++++++++++++ lib/ss/parse.c | 158 ++++++++++++++++++++++++++++++ lib/ss/prompt.c | 31 ++++++ lib/ss/request_tbl.c | 68 +++++++++++++ lib/ss/requests.c | 66 +++++++++++++ lib/ss/ss.h | 96 ++++++++++++++++++ lib/ss/ss.pc.in | 12 +++ lib/ss/ss_err.et | 39 ++++++++ lib/ss/ss_internal.h | 107 ++++++++++++++++++++ lib/ss/std_rqs.ct | 46 +++++++++ lib/ss/test_cmd.ct | 6 ++ lib/ss/test_script | 8 ++ lib/ss/test_script_expected | 22 +++++ lib/ss/test_ss.c | 151 ++++++++++++++++++++++++++++ 29 files changed, 2639 insertions(+) create mode 100644 lib/ss/Android.bp create mode 100644 lib/ss/Makefile.in create mode 100644 lib/ss/ct_c.awk create mode 100644 lib/ss/ct_c.sed create mode 100644 lib/ss/data.c create mode 100644 lib/ss/error.c create mode 100644 lib/ss/execute_cmd.c create mode 100644 lib/ss/get_readline.c create mode 100644 lib/ss/help.c create mode 100644 lib/ss/invocation.c create mode 100644 lib/ss/list_rqs.c create mode 100644 lib/ss/listen.c create mode 100644 lib/ss/mit-sipb-copyright.h create mode 100644 lib/ss/mk_cmds.1 create mode 100644 lib/ss/mk_cmds.sh.in create mode 100644 lib/ss/pager.c create mode 100644 lib/ss/parse.c create mode 100644 lib/ss/prompt.c create mode 100644 lib/ss/request_tbl.c create mode 100644 lib/ss/requests.c create mode 100644 lib/ss/ss.h create mode 100644 lib/ss/ss.pc.in create mode 100644 lib/ss/ss_err.et create mode 100644 lib/ss/ss_internal.h create mode 100644 lib/ss/std_rqs.ct create mode 100644 lib/ss/test_cmd.ct create mode 100644 lib/ss/test_script create mode 100644 lib/ss/test_script_expected create mode 100644 lib/ss/test_ss.c (limited to 'lib/ss') diff --git a/lib/ss/Android.bp b/lib/ss/Android.bp new file mode 100644 index 0000000..ebc1e1a --- /dev/null +++ b/lib/ss/Android.bp @@ -0,0 +1,39 @@ +// Copyright 2017 The Android Open Source Project + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "external_e2fsprogs_license" + // to get the below license kinds: + // SPDX-license-identifier-0BSD + // SPDX-license-identifier-MIT + default_applicable_licenses: ["external_e2fsprogs_license"], +} + +cc_library { + name: "libext2_ss", + host_supported: true, + unique_host_soname: true, + defaults: ["e2fsprogs-defaults"], + srcs: [ + "ss_err.c", + "std_rqs.c", + "invocation.c", + "help.c", + "execute_cmd.c", + "listen.c", + "parse.c", + "error.c", + "prompt.c", + "request_tbl.c", + "list_rqs.c", + "pager.c", + "requests.c", + "data.c", + "get_readline.c", + ], + shared_libs: ["libext2_com_err"], + header_libs: ["libext2-headers"], + export_include_dirs: ["."], + export_header_lib_headers: ["libext2-headers"], +} diff --git a/lib/ss/Makefile.in b/lib/ss/Makefile.in new file mode 100644 index 0000000..bb50418 --- /dev/null +++ b/lib/ss/Makefile.in @@ -0,0 +1,234 @@ +# +# Makefile for lib/ss +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +top_builddir = ../.. +my_dir = lib/ss +INSTALL = @INSTALL@ +MKDIR_P = @MKDIR_P@ +DLOPEN_LIB = @DLOPEN_LIB@ + +@MCONFIG@ + +LIBRARY= libss +LIBDIR= ss + +ELF_VERSION = 2.0 +ELF_SO_VERSION = 2 +ELF_IMAGE = libss +ELF_MYDIR = ss +ELF_INSTALL_DIR = $(root_libdir) +ELF_OTHER_LIBS = -lcom_err $(DLOPEN_LIB) + +BSDLIB_VERSION = 1.0 +BSDLIB_IMAGE = libss +BSDLIB_MYDIR = ss +BSDLIB_INSTALL_DIR = $(root_libdir) + +TAGS=etags +MK_CMDS= _SS_DIR_OVERRIDE=$(srcdir) ./mk_cmds +COMPILE_ET= _ET_DIR_OVERRIDE=$(srcdir)/../et ../et/compile_et + +.c.o: + $(E) " CC $<" + $(Q) $(CC) $(ALL_CFLAGS_STLIB) -c $< + $(Q) $(CHECK_CMD) $(ALL_CFLAGS) $< + $(Q) $(CPPCHECK_CMD) $(CPPFLAGS) $< +@PROFILE_CMT@ $(Q) $(CC) $(ALL_CFLAGS_STLIB) -g -pg -o profiled/$*.o -c $< +@ELF_CMT@ $(Q) $(CC) $(ALL_CFLAGS_SHLIB) -DSHARED_ELF_LIB -fPIC -shared -o elfshared/$*.o -c $< +@BSDLIB_CMT@ $(Q) $(CC) $(ALL_CFLAGS_SHLIB) $(BSDLIB_PIC_FLAG) -o pic/$*.o -c $< + +# for the library + +# with ss_err.o first, ss_err.h should get rebuilt first too. should not +# be relying on this, though. +OBJS= ss_err.o \ + std_rqs.o \ + invocation.o help.o \ + execute_cmd.o listen.o parse.o error.o prompt.o \ + request_tbl.o list_rqs.o pager.o requests.o \ + data.o get_readline.o + +SRCS= $(srcdir)/invocation.c $(srcdir)/help.c \ + $(srcdir)/execute_cmd.c $(srcdir)/listen.c $(srcdir)/parse.c \ + $(srcdir)/error.c $(srcdir)/prompt.c $(srcdir)/request_tbl.c \ + $(srcdir)/list_rqs.c $(srcdir)/pager.c $(srcdir)/requests.c \ + $(srcdir)/data.c $(srcdir)/get_readline.c + +all:: mk_cmds + +@MAKEFILE_LIBRARY@ +@MAKEFILE_ELF@ +@MAKEFILE_BSDLIB@ +@MAKEFILE_PROFILE@ + +CODE= $(SRCS) $(MKCMDSFILES) + +MKCMDSOBJS= mk_cmds.o utils.o options.o ct.tab.o cmd_tbl.lex.o + +MKCMDSFILES= mk_cmds.c utils.c options.c ct.y cmd_tbl.lex.l + +MKCMDSCSRCS= mk_cmds.c utils.c options.c ct.tab.c cmd_tbl.lex.c + + +HFILES= ss.h ss_internal.h +SHARE_FILES= ct_c.awk ct_c.sed + +INSTALL_HFILES= ss.h + +# for 'tags' and dependencies + +CFILES= $(SRCS) $(MKCMDSCSRCS) test_ss.c + +# for building archives + +FILES= $(SRCS) $(MKCMDSFILES) $(HFILES) \ + ss_err.et std_rqs.ct Makefile \ + test_ss.c ss + +all:: libss.a ss.pc # libss_p.a lint + +std_rqs.c: std_rqs.ct mk_cmds + $(E) " MK_CMDS $@" + $(Q) DIR=$(srcdir) $(MK_CMDS) $(srcdir)/std_rqs.ct + +std_rqs.o: ss_err.h + +test_cmd.c: test_cmd.ct mk_cmds + $(E) " MK_CMDS $@" + $(Q) DIR=$(srcdir) $(MK_CMDS) $(srcdir)/test_cmd.ct + +ss_err.c ss_err.h: ss_err.et + $(E) " COMPILE_ET ss_err.et" + $(Q) $(COMPILE_ET) $(srcdir)/ss_err.et + +ct.tab.c ct.tab.h: ct.y + $(RM) -f ct.tab.* y.* + $(YACC) -d $(srcdir)/ct.y + $(MV) -f y.tab.c ct.tab.c + $(MV) -f y.tab.h ct.tab.h + +#libss.o: $(OBJS) +# $(LD) -r -s -o $@ $(OBJS) +# $(CHMOD) -x $@ + +mk_cmds: $(DEP_SUBSTITUTE) $(srcdir)/mk_cmds.sh.in + $(E) " SUBST $@" + $(Q) $(SUBSTITUTE) $(srcdir)/mk_cmds.sh.in mk_cmds + $(Q) $(CHMOD) +x mk_cmds + +ss.pc: $(srcdir)/ss.pc.in $(top_builddir)/config.status + $(E) " CONFIG.STATUS $@" + $(Q) cd $(top_builddir); CONFIG_FILES=lib/ss/ss.pc ./config.status + +installdirs:: + $(E) " MKDIR_P $(libdir) $(includedir)/ss $(datadir)/ss $(bindir) $(pkgconfigdir) $(man1dir)" + $(Q) $(MKDIR_P) $(DESTDIR)$(libdir) \ + $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss \ + $(DESTDIR)$(bindir) $(DESTDIR)$(pkgconfigdir) \ + $(DESTDIR)$(man1dir) + +install:: libss.a $(INSTALL_HFILES) installdirs ss_err.h mk_cmds ss.pc + $(E) " INSTALL_DATA $(DESTDIR)$(libdir)/libss.a" + $(Q) $(INSTALL_DATA) libss.a $(DESTDIR)$(libdir)/libss.a + -$(Q) $(RANLIB) $(DESTDIR)$(libdir)/libss.a + $(Q) $(CHMOD) $(LIBMODE) $(DESTDIR)$(libdir)/libss.a + $(Q) $(RM) -f $(DESTDIR)$(includedir)/ss/* + $(Q) for i in $(INSTALL_HFILES); do \ + echo " INSTALL_DATA $(DESTDIR)$(includedir)/ss/$$i"; \ + $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir)/ss/$$i; \ + done + $(E) " INSTALL_DATA $(includedir)/ss/ss_err.h" + $(Q) $(INSTALL_DATA) ss_err.h $(DESTDIR)$(includedir)/ss/ss_err.h + $(Q) for i in $(SHARE_FILES); do \ + echo " INSTALL_DATA $(DESTDIR)$(datadir)/ss/$$i"; \ + $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(datadir)/ss/$$i; \ + done + $(E) " INSTALL $(bindir)/mk_cmds" + $(Q) $(INSTALL) mk_cmds $(DESTDIR)$(bindir)/mk_cmds + $(E) " INSTALL_DATA $(man1dir)/mk_cmds.1" + $(Q) $(INSTALL_DATA) $(srcdir)/mk_cmds.1 $(DESTDIR)$(man1dir)/mk_cmds.1 + $(E) " INSTALL_DATA $(pkgconfigdir)/ss.pc" + $(Q) $(INSTALL_DATA) ss.pc $(DESTDIR)$(pkgconfigdir)/ss.pc + +uninstall:: + $(RM) -f $(DESTDIR)$(libdir)/libss.a $(DESTDIR)$(bindir)/mk_cmds \ + $(DESTDIR)$(pkgconfigdir)/ss.pc \ + $(DESTDIR)$(man1dir)/mk_cmds.1 + $(RM) -rf $(DESTDIR)$(includedir)/ss $(DESTDIR)$(datadir)/ss + +test_ss: test_ss.o test_cmd.o $(DEPLIBSS) $(DEPLIBCOM_ERR) + $(E) " LD $@" + $(Q) $(CC) -o $@ test_ss.o test_cmd.o $(ALL_CFLAGS) $(ALL_LDFLAGS) \ + $(LIBSS) $(LIBCOM_ERR) $(SYSLIBS) + +fullcheck check:: all test_ss + $(E) " RUN TEST test_ss" + -@($(TESTENV) ./test_ss -f $(srcdir)/test_script > test_out 2>&1; exit 0) + $(Q) if diff test_out $(srcdir)/test_script_expected > test.diff; then \ + true ; else echo "Regression test for ss library failed!"; exit 1 ; fi + +clean:: + $(RM) -f ../libss.a libss.a mk_cmds ss_err.h ss_err.c std_rqs.c \ + tst_cmds.c test_ss test_out test.diff *.o *~ \#* *.bak core \ + test_cmd.c ss.pc + +mostlyclean:: clean +distclean:: clean + $(RM) -f .depend Makefile ss.pc \ + $(srcdir)/TAGS $(srcdir)/Makefile.in.old + +# +# Hack to parallel makes recognize dependencies correctly. +# +$(top_builddir)/lib/ss/ss_err.h: ss_err.h + +$(OBJS): subdirs + +# +++ Dependency line eater +++ +# +# Makefile dependencies follow. This must be the last section in +# the Makefile.in file +# +invocation.o: $(srcdir)/invocation.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +help.o: $(srcdir)/help.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +execute_cmd.o: $(srcdir)/execute_cmd.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +listen.o: $(srcdir)/listen.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +parse.o: $(srcdir)/parse.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +error.o: $(srcdir)/error.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \ + $(srcdir)/ss_internal.h $(srcdir)/ss.h $(top_builddir)/lib/ss/ss_err.h +prompt.o: $(srcdir)/prompt.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +request_tbl.o: $(srcdir)/request_tbl.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +list_rqs.o: $(srcdir)/list_rqs.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +pager.o: $(srcdir)/pager.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +requests.o: $(srcdir)/requests.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +data.o: $(srcdir)/data.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +get_readline.o: $(srcdir)/get_readline.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/ss_internal.h $(srcdir)/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h diff --git a/lib/ss/ct_c.awk b/lib/ss/ct_c.awk new file mode 100644 index 0000000..a4424c8 --- /dev/null +++ b/lib/ss/ct_c.awk @@ -0,0 +1,75 @@ +/^command_table / { + cmdtbl = $2; + printf "/* %s.c - automatically generated from %s.ct */\n", \ + rootname, rootname > outfile + print "#include " > outfile + print "" >outfile +} + +/^BOR$/ { + cmdnum++ + options = 0 + cmdtab = "" + printf "static char const * const ssu%05d[] = {\n", cmdnum > outfile +} + +/^sub/ { + subr = substr($0, 6, length($0)-5) +} + +/^hlp/ { + help = substr($0, 6, length($0)-5) +} + +/^cmd/ { + cmd = substr($0, 6, length($0)-5) + printf "%s\"%s\",\n", cmdtab, cmd > outfile + cmdtab = " " +} + +/^opt/ { + opt = substr($0, 6, length($0)-5) + if (opt == "dont_list") { + options += 1 + } + if (opt == "dont_summarize") { + options += 2 + } +} + +/^EOR/ { + print " (char const *)0" > outfile + print "};" > outfile + printf "extern void %s __SS_PROTO;\n", subr > outfile + # Work around a bug in gawk 3.0.5 + awk_bug = cmdnum + subr_tab[awk_bug] = subr + options_tab[awk_bug] = options + help_tab[awk_bug] = help +} + +/^[0-9]/ { + linenum = $1; +} + +/^ERROR/ { + error = substr($0, 8, length($0)-7) + printf "Error in line %d: %s\n", linenum, error + print "#__ERROR_IN_FILE__" > outfile +} + +END { + printf "static ss_request_entry ssu%05d[] = {\n", cmdnum+1 > outfile + for (i=1; i <= cmdnum; i++) { + printf " { ssu%05d,\n", i > outfile + printf " %s,\n", subr_tab[i] > outfile + printf " \"%s\",\n", help_tab[i] > outfile + printf " %d },\n", options_tab[i] > outfile + } + print " { 0, 0, 0, 0 }" > outfile + print "};" > outfile + print "" > outfile + printf "ss_request_table %s = { 2, ssu%05d };\n", \ + cmdtbl, cmdnum+1 > outfile +} + diff --git a/lib/ss/ct_c.sed b/lib/ss/ct_c.sed new file mode 100644 index 0000000..9e5eebb --- /dev/null +++ b/lib/ss/ct_c.sed @@ -0,0 +1,160 @@ +# +# This script parses a command_table file into something which is a bit +# easier for an awk script to understand. +# +# Input syntax: a .ct file +# +# Output syntax: +# (for the command_table line) +# command_table +# +#(for each request definition) +# BOR +# sub: +# hlp: +# cmd: +# opt: