Convert %{echo:...}, %{warn:...} and %{error:...} to work via lookup table
Handle log level determination inside doOutput() to make the interface match with the others and as a bonus, make expandMacros() that little bit smaller again. Empty argument needs to be handled differently but shouldn't affect functionality.
This commit is contained in:
parent
60327e1865
commit
311c5fdb0b
|
@ -135,6 +135,8 @@ static void doFoo(MacroBuf mb, int chkexist, int negate,
|
||||||
const char * f, size_t fn, const char * g, size_t gn);
|
const char * f, size_t fn, const char * g, size_t gn);
|
||||||
static void doLua(MacroBuf mb, int chkexist, int negate,
|
static void doLua(MacroBuf mb, int chkexist, int negate,
|
||||||
const char * f, size_t fn, const char * g, size_t gn);
|
const char * f, size_t fn, const char * g, size_t gn);
|
||||||
|
static void doOutput(MacroBuf mb, int chkexist, int negate,
|
||||||
|
const char * f, size_t fn, const char * g, size_t gn);
|
||||||
|
|
||||||
/* =============================================================== */
|
/* =============================================================== */
|
||||||
|
|
||||||
|
@ -489,8 +491,8 @@ static struct builtins_s {
|
||||||
{ STR_AND_LEN("define"), NULL },
|
{ STR_AND_LEN("define"), NULL },
|
||||||
{ STR_AND_LEN("dirname"), doFoo },
|
{ STR_AND_LEN("dirname"), doFoo },
|
||||||
{ STR_AND_LEN("dump"), NULL },
|
{ STR_AND_LEN("dump"), NULL },
|
||||||
{ STR_AND_LEN("echo"), NULL },
|
{ STR_AND_LEN("echo"), doOutput },
|
||||||
{ STR_AND_LEN("error"), NULL },
|
{ STR_AND_LEN("error"), doOutput },
|
||||||
{ STR_AND_LEN("expand"), doFoo },
|
{ STR_AND_LEN("expand"), doFoo },
|
||||||
{ STR_AND_LEN("getconfdir"),doFoo },
|
{ STR_AND_LEN("getconfdir"),doFoo },
|
||||||
{ STR_AND_LEN("getenv"), doFoo },
|
{ STR_AND_LEN("getenv"), doFoo },
|
||||||
|
@ -507,7 +509,7 @@ static struct builtins_s {
|
||||||
{ STR_AND_LEN("undefine"), NULL },
|
{ STR_AND_LEN("undefine"), NULL },
|
||||||
{ STR_AND_LEN("url2path"), doFoo },
|
{ STR_AND_LEN("url2path"), doFoo },
|
||||||
{ STR_AND_LEN("verbose"), doFoo },
|
{ STR_AND_LEN("verbose"), doFoo },
|
||||||
{ STR_AND_LEN("warn"), NULL },
|
{ STR_AND_LEN("warn"), doOutput },
|
||||||
};
|
};
|
||||||
static const size_t numbuiltins = sizeof(builtinmacros)/sizeof(*builtinmacros);
|
static const size_t numbuiltins = sizeof(builtinmacros)/sizeof(*builtinmacros);
|
||||||
|
|
||||||
|
@ -919,19 +921,20 @@ exit:
|
||||||
return cont;
|
return cont;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void doOutput(MacroBuf mb, int chkexist, int negate, const char * f, size_t fn, const char * g, size_t gn)
|
||||||
* Perform macro message output
|
|
||||||
* @param mb macro expansion state
|
|
||||||
* @param waserror use rpmlog()?
|
|
||||||
* @param msg message to output
|
|
||||||
* @param msglen no. of bytes in message
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
doOutput(MacroBuf mb, int loglevel, const char * msg, size_t msglen)
|
|
||||||
{
|
{
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
int loglevel = RPMLOG_NOTICE; /* assume echo */
|
||||||
|
if (STREQ("error", f, fn)) {
|
||||||
|
loglevel = RPMLOG_ERR;
|
||||||
|
mb->error = 1;
|
||||||
|
} else if (STREQ("warn", f, fn)) {
|
||||||
|
loglevel = RPMLOG_WARNING;
|
||||||
|
}
|
||||||
|
if (gn == 0)
|
||||||
|
g = "";
|
||||||
|
|
||||||
(void) expandThis(mb, msg, msglen, &buf);
|
(void) expandThis(mb, g, gn, &buf);
|
||||||
rpmlog(loglevel, "%s\n", buf);
|
rpmlog(loglevel, "%s\n", buf);
|
||||||
_free(buf);
|
_free(buf);
|
||||||
}
|
}
|
||||||
|
@ -1331,24 +1334,6 @@ expandMacro(MacroBuf mb, const char *src, size_t slen)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (STREQ("echo", f, fn) ||
|
|
||||||
STREQ("warn", f, fn) ||
|
|
||||||
STREQ("error", f, fn)) {
|
|
||||||
int loglevel = RPMLOG_NOTICE; /* assume echo */
|
|
||||||
if (STREQ("error", f, fn)) {
|
|
||||||
loglevel = RPMLOG_ERR;
|
|
||||||
mb->error = 1;
|
|
||||||
} else if (STREQ("warn", f, fn)) {
|
|
||||||
loglevel = RPMLOG_WARNING;
|
|
||||||
}
|
|
||||||
if (g != NULL && g < ge)
|
|
||||||
doOutput(mb, loglevel, g, gn);
|
|
||||||
else
|
|
||||||
doOutput(mb, loglevel, "", 0);
|
|
||||||
s = se;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STREQ("trace", f, fn)) {
|
if (STREQ("trace", f, fn)) {
|
||||||
mb->expand_trace = mb->macro_trace = (negate ? 0 : mb->depth);
|
mb->expand_trace = mb->macro_trace = (negate ? 0 : mb->depth);
|
||||||
if (mb->depth == 1) {
|
if (mb->depth == 1) {
|
||||||
|
|
Loading…
Reference in New Issue