@@ -57,6 +57,7 @@ static struct configvar **gather_file_configvars(const tal_t *ctx,
5757 enum configvar_src src ,
5858 const char * filename ,
5959 bool must_exist ,
60+ char * * setconfig_file ,
6061 size_t include_depth )
6162{
6263 char * contents , * * lines ;
@@ -72,6 +73,13 @@ static struct configvar **gather_file_configvars(const tal_t *ctx,
7273 return cvs ;
7374 }
7475
76+ /* First .setconfig file is used for setconfig command */
77+ if (setconfig_file
78+ && * setconfig_file == NULL
79+ && strends (filename , ".setconfig" )) {
80+ * setconfig_file = tal_strdup (ctx , filename );
81+ }
82+
7583 /* Break into lines. */
7684 lines = tal_strsplit (contents , contents , "\r\n" , STR_EMPTY_OK );
7785 for (size_t i = 0 ; i < tal_count (lines ) - 1 ; i ++ ) {
@@ -93,6 +101,7 @@ static struct configvar **gather_file_configvars(const tal_t *ctx,
93101 take (path_dirname (NULL , filename )),
94102 included ),
95103 true,
104+ setconfig_file ,
96105 include_depth + 1 );
97106 cvs = configvar_join (ctx , take (cvs ), take (sub ));
98107 continue ;
@@ -291,7 +300,7 @@ void minimal_config_opts(const tal_t *ctx,
291300 config_filename ,
292301 basedir ,
293302 config_netdir ,
294- rpc_filename );
303+ rpc_filename , NULL );
295304 tal_steal (ctx , * config_filename );
296305 tal_steal (ctx , * basedir );
297306 tal_steal (ctx , * config_netdir );
@@ -304,7 +313,8 @@ struct configvar **initial_config_opts(const tal_t *ctx,
304313 char * * config_filename ,
305314 char * * config_basedir ,
306315 char * * config_netdir ,
307- char * * rpc_filename )
316+ char * * rpc_filename ,
317+ char * * setconfig_file )
308318{
309319 struct configvar * * cmdline_cvs , * * config_cvs , * * cvs ;
310320
@@ -360,19 +370,24 @@ struct configvar **initial_config_opts(const tal_t *ctx,
360370 cmdline_cvs = gather_cmdline_args (tmpctx , argc , argv , remove_args );
361371 parse_configvars (cmdline_cvs , true, false, false);
362372
373+ if (setconfig_file )
374+ * setconfig_file = NULL ;
375+
363376 /* Base default or direct config can set network */
364377 if (* config_filename ) {
365378 config_cvs = gather_file_configvars (NULL ,
366379 CONFIGVAR_EXPLICIT_CONF ,
367- * config_filename , true, 0 );
380+ * config_filename , true,
381+ setconfig_file , 0 );
368382 } else {
369383 struct configvar * * base_cvs , * * net_cvs ;
370384 char * dir = path_join (tmpctx , take (path_cwd (NULL )), * config_basedir );
371385 /* Optional: .lightning/config */
372386 base_cvs = gather_file_configvars (tmpctx ,
373387 CONFIGVAR_BASE_CONF ,
374388 path_join (tmpctx , dir , "config" ),
375- false, 0 );
389+ false,
390+ setconfig_file , 0 );
376391 /* This might set network! */
377392 parse_configvars (configvar_join (tmpctx , base_cvs , cmdline_cvs ),
378393 true, false, false);
@@ -382,7 +397,7 @@ struct configvar **initial_config_opts(const tal_t *ctx,
382397 net_cvs = gather_file_configvars (tmpctx ,
383398 CONFIGVAR_NETWORK_CONF ,
384399 path_join (tmpctx , dir , "config" ),
385- false, 0 );
400+ false, setconfig_file , 0 );
386401 config_cvs = configvar_join (NULL , take (base_cvs ), take (net_cvs ));
387402 }
388403 cvs = configvar_join (ctx , take (config_cvs ), cmdline_cvs );
0 commit comments