summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/extern.h1
-rw-r--r--include/sysconf.h.cmake1
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/init.cpp2
-rw-r--r--src/main.cpp24
5 files changed, 12 insertions, 17 deletions
diff --git a/include/extern.h b/include/extern.h
index 86f4f9c8b..cd8d1b70f 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -168,6 +168,7 @@ E void InitLogChannels(ServerConfig *);
/**** main.c ****/
E Anope::string services_dir;
+E Anope::string services_bin;
E int debug;
E bool readonly;
E bool nofork;
diff --git a/include/sysconf.h.cmake b/include/sysconf.h.cmake
index e25e22eb4..1509ab5d7 100644
--- a/include/sysconf.h.cmake
+++ b/include/sysconf.h.cmake
@@ -20,7 +20,6 @@
#cmakedefine HAVE_EVENTFD 1
#cmakedefine GETTEXT_FOUND 1
#cmakedefine RUNGROUP "@RUNGROUP@"
-#cmakedefine SERVICES_BIN "@SERVICES_BIN@"
#cmakedefine HAVE_UINT8_T 1
#cmakedefine HAVE_U_INT8_T 1
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f1096c6f8..a9f77f40b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -88,7 +88,6 @@ add_dependencies(${PROGRAM_NAME} language headers)
# Get the filename of the Anope executable as it is in on this system
get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
-set(SERVICES_BIN "${SERVICES_BINARY}")
# Add the Anope executable to the list of files for CPack to ignore
add_to_cpack_ignored_files("${SERVICES_BINARY}$" TRUE)
diff --git a/src/init.cpp b/src/init.cpp
index 69bb88539..841fdc55e 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -225,7 +225,7 @@ void Init(int ac, char **av)
{
Log(LOG_TERMINAL) << "Anope-" << Anope::Version() << " -- " << Anope::Build();
Log(LOG_TERMINAL) << "Anope IRC Services (http://www.anope.org)";
- Log(LOG_TERMINAL) << "Usage ./" << SERVICES_BIN << " [options] ...";
+ Log(LOG_TERMINAL) << "Usage ./" << services_bin << " [options] ...";
Log(LOG_TERMINAL) << "-c, --config=filename.conf";
Log(LOG_TERMINAL) << "-d, --debug[=level]";
Log(LOG_TERMINAL) << " --dir=services_directory";
diff --git a/src/main.cpp b/src/main.cpp
index a1b02a496..fb3b59d1e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -186,6 +186,7 @@ void do_restart_services()
delete UplinkSock;
ModuleManager::UnloadAll();
chdir(binary_dir.c_str());
+ my_av[0] = const_cast<char *>(("./" + services_bin).c_str());
execve(services_bin.c_str(), my_av, my_envp);
if (!readonly)
{
@@ -309,7 +310,7 @@ Anope::string GetFullProgDir(const Anope::string &argv0)
if (GetModuleFileName(NULL, buffer, PATH_MAX))
{
Anope::string fullpath = buffer;
- Anope::string::size_type n = fullpath.rfind("\\" SERVICES_BIN);
+ Anope::string::size_type n = fullpath.rfind("\\");
services_bin = fullpath.substr(n + 1, fullpath.length());
return fullpath.substr(0, n);
}
@@ -319,20 +320,15 @@ Anope::string GetFullProgDir(const Anope::string &argv0)
{
Anope::string remainder = argv0;
- /* Does argv[0] start with /? If so, it's a full path, use it */
- if (remainder[0] == '/')
- {
- Anope::string::size_type n = remainder.rfind("/" SERVICES_BIN);
- services_bin = remainder.substr(n + 1, remainder.length());
- return remainder.substr(0, n);
- }
-
services_bin = remainder;
- if (services_bin.substr(0, 2).equals_cs("./"))
- services_bin = services_bin.substr(2);
- Anope::string fullpath = Anope::string(buffer) + "/" + remainder;
- Anope::string::size_type n = fullpath.rfind("/" SERVICES_BIN);
- return fullpath.substr(0, n);
+ Anope::string::size_type n = services_bin.rfind("/");
+ Anope::string fullpath;
+ if (services_bin[0] == '/')
+ fullpath = services_bin.substr(0, n);
+ else
+ fullpath = Anope::string(buffer) + "/" + services_bin.substr(0, n);
+ services_bin = services_bin.substr(n + 1, remainder.length());
+ return fullpath;
}
#endif
return "/";