summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-21 21:39:15 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-21 21:39:15 +0200
commit0ba4f18ea6981b4d2b4eded11b2da4b2a2192d5b (patch)
treeb10104c574b719cf78f10945526a21a9fd385d64 /main.c
parent003159e92bb4526845a8a1a1a4627824e939cd4b (diff)
Finish up the assert conversion
Diffstat (limited to 'main.c')
-rw-r--r--main.c42
1 files changed, 34 insertions, 8 deletions
diff --git a/main.c b/main.c
index ba9ea37..5d99711 100644
--- a/main.c
+++ b/main.c
@@ -57,6 +57,8 @@ msg(enum debug_lvl lvl, const char *fmt, va_list ap)
const char *color;
const char *sd_lvl;
+ assert_return(lvl != 0 && !empty_str(fmt) && ap);
+
while (first) {
int fd;
const char *e;
@@ -149,6 +151,8 @@ __debug(enum debug_lvl lvl, const char *fmt, ...)
{
va_list ap;
+ assert_return(lvl != 0 && !empty_str(fmt));
+
va_start(ap, fmt);
msg(lvl, fmt, ap);
va_end(ap);
@@ -159,9 +163,13 @@ __die(const char *fmt, ...)
{
va_list ap;
- va_start(ap, fmt);
- msg(DBG_ERROR, fmt, ap);
- va_end(ap);
+ if (!empty_str(fmt)) {
+ va_start(ap, fmt);
+ msg(DBG_ERROR, fmt, ap);
+ va_end(ap);
+ } else
+ error("fmt not set");
+
sd_notifyf(0, "STATUS=Error, shutting down");
exit(EXIT_FAILURE);
};
@@ -171,6 +179,8 @@ cfg_free(struct uring_task *task)
{
struct cfg *cfg = container_of(task, struct cfg, task);
+ assert_return(task);
+
debug(DBG_SIG, "called");
systemd_delete(cfg);
xfree(cfg->igmp_iface);
@@ -213,6 +223,8 @@ cfg_read(struct cfg *cfg)
size_t rd = 0;
size_t r;
+ assert_return(cfg);
+
if (cfg->cfg_path)
path = cfg->cfg_path;
else
@@ -353,7 +365,7 @@ usage(int argc, char **argv, bool invalid)
" -d, --debug=CATEGORY\tenable debugging for CATEGORY\n"
"\t\t\t(use \"list\" to see available categories,\n"
"\t\t\t or \"all\" to enable all categories)\n",
- argv[0]);
+ argv ? argv[0] : "mcproxy");
exit(invalid ? EXIT_FAILURE : EXIT_SUCCESS);
}
@@ -365,13 +377,15 @@ cfg_init(int argc, char **argv)
int c;
unsigned i;
+ assert_die(argc > 0 && argv, "invalid arguments");
+
cfg = zmalloc(sizeof(*cfg));
if (!cfg)
die("malloc: %m");
cfg->uid = geteuid();
cfg->gid = getegid();
- uring_task_init(&cfg->task, "cfg", NULL, cfg_free);
+ uring_task_init(cfg, &cfg->task, "cfg", NULL, cfg_free);
list_init(&cfg->servers);
while (true) {
@@ -475,6 +489,9 @@ cfg_init(int argc, char **argv)
static void
cfg_apply(struct cfg *cfg)
{
+ if (!cfg)
+ die("invalid arguments");
+
if (cfg->uid == 0 || cfg->gid == 0)
/* This catches both -u root and running as root without -u */
die("Execution as root is not supported (use -u <someuser>)");
@@ -538,6 +555,8 @@ signalfd_free(struct uring_task *task)
{
struct signalfd_ev *sev = container_of(task, struct signalfd_ev, task);
+ assert_return(task);
+
debug(DBG_SIG, "called");
sev->cfg->sev = NULL;
xfree(sev);
@@ -548,6 +567,8 @@ dump_tree(struct cfg *cfg)
{
struct server *server;
+ assert_return(cfg);
+
if (!debug_enabled(DBG_REF))
return;
@@ -576,6 +597,7 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res)
struct signalfd_ev *sev = container_of(task, struct signalfd_ev, task);
struct server *server, *stmp;
+ assert_return(cfg && task);
assert_task_alive(DBG_SIG, task);
if (res != sizeof(sev->buf))
@@ -621,6 +643,8 @@ hack_handler(int signum, siginfo_t *info, void *ucontext)
{
uint64_t val;
+ assert_return(signum > 0 && info);
+
switch (signum) {
case SIGUSR1:
debug(DBG_SIG, "Got a SIGUSR1");
@@ -660,6 +684,8 @@ signalfd_init(struct cfg *cfg)
//sigset_t mask;
struct signalfd_ev *sev;
+ assert_return(cfg);
+
sev = zmalloc(sizeof(*sev));
if (!sev)
die("malloc: %m");
@@ -667,11 +693,11 @@ signalfd_init(struct cfg *cfg)
/*
sigfillset(&mask);
if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0)
- perrordie("sigprocmask");
+ die("sigprocmask: %m");
sfd = signalfd(-1, &mask, SFD_CLOEXEC);
if (sfd < 0)
- perrordie("signalfd");
+ die("signalfd: %m");
*/
struct sigaction action;
@@ -693,7 +719,7 @@ signalfd_init(struct cfg *cfg)
die("eventfd: %m");
debug(DBG_SIG, "using fd %i", sfd);
- uring_task_init(&sev->task, "sev", uring_parent(cfg), signalfd_free);
+ uring_task_init(cfg, &sev->task, "sev", uring_parent(cfg), signalfd_free);
uring_task_set_fd(&sev->task, sfd);
cfg->sev = sev;
sev->cfg = cfg;