diff options
Diffstat (limited to 'hscript/meta.cc')
-rw-r--r-- | hscript/meta.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/hscript/meta.cc b/hscript/meta.cc index af72eaf..a12b874 100644 --- a/hscript/meta.cc +++ b/hscript/meta.cc @@ -652,12 +652,14 @@ bool SvcEnable::validate() const { /* LCOV_EXCL_STOP */ bool SvcEnable::execute() const { - const std::string target = script->targetDirectory() + - "/etc/runlevels/" + _runlevel + "/" + _svc; + const std::string target_rl = script->targetDirectory() + + "/etc/runlevels/" + _runlevel; + const std::string target = target_rl + "/" + _svc; const std::string initd = "/etc/init.d/" + _svc; output_info(pos, "svcenable: enabling service " + _svc); if(script->options().test(Simulate)) { + std::cout << "mkdir -p " << target_rl << std::endl; std::cout << "ln -s " << initd << " " << target << std::endl; return true; } @@ -667,6 +669,12 @@ bool SvcEnable::execute() const { if(!fs::exists(script->targetDirectory() + initd, ec)) { output_warning(pos, "svcenable: missing service", _svc); } + fs::create_directory(target_rl, ec); + if(ec && ec.value() != EEXIST) { + output_error(pos, "svcenable: could not create runlevel directory " + "/etc/runlevels/" + _runlevel, ec.message()); + return false; + } fs::create_symlink(initd, target, ec); if(ec && ec.value() != EEXIST) { |