Revert "Make einfo routines private"

This reverts commit de88aff0a8.
I was advised that splashutils links to libeinfo, so we do have a
consumer for this library.
This commit is contained in:
William Hubbs 2013-10-16 12:55:37 -05:00
parent d2988dc7dd
commit 48981be8a8
14 changed files with 471 additions and 78 deletions

View File

@ -1,4 +1,4 @@
MAN3= \ MAN3= einfo.3 \
rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \ rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \
rc_runlevel.3 rc_service.3 rc_stringlist.3 rc_runlevel.3 rc_service.3 rc_stringlist.3
MAN8= rc-service.8 rc-status.8 rc-update.8 rc.8 runscript.8 \ MAN8= rc-service.8 rc-status.8 rc-update.8 rc.8 runscript.8 \

210
man/einfo.3 Normal file
View File

@ -0,0 +1,210 @@
.\" Copyright (c) 2007-2008 Roy Marples
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd Mar 16, 2008
.Dt EINFO 3 SMM
.Os OpenRC
.Sh NAME
.Nm einfo , ewarn , eerror , ebegin ,
.Nm einfon , ewarnn , eerrorn , ebeginn ,
.Nm einfov , ewarnv , ebeginv ,
.Nm einfovn , ewarnvn , ebeginvn ,
.Nm ewarnx , eerrorx ,
.Nm eend , ewend ,
.Nm eendv , ewendv ,
.Nm ebracket ,
.Nm eindent , eoutdent ,
.Nm eindentv , eoutdentv ,
.Nm eprefix
.Nd colorful informational output
.Sh LIBRARY
Enhanced Information output library (libeinfo, -leinfo)
.Sh SYNOPSIS
.In einfo.h
.Ft int Fn einfo "const char * restrict format" ...
.Ft int Fn ewarn "const char * restrict format" ...
.Ft int Fn eerror "const char * restrict format" ...
.Ft int Fn ebegin "const char * restrict format" ...
.Ft int Fn einfon "const char * restrict format" ...
.Ft int Fn ewarnn "const char * restrict format" ...
.Ft int Fn eerrorn "const char * restrict format" ...
.Ft int Fn ebeginn "const char * restrict format" ...
.Ft int Fn einfov "const char * restrict format" ...
.Ft int Fn ewarnv "const char * restrict format" ...
.Ft int Fn ebeginv "const char * restrict format" ...
.Ft int Fn einfovn "const char * restrict format" ...
.Ft int Fn ewarnvn "const char * restrict format" ...
.Ft int Fn ebeginvn "const char * restrict format" ...
.Ft int Fn ewarnx "const char * restrict format" ...
.Ft int Fn eerrorx "const char * restrict format" ...
.Ft int Fn eend "int retval" "const char * restrict format" ...
.Ft int Fn ewend "int retval" "const char * restrict format" ...
.Ft int Fn eendv "int retval" "const char * restrict format" ...
.Ft int Fn ewendv "int retval" "const char * restrict format" ...
.Ft void Fn ebracket "int col" "ECOLOR color" "const char * restrict msg"
.Ft void Fn eindent void
.Ft void Fn eoutdent void
.Ft void Fn eindentv void
.Ft void Fn eoutdentv void
.Ft void Fn eprefix "const char * prefix"
.Sh DESCRIPTION
The
.Fn einfo
family of functions provide a simple informational output that is colorised.
Basically
.Fn einfo ,
.Fn ewarn
and
.Fn eerror
behave exactly like
.Fn printf
but prefix the output with a colored *. The function called denotes the color
used with
.Fn einfo
being green,
.Fn ewarn
being yellow and
.Fn eerror
being red.
einfo goes to stdout and the others go to stderr.
The number of real characters printed is returned.
.Fn ebegin
is identical to
.Fn einfo
except that 3 dots are appended to the output.
.Pp
.Fn einfov ,
.Fn ewarnv
and
.Fn ebeginv
work the same way to
.Fn einfo ,
.Fn ewarn ,
and
.Fn ebegin
respectively, but only work when
.Va EINFO_VERBOSE
is true. You can also make the
.Fn einfo ,
.Fn ewarn ,
and
.Fn ebegin
functions silent by setting
.Va EINFO_QUIET
to true.
.Pp
These functions are designed to output a whole line, so they also
append a newline to the string. To stop this behaviour, you can use the
functions
.Fn einfon ,
.Fn ewarnn ,
.Fn eerrorn ,
.Fn einfovn ,
.Fn ewarnvn ,
and
.Fn ebeginvn .
.Pp
.Fn eend ,
.Fn ewend ,
.Fn eendv
and
.Fn ewendv
are the counterparts to the above functions. If
.Fa retval
is zero then ok in green is printed in a bracket at the end of the prior
line. Otherwise we print the formatted string using
.Fn error
(or
.Fn ewarn
if
.Fn ewend
is called) !! in red (or yellow if
.Fn ewend
is called) is printed in a bracket at the end of the line.
The value of
.Fa retval
is returned.
.Pp
.Fn ebracket
does the same as
.Fn eend
but prints
.Fa msg
instead of ok or !! in the color
.Fa color
at the column
.Fa col .
.Pp
.Fn eindent
indents subsequent calls to the above functions by 3 characters.
.Fn eoutdent
removes an
.Fn eindent .
.Fn eindentv
and
.Fn eoutdentv
only work when
.Va EINFO_VERBOSE
is true.
.Pp
.Fn eprefix
prefixes the string
.Fa prefix
to the above functions.
.Sh IMPLEMENTATION NOTES
einfo can optionally be linked against the
.Lb libtermcap
so that we can correctly query the connected console for our color and
cursor escape codes.
If not, then we have a hard coded list of terminals we know about that support
the commonly used codes for color and cursor position.
.Sh ENVIRONMENT
.Va EINFO_QUIET
when set to true makes the
.Fn einfo
and
.Fn einfon
family of functions quiet, so nothing is printed.
.Va EERROR_QUIET
when set to true makes the
.Fn eerror
and
.Fn eerrorn
family of functions quiet, so nothing is printed.
.Pp
.Va EINFO_VERBOSE
when set to true makes the
.Fn einfov
and
.Fn einfovn
family of functions work, so they do print.
.Sh FILES
.Pa /etc/init.d/functions.sh
is provided by OpenRC, which allows shell scripts to use the above functions.
For historical reasons our verbose functions are prefixed with v instead of
suffixed. So einfov becomes veinfo, einfovn becomes veinfon.
Rinse and repeat for the other verbose functions.
.Sh SEE ALSO
.Xr printf 3 ,
.Sh AUTHORS
.An Roy Marples <roy@marples.name>

View File

@ -1,6 +1,6 @@
DIR= ${LIBDIR}/pkgconfig DIR= ${LIBDIR}/pkgconfig
SRCS= openrc.pc.in SRCS= einfo.pc.in openrc.pc.in
INC= openrc.pc INC= einfo.pc openrc.pc
.DEFAULT: .DEFAULT:
${SED} -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h ${SED} -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h

9
pkgconfig/einfo.pc.in Normal file
View File

@ -0,0 +1,9 @@
prefix=@PREFIX@
exec_prefix=${prefix}
libdir=${prefix}/@LIB@
includedir=/usr/include
Name: einfo
Description: Pretty console informational display
Version: @VERSION@
Libs: -L${libdir} -leinfo

View File

@ -1,7 +1,7 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name> # Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license. # Released under the 2-clause BSD license.
SUBDIR= test librc rc SUBDIR= test libeinfo librc rc
ifeq (${MKTOOLS},yes) ifeq (${MKTOOLS},yes)
SUBDIR+= tools SUBDIR+= tools

1
src/libeinfo/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
libeinfo.so.1

12
src/libeinfo/Makefile Normal file
View File

@ -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

View File

@ -37,6 +37,19 @@
#include <sys/types.h> #include <sys/types.h>
#include <stdbool.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 */ /*! @brief Color types to use */
typedef enum typedef enum
{ {
@ -52,14 +65,14 @@ typedef enum
const char *ecolor(ECOLOR); const char *ecolor(ECOLOR);
/*! @brief Writes to syslog. */ /*! @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. * @brief Display informational messages.
* *
* The einfo family of functions display messages in a consistent manner * The einfo family of functions display messages in a consistent manner
* Basically they prefix the message with " * ". * across applications. Basically they prefix the message with
* If the terminal can handle color then we color the * based on * " * ". If the terminal can handle color then we color the * based on
* the command used. Otherwise we are identical to the printf function. * the command used. Otherwise we are identical to the printf function.
* *
* - einfo - green * - 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. * The v suffix means only print if EINFO_VERBOSE is yes.
*/ */
/*@{*/ /*@{*/
int einfon(const char *, ...) EINFO_PRINTF(1, 2); int einfon(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ewarnn(const char *, ...) EINFO_PRINTF(1, 2); int ewarnn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int eerrorn(const char *, ...) EINFO_PRINTF(1, 2); int eerrorn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int einfo(const char *, ...) EINFO_PRINTF(1, 2); int einfo(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ewarn(const char *, ...) EINFO_PRINTF(1, 2); int ewarn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
void ewarnx(const char *, ...) EINFO_XPRINTF(1, 2); void ewarnx(const char * __EINFO_RESTRICT, ...) EINFO_XPRINTF(1, 2);
int eerror(const char *, ...) EINFO_PRINTF(1, 2); int eerror(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
void eerrorx(const char *, ...) EINFO_XPRINTF(1, 2); void eerrorx(const char * __EINFO_RESTRICT, ...) EINFO_XPRINTF(1, 2);
int einfovn(const char *, ...) EINFO_PRINTF(1, 2); int einfovn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ewarnvn(const char * , ...) EINFO_PRINTF(1, 2); int ewarnvn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ebeginvn(const char *, ...) EINFO_PRINTF(1, 2); int ebeginvn(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int eendvn(int, const char *, ...) EINFO_PRINTF(2, 3); int eendvn(int, const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
int ewendvn(int, const char *, ...) EINFO_PRINTF(2, 3); int ewendvn(int, const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
int einfov(const char *, ...) EINFO_PRINTF(1, 2); int einfov(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ewarnv(const char *, ...) EINFO_PRINTF(1, 2); int ewarnv(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
/*@}*/ /*@}*/
/*! @ingroup ebegin /*! @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 */ * Similar to einfo, but we add ... to the end of the message */
/*@{*/ /*@{*/
int ebeginv(const char *, ...) EINFO_PRINTF(1, 2); int ebeginv(const char * EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
int ebegin(const char *, ...) EINFO_PRINTF(1, 2); int ebegin(const char * EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
/*@}*/ /*@}*/
/*! @ingroup eend /*! @ingroup eend
@ -106,12 +119,12 @@ int ebegin(const char *, ...) EINFO_PRINTF(1, 2);
* *
* ebracket allows you to specifiy the position, color and message */ * ebracket allows you to specifiy the position, color and message */
/*@{*/ /*@{*/
int eend(int, const char *, ...) EINFO_PRINTF(2, 3); int eend(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
int ewend(int, const char *, ...) EINFO_PRINTF(2, 3); int ewend(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
void ebracket(int, ECOLOR, const char *); void ebracket(int, ECOLOR, const char * EINFO_RESTRICT);
int eendv(int, const char *, ...) EINFO_PRINTF(2, 3); int eendv(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
int ewendv(int, const char *, ...) EINFO_PRINTF(2, 3); int ewendv(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
/*@}*/ /*@}*/
/*! @ingroup eindent /*! @ingroup eindent
@ -125,6 +138,7 @@ void eindentv(void);
void eoutdentv(void); void eoutdentv(void);
/*! @brief Prefix each einfo line with something */ /*! @brief Prefix each einfo line with something */
void eprefix(const char *); void eprefix(const char * EINFO_RESTRICT);
__END_DECLS
#endif #endif

35
src/libeinfo/einfo.map Normal file
View File

@ -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:
*;
};

View File

@ -52,6 +52,34 @@ const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
#include "einfo.h" #include "einfo.h"
#include "helpers.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 */ /* Incase we cannot work out how many columns from ioctl, supply a default */
#define DEFAULT_COLS 80 #define DEFAULT_COLS 80
@ -324,7 +352,7 @@ tgoto(const char *cap, int col, int line)
#endif #endif
static bool static bool
colour_terminal(FILE *f) colour_terminal(FILE * EINFO_RESTRICT f)
{ {
static int in_colour = -1; static int in_colour = -1;
char *e, *ee, *end, *d, *p; char *e, *ee, *end, *d, *p;
@ -471,7 +499,7 @@ colour_terminal(FILE *f)
} }
static int static int
get_term_columns(FILE *stream) get_term_columns(FILE * EINFO_RESTRICT stream)
{ {
struct winsize ws; struct winsize ws;
char *env = getenv("COLUMNS"); char *env = getenv("COLUMNS");
@ -491,13 +519,14 @@ get_term_columns(FILE *stream)
} }
void void
eprefix(const char *prefix) eprefix(const char *EINFO_RESTRICT prefix)
{ {
_eprefix = prefix; _eprefix = prefix;
} }
hidden_def(eprefix)
static void EINFO_PRINTF(2, 0) 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"); char *e = getenv("EINFO_LOG");
va_list apc; va_list apc;
@ -513,7 +542,7 @@ elogv(int level, const char *fmt, va_list ap)
} }
void void
elog(int level, const char *fmt, ...) elog(int level, const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -521,9 +550,10 @@ elog(int level, const char *fmt, ...)
elogv(level, fmt, ap); elogv(level, fmt, ap);
va_end(ap); va_end(ap);
} }
hidden_def(elog)
static int static int
_eindent(FILE *stream) _eindent(FILE * EINFO_RESTRICT stream)
{ {
char *env = getenv("EINFO_INDENT"); char *env = getenv("EINFO_INDENT");
int amount = 0; int amount = 0;
@ -547,7 +577,7 @@ _eindent(FILE *stream)
} }
static const char * static const char *
_ecolor(FILE *f, ECOLOR color) _ecolor(FILE * EINFO_RESTRICT f, ECOLOR color)
{ {
unsigned int i; unsigned int i;
@ -559,6 +589,7 @@ _ecolor(FILE *f, ECOLOR color)
return ecolors_str[i]; return ecolors_str[i];
return ""; return "";
} }
hidden_def(ecolor)
const char * const char *
ecolor(ECOLOR color) ecolor(ECOLOR color)
@ -584,7 +615,7 @@ ecolor(ECOLOR color)
} }
static int EINFO_PRINTF(3, 0) 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; int retval = 0;
char *last = getenv("EINFO_LASTCMD"); 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) #define _eerrorvn(fmt, ap) _einfo(stderr, ECOLOR_BAD, fmt, ap)
int int
einfon(const char *fmt, ...) einfon(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -625,9 +656,10 @@ einfon(const char *fmt, ...)
LASTCMD("einfon"); LASTCMD("einfon");
return retval; return retval;
} }
hidden_def(einfon)
int int
ewarnn(const char *fmt, ...) ewarnn(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -640,9 +672,10 @@ ewarnn(const char *fmt, ...)
LASTCMD("ewarnn"); LASTCMD("ewarnn");
return retval; return retval;
} }
hidden_def(ewarnn)
int int
eerrorn(const char *fmt, ...) eerrorn(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -655,9 +688,10 @@ eerrorn(const char *fmt, ...)
LASTCMD("errorn"); LASTCMD("errorn");
return retval; return retval;
} }
hidden_def(eerrorn)
int int
einfo(const char *fmt, ...) einfo(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -671,9 +705,10 @@ einfo(const char *fmt, ...)
LASTCMD("einfo"); LASTCMD("einfo");
return retval; return retval;
} }
hidden_def(einfo)
int int
ewarn(const char *fmt, ...) ewarn(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -688,9 +723,10 @@ ewarn(const char *fmt, ...)
LASTCMD("ewarn"); LASTCMD("ewarn");
return retval; return retval;
} }
hidden_def(ewarn)
void void
ewarnx(const char *fmt, ...) ewarnx(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -704,9 +740,10 @@ ewarnx(const char *fmt, ...)
} }
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
hidden_def(ewarnx)
int int
eerror(const char *fmt, ...) eerror(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -721,9 +758,10 @@ eerror(const char *fmt, ...)
LASTCMD("eerror"); LASTCMD("eerror");
return retval; return retval;
} }
hidden_def(eerror)
void void
eerrorx(const char *fmt, ...) eerrorx(const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -736,9 +774,10 @@ eerrorx(const char *fmt, ...)
} }
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
hidden_def(eerrorx)
int int
ebegin(const char *fmt, ...) ebegin(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -754,9 +793,10 @@ ebegin(const char *fmt, ...)
LASTCMD("ebegin"); LASTCMD("ebegin");
return retval; return retval;
} }
hidden_def(ebegin)
static void 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 i;
int cols; int cols;
@ -792,7 +832,7 @@ _eend(FILE *fp, int col, ECOLOR color, const char *msg)
static int EINFO_PRINTF(3, 0) static int EINFO_PRINTF(3, 0)
_do_eend(const char *cmd, int retval, _do_eend(const char *cmd, int retval,
const char *fmt, va_list ap) const char *EINFO_RESTRICT fmt, va_list ap)
{ {
int col = 0; int col = 0;
FILE *fp = stdout; FILE *fp = stdout;
@ -815,7 +855,7 @@ _do_eend(const char *cmd, int retval,
} }
int int
eend(int retval, const char *fmt, ...) eend(int retval, const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -827,9 +867,10 @@ eend(int retval, const char *fmt, ...)
LASTCMD("eend"); LASTCMD("eend");
return retval; return retval;
} }
hidden_def(eend)
int int
ewend(int retval, const char *fmt, ...) ewend(int retval, const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -841,12 +882,14 @@ ewend(int retval, const char *fmt, ...)
LASTCMD("ewend"); LASTCMD("ewend");
return retval; return retval;
} }
hidden_def(ewend)
void void
ebracket(int col, ECOLOR color, const char *msg) ebracket(int col, ECOLOR color, const char *msg)
{ {
_eend(stdout, col, color, msg); _eend(stdout, col, color, msg);
} }
hidden_def(ebracket)
void void
eindent(void) eindent(void)
@ -867,6 +910,7 @@ eindent(void)
snprintf(num, 10, "%08d", amount); snprintf(num, 10, "%08d", amount);
setenv("EINFO_INDENT", num, 1); setenv("EINFO_INDENT", num, 1);
} }
hidden_def(eindent)
void eoutdent(void) void eoutdent(void)
{ {
@ -891,9 +935,10 @@ void eoutdent(void)
} }
errno = serrno; errno = serrno;
} }
hidden_def(eoutdent)
int int
einfovn(const char *fmt, ...) einfovn(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -906,9 +951,10 @@ einfovn(const char *fmt, ...)
LASTCMD("einfovn"); LASTCMD("einfovn");
return retval; return retval;
} }
hidden_def(einfovn)
int int
ewarnvn(const char *fmt, ...) ewarnvn(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -921,9 +967,10 @@ ewarnvn(const char *fmt, ...)
LASTCMD("ewarnvn"); LASTCMD("ewarnvn");
return retval; return retval;
} }
hidden_def(ewarnvn)
int int
einfov(const char *fmt, ...) einfov(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -937,9 +984,10 @@ einfov(const char *fmt, ...)
LASTCMD("einfov"); LASTCMD("einfov");
return retval; return retval;
} }
hidden_def(einfov)
int int
ewarnv(const char *fmt, ...) ewarnv(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -953,9 +1001,10 @@ ewarnv(const char *fmt, ...)
LASTCMD("ewarnv"); LASTCMD("ewarnv");
return retval; return retval;
} }
hidden_def(ewarnv)
int int
ebeginv(const char *fmt, ...) ebeginv(const char *EINFO_RESTRICT fmt, ...)
{ {
int retval; int retval;
va_list ap; va_list ap;
@ -972,9 +1021,10 @@ ebeginv(const char *fmt, ...)
LASTCMD("ebeginv"); LASTCMD("ebeginv");
return retval; return retval;
} }
hidden_def(ebeginv)
int int
eendv(int retval, const char *fmt, ...) eendv(int retval, const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -986,9 +1036,10 @@ eendv(int retval, const char *fmt, ...)
LASTCMD("eendv"); LASTCMD("eendv");
return retval; return retval;
} }
hidden_def(eendv)
int int
ewendv(int retval, const char *fmt, ...) ewendv(int retval, const char *EINFO_RESTRICT fmt, ...)
{ {
va_list ap; va_list ap;
@ -1000,6 +1051,7 @@ ewendv(int retval, const char *fmt, ...)
LASTCMD("ewendv"); LASTCMD("ewendv");
return retval; return retval;
} }
hidden_def(ewendv)
void void
eindentv(void) eindentv(void)
@ -1007,6 +1059,7 @@ eindentv(void)
if (is_verbose()) if (is_verbose())
eindent(); eindent();
} }
hidden_def(eindentv)
void void
eoutdentv(void) eoutdentv(void)
@ -1014,3 +1067,4 @@ eoutdentv(void)
if (is_verbose()) if (is_verbose())
eoutdent(); eoutdent();
} }
hidden_def(eoutdentv)

View File

@ -1,21 +1,8 @@
PROG= rc PROG= rc
SRCS= \ SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
checkpath.c \ rc-applets.c rc-depend.c rc-logger.c \
einfo.c \ rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
fstabinfo.c \ runscript.c rc.c swclock.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
CLEANFILES= version.h CLEANFILES= version.h
@ -43,9 +30,9 @@ RC_SBINLINKS= mark_service_starting mark_service_started \
ALL_LINKS= ${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS} ALL_LINKS= ${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS}
CLEANFILES+= ${ALL_LINKS} CLEANFILES+= ${ALL_LINKS}
CPPFLAGS+= -I../includes -I../librc CPPFLAGS+= -I../includes -I../librc -I../libeinfo
LDFLAGS+= -L../librc LDFLAGS+= -L../librc -L../libeinfo
LDADD+= -lutil -lrc LDADD+= -lutil -lrc -leinfo
include ../../Makefile.inc include ../../Makefile.inc
MK= ../../mk MK= ../../mk

1
src/test/einfo.data.list Normal file
View File

@ -0,0 +1 @@
EINFO_1.0

52
src/test/einfo.funcs.list Normal file
View File

@ -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

View File

@ -3,6 +3,8 @@
top_srcdir=${top_srcdir:-../..} top_srcdir=${top_srcdir:-../..}
. ${top_srcdir}/test/setup_env.sh . ${top_srcdir}/test/setup_env.sh
libeinfo_srcdir="${srcdir}/../libeinfo"
libeinfo_builddir="${builddir}/../libeinfo"
librc_srcdir="${srcdir}/../librc" librc_srcdir="${srcdir}/../librc"
librc_builddir="${builddir}/../librc" librc_builddir="${builddir}/../librc"
rc_srcdir="${srcdir}/../rc" rc_srcdir="${srcdir}/../rc"
@ -18,6 +20,22 @@ checkit() {
ret=0 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)" ebegin "Checking exported symbols in librc.so (data)"
checkit rc.data $( checkit rc.data $(
readelf -Ws ${librc_builddir}/librc.so \ readelf -Ws ${librc_builddir}/librc.so \