@@ -1235,11 +1235,12 @@ static void value_var_subst(const char *setting_name, std::string &line,
12351235
12361236// Reads a dependency name while performing minimal argument expansion in it.
12371237inline string read_dependency_value (const char *setting_name, file_pos_ref input_pos, string_iterator &i,
1238- string_iterator end, std::list<std::pair< unsigned , unsigned >> &offsets, const char *argval)
1238+ string_iterator end, const char *argval)
12391239{
12401240 string rval;
12411241 read_setting_value (rval, setting_op_t ::ASSIGN, input_pos, i, end, nullptr );
1242- offsets.clear ();
1242+
1243+ std::list<std::pair<unsigned ,unsigned >> offsets;
12431244 offsets.emplace_back (0 , rval.size ());
12441245 value_var_subst (setting_name, rval, offsets, resolve_env_var, nullptr , argval);
12451246 return rval;
@@ -1269,7 +1270,6 @@ class service_settings_wrapper
12691270 list<dep_type> depends;
12701271 list<std::string> before_svcs;
12711272 list<std::string> after_svcs;
1272- list<pair<unsigned ,unsigned >> str_offsets; // stores offsets for any substutions where we don't care about them
12731273 log_type_id log_type = log_type_id::NONE;
12741274 string logfile;
12751275 int logfile_perms = 0600 ;
@@ -1410,7 +1410,7 @@ class service_settings_wrapper
14101410 {
14111411 auto do_resolve = [&](const char *setting_name, string &setting_value) {
14121412 try {
1413- str_offsets. clear () ;
1413+ list<pair< unsigned , unsigned >> str_offsets;
14141414 str_offsets.emplace_back (0 , setting_value.size ());
14151415 value_var_subst (setting_name, setting_value, str_offsets, var_subst, &envmap, argval);
14161416 }
@@ -1552,24 +1552,21 @@ void process_service_line(settings_wrapper &settings, const char *name, const ch
15521552 break ;
15531553 case setting_id_t ::DEPENDS_ON:
15541554 {
1555- string dependency_name = read_dependency_value (setting.c_str (), input_pos,
1556- i, end, settings.str_offsets , arg);
1555+ string dependency_name = read_dependency_value (setting.c_str (), input_pos, i, end, arg);
15571556 settings.depends .emplace_back (load_service (dependency_name.c_str ()),
15581557 dependency_type::REGULAR);
15591558 break ;
15601559 }
15611560 case setting_id_t ::DEPENDS_MS:
15621561 {
1563- string dependency_name = read_dependency_value (setting.c_str (), input_pos,
1564- i, end, settings.str_offsets , arg);
1562+ string dependency_name = read_dependency_value (setting.c_str (), input_pos, i, end, arg);
15651563 settings.depends .emplace_back (load_service (dependency_name.c_str ()),
15661564 dependency_type::MILESTONE);
15671565 break ;
15681566 }
15691567 case setting_id_t ::WAITS_FOR:
15701568 {
1571- string dependency_name = read_dependency_value (setting.c_str (), input_pos,
1572- i, end, settings.str_offsets , arg);
1569+ string dependency_name = read_dependency_value (setting.c_str (), input_pos, i, end, arg);
15731570 settings.depends .emplace_back (load_service (dependency_name.c_str ()),
15741571 dependency_type::WAITS_FOR);
15751572 break ;
@@ -1594,15 +1591,13 @@ void process_service_line(settings_wrapper &settings, const char *name, const ch
15941591 }
15951592 case setting_id_t ::AFTER:
15961593 {
1597- string after_name = read_dependency_value (setting.c_str (), input_pos,
1598- i, end, settings.str_offsets , arg);
1594+ string after_name = read_dependency_value (setting.c_str (), input_pos, i, end, arg);
15991595 settings.after_svcs .emplace_back (std::move (after_name));
16001596 break ;
16011597 }
16021598 case setting_id_t ::BEFORE:
16031599 {
1604- string before_name = read_dependency_value (setting.c_str (), input_pos,
1605- i, end, settings.str_offsets , arg);
1600+ string before_name = read_dependency_value (setting.c_str (), input_pos, i, end, arg);
16061601 settings.before_svcs .emplace_back (std::move (before_name));
16071602 break ;
16081603 }
0 commit comments