summaryrefslogtreecommitdiff
path: root/hscript/meta.cc
diff options
context:
space:
mode:
Diffstat (limited to 'hscript/meta.cc')
-rw-r--r--hscript/meta.cc12
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) {