mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-01-29 15:43:56 +00:00
Improve new config code to use "log.h"
With all the __whence/__WHENCE__ goodness, ready for integration into servald.
This commit is contained in:
parent
f654d435b1
commit
3686a4ade4
75
conf_om.c
75
conf_om.c
@ -29,16 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#include "str.h"
|
||||
#include "strbuf.h"
|
||||
#include "strbuf_helpers.h"
|
||||
|
||||
#define _DEBUGF(F,...) fprintf(stderr, "DEBUG: " F "\n", ##__VA_ARGS__)
|
||||
#define _WARNF(F,...) fprintf(stderr, "WARN: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF(F,...) fprintf(stderr, "ERROR: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF_perror(F,...) fprintf(stderr, "ERROR: " F ": %s [errno=%d]\n", ##__VA_ARGS__, strerror(errno), errno)
|
||||
#define DEBUGF(F,...) _DEBUGF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WARNF(F,...) _WARNF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF(F,...) _WHYF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF_perror(F,...) _WHYF_perror("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#include "log.h"
|
||||
#include "config.h"
|
||||
|
||||
void *emalloc(size_t len)
|
||||
@ -241,7 +232,7 @@ void cf_dump_node(const struct cf_om_node *node, int indent)
|
||||
}
|
||||
}
|
||||
|
||||
void cf_warn_nodev(const char *file, unsigned line, const struct cf_om_node *node, const char *key, const char *fmt, va_list ap)
|
||||
void _cf_warn_nodev(struct __sourceloc __whence, const struct cf_om_node *node, const char *key, const char *fmt, va_list ap)
|
||||
{
|
||||
strbuf b = strbuf_alloca(1024);
|
||||
if (node) {
|
||||
@ -256,61 +247,61 @@ void cf_warn_nodev(const char *file, unsigned line, const struct cf_om_node *nod
|
||||
strbuf_puts(b, "\" ");
|
||||
}
|
||||
strbuf_vsprintf(b, fmt, ap);
|
||||
_WARNF("%s:%u %s", file, line, strbuf_str(b));
|
||||
WARN(strbuf_str(b));
|
||||
}
|
||||
|
||||
void cf_warn_childrenv(const char *file, unsigned line, const struct cf_om_node *parent, const char *fmt, va_list ap)
|
||||
void _cf_warn_childrenv(struct __sourceloc __whence, const struct cf_om_node *parent, const char *fmt, va_list ap)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < parent->nodc; ++i) {
|
||||
cf_warn_nodev(file, line, parent->nodv[i], NULL, fmt, ap);
|
||||
cf_warn_childrenv(file, line, parent->nodv[i], fmt, ap);
|
||||
_cf_warn_nodev(__whence, parent->nodv[i], NULL, fmt, ap);
|
||||
_cf_warn_childrenv(__whence, parent->nodv[i], fmt, ap);
|
||||
}
|
||||
}
|
||||
|
||||
void cf_warn_node(const char *file, unsigned line, const struct cf_om_node *node, const char *key, const char *fmt, ...)
|
||||
void _cf_warn_node(struct __sourceloc __whence, const struct cf_om_node *node, const char *key, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
cf_warn_nodev(file, line, node, key, fmt, ap);
|
||||
_cf_warn_nodev(__whence, node, key, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void cf_warn_children(const char *file, unsigned line, const struct cf_om_node *node, const char *fmt, ...)
|
||||
void _cf_warn_children(struct __sourceloc __whence, const struct cf_om_node *node, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
cf_warn_childrenv(file, line, node, fmt, ap);
|
||||
_cf_warn_childrenv(__whence, node, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void cf_warn_duplicate_node(const struct cf_om_node *parent, const char *key)
|
||||
void _cf_warn_duplicate_node(struct __sourceloc __whence, const struct cf_om_node *parent, const char *key)
|
||||
{
|
||||
cf_warn_node(__FILE__, __LINE__, parent, key, "is duplicate");
|
||||
_cf_warn_node(__whence, parent, key, "is duplicate");
|
||||
}
|
||||
|
||||
void cf_warn_missing_node(const struct cf_om_node *parent, const char *key)
|
||||
void _cf_warn_missing_node(struct __sourceloc __whence, const struct cf_om_node *parent, const char *key)
|
||||
{
|
||||
cf_warn_node(__FILE__, __LINE__, parent, key, "is missing");
|
||||
_cf_warn_node(__whence, parent, key, "is missing");
|
||||
}
|
||||
|
||||
void cf_warn_spurious_children(const struct cf_om_node *parent)
|
||||
void _cf_warn_spurious_children(struct __sourceloc __whence, const struct cf_om_node *parent)
|
||||
{
|
||||
cf_warn_children(__FILE__, __LINE__, parent, "spurious");
|
||||
_cf_warn_children(__whence, parent, "spurious");
|
||||
}
|
||||
|
||||
void cf_warn_unsupported_node(const struct cf_om_node *node)
|
||||
void _cf_warn_unsupported_node(struct __sourceloc __whence, const struct cf_om_node *node)
|
||||
{
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "not supported");
|
||||
_cf_warn_node(__whence, node, NULL, "not supported");
|
||||
}
|
||||
|
||||
void cf_warn_unsupported_children(const struct cf_om_node *parent)
|
||||
void _cf_warn_unsupported_children(struct __sourceloc __whence, const struct cf_om_node *parent)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < parent->nodc; ++i) {
|
||||
if (parent->nodv[i]->text)
|
||||
cf_warn_unsupported_node(parent->nodv[i]);
|
||||
cf_warn_unsupported_children(parent->nodv[i]);
|
||||
_cf_warn_unsupported_node(__whence, parent->nodv[i]);
|
||||
_cf_warn_unsupported_children(__whence, parent->nodv[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -389,39 +380,39 @@ strbuf strbuf_cf_flag_reason(strbuf sb, int flags)
|
||||
return sb;
|
||||
}
|
||||
|
||||
void cf_warn_node_value(const struct cf_om_node *node, int reason)
|
||||
void _cf_warn_node_value(struct __sourceloc __whence, const struct cf_om_node *node, int reason)
|
||||
{
|
||||
strbuf b = strbuf_alloca(180);
|
||||
strbuf_cf_flag_reason(b, reason);
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "value %s %s", alloca_str_toprint(node->text), strbuf_str(b));
|
||||
_cf_warn_node(__whence, node, NULL, "value %s %s", alloca_str_toprint(node->text), strbuf_str(b));
|
||||
}
|
||||
|
||||
void cf_warn_no_array(const struct cf_om_node *node, int reason)
|
||||
void _cf_warn_no_array(struct __sourceloc __whence, const struct cf_om_node *node, int reason)
|
||||
{
|
||||
strbuf b = strbuf_alloca(180);
|
||||
strbuf_cf_flag_reason(b, reason);
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "array discarded -- %s", strbuf_str(b));
|
||||
_cf_warn_node(__whence, node, NULL, "array discarded -- %s", strbuf_str(b));
|
||||
}
|
||||
|
||||
void cf_warn_array_key(const struct cf_om_node *node, int reason)
|
||||
void _cf_warn_array_key(struct __sourceloc __whence, const struct cf_om_node *node, int reason)
|
||||
{
|
||||
strbuf b = strbuf_alloca(180);
|
||||
strbuf_cf_flag_reason(b, reason);
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "array label %s -- %s", alloca_str_toprint(node->key), strbuf_str(b));
|
||||
_cf_warn_node(__whence, node, NULL, "array label %s -- %s", alloca_str_toprint(node->key), strbuf_str(b));
|
||||
}
|
||||
|
||||
void cf_warn_array_value(const struct cf_om_node *node, int reason)
|
||||
void _cf_warn_array_value(struct __sourceloc __whence, const struct cf_om_node *node, int reason)
|
||||
{
|
||||
strbuf b = strbuf_alloca(180);
|
||||
strbuf_cf_flag_reason(b, reason);
|
||||
if (node->text)
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "array value %s -- %s", alloca_str_toprint(node->text), strbuf_str(b));
|
||||
_cf_warn_node(__whence, node, NULL, "array value %s -- %s", alloca_str_toprint(node->text), strbuf_str(b));
|
||||
else
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "array element -- %s", strbuf_str(b));
|
||||
_cf_warn_node(__whence, node, NULL, "array element -- %s", strbuf_str(b));
|
||||
}
|
||||
|
||||
void cf_warn_list_overflow(const struct cf_om_node *node)
|
||||
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node)
|
||||
{
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "list overflow");
|
||||
cf_warn_children(__FILE__, __LINE__, node, "list overflow");
|
||||
_cf_warn_node(__whence, node, NULL, "list overflow");
|
||||
_cf_warn_children(__whence, node, "list overflow");
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include "log.h"
|
||||
#include "config.h"
|
||||
|
||||
// Generate config set-default function definitions, cf_dfl_config_NAME().
|
||||
|
@ -25,19 +25,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#include <assert.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "str.h"
|
||||
#include "strbuf.h"
|
||||
#include "strbuf_helpers.h"
|
||||
|
||||
#define _DEBUGF(F,...) fprintf(stderr, "DEBUG: " F "\n", ##__VA_ARGS__)
|
||||
#define _WARNF(F,...) fprintf(stderr, "WARN: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF(F,...) fprintf(stderr, "ERROR: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF_perror(F,...) fprintf(stderr, "ERROR: " F ": %s [errno=%d]\n", ##__VA_ARGS__, strerror(errno), errno)
|
||||
#define DEBUGF(F,...) _DEBUGF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WARNF(F,...) _WARNF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF(F,...) _WHYF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF_perror(F,...) _WHYF_perror("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#include "config.h"
|
||||
|
||||
int cf_opt_boolean(int *booleanp, const char *text)
|
||||
@ -241,7 +232,7 @@ int vld_argv(const struct cf_om_node *parent, struct config_argv *array, int res
|
||||
for (i = 1; i < array->ac; ++i) {
|
||||
unsigned short key = array->av[i].key;
|
||||
if (last_key > key) {
|
||||
cf_warn_node(__FILE__, __LINE__, parent, NULL, "array is not sorted");
|
||||
cf_warn_node(parent, NULL, "array is not sorted");
|
||||
return CFERROR;
|
||||
}
|
||||
last_key = key;
|
||||
@ -503,7 +494,7 @@ int cf_opt_interface_list(struct config_interface_list *listp, const struct cf_o
|
||||
++n;
|
||||
break;
|
||||
default:
|
||||
cf_warn_node(__FILE__, __LINE__, node, NULL, "invalid interface rule %s", alloca_str_toprint(buf)); \
|
||||
cf_warn_node(node, NULL, "invalid interface rule %s", alloca_str_toprint(buf)); \
|
||||
result |= CFSUB(ret);
|
||||
break;
|
||||
}
|
||||
|
46
config.h
46
config.h
@ -187,9 +187,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#define NELS(a) (sizeof (a) / sizeof *(a))
|
||||
|
||||
typedef unsigned long debugflags_t;
|
||||
debugflags_t debugFlagMask(const char *flagname);
|
||||
|
||||
#define RHIZOME_BUNDLE_KEY_BYTES 32
|
||||
|
||||
#define PORT_DNA 4110
|
||||
@ -248,20 +245,35 @@ strbuf strbuf_cf_flag_reason(strbuf sb, int flags);
|
||||
|
||||
/* Diagnostic functions for use in config schema parsing functions, cf_opt_xxx(). */
|
||||
|
||||
void cf_warn_nodev(const char *file, unsigned line, const struct cf_om_node *node, const char *key, const char *fmt, va_list ap);
|
||||
void cf_warn_childrenv(const char *file, unsigned line, const struct cf_om_node *parent, const char *fmt, va_list ap);
|
||||
void cf_warn_node(const char *file, unsigned line, const struct cf_om_node *node, const char *key, const char *fmt, ...);
|
||||
void cf_warn_children(const char *file, unsigned line, const struct cf_om_node *node, const char *fmt, ...);
|
||||
void cf_warn_duplicate_node(const struct cf_om_node *parent, const char *key);
|
||||
void cf_warn_missing_node(const struct cf_om_node *parent, const char *key);
|
||||
void cf_warn_node_value(const struct cf_om_node *node, int reason);
|
||||
void cf_warn_no_array(const struct cf_om_node *node, int reason);
|
||||
void cf_warn_unsupported_node(const struct cf_om_node *node);
|
||||
void cf_warn_unsupported_children(const struct cf_om_node *parent);
|
||||
void cf_warn_list_overflow(const struct cf_om_node *node);
|
||||
void cf_warn_spurious_children(const struct cf_om_node *parent);
|
||||
void cf_warn_array_key(const struct cf_om_node *node, int reason);
|
||||
void cf_warn_array_value(const struct cf_om_node *node, int reason);
|
||||
void _cf_warn_nodev(struct __sourceloc __whence, const struct cf_om_node *node, const char *key, const char *fmt, va_list ap);
|
||||
void _cf_warn_childrenv(struct __sourceloc __whence, const struct cf_om_node *parent, const char *fmt, va_list ap);
|
||||
void _cf_warn_node(struct __sourceloc __whence, const struct cf_om_node *node, const char *key, const char *fmt, ...);
|
||||
void _cf_warn_children(struct __sourceloc __whence, const struct cf_om_node *node, const char *fmt, ...);
|
||||
void _cf_warn_duplicate_node(struct __sourceloc __whence, const struct cf_om_node *parent, const char *key);
|
||||
void _cf_warn_missing_node(struct __sourceloc __whence, const struct cf_om_node *parent, const char *key);
|
||||
void _cf_warn_node_value(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||
void _cf_warn_no_array(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||
void _cf_warn_unsupported_node(struct __sourceloc __whence, const struct cf_om_node *node);
|
||||
void _cf_warn_unsupported_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
||||
void _cf_warn_list_overflow(struct __sourceloc __whence, const struct cf_om_node *node);
|
||||
void _cf_warn_spurious_children(struct __sourceloc __whence, const struct cf_om_node *parent);
|
||||
void _cf_warn_array_key(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||
void _cf_warn_array_value(struct __sourceloc __whence, const struct cf_om_node *node, int reason);
|
||||
|
||||
#define cf_warn_nodev(node, key, fmt, ap) _cf_warn_nodev(__WHENCE__, node, key, fmt, ap)
|
||||
#define cf_warn_childrenv(parent, fmt, ap) _cf_warn_childrenv(__WHENCE__, parent, fmt, ap)
|
||||
#define cf_warn_node(node, key, fmt, ...) _cf_warn_node(__WHENCE__, node, key, fmt, ##__VA_ARGS__)
|
||||
#define cf_warn_children(node, fmt, ...) _cf_warn_children(__WHENCE__, node, fmt, ##__VA_ARGS__)
|
||||
#define cf_warn_duplicate_node(parent, key) _cf_warn_duplicate_node(__WHENCE__, parent, key)
|
||||
#define cf_warn_missing_node(parent, key) _cf_warn_missing_node(__WHENCE__, parent, key)
|
||||
#define cf_warn_node_value(node, reason) _cf_warn_node_value(__WHENCE__, node, reason)
|
||||
#define cf_warn_no_array(node, reason) _cf_warn_no_array(__WHENCE__, node, reason)
|
||||
#define cf_warn_unsupported_node(node) _cf_warn_unsupported_node(__WHENCE__, node)
|
||||
#define cf_warn_unsupported_children(parent) _cf_warn_unsupported_children(__WHENCE__, parent)
|
||||
#define cf_warn_list_overflow(node) _cf_warn_list_overflow(__WHENCE__, node)
|
||||
#define cf_warn_spurious_children(parent) _cf_warn_spurious_children(__WHENCE__, parent)
|
||||
#define cf_warn_array_key(node, reason) _cf_warn_array_key(__WHENCE__, node, reason)
|
||||
#define cf_warn_array_value(node, reason) _cf_warn_array_value(__WHENCE__, node, reason)
|
||||
|
||||
// Generate config struct definitions, struct config_NAME.
|
||||
#define STRUCT(__name, __validator...) \
|
||||
|
@ -1,20 +1,12 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "str.h"
|
||||
|
||||
#define _DEBUGF(F,...) fprintf(stderr, "DEBUG: " F "\n", ##__VA_ARGS__)
|
||||
#define _WARNF(F,...) fprintf(stderr, "WARN: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF(F,...) fprintf(stderr, "ERROR: " F "\n", ##__VA_ARGS__)
|
||||
#define _WHYF_perror(F,...) fprintf(stderr, "ERROR: " F ": %s [errno=%d]\n", ##__VA_ARGS__, strerror(errno), errno)
|
||||
#define DEBUGF(F,...) _DEBUGF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WARNF(F,...) _WARNF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF(F,...) _WHYF("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WHYF_perror(F,...) _WHYF_perror("%s:%u " F, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#include "log.h"
|
||||
#include "config.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
@ -92,6 +84,50 @@ int main(int argc, char **argv)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
const struct __sourceloc __whence = __NOWHERE__;
|
||||
|
||||
static const char *_trimbuildpath(const char *path)
|
||||
{
|
||||
/* Remove common path prefix */
|
||||
int lastsep = 0;
|
||||
int i;
|
||||
for (i = 0; __FILE__[i] && path[i]; ++i) {
|
||||
if (i && path[i - 1] == '/')
|
||||
lastsep = i;
|
||||
if (__FILE__[i] != path[i])
|
||||
break;
|
||||
}
|
||||
return &path[lastsep];
|
||||
}
|
||||
|
||||
void logMessage(int level, struct __sourceloc whence, const char *fmt, ...)
|
||||
{
|
||||
const char *levelstr = "UNKWN:";
|
||||
switch (level) {
|
||||
case LOG_LEVEL_FATAL: levelstr = "FATAL:"; break;
|
||||
case LOG_LEVEL_ERROR: levelstr = "ERROR:"; break;
|
||||
case LOG_LEVEL_INFO: levelstr = "INFO:"; break;
|
||||
case LOG_LEVEL_WARN: levelstr = "WARN:"; break;
|
||||
case LOG_LEVEL_DEBUG: levelstr = "DEBUG:"; break;
|
||||
}
|
||||
fprintf(stderr, "%s ", levelstr);
|
||||
if (whence.file) {
|
||||
fprintf(stderr, "%s", _trimbuildpath(whence.file));
|
||||
if (whence.line)
|
||||
fprintf(stderr, ":%u", whence.line);
|
||||
if (whence.function)
|
||||
fprintf(stderr, ":%s()", whence.function);
|
||||
fputc(' ', stderr);
|
||||
} else if (whence.function) {
|
||||
fprintf(stderr, "%s() ", whence.function);
|
||||
}
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
|
||||
debugflags_t debugFlagMask(const char *flagname)
|
||||
{
|
||||
if (!strcasecmp(flagname,"all")) return ~0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user