goto eexit;
if (r)
continue;
- r = callback(ctx, ifp, nlm);
- if (r != 0)
- goto eexit;
+ if (callback) {
+ r = callback(ctx, ifp, nlm);
+ if (r != 0)
+ goto eexit;
+ }
}
}
rta = NLMSG_TAIL(n);
rta->rta_type = type;
rta->rta_len = len;
- memcpy(RTA_DATA(rta), data, alen);
+ if (alen)
+ memcpy(RTA_DATA(rta), data, alen);
n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len);
return 0;
/* Send to our listeners */
bigenv = NULL;
+ status = 0;
TAILQ_FOREACH(fd, &ifp->ctx->control_fds, next) {
if (!fd->listener)
continue;
}
if (control_queue(fd, bigenv, elen, 1) == -1)
syslog(LOG_ERR, "%s: control_queue: %m", __func__);
+ else
+ status = 1;
}
+ if (!status)
+ free(bigenv);
out:
/* Cleanup */