@@ -7,6 +7,10 @@ static struct strbuf **tr2_cfg_patterns;
77static int tr2_cfg_count_patterns ;
88static int tr2_cfg_loaded ;
99
10+ static struct strbuf * * tr2_cfg_env_vars ;
11+ static int tr2_cfg_env_vars_count ;
12+ static int tr2_cfg_env_vars_loaded ;
13+
1014/*
1115 * Parse a string containing a comma-delimited list of config keys
1216 * or wildcard patterns into a list of strbufs.
@@ -46,6 +50,45 @@ void tr2_cfg_free_patterns(void)
4650 tr2_cfg_loaded = 0 ;
4751}
4852
53+ /*
54+ * Parse a string containing a comma-delimited list of environment variable
55+ * names into a list of strbufs.
56+ */
57+ static int tr2_load_env_vars (void )
58+ {
59+ struct strbuf * * s ;
60+ const char * varlist ;
61+
62+ if (tr2_cfg_env_vars_loaded )
63+ return tr2_cfg_env_vars_count ;
64+ tr2_cfg_env_vars_loaded = 1 ;
65+
66+ varlist = tr2_sysenv_get (TR2_SYSENV_ENV_VARS );
67+ if (!varlist || !* varlist )
68+ return tr2_cfg_env_vars_count ;
69+
70+ tr2_cfg_env_vars = strbuf_split_buf (varlist , strlen (varlist ), ',' , -1 );
71+ for (s = tr2_cfg_env_vars ; * s ; s ++ ) {
72+ struct strbuf * buf = * s ;
73+
74+ if (buf -> len && buf -> buf [buf -> len - 1 ] == ',' )
75+ strbuf_setlen (buf , buf -> len - 1 );
76+ strbuf_trim_trailing_newline (* s );
77+ strbuf_trim (* s );
78+ }
79+
80+ tr2_cfg_env_vars_count = s - tr2_cfg_env_vars ;
81+ return tr2_cfg_env_vars_count ;
82+ }
83+
84+ void tr2_cfg_free_env_vars (void )
85+ {
86+ if (tr2_cfg_env_vars )
87+ strbuf_list_free (tr2_cfg_env_vars );
88+ tr2_cfg_env_vars_count = 0 ;
89+ tr2_cfg_env_vars_loaded = 0 ;
90+ }
91+
4992struct tr2_cfg_data {
5093 const char * file ;
5194 int line ;
@@ -79,6 +122,21 @@ void tr2_cfg_list_config_fl(const char *file, int line)
79122 read_early_config (tr2_cfg_cb , & data );
80123}
81124
125+ void tr2_list_env_vars_fl (const char * file , int line )
126+ {
127+ struct strbuf * * s ;
128+
129+ if (tr2_load_env_vars () <= 0 )
130+ return ;
131+
132+ for (s = tr2_cfg_env_vars ; * s ; s ++ ) {
133+ struct strbuf * buf = * s ;
134+ const char * val = getenv (buf -> buf );
135+ if (val && * val )
136+ trace2_def_param_fl (file , line , buf -> buf , val );
137+ }
138+ }
139+
82140void tr2_cfg_set_fl (const char * file , int line , const char * key ,
83141 const char * value )
84142{
0 commit comments