Browse Source

Rename "workding_dir_def" to "service_dsc_dir" to reflect its nature

Though used as the default working directory if none is provided, it is
actually the directory containing the service description for the
service.
Davin McCall 6 months ago
parent
commit
0d1059c439
5 changed files with 26 additions and 23 deletions
  1. 1 1
      src/baseproc-service.cc
  2. 6 6
      src/dinitctl.cc
  3. 7 7
      src/includes/proc-service.h
  4. 11 8
      src/load-service.cc
  5. 1 1
      src/proc-service.cc

+ 1 - 1
src/baseproc-service.cc

@@ -242,7 +242,7 @@ bool base_process_service::start_ps_process(const std::vector<const char *> &cmd
         }
 
         if (forkpid == 0) {
-            const char * working_dir_c = working_dir_def;
+            const char * working_dir_c = service_dsc_dir;
             if (!working_dir.empty()) working_dir_c = working_dir.c_str();
             after_fork(getpid());
             run_proc_params run_params{cmd.data(), working_dir_c, logfile, pipefd[1], run_as_uid, run_as_gid, rlimits};

+ 6 - 6
src/dinitctl.cc

@@ -1713,7 +1713,7 @@ static int enable_disable_service(int socknum, cpbuffer_t &rbuffer, service_dir_
 
     handle_t to_handle;
 
-    vector<string> paths;
+    vector<string> service_dir_paths;
 
     if (socknum != -1) {
         if (!load_service(socknum, rbuffer, from, &from_handle, &from_state)
@@ -1721,8 +1721,8 @@ static int enable_disable_service(int socknum, cpbuffer_t &rbuffer, service_dir_
             return 1;
         }
 
-        paths = get_service_description_dirs(socknum, rbuffer);
-        if (paths.empty()) {
+        service_dir_paths = get_service_description_dirs(socknum, rbuffer);
+        if (service_dir_paths.empty()) {
             return 1;
         }
     }
@@ -1730,7 +1730,7 @@ static int enable_disable_service(int socknum, cpbuffer_t &rbuffer, service_dir_
         // offline case
         const auto &path_list = service_dir_opts.get_paths();
         for (auto &path : path_list) {
-            paths.emplace_back(path.get_dir());
+            service_dir_paths.emplace_back(path.get_dir());
         }
     }
 
@@ -1740,7 +1740,7 @@ static int enable_disable_service(int socknum, cpbuffer_t &rbuffer, service_dir_
     ifstream service_file;
     string service_file_path;
 
-    find_service_desc(from, paths, service_file, service_file_path);
+    find_service_desc(from, service_dir_paths, service_file, service_file_path);
     if (!service_file) {
         cerr << "dinitctl: could not locate service file for service '" << from << "'" << endl;
         return 1;
@@ -1748,7 +1748,7 @@ static int enable_disable_service(int socknum, cpbuffer_t &rbuffer, service_dir_
 
     ifstream to_service_file;
     string to_service_file_path;
-    find_service_desc(to, paths, to_service_file, to_service_file_path);
+    find_service_desc(to, service_dir_paths, to_service_file, to_service_file_path);
     if (!to_service_file) {
         cerr << "dinitctl: ";
         if (socknum >= 0) {

+ 7 - 7
src/includes/proc-service.h

@@ -174,10 +174,10 @@ class base_process_service : public service_record
     // pointer to each argument/part of the stop_command, and nullptr:
     std::vector<const char *> stop_arg_parts;
 
+    const char *service_dsc_dir = nullptr; // directory containing service description file
     string working_dir;       // working directory (or empty)
     string env_file;          // file with environment settings for this service
 
-    const char *working_dir_def; // working directory default (service dir)
     log_type_id log_type = log_type_id::NONE;
     string logfile;          // log file name, empty string specifies /dev/null
     int logfile_perms = 0;   // logfile permissions("mode")
@@ -501,16 +501,16 @@ class base_process_service : public service_record
     }
 
     // Set the working directory
-    void set_working_dir(const string &working_dir_p, const char *def)
+    // Note: constructing parameter may throw!
+    void set_working_dir(string working_dir_p) noexcept
     {
-        working_dir = working_dir_p;
-        working_dir_def = def;
+        working_dir = std::move(working_dir_p);
     }
 
-    void set_working_dir(string &&working_dir_p, const char *def) noexcept
+    // Set directory containing service description file
+    void set_service_dsc_dir(const char *dsc_dir) noexcept
     {
-        working_dir = std::move(working_dir_p);
-        working_dir_def = def;
+        service_dsc_dir = dsc_dir;
     }
 
     // Set the notification fd number that the service process will use

+ 11 - 8
src/load-service.cc

@@ -389,13 +389,13 @@ service_record * dirload_service_set::load_reload_service(const char *name, serv
 
     int fail_load_errno = 0;
     std::string fail_load_path;
-    const char *sdir = nullptr;
+    const char *service_dsc_dir = nullptr;
 
     // Couldn't find one. Have to load it.
     for (auto &service_dir : service_dirs) {
-        sdir = service_dir.get_dir();
-        service_filename = sdir;
-        if (*(service_filename.rbegin()) != '/') {
+        service_dsc_dir = service_dir.get_dir();
+        service_filename = service_dsc_dir;
+        if (service_filename.back() != '/') {
             service_filename += '/';
         }
         service_filename += name;
@@ -541,7 +541,7 @@ service_record * dirload_service_set::load_reload_service(const char *name, serv
 
         if (!settings.env_file.empty()) {
             try {
-                read_env_file(settings.env_file.data(), false, srv_env, true, sdir);
+                read_env_file(settings.env_file.data(), false, srv_env, true, service_dsc_dir);
             } catch (const std::system_error &se) {
                 throw service_load_exc(name, std::string("could not load environment file: ") + se.what());
             }
@@ -711,8 +711,9 @@ service_record * dirload_service_set::load_reload_service(const char *name, serv
             }
             rval = rvalps;
             // All of the following should be noexcept or must perform rollback on exception
+            rvalps->set_service_dsc_dir(service_dsc_dir);
             rvalps->set_stop_command(std::move(settings.stop_command), std::move(stop_arg_parts));
-            rvalps->set_working_dir(std::move(settings.working_dir), sdir);
+            rvalps->set_working_dir(std::move(settings.working_dir));
             rvalps->set_env_file(std::move(settings.env_file));
             #if SUPPORT_CGROUPS
             rvalps->set_cgroup(std::move(settings.run_in_cgroup));
@@ -754,8 +755,9 @@ service_record * dirload_service_set::load_reload_service(const char *name, serv
             }
             rval = rvalps;
             // All of the following should be noexcept or must perform rollback on exception
+            rvalps->set_service_dsc_dir(service_dsc_dir);
             rvalps->set_stop_command(std::move(settings.stop_command), std::move(stop_arg_parts));
-            rvalps->set_working_dir(std::move(settings.working_dir), sdir);
+            rvalps->set_working_dir(std::move(settings.working_dir));
             rvalps->set_env_file(std::move(settings.env_file));
             #if SUPPORT_CGROUPS
             rvalps->set_cgroup(std::move(settings.run_in_cgroup));
@@ -793,8 +795,9 @@ service_record * dirload_service_set::load_reload_service(const char *name, serv
             }
             rval = rvalps;
             // All of the following should be noexcept or must perform rollback on exception
+            rvalps->set_service_dsc_dir(service_dsc_dir);
             rvalps->set_stop_command(std::move(settings.stop_command), std::move(stop_arg_parts));
-            rvalps->set_working_dir(std::move(settings.working_dir), sdir);
+            rvalps->set_working_dir(std::move(settings.working_dir));
             rvalps->set_env_file(std::move(settings.env_file));
             #if SUPPORT_CGROUPS
             rvalps->set_cgroup(std::move(settings.run_in_cgroup));

+ 1 - 1
src/proc-service.cc

@@ -918,7 +918,7 @@ bool process_service::start_stop_process(const std::vector<const char *> &cmd) n
 
     if (forkpid == 0) {
         close(pipefd[0]);
-        const char * working_dir_c = working_dir_def;
+        const char * working_dir_c = service_dsc_dir;
         if (! working_dir.empty()) working_dir_c = working_dir.c_str();
         run_proc_params run_params{cmd.data(), working_dir_c, logfile, pipefd[1], run_as_uid, run_as_gid, rlimits};
         run_params.on_console = false;