diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/libeinfo/.gitignore | 1 | ||||
-rw-r--r-- | src/libeinfo/Makefile | 12 | ||||
-rw-r--r-- | src/libeinfo/einfo.h (renamed from src/rc/einfo.h) | 68 | ||||
-rw-r--r-- | src/libeinfo/einfo.map | 35 | ||||
-rw-r--r-- | src/libeinfo/libeinfo.c (renamed from src/rc/einfo.c) | 110 | ||||
-rw-r--r-- | src/rc/Makefile | 27 | ||||
-rw-r--r-- | src/test/einfo.data.list | 1 | ||||
-rw-r--r-- | src/test/einfo.funcs.list | 52 | ||||
-rwxr-xr-x | src/test/runtests.sh | 18 |
10 files changed, 250 insertions, 76 deletions
diff --git a/src/Makefile b/src/Makefile index f4cd512f..ffbf8d6e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ # Copyright (c) 2007-2008 Roy Marples <roy@marples.name> # Released under the 2-clause BSD license. -SUBDIR= test librc rc +SUBDIR= test libeinfo librc rc ifeq (${MKTOOLS},yes) SUBDIR+= tools diff --git a/src/libeinfo/.gitignore b/src/libeinfo/.gitignore new file mode 100644 index 00000000..373284db --- /dev/null +++ b/src/libeinfo/.gitignore @@ -0,0 +1 @@ +libeinfo.so.1 diff --git a/src/libeinfo/Makefile b/src/libeinfo/Makefile new file mode 100644 index 00000000..ec756b47 --- /dev/null +++ b/src/libeinfo/Makefile @@ -0,0 +1,12 @@ +LIB= einfo +SHLIB_MAJOR= 1 +SRCS= libeinfo.c +INCS= einfo.h +VERSION_MAP= einfo.map + +CPPFLAGS+= -I../includes + +MK= ../../mk +include ${MK}/lib.mk +include ${MK}/cc.mk +include ${MK}/termcap.mk diff --git a/src/rc/einfo.h b/src/libeinfo/einfo.h index 57645695..31a891f8 100644 --- a/src/rc/einfo.h +++ b/src/libeinfo/einfo.h @@ -37,6 +37,19 @@ #include <sys/types.h> #include <stdbool.h> +/* Although OpenRC requires C99, linking to us should not. */ +#ifdef restrict +# define EINFO_RESTRICT restrict +#else +# ifdef __restrict +# define EINFO_RESTRICT __restrict +# else +# define EINFO_RESTRICT +# endif +#endif + +__BEGIN_DECLS + /*! @brief Color types to use */ typedef enum { @@ -52,14 +65,14 @@ typedef enum const char *ecolor(ECOLOR); /*! @brief Writes to syslog. */ -void elog(int, const char *, ...) EINFO_PRINTF(2, 3); +void elog(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); /*! * @brief Display informational messages. * * The einfo family of functions display messages in a consistent manner - * Basically they prefix the message with " * ". - * If the terminal can handle color then we color the * based on + * across applications. Basically they prefix the message with + * " * ". If the terminal can handle color then we color the * based on * the command used. Otherwise we are identical to the printf function. * * - einfo - green @@ -70,22 +83,22 @@ void elog(int, const char *, ...) EINFO_PRINTF(2, 3); * The v suffix means only print if EINFO_VERBOSE is yes. */ /*@{*/ -int einfon(const char *, ...) EINFO_PRINTF(1, 2); -int ewarnn(const char *, ...) EINFO_PRINTF(1, 2); -int eerrorn(const char *, ...) EINFO_PRINTF(1, 2); -int einfo(const char *, ...) EINFO_PRINTF(1, 2); -int ewarn(const char *, ...) EINFO_PRINTF(1, 2); -void ewarnx(const char *, ...) EINFO_XPRINTF(1, 2); -int eerror(const char *, ...) EINFO_PRINTF(1, 2); -void eerrorx(const char *, ...) EINFO_XPRINTF(1, 2); - -int einfovn(const char *, ...) EINFO_PRINTF(1, 2); -int ewarnvn(const char * , ...) EINFO_PRINTF(1, 2); -int ebeginvn(const char *, ...) EINFO_PRINTF(1, 2); -int eendvn(int, const char *, ...) EINFO_PRINTF(2, 3); -int ewendvn(int, const char *, ...) EINFO_PRINTF(2, 3); -int einfov(const char *, ...) EINFO_PRINTF(1, 2); -int ewarnv(const char *, ...) EINFO_PRINTF(1, 2); +int einfon(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ewarnn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int eerrorn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int einfo(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ewarn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +void ewarnx(const char * __EINFO_RESTRICT, ...) EINFO_XPRINTF(1, 2); +int eerror(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +void eerrorx(const char * __EINFO_RESTRICT, ...) EINFO_XPRINTF(1, 2); + +int einfovn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ewarnvn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ebeginvn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int eendvn(int, const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); +int ewendvn(int, const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); +int einfov(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ewarnv(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); /*@}*/ /*! @ingroup ebegin @@ -93,8 +106,8 @@ int ewarnv(const char *, ...) EINFO_PRINTF(1, 2); * * Similar to einfo, but we add ... to the end of the message */ /*@{*/ -int ebeginv(const char *, ...) EINFO_PRINTF(1, 2); -int ebegin(const char *, ...) EINFO_PRINTF(1, 2); +int ebeginv(const char * EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); +int ebegin(const char * EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2); /*@}*/ /*! @ingroup eend @@ -106,12 +119,12 @@ int ebegin(const char *, ...) EINFO_PRINTF(1, 2); * * ebracket allows you to specifiy the position, color and message */ /*@{*/ -int eend(int, const char *, ...) EINFO_PRINTF(2, 3); -int ewend(int, const char *, ...) EINFO_PRINTF(2, 3); -void ebracket(int, ECOLOR, const char *); +int eend(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); +int ewend(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); +void ebracket(int, ECOLOR, const char * EINFO_RESTRICT); -int eendv(int, const char *, ...) EINFO_PRINTF(2, 3); -int ewendv(int, const char *, ...) EINFO_PRINTF(2, 3); +int eendv(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); +int ewendv(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3); /*@}*/ /*! @ingroup eindent @@ -125,6 +138,7 @@ void eindentv(void); void eoutdentv(void); /*! @brief Prefix each einfo line with something */ -void eprefix(const char *); +void eprefix(const char * EINFO_RESTRICT); +__END_DECLS #endif diff --git a/src/libeinfo/einfo.map b/src/libeinfo/einfo.map new file mode 100644 index 00000000..428a8954 --- /dev/null +++ b/src/libeinfo/einfo.map @@ -0,0 +1,35 @@ +EINFO_1.0 { +global: + ecolor; + elog; + einfon; + ewarnn; + eerrorn; + einfo; + ewarn; + ewarnx; + eerror; + eerrorx; + einfovn; + ewarnvn; + ebeginvn; + eendvn; + ewendvn; + einfov; + ewarnv; + ebeginv; + ebegin; + eend; + ewend; + ebracket; + eendv; + ewendv; + eindent; + eoutdent; + eindentv; + eoutdentv; + eprefix; + +local: + *; +}; diff --git a/src/rc/einfo.c b/src/libeinfo/libeinfo.c index 306e7885..9791051f 100644 --- a/src/rc/einfo.c +++ b/src/libeinfo/libeinfo.c @@ -52,6 +52,34 @@ const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples"; #include "einfo.h" #include "helpers.h" +#include "hidden-visibility.h" + +hidden_proto(ecolor) +hidden_proto(ebegin) +hidden_proto(ebeginv) +hidden_proto(ebracket) +hidden_proto(eend) +hidden_proto(eendv) +hidden_proto(eerror) +hidden_proto(eerrorn) +hidden_proto(eerrorx) +hidden_proto(eindent) +hidden_proto(eindentv) +hidden_proto(einfo) +hidden_proto(einfon) +hidden_proto(einfov) +hidden_proto(einfovn) +hidden_proto(elog) +hidden_proto(eoutdent) +hidden_proto(eoutdentv) +hidden_proto(eprefix) +hidden_proto(ewarn) +hidden_proto(ewarnn) +hidden_proto(ewarnv) +hidden_proto(ewarnvn) +hidden_proto(ewarnx) +hidden_proto(ewend) +hidden_proto(ewendv) /* Incase we cannot work out how many columns from ioctl, supply a default */ #define DEFAULT_COLS 80 @@ -324,7 +352,7 @@ tgoto(const char *cap, int col, int line) #endif static bool -colour_terminal(FILE *f) +colour_terminal(FILE * EINFO_RESTRICT f) { static int in_colour = -1; char *e, *ee, *end, *d, *p; @@ -471,7 +499,7 @@ colour_terminal(FILE *f) } static int -get_term_columns(FILE *stream) +get_term_columns(FILE * EINFO_RESTRICT stream) { struct winsize ws; char *env = getenv("COLUMNS"); @@ -491,13 +519,14 @@ get_term_columns(FILE *stream) } void -eprefix(const char *prefix) +eprefix(const char *EINFO_RESTRICT prefix) { _eprefix = prefix; } +hidden_def(eprefix) static void EINFO_PRINTF(2, 0) -elogv(int level, const char *fmt, va_list ap) +elogv(int level, const char *EINFO_RESTRICT fmt, va_list ap) { char *e = getenv("EINFO_LOG"); va_list apc; @@ -513,7 +542,7 @@ elogv(int level, const char *fmt, va_list ap) } void -elog(int level, const char *fmt, ...) +elog(int level, const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -521,9 +550,10 @@ elog(int level, const char *fmt, ...) elogv(level, fmt, ap); va_end(ap); } +hidden_def(elog) static int -_eindent(FILE *stream) +_eindent(FILE * EINFO_RESTRICT stream) { char *env = getenv("EINFO_INDENT"); int amount = 0; @@ -547,7 +577,7 @@ _eindent(FILE *stream) } static const char * -_ecolor(FILE *f, ECOLOR color) +_ecolor(FILE * EINFO_RESTRICT f, ECOLOR color) { unsigned int i; @@ -559,6 +589,7 @@ _ecolor(FILE *f, ECOLOR color) return ecolors_str[i]; return ""; } +hidden_def(ecolor) const char * ecolor(ECOLOR color) @@ -584,7 +615,7 @@ ecolor(ECOLOR color) } static int EINFO_PRINTF(3, 0) - _einfo(FILE *f, ECOLOR color, const char *fmt, va_list va) + _einfo(FILE *f, ECOLOR color, const char *EINFO_RESTRICT fmt, va_list va) { int retval = 0; char *last = getenv("EINFO_LASTCMD"); @@ -612,7 +643,7 @@ static int EINFO_PRINTF(3, 0) #define _eerrorvn(fmt, ap) _einfo(stderr, ECOLOR_BAD, fmt, ap) int -einfon(const char *fmt, ...) +einfon(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -625,9 +656,10 @@ einfon(const char *fmt, ...) LASTCMD("einfon"); return retval; } +hidden_def(einfon) int -ewarnn(const char *fmt, ...) +ewarnn(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -640,9 +672,10 @@ ewarnn(const char *fmt, ...) LASTCMD("ewarnn"); return retval; } +hidden_def(ewarnn) int -eerrorn(const char *fmt, ...) +eerrorn(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -655,9 +688,10 @@ eerrorn(const char *fmt, ...) LASTCMD("errorn"); return retval; } +hidden_def(eerrorn) int -einfo(const char *fmt, ...) +einfo(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -671,9 +705,10 @@ einfo(const char *fmt, ...) LASTCMD("einfo"); return retval; } +hidden_def(einfo) int -ewarn(const char *fmt, ...) +ewarn(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -688,9 +723,10 @@ ewarn(const char *fmt, ...) LASTCMD("ewarn"); return retval; } +hidden_def(ewarn) void -ewarnx(const char *fmt, ...) +ewarnx(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -704,9 +740,10 @@ ewarnx(const char *fmt, ...) } exit(EXIT_FAILURE); } +hidden_def(ewarnx) int -eerror(const char *fmt, ...) +eerror(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -721,9 +758,10 @@ eerror(const char *fmt, ...) LASTCMD("eerror"); return retval; } +hidden_def(eerror) void -eerrorx(const char *fmt, ...) +eerrorx(const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -736,9 +774,10 @@ eerrorx(const char *fmt, ...) } exit(EXIT_FAILURE); } +hidden_def(eerrorx) int -ebegin(const char *fmt, ...) +ebegin(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -754,9 +793,10 @@ ebegin(const char *fmt, ...) LASTCMD("ebegin"); return retval; } +hidden_def(ebegin) static void -_eend(FILE *fp, int col, ECOLOR color, const char *msg) +_eend(FILE * EINFO_RESTRICT fp, int col, ECOLOR color, const char *msg) { int i; int cols; @@ -792,7 +832,7 @@ _eend(FILE *fp, int col, ECOLOR color, const char *msg) static int EINFO_PRINTF(3, 0) _do_eend(const char *cmd, int retval, - const char *fmt, va_list ap) + const char *EINFO_RESTRICT fmt, va_list ap) { int col = 0; FILE *fp = stdout; @@ -815,7 +855,7 @@ _do_eend(const char *cmd, int retval, } int -eend(int retval, const char *fmt, ...) +eend(int retval, const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -827,9 +867,10 @@ eend(int retval, const char *fmt, ...) LASTCMD("eend"); return retval; } +hidden_def(eend) int -ewend(int retval, const char *fmt, ...) +ewend(int retval, const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -841,12 +882,14 @@ ewend(int retval, const char *fmt, ...) LASTCMD("ewend"); return retval; } +hidden_def(ewend) void ebracket(int col, ECOLOR color, const char *msg) { _eend(stdout, col, color, msg); } +hidden_def(ebracket) void eindent(void) @@ -867,6 +910,7 @@ eindent(void) snprintf(num, 10, "%08d", amount); setenv("EINFO_INDENT", num, 1); } +hidden_def(eindent) void eoutdent(void) { @@ -891,9 +935,10 @@ void eoutdent(void) } errno = serrno; } +hidden_def(eoutdent) int -einfovn(const char *fmt, ...) +einfovn(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -906,9 +951,10 @@ einfovn(const char *fmt, ...) LASTCMD("einfovn"); return retval; } +hidden_def(einfovn) int -ewarnvn(const char *fmt, ...) +ewarnvn(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -921,9 +967,10 @@ ewarnvn(const char *fmt, ...) LASTCMD("ewarnvn"); return retval; } +hidden_def(ewarnvn) int -einfov(const char *fmt, ...) +einfov(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -937,9 +984,10 @@ einfov(const char *fmt, ...) LASTCMD("einfov"); return retval; } +hidden_def(einfov) int -ewarnv(const char *fmt, ...) +ewarnv(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -953,9 +1001,10 @@ ewarnv(const char *fmt, ...) LASTCMD("ewarnv"); return retval; } +hidden_def(ewarnv) int -ebeginv(const char *fmt, ...) +ebeginv(const char *EINFO_RESTRICT fmt, ...) { int retval; va_list ap; @@ -972,9 +1021,10 @@ ebeginv(const char *fmt, ...) LASTCMD("ebeginv"); return retval; } +hidden_def(ebeginv) int -eendv(int retval, const char *fmt, ...) +eendv(int retval, const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -986,9 +1036,10 @@ eendv(int retval, const char *fmt, ...) LASTCMD("eendv"); return retval; } +hidden_def(eendv) int -ewendv(int retval, const char *fmt, ...) +ewendv(int retval, const char *EINFO_RESTRICT fmt, ...) { va_list ap; @@ -1000,6 +1051,7 @@ ewendv(int retval, const char *fmt, ...) LASTCMD("ewendv"); return retval; } +hidden_def(ewendv) void eindentv(void) @@ -1007,6 +1059,7 @@ eindentv(void) if (is_verbose()) eindent(); } +hidden_def(eindentv) void eoutdentv(void) @@ -1014,3 +1067,4 @@ eoutdentv(void) if (is_verbose()) eoutdent(); } +hidden_def(eoutdentv) diff --git a/src/rc/Makefile b/src/rc/Makefile index 6490826e..a2e638e8 100644 --- a/src/rc/Makefile +++ b/src/rc/Makefile @@ -1,21 +1,8 @@ PROG= rc -SRCS= \ - checkpath.c \ - einfo.c \ - fstabinfo.c \ - mountinfo.c \ - rc-applets.c \ - rc-depend.c \ - rc-logger.c \ - rc-misc.c \ - rc-plugin.c \ - rc-service.c \ - rc-status.c \ - rc-update.c \ - rc.c \ - runscript.c \ - start-stop-daemon.c \ - swclock.c +SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \ + rc-applets.c rc-depend.c rc-logger.c \ + rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \ + runscript.c rc.c swclock.c CLEANFILES= version.h @@ -43,9 +30,9 @@ RC_SBINLINKS= mark_service_starting mark_service_started \ ALL_LINKS= ${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS} CLEANFILES+= ${ALL_LINKS} -CPPFLAGS+= -I../includes -I../librc -LDFLAGS+= -L../librc -LDADD+= -lutil -lrc +CPPFLAGS+= -I../includes -I../librc -I../libeinfo +LDFLAGS+= -L../librc -L../libeinfo +LDADD+= -lutil -lrc -leinfo include ../../Makefile.inc MK= ../../mk diff --git a/src/test/einfo.data.list b/src/test/einfo.data.list new file mode 100644 index 00000000..c638b2f1 --- /dev/null +++ b/src/test/einfo.data.list @@ -0,0 +1 @@ +EINFO_1.0 diff --git a/src/test/einfo.funcs.list b/src/test/einfo.funcs.list new file mode 100644 index 00000000..5dbbd96f --- /dev/null +++ b/src/test/einfo.funcs.list @@ -0,0 +1,52 @@ +ebegin +ebegin@@EINFO_1.0 +ebeginv +ebeginv@@EINFO_1.0 +ebracket +ebracket@@EINFO_1.0 +ecolor +ecolor@@EINFO_1.0 +eend +eend@@EINFO_1.0 +eendv +eendv@@EINFO_1.0 +eerror +eerror@@EINFO_1.0 +eerrorn +eerrorn@@EINFO_1.0 +eerrorx +eerrorx@@EINFO_1.0 +eindent +eindent@@EINFO_1.0 +eindentv +eindentv@@EINFO_1.0 +einfo +einfo@@EINFO_1.0 +einfon +einfon@@EINFO_1.0 +einfov +einfov@@EINFO_1.0 +einfovn +einfovn@@EINFO_1.0 +elog +elog@@EINFO_1.0 +eoutdent +eoutdent@@EINFO_1.0 +eoutdentv +eoutdentv@@EINFO_1.0 +eprefix +eprefix@@EINFO_1.0 +ewarn +ewarn@@EINFO_1.0 +ewarnn +ewarnn@@EINFO_1.0 +ewarnv +ewarnv@@EINFO_1.0 +ewarnvn +ewarnvn@@EINFO_1.0 +ewarnx +ewarnx@@EINFO_1.0 +ewend +ewend@@EINFO_1.0 +ewendv +ewendv@@EINFO_1.0 diff --git a/src/test/runtests.sh b/src/test/runtests.sh index b5b053fa..5a87c847 100755 --- a/src/test/runtests.sh +++ b/src/test/runtests.sh @@ -3,6 +3,8 @@ top_srcdir=${top_srcdir:-../..} . ${top_srcdir}/test/setup_env.sh +libeinfo_srcdir="${srcdir}/../libeinfo" +libeinfo_builddir="${builddir}/../libeinfo" librc_srcdir="${srcdir}/../librc" librc_builddir="${builddir}/../librc" rc_srcdir="${srcdir}/../rc" @@ -18,6 +20,22 @@ checkit() { ret=0 +ebegin "Checking exported symbols in libeinfo.so (data)" +checkit einfo.data $( +readelf -Ws ${libeinfo_builddir}/libeinfo.so \ + | awk '$4 == "OBJECT" && $5 == "GLOBAL" && $7 != "UND" {print $NF}' \ + | LC_ALL=C sort -u +) + +ebegin "Checking exported symbols in libeinfo.so (functions)" +checkit einfo.funcs $( +readelf -Ws ${libeinfo_builddir}/libeinfo.so \ + | awk '$4 == "FUNC" && $5 == "GLOBAL" && $7 != "UND" {print $NF}' \ + | LC_ALL=C sort -u \ + | egrep -v \ + -e '^_(init|fini)$' +) + ebegin "Checking exported symbols in librc.so (data)" checkit rc.data $( readelf -Ws ${librc_builddir}/librc.so \ |