You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

91 lines
2.3 KiB

#include "configdir.h"
#include "lightningd.h"
#include "log.h"
#include <ccan/err/err.h>
#include <ccan/opt/opt.h>
#include <ccan/tal/str/str.h>
#include <ccan/tal/tal.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <version.h>
static struct lightningd_state *lightningd_state(void)
{
struct lightningd_state *state = tal(NULL, struct lightningd_state);
state->log_record = new_log_record(state, 20 * 1024 * 1024, LOG_INFORM);
state->base_log = new_log(state, state->log_record,
"lightningd(%u):", (int)getpid());
return state;
}
/* Tal wrappers for opt. */
static void *opt_allocfn(size_t size)
{
return tal_alloc_(NULL, size, false, TAL_LABEL("opt_allocfn", ""));
}
static void *tal_reallocfn(void *ptr, size_t size)
{
if (!ptr)
return opt_allocfn(size);
tal_resize_(&ptr, 1, size, false);
return ptr;
}
static void tal_freefn(void *ptr)
{
tal_free(ptr);
}
int main(int argc, char *argv[])
{
struct lightningd_state *state = lightningd_state();
err_set_progname(argv[0]);
opt_set_alloc(opt_allocfn, tal_reallocfn, tal_freefn);
opt_register_noarg("--help|-h", opt_usage_and_exit,
"\n"
"A bitcoin lightning daemon.",
"Print this message.");
opt_register_logging(state->base_log);
opt_register_version();
configdir_register_opts(state,
&state->config_dir, &state->rpc_filename);
/* Get any configdir options first. */
opt_early_parse(argc, argv, opt_log_stderr_exit);
/* Move to config dir, to save ourselves the hassle of path manip. */
if (chdir(state->config_dir) != 0) {
log_unusual(state->base_log, "Creating lightningd dir %s"
" (because chdir gave %s)",
state->config_dir, strerror(errno));
if (mkdir(state->config_dir, 0700) != 0)
fatal("Could not make directory %s: %s",
state->config_dir, strerror(errno));
if (chdir(state->config_dir) != 0)
fatal("Could not change directory %s: %s",
state->config_dir, strerror(errno));
}
/* Activate crash log now we're in the right place. */
crashlog_activate(state->base_log);
/* Now look for config file */
opt_parse_from_config(state);
opt_parse(&argc, argv, opt_log_stderr_exit);
if (argc != 1)
errx(1, "no arguments accepted");
log_info(state->base_log, "Hello world!");
tal_free(state);
opt_free_table();
return 0;
}