#include "dinit-socket.h"
#include "static-string.h"
#include "dinit-utmp.h"
+#include "options-processing.h"
#include "mconfig.h"
am_pid_one = (getpid() == 1);
am_system_init = (getuid() == 0);
- const char * service_dir = nullptr;
- bool service_dir_dynamic = false; // service_dir dynamically allocated?
const char * env_file = nullptr;
bool control_socket_path_set = false;
bool env_file_set = false;
bool log_specified = false;
+ service_dir_opt service_dir_opts;
+
// list of services to start
list<const char *> services_to_start;
}
else if (strcmp(argv[i], "--services-dir") == 0 || strcmp(argv[i], "-d") == 0) {
if (++i < argc) {
- service_dir = argv[i];
+ service_dir_opts.set_specified_service_dir(argv[i]);
}
else {
cerr << "dinit: '--services-dir' (-d) requires an argument" << endl;
}
}
- /* service directory name */
- if (service_dir == nullptr && ! am_system_init) {
- const char * userhome = get_user_home();
- if (userhome != nullptr) {
- const char * user_home = get_user_home();
- size_t user_home_len = strlen(user_home);
- size_t dinit_d_len = strlen("/dinit.d");
- size_t full_len = user_home_len + dinit_d_len + 1;
- char *service_dir_w = new char[full_len];
- std::memcpy(service_dir_w, user_home, user_home_len);
- std::memcpy(service_dir_w + user_home_len, "/dinit.d", dinit_d_len);
- service_dir_w[full_len - 1] = 0;
-
- service_dir = service_dir_w;
- service_dir_dynamic = true;
- }
- }
-
if (services_to_start.empty()) {
services_to_start.push_back("boot");
}
log_flush_timer.add_timer(event_loop, dasynq::clock_type::MONOTONIC);
- bool add_all_service_dirs = false;
- if (service_dir == nullptr) {
- service_dir = "/etc/dinit.d";
- add_all_service_dirs = true;
- }
+ service_dir_opts.build_paths();
/* start requested services */
- services = new dirload_service_set(service_dir, service_dir_dynamic);
- if (add_all_service_dirs) {
- services->add_service_dir("/usr/local/lib/dinit.d", false);
- services->add_service_dir("/lib/dinit.d", false);
- }
-
+ services = new dirload_service_set(std::move(service_dir_opts.get_paths()));
+
init_log(services, log_is_syslog);
if (am_system_init) {
log(loglevel_t::INFO, false, "starting system");