summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/consolecolors.h100
-rw-r--r--include/inspircd.h2
-rw-r--r--src/configreader.cpp3
-rw-r--r--src/helperfuncs.cpp5
-rw-r--r--src/inspircd.cpp90
-rw-r--r--src/modmanager_dynamic.cpp15
-rw-r--r--src/modmanager_static.cpp7
-rw-r--r--src/socketengines/socketengine_epoll.cpp7
-rw-r--r--src/socketengines/socketengine_kqueue.cpp7
-rw-r--r--src/socketengines/socketengine_poll.cpp3
-rw-r--r--src/socketengines/socketengine_ports.cpp7
-rw-r--r--win/colors.h114
-rw-r--r--win/configure.cpp105
-rw-r--r--win/configure.vcxproj3
-rw-r--r--win/inspircd.vcxproj2
-rw-r--r--win/inspircd_win32wrapper.cpp3
-rw-r--r--win/inspircd_win32wrapper.h3
-rw-r--r--win/win32service.cpp17
18 files changed, 257 insertions, 236 deletions
diff --git a/include/consolecolors.h b/include/consolecolors.h
new file mode 100644
index 000000000..953beb346
--- /dev/null
+++ b/include/consolecolors.h
@@ -0,0 +1,100 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CONSOLECOLORS_H
+#define CONSOLECOLORS_H
+
+#include <ostream>
+
+#ifdef _WIN32
+
+#include <windows.h>
+
+extern WORD g_wOriginalColors;
+extern WORD g_wBackgroundColor;
+extern HANDLE g_hStdout;
+
+inline std::ostream& con_green(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+ return s;
+}
+
+inline std::ostream& con_red(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_INTENSITY|g_wBackgroundColor);
+ return s;
+}
+
+inline std::ostream& con_white(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|g_wBackgroundColor);
+ return s;
+}
+
+inline std::ostream& con_white_bright(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY|g_wBackgroundColor);
+ return s;
+}
+
+inline std::ostream& con_bright(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, FOREGROUND_INTENSITY|g_wBackgroundColor);
+ return s;
+}
+
+inline std::ostream& con_reset(std::ostream &s)
+{
+ SetConsoleTextAttribute(g_hStdout, g_wOriginalColors);
+ return s;
+}
+
+#else
+
+inline std::ostream& con_green(std::ostream &s)
+{
+ return s << "\033[1;32m";
+}
+
+inline std::ostream& con_red(std::ostream &s)
+{
+ return s << "\033[1;31m";
+}
+
+inline std::ostream& con_white(std::ostream &s)
+{
+ return s << "\033[0m";
+}
+
+inline std::ostream& con_white_bright(std::ostream &s)
+{
+ return s << "\033[1m";
+}
+
+inline std::ostream& con_bright(std::ostream &s)
+{
+ return s << "\033[1m";
+}
+
+inline std::ostream& con_reset(std::ostream &s)
+{
+ return s << "\033[0m";
+}
+
+#endif
+
+#endif \ No newline at end of file
diff --git a/include/inspircd.h b/include/inspircd.h
index cc627ca57..69c8bf47f 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -34,7 +34,6 @@
#ifndef _WIN32
#define DllExport
#define CoreExport
-#define printf_c printf
#else
#include "inspircd_win32wrapper.h"
/** Windows defines these already */
@@ -71,6 +70,7 @@
#include "inspircd_config.h"
#include "inspircd_version.h"
#include "typedefs.h"
+#include "consolecolors.h"
CoreExport extern InspIRCd* ServerInstance;
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 660df77d7..82f4d7c43 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -28,6 +28,7 @@
#include "exitcodes.h"
#include "commands/cmd_whowas.h"
#include "configparser.h"
+#include <iostream>
#ifdef _WIN32
#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
@@ -750,7 +751,7 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
continue;
// On startup, print out to console (still attached at this point)
if (!old)
- printf("%s\n", line.c_str());
+ std::cout << line << std::endl;
// If a user is rehashing, tell them directly
if (user)
user->SendText(":%s NOTICE %s :*** %s", ServerInstance->Config->ServerName.c_str(), user->nick.c_str(), line.c_str());
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 7351a07de..a6df520c5 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -32,6 +32,7 @@
#include "inspircd.h"
#include "xline.h"
#include "exitcodes.h"
+#include <iostream>
std::string InspIRCd::GetServerDescription(const std::string& servername)
{
@@ -319,8 +320,8 @@ void InspIRCd::CheckRoot()
#ifndef _WIN32
if (geteuid() == 0)
{
- printf("WARNING!!! You are running an irc server as ROOT!!! DO NOT DO THIS!!!\n\n");
- this->Logs->Log("STARTUP",DEFAULT,"Cant start as root");
+ std::cout << "ERROR: You are running an irc server as root! DO NOT DO THIS!" << std::endl << std::endl;
+ this->Logs->Log("STARTUP",DEFAULT,"Can't start as root");
Exit(EXIT_STATUS_ROOT);
}
#endif
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 42047ce11..cb50595d2 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -45,9 +45,14 @@
#include <pwd.h> // setuid
#include <grp.h> // setgid
+#else
+ WORD g_wOriginalColors;
+ WORD g_wBackgroundColor;
+ HANDLE g_hStdout;
#endif
#include <fstream>
+#include <iostream>
#include "xline.h"
#include "bancache.h"
#include "socketengine.h"
@@ -242,7 +247,7 @@ void InspIRCd::QuickExit(int status)
bool InspIRCd::DaemonSeed()
{
#ifdef _WIN32
- printf_c("InspIRCd Process ID: \033[1;32m%lu\033[0m\n", GetCurrentProcessId());
+ std::cout << "InspIRCd Process ID: " << con_green << GetCurrentProcessId() << con_reset << std::endl;
return true;
#else
signal(SIGTERM, InspIRCd::QuickExit);
@@ -264,7 +269,7 @@ bool InspIRCd::DaemonSeed()
exit(0);
}
setsid ();
- printf("InspIRCd Process ID: \033[1;32m%lu\033[0m\n",(unsigned long)getpid());
+ std::cout << "InspIRCd Process ID: " << con_green << getpid() << con_reset << std::endl;
signal(SIGTERM, InspIRCd::SetSignal);
@@ -297,7 +302,7 @@ void InspIRCd::WritePID(const std::string &filename)
}
else
{
- printf("Failed to write PID-file '%s', exiting.\n",fname.c_str());
+ std::cout << "Failed to write PID-file '" << fname << "', exiting." << std::endl;
this->Logs->Log("STARTUP",DEFAULT,"Failed to write PID-file '%s', exiting.",fname.c_str());
Exit(EXIT_STATUS_PID);
}
@@ -389,6 +394,20 @@ InspIRCd::InspIRCd(int argc, char** argv) :
#ifdef _WIN32
srand(TIME.tv_nsec ^ TIME.tv_sec);
+
+ // Initialize the console values
+ g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO bufinf;
+ if(GetConsoleScreenBufferInfo(g_hStdout, &bufinf))
+ {
+ g_wOriginalColors = bufinf.wAttributes & 0x00FF;
+ g_wBackgroundColor = bufinf.wAttributes & 0x00F0;
+ }
+ else
+ {
+ g_wOriginalColors = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN;
+ g_wBackgroundColor = 0;
+ }
#else
srandom(TIME.tv_nsec ^ TIME.tv_sec);
#endif
@@ -426,8 +445,9 @@ InspIRCd::InspIRCd(int argc, char** argv) :
/* Unknown parameter */
default:
/* Fall through to handle other weird values too */
- printf("Unknown parameter '%s'\n", argv[optind-1]);
- printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n%*s[--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0], static_cast<int>(8+strlen(argv[0])), " ");
+ std::cout << "Unknown parameter '" << argv[optind-1] << "'" << std::endl;
+ std::cout << "Usage: " << argv[0] << " [--nofork] [--nolog] [--debug] [--logfile <filename>] " << std::endl <<
+ std::string(static_cast<int>(8+strlen(argv[0])), ' ') << "[--runasroot] [--version] [--config <config>] [--testsuite]" << std::endl;
Exit(EXIT_STATUS_ARGV);
break;
}
@@ -438,7 +458,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
if (do_version)
{
- printf("\n%s r%s\n", VERSION, REVISION);
+ std::cout << std::endl << VERSION << " r" << REVISION << std::endl;
Exit(EXIT_STATUS_NOERROR);
}
@@ -462,7 +482,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
}
else if (!this->OpenLog(argv, argc))
{
- printf("ERROR: Could not open initial logfile %s: %s\n\n", Config->cmdline.startup_log.c_str(), strerror(errno));
+ std::cout << "ERROR: Could not open initial logfile " << Config->cmdline.startup_log << ": " << strerror(errno) << std::endl << std::endl;
Exit(EXIT_STATUS_LOG);
}
@@ -480,18 +500,18 @@ InspIRCd::InspIRCd(int argc, char** argv) :
else
#endif
{
- printf("ERROR: Cannot open config file: %s\nExiting...\n", ConfigFileName.c_str());
+ std::cout << "ERROR: Cannot open config file: " << ConfigFileName << std::endl << "Exiting..." << std::endl;
this->Logs->Log("STARTUP",DEFAULT,"Unable to open config file %s", ConfigFileName.c_str());
Exit(EXIT_STATUS_CONFIG);
}
}
- printf_c("\033[1;32mInspire Internet Relay Chat Server, compiled %s at %s\n",__DATE__,__TIME__);
- printf_c("(C) InspIRCd Development Team.\033[0m\n\n");
- printf_c("Developers:\n");
- printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special, peavey\n");
- printf_c("\t\033[1;32maquanight, psychon, dz, danieldg, jackmcbarn\033[0m\n\n");
- printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n");
+ std::cout << con_green << "Inspire Internet Relay Chat Server" << con_reset << ", compiled on " __DATE__ " at " __TIME__ << std::endl;
+ std::cout << con_green << "(C) InspIRCd Development Team." << con_reset << std::endl << std::endl;
+ std::cout << "Developers:" << std::endl;
+ std::cout << con_green << "\tBrain, FrostyCoolSlug, w00t, Om, Special, peavey" << std::endl;
+ std::cout << "\taquanight, psychon, dz, danieldg, jackmcbarn" << con_reset << std::endl << std::endl;
+ std::cout << "Others:\t\t\t" << con_green << "See /INFO Output" << con_reset << std::endl;
this->Modes = new ModeParser;
@@ -500,14 +520,14 @@ InspIRCd::InspIRCd(int argc, char** argv) :
this->CheckRoot();
else
{
- printf("* WARNING * WARNING * WARNING * WARNING * WARNING * \n\n");
- printf("YOU ARE RUNNING INSPIRCD AS ROOT. THIS IS UNSUPPORTED\n");
- printf("AND IF YOU ARE HACKED, CRACKED, SPINDLED OR MUTILATED\n");
- printf("OR ANYTHING ELSE UNEXPECTED HAPPENS TO YOU OR YOUR\n");
- printf("SERVER, THEN IT IS YOUR OWN FAULT. IF YOU DID NOT MEAN\n");
- printf("TO START INSPIRCD AS ROOT, HIT CTRL+C NOW AND RESTART\n");
- printf("THE PROGRAM AS A NORMAL USER. YOU HAVE BEEN WARNED!\n");
- printf("\nInspIRCd starting in 20 seconds, ctrl+c to abort...\n");
+ std::cout << "* WARNING * WARNING * WARNING * WARNING * WARNING *" << std::endl
+ << "YOU ARE RUNNING INSPIRCD AS ROOT. THIS IS UNSUPPORTED" << std::endl
+ << "AND IF YOU ARE HACKED, CRACKED, SPINDLED OR MUTILATED" << std::endl
+ << "OR ANYTHING ELSE UNEXPECTED HAPPENS TO YOU OR YOUR" << std::endl
+ << "SERVER, THEN IT IS YOUR OWN FAULT. IF YOU DID NOT MEAN" << std::endl
+ << "TO START INSPIRCD AS ROOT, HIT CTRL+C NOW AND RESTART" << std::endl
+ << "THE PROGRAM AS A NORMAL USER. YOU HAVE BEEN WARNED!" << std::endl << std::endl
+ << "InspIRCd starting in 20 seconds, ctrl+c to abort..." << std::endl;
sleep(20);
}
#endif
@@ -518,7 +538,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
{
if (!this->DaemonSeed())
{
- printf("ERROR: could not go into daemon mode. Shutting down.\n");
+ std::cout << "ERROR: could not go into daemon mode. Shutting down." << std::endl;
Logs->Log("STARTUP", DEFAULT, "ERROR: could not go into daemon mode. Shutting down.");
Exit(EXIT_STATUS_FORK);
}
@@ -564,7 +584,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
int bounditems = BindPorts(pl);
- printf("\n");
+ std::cout << std::endl;
this->Modules->LoadAll();
@@ -574,26 +594,26 @@ InspIRCd::InspIRCd(int argc, char** argv) :
if (!pl.empty())
{
- printf("\nWARNING: Not all your client ports could be bound --\nstarting anyway with %d of %d client ports bound.\n\n",
- bounditems, bounditems + (int)pl.size());
- printf("The following port(s) failed to bind:\n");
- printf("Hint: Try using a public IP instead of blank or *\n\n");
+ std::cout << std::endl << "WARNING: Not all your client ports could be bound -- " << std::endl << "starting anyway with " << bounditems
+ << " of " << bounditems + (int)pl.size() << " client ports bound." << std::endl << std::endl;
+ std::cout << "The following port(s) failed to bind:" << std::endl << std::endl;
int j = 1;
for (FailedPortList::iterator i = pl.begin(); i != pl.end(); i++, j++)
{
- printf("%d.\tAddress: %s\tReason: %s\n", j, i->first.empty() ? "<all>" : i->first.c_str(), i->second.c_str());
+ std::cout << j << ".\tAddress: " << (i->first.empty() ? "<all>" : i->first) << " \tReason: " << i->second << std::endl;
}
+
+ std::cout << std::endl << "Hint: Try using a public IP instead of blank or *" << std::endl;
}
- printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n",
- Config->ServerName.c_str(),Config->GetSID().c_str(), SE->GetMaxFds());
+ std::cout << "InspIRCd is now running as '" << Config->ServerName << "'[" << Config->GetSID() << "] with " << SE->GetMaxFds() << " max open sockets" << std::endl;
#ifndef _WIN32
if (!Config->cmdline.nofork)
{
if (kill(getppid(), SIGTERM) == -1)
{
- printf("Error killing parent process: %s\n",strerror(errno));
+ std::cout << "Error killing parent process: " << strerror(errno) << std::endl;
Logs->Log("STARTUP", DEFAULT, "Error killing parent process: %s",strerror(errno));
}
}
@@ -778,9 +798,9 @@ int InspIRCd::Run()
if(QueryPerformanceCounter(&stats->LastSampled))
{
FILETIME CreationTime;
- FILETIME ExitTime;
- FILETIME KernelTime;
- FILETIME UserTime;
+ FILETIME ExitTime;
+ FILETIME KernelTime;
+ FILETIME UserTime;
GetProcessTimes(GetCurrentProcess(), &CreationTime, &ExitTime, &KernelTime, &UserTime);
stats->LastCPU.dwHighDateTime = KernelTime.dwHighDateTime + UserTime.dwHighDateTime;
stats->LastCPU.dwLowDateTime = KernelTime.dwLowDateTime + UserTime.dwLowDateTime;
diff --git a/src/modmanager_dynamic.cpp b/src/modmanager_dynamic.cpp
index 0e90a9ae5..27da56c69 100644
--- a/src/modmanager_dynamic.cpp
+++ b/src/modmanager_dynamic.cpp
@@ -24,6 +24,7 @@
#include "command_parse.h"
#include "dns.h"
#include "exitcodes.h"
+#include <iostream>
#ifndef _WIN32
#include <dirent.h>
@@ -183,7 +184,7 @@ void ModuleManager::LoadAll()
{
ModCount = 0;
- printf("\nLoading core commands");
+ std::cout << std::endl << "Loading core commands";
fflush(stdout);
DIR* library = opendir(ServerInstance->Config->ModPath.c_str());
@@ -194,19 +195,19 @@ void ModuleManager::LoadAll()
{
if (InspIRCd::Match(entry->d_name, "cmd_*.so", ascii_case_insensitive_map))
{
- printf(".");
+ std::cout << ".";
fflush(stdout);
if (!Load(entry->d_name, true))
{
ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
- printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+ std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
ServerInstance->Exit(EXIT_STATUS_MODULE);
}
}
}
closedir(library);
- printf("\n");
+ std::cout << std::endl;
}
ConfigTagList tags = ServerInstance->Config->ConfTags("module");
@@ -214,12 +215,12 @@ void ModuleManager::LoadAll()
{
ConfigTag* tag = i->second;
std::string name = tag->getString("name");
- printf_c("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",name.c_str());
+ std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
if (!this->Load(name, true))
{
ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
- printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+ std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
ServerInstance->Exit(EXIT_STATUS_MODULE);
}
}
@@ -236,7 +237,7 @@ void ModuleManager::LoadAll()
{
LastModuleError = "Unable to initialize " + mod->ModuleSourceFile + ": " + modexcept.GetReason();
ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
- printf_c("\n[\033[1;31m*\033[0m] %s\n\n", LastModuleError.c_str());
+ std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << LastModuleError << std::endl << std::endl;
ServerInstance->Exit(EXIT_STATUS_MODULE);
}
}
diff --git a/src/modmanager_static.cpp b/src/modmanager_static.cpp
index bb8fda400..b105eea92 100644
--- a/src/modmanager_static.cpp
+++ b/src/modmanager_static.cpp
@@ -21,6 +21,7 @@
#include "inspircd.h"
#include "exitcodes.h"
+#include <iostream>
#ifdef PURE_STATIC
@@ -188,12 +189,12 @@ void ModuleManager::LoadAll()
{
ConfigTag* tag = i->second;
std::string name = tag->getString("name");
- printf_c("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",name.c_str());
+ std::cout << "[" << con_green << "*" << con_reset << "] Loading module:\t" << con_green << name << con_reset << std::endl;
if (!this->Load(name, true))
{
ServerInstance->Logs->Log("MODULE", DEFAULT, this->LastError());
- printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
+ std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << this->LastError() << std::endl << std::endl;
ServerInstance->Exit(EXIT_STATUS_MODULE);
}
}
@@ -209,7 +210,7 @@ void ModuleManager::LoadAll()
{
LastModuleError = "Unable to initialize " + mod->ModuleSourceFile + ": " + modexcept.GetReason();
ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
- printf_c("\n[\033[1;31m*\033[0m] %s\n\n", LastModuleError.c_str());
+ std::cout << std::endl << "[" << con_red << "*" << con_reset << "]" << LastModuleError << std::endl << std::endl;
ServerInstance->Exit(EXIT_STATUS_MODULE);
}
}
diff --git a/src/socketengines/socketengine_epoll.cpp b/src/socketengines/socketengine_epoll.cpp
index 79d69698a..f7e107e7b 100644
--- a/src/socketengines/socketengine_epoll.cpp
+++ b/src/socketengines/socketengine_epoll.cpp
@@ -26,6 +26,7 @@
#include "socketengine.h"
#include <sys/epoll.h>
#include <ulimit.h>
+#include <iostream>
#define EP_DELAY 5
/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
@@ -61,7 +62,7 @@ EPollEngine::EPollEngine()
else
{
ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
- printf("ERROR: Can't determine maximum number of open sockets!\n");
+ std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
@@ -72,8 +73,8 @@ EPollEngine::EPollEngine()
{
ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Could not initialize socket engine: %s", strerror(errno));
ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.");
- printf("ERROR: Could not initialize epoll socket engine: %s\n", strerror(errno));
- printf("ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now.\n");
+ std::cout << "ERROR: Could not initialize epoll socket engine: " << strerror(errno) << std::endl;
+ std::cout << "ERROR: Your kernel probably does not have the proper features. This is a fatal error, exiting now." << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
diff --git a/src/socketengines/socketengine_kqueue.cpp b/src/socketengines/socketengine_kqueue.cpp
index 63e16ac6e..5dd653363 100644
--- a/src/socketengines/socketengine_kqueue.cpp
+++ b/src/socketengines/socketengine_kqueue.cpp
@@ -25,6 +25,7 @@
#include <sys/event.h>
#include <sys/time.h>
#include "socketengine.h"
+#include <iostream>
/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
*/
@@ -68,7 +69,7 @@ KQueueEngine::KQueueEngine()
if (MAX_DESCRIPTORS <= 0)
{
ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
- printf("ERROR: Can't determine maximum number of open sockets!\n");
+ std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
@@ -90,8 +91,8 @@ void KQueueEngine::RecoverFromFork()
{
ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.");
ServerInstance->Logs->Log("SOCKET",DEFAULT, "ERROR: this is a fatal error, exiting now.");
- printf("ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features.\n");
- printf("ERROR: this is a fatal error, exiting now.\n");
+ std::cout << "ERROR: Could not initialize socket engine. Your kernel probably does not have the proper features." << std::endl;
+ std::cout << "ERROR: this is a fatal error, exiting now." << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
CurrentSetSize = 0;
diff --git a/src/socketengines/socketengine_poll.cpp b/src/socketengines/socketengine_poll.cpp
index dd38c32b9..6a385c8d8 100644
--- a/src/socketengines/socketengine_poll.cpp
+++ b/src/socketengines/socketengine_poll.cpp
@@ -26,6 +26,7 @@
#ifndef SOCKETENGINE_POLL
#define SOCKETENGINE_POLL
+#include <iostream>
#include <vector>
#include <string>
#include <map>
@@ -92,7 +93,7 @@ PollEngine::PollEngine()
else
{
ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets: %s", strerror(errno));
- printf("ERROR: Can't determine maximum number of open sockets: %s\n", strerror(errno));
+ std::cout << "ERROR: Can't determine maximum number of open sockets: " << strerror(errno) << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
#else
diff --git a/src/socketengines/socketengine_ports.cpp b/src/socketengines/socketengine_ports.cpp
index 5fc645bb1..9a86c47d0 100644
--- a/src/socketengines/socketengine_ports.cpp
+++ b/src/socketengines/socketengine_ports.cpp
@@ -36,6 +36,7 @@
#include "inspircd.h"
#include "socketengine.h"
#include <port.h>
+#include <iostream>
/** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
*/
@@ -75,7 +76,7 @@ PortsEngine::PortsEngine()
else
{
ServerInstance->Logs->Log("SOCKET", DEFAULT, "ERROR: Can't determine maximum number of open sockets!");
- printf("ERROR: Can't determine maximum number of open sockets!\n");
+ std::cout << "ERROR: Can't determine maximum number of open sockets!" << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
EngineHandle = port_create();
@@ -84,8 +85,8 @@ PortsEngine::PortsEngine()
{
ServerInstance->Logs->Log("SOCKET",SPARSE,"ERROR: Could not initialize socket engine: %s", strerror(errno));
ServerInstance->Logs->Log("SOCKET",SPARSE,"ERROR: This is a fatal error, exiting now.");
- printf("ERROR: Could not initialize socket engine: %s\n", strerror(errno));
- printf("ERROR: This is a fatal error, exiting now.\n");
+ std::cout << "ERROR: Could not initialize socket engine: " << strerror(errno) << std::endl;
+ std::cout << "ERROR: This is a fatal error, exiting now." << std::endl;
ServerInstance->Exit(EXIT_STATUS_SOCKETENGINE);
}
CurrentSetSize = 0;
diff --git a/win/colors.h b/win/colors.h
deleted file mode 100644
index b43ccbd62..000000000
--- a/win/colors.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * InspIRCd -- Internet Relay Chat Daemon
- *
- * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
- *
- * This file is part of InspIRCd. InspIRCd is free software: you can
- * redistribute it and/or modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation, version 2.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef COLORS_H
-#define COLORS_H
-
-#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY
-#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
-#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
-#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE
-#define TWHITE TNORMAL | FOREGROUND_INTENSITY
-#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
-
-/* Handles colors in printf */
-int printf_c(const char * format, ...)
-{
- // Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P
- static char message[500];
- static char temp[500];
- int color1, color2;
-
- /* parse arguments */
- va_list ap;
- va_start(ap, format);
- vsnprintf(message, 500, format, ap);
- va_end(ap);
-
- /* search for unix-style escape sequences */
- int t;
- int c = 0;
- const char * p = message;
- while (*p != 0)
- {
- if (*p == '\033')
- {
- // Escape sequence -> copy into the temp buffer, and parse the color.
- p++;
- t = 0;
- while ((*p) && (*p != 'm'))
- {
- temp[t++] = *p;
- ++p;
- }
-
- temp[t] = 0;
- p++;
-
- if (*temp == '[')
- {
- if (sscanf(temp, "[%u;%u", &color1, &color2) == 2)
- {
- switch(color2)
- {
- case 32: // Green
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow
- break;
-
- default: // Unknown
- // White
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
- break;
- }
- }
- else
- {
- switch (*(temp+1))
- {
- case '0':
- // Returning to normal colour.
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
- break;
-
- case '1':
- // White
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);
- break;
-
- default:
- char message[50];
- sprintf(message, "Unknown color code: %s", temp);
- MessageBoxA(0, message, message, MB_OK);
- break;
- }
- }
- }
- }
-
- putchar(*p);
- ++c;
- ++p;
- }
-
- return c;
-}
-
-#endif
-
diff --git a/win/configure.cpp b/win/configure.cpp
index f05b00f8e..6f821894b 100644
--- a/win/configure.cpp
+++ b/win/configure.cpp
@@ -29,12 +29,17 @@
#include <windows.h>
#include <stdio.h>
#include <process.h>
+#include "../include/consolecolors.h"
+
+WORD g_wOriginalColors;
+WORD g_wBackgroundColor;
+HANDLE g_hStdout;
+
#include <iostream>
#include <string>
#include <vector>
#include <time.h>
#include "inspircd_win32wrapper.h"
-#include "colors.h"
using namespace std;
void Run();
@@ -43,8 +48,6 @@ void WriteCompileModules(const vector<string> &, const vector<string> &);
void WriteCompileCommands();
void CopyExtras();
-inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }
-
#ifdef _WIN64
// /MACHINE:X64
#ifdef _DEBUG
@@ -64,12 +67,12 @@ int get_int_option(const char * text, int def)
{
static char buffer[500];
int ret;
- printf_c("%s\n[\033[1;32m%u\033[0m] -> ", text, def);
+ std::cout << text << std::endl << " [" << con_green << def << con_reset << "] -> ";
fgets(buffer, sizeof(buffer), stdin);
if(sscanf(buffer, "%u", &ret) != 1)
ret = def;
- printf("\n");
+ std::cout << std::endl;
return ret;
}
@@ -77,28 +80,28 @@ bool get_bool_option(const char * text, bool def)
{
static char buffer[500];
char ret[100];
- printf_c("%s [\033[1;32m%c\033[0m] -> ", text, def ? 'y' : 'n');
+ std::cout << text << " [" << con_green << (def ? 'y' : 'n') << con_reset << "] -> ";
fgets(buffer, sizeof(buffer), stdin);
if(sscanf(buffer, "%s", ret) != 1)
strcpy(ret, def ? "y" : "n");
- printf("\n");
+ std::cout << std::endl;
return !strnicmp(ret, "y", 1);
}
string get_string_option(const char * text, char * def)
{
if (def && *def)
- printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def);
+ std::cout << text << std::endl << "[" << con_green << def << con_reset << "] -> ";
else
- printf_c("%s\n[] -> ", text);
+ std::cout << text << std::endl << "[] -> ";
char buffer[1000], buf[1000];
fgets(buffer, sizeof(buffer), stdin);
if (sscanf(buffer, "%s", buf) != 1)
strcpy(buf, def);
- printf("\n");
+ std::cout << std::endl;
return buf;
}
@@ -228,6 +231,20 @@ int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPS
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
+ // Initialize the console values
+ g_hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO bufinf;
+ if(GetConsoleScreenBufferInfo(g_hStdout, &bufinf))
+ {
+ g_wOriginalColors = bufinf.wAttributes & 0x00FF;
+ g_wBackgroundColor = bufinf.wAttributes & 0x00F0;
+ }
+ else
+ {
+ g_wOriginalColors = FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN;
+ g_wBackgroundColor = 0;
+ }
+
Banner();
Run();
FreeConsole();
@@ -236,14 +253,14 @@ int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPS
void Banner()
{
- printf_c("\nWelcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)\n"
- "\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m\n\n");
- printf_c("*** If you are unsure of any of these values, leave it blank for ***\n"
- "*** standard settings that will work, and your server will run ***\n"
- "*** using them. Please consult your IRC network admin if in doubt. ***\n\n"
- "Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter\n"
- "a new value. Please note: You will \033[1mHAVE\033[0m to read the docs\n"
- "dir, otherwise you won't have a config file!\n\n");
+ std::cout << std::endl << "Welcome to the " << con_white_bright << "InspIRCd" << con_reset << " Configuration program! (" << con_white_bright << "interactive mode" << con_reset << ")" << std::endl
+ << con_white_bright << "Package maintainers: Type ./configure --help for non-interactive help" << con_reset << std::endl << std::endl
+ << "*** If you are unsure of any of these values, leave it blank for ***" << std::endl
+ << "*** standard settings that will work, and your server will run ***" << std::endl
+ << "*** using them. Please consult your IRC network admin if in doubt. ***" << std::endl << std::endl
+ << "Press " << con_white_bright << "<RETURN>" << con_reset << " to accept the default for any option, or enter" << std::endl
+ << "a new value. Please note: You will " << con_white_bright << "HAVE" << con_reset << " to read the docs" << std::endl
+ << "dir, otherwise you won't have a config file!" << std::endl << std::endl;
}
@@ -278,14 +295,14 @@ void Run()
string branch(version);
branch.erase(branch.find_last_of('.'));
+ std::cout << "Your operating system is: " << con_green << "Windows " <<
#ifdef _WIN64
- printf_c("Your operating system is: \033[1;32mWindows x64\033[0m\n");
+ "x64 (64-bit)"
#else
- printf_c("Your operating system is: \033[1;32mWindows x86\033[0m\n");
+ "x86 (32-bit)"
#endif
- printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", (!revision.empty() && revision != "0") ? revision.c_str() : "(Non-GIT build)");
-
- printf_c("\033[1mExtra modules.\033[0m\n");
+ << con_reset << std::endl << "InspIRCd revision ID: " << con_green << ( (!revision.empty() && revision != "0") ? revision : "(Non-GIT build)" ) << con_reset << std::endl << std::endl
+ << con_white_bright << "Extra modules." << con_reset << std::endl;
if (get_bool_option("Do you want to compile any extra non-core modules?", false))
{
string extra_i_path = get_string_option("Extra include search paths separate by \";\"", ".");
@@ -295,7 +312,7 @@ void Run()
extra_lib_paths = get_dir_list(extra_l_path);
}
- printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
+ std::cout << con_white_bright << "All paths are relative to the binary directory." << con_reset << std::endl;
string base_path = get_string_option("In what directory do you wish to install the InspIRCd base?", "..");
string config_path = get_string_option("In what directory are the configuration files?", "conf");
string mod_path = get_string_option("In what directory are the modules to be compiled to?", "modules");
@@ -303,25 +320,24 @@ void Run()
string log_path = get_string_option("In what directory is the logs to be placed in?", "logs");
string bin_dir = get_string_option("In what directory is the IRCd binary to be placed?", ".");
- printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
+ std::cout << std::endl << con_green << "Pre-build configuration is complete!" << std::endl << std::endl;
CopyExtras();
// dump all the options back out
- printf_c("\033[0mBase install path:\033[1;32m\t%s\n", base_path.c_str());
- printf_c("\033[0mConfig path:\033[1;32m\t\t%s\n", config_path.c_str());
- printf_c("\033[0mModule path:\033[1;32m\t\t%s\n", mod_path.c_str());
- printf_c("\033[0mData path:\033[1;32m\t\t%s\n", data_path.c_str());
- printf_c("\033[0mLog path:\033[1;32m\t\t%s\n", log_path.c_str());
- printf_c("\033[0mSocket Engine:\033[1;32m\t\t%s\n", "select");
-
- printf("\n"); sc(TNORMAL);
+ std::cout << con_reset << "Base install path:\t" << con_green << base_path << std::endl
+ << con_reset << "Config path:\t" << con_green << config_path << std::endl
+ << con_reset << "Module path:\t" << con_green << mod_path << std::endl
+ << con_reset << "Data path:\t"<< con_green << data_path << std::endl
+ << con_reset << "Log path:\t" << con_green << log_path << std::endl
+ << con_reset << "Socket Engine:\t" << con_green << "select" << con_reset << std::endl;
+
if(get_bool_option("Are these settings correct?", true) == false)
{
Run();
return;
}
- printf("\n");
+ std::cout << std::endl;
// escape the pathes
escape_string(data_path);
@@ -347,7 +363,7 @@ void Run()
fprintf(f, "#endif\n\n");
fclose(f);
- sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+ std::cout << con_green << "done" << con_reset << std::endl;
printf("Writing inspircd_version.h...");
f = fopen("..\\include\\inspircd_version.h", "w");
fprintf(f, "#define BRANCH \"%s\"\n", branch.c_str());
@@ -356,11 +372,11 @@ void Run()
fprintf(f, "#define SYSTEM \"%s\"\n", machine_text);
fclose(f);
- sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+ std::cout << con_green << "done" << con_reset << std::endl;
printf("Writing command and module compilation scripts...");
WriteCompileCommands();
WriteCompileModules(extra_include_paths, extra_lib_paths);
- sc(TGREEN); printf(" done\n"); sc(TNORMAL);
+ std::cout << con_green << "done" << con_reset << std::endl;
printf("\nconfigure is done.. exiting!\n");
}
@@ -390,8 +406,7 @@ void CopyExtras()
{
fclose(x);
CopyFileA(src, dest, false);
- sc(TGREEN); printf(" %s", fd.cFileName); sc(TNORMAL);
- printf("...\n");
+ std::cout << con_green << "\t" << fd.cFileName << con_reset << "..." << std::endl;
}
}
while (FindNextFileA(fh, &fd));
@@ -409,10 +424,10 @@ void WriteCompileCommands()
WIN32_FIND_DATAA fd;
HANDLE fh = FindFirstFileA("..\\src\\commands\\cmd_*.cpp", &fd);
if(fh == INVALID_HANDLE_VALUE)
- printf_c("\033[1;32m No command sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
+ std::cout << con_green << " No command sources could be found! This *could* be a bad thing.. :P" << con_reset << std::endl;
else
{
- sc(TGREEN);
+ std::cout << con_green;
do
{
strcpy(commands[command_count], fd.cFileName);
@@ -420,7 +435,7 @@ void WriteCompileCommands()
printf(" %s\n", commands[command_count]);
++command_count;
} while(FindNextFileA(fh, &fd));
- sc(TNORMAL);
+ std::cout << con_reset;
}
// Write our spiffy new makefile :D
@@ -476,10 +491,10 @@ void WriteCompileModules(const vector<string> &includes, const vector<string> &l
WIN32_FIND_DATAA fd;
HANDLE fh = FindFirstFileA("..\\src\\modules\\m_*.cpp", &fd);
if(fh == INVALID_HANDLE_VALUE)
- printf_c("\033[1;32m No module sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
+ std::cout << con_green << " No module sources could be found! This *could* be a bad thing.. :P" << con_reset << std::endl;
else
{
- sc(TGREEN);
+ std::cout << con_green;
do
{
strcpy(modules[module_count], fd.cFileName);
@@ -487,7 +502,7 @@ void WriteCompileModules(const vector<string> &includes, const vector<string> &l
printf(" %s\n", modules[module_count]);
++module_count;
} while(FindNextFileA(fh, &fd));
- sc(TNORMAL);
+ std::cout << con_reset;
}
string extra_include, extra_lib;
diff --git a/win/configure.vcxproj b/win/configure.vcxproj
index 5e1fd897d..df1175712 100644
--- a/win/configure.vcxproj
+++ b/win/configure.vcxproj
@@ -203,9 +203,6 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
- <ClInclude Include="colors.h" />
- </ItemGroup>
- <ItemGroup>
<ClCompile Include="configure.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/win/inspircd.vcxproj b/win/inspircd.vcxproj
index c4901cdf1..3087a966d 100644
--- a/win/inspircd.vcxproj
+++ b/win/inspircd.vcxproj
@@ -338,6 +338,7 @@ nmake -f modules.mak
<ClInclude Include="..\include\channels.h" />
<ClInclude Include="..\include\command_parse.h" />
<ClInclude Include="..\include\configreader.h" />
+ <ClInclude Include="..\include\consolecolors.h" />
<ClInclude Include="..\include\ctables.h" />
<ClInclude Include="..\include\cull_list.h" />
<ClInclude Include="..\include\dns.h" />
@@ -370,7 +371,6 @@ nmake -f modules.mak
<ClInclude Include="..\include\u_listmode.h" />
<ClInclude Include="..\include\wildcard.h" />
<ClInclude Include="..\include\xline.h" />
- <ClInclude Include="colors.h" />
<ClInclude Include="inspircd_win32wrapper.h" />
<ClInclude Include="win32service.h" />
</ItemGroup>
diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp
index 26d154898..a451dd0df 100644
--- a/win/inspircd_win32wrapper.cpp
+++ b/win/inspircd_win32wrapper.cpp
@@ -25,12 +25,9 @@
#include "inspircd_win32wrapper.h"
#include "inspircd.h"
#include "configreader.h"
-#include "colors.h"
#include <string>
#include <errno.h>
#include <assert.h>
-#include <mmsystem.h>
-#pragma comment(lib, "Winmm.lib")
CoreExport const char *insp_inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
{
diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h
index 1f9936caf..d60276b88 100644
--- a/win/inspircd_win32wrapper.h
+++ b/win/inspircd_win32wrapper.h
@@ -106,9 +106,6 @@ __inline int inet_aton(const char *cp, struct in_addr *addr)
return (addr->s_addr == INADDR_NONE) ? 0 : 1;
};
-/* Handles colors in printf */
-int printf_c(const char * format, ...);
-
/* getopt() wrapper */
#define no_argument 0
#define required_argument 1
diff --git a/win/win32service.cpp b/win/win32service.cpp
index b677b6662..81f8e7516 100644
--- a/win/win32service.cpp
+++ b/win/win32service.cpp
@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <iostream>
static SERVICE_STATUS_HANDLE serviceStatusHandle;
static HANDLE hThreadEvent;
@@ -244,7 +245,7 @@ void InstallService()
scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
if (!scm)
{
- printf("Unable to open service control manager: %s\n", RetrieveLastError());
+ std::cout << "Unable to open service control manager: " << RetrieveLastError() << std::endl;
return;
}
@@ -253,7 +254,7 @@ void InstallService()
if (!myService)
{
- printf("Unable to create service: %s\n", RetrieveLastError());
+ std::cout << "Unable to create service: " << RetrieveLastError() << std::endl;
CloseServiceHandle(scm);
return;
}
@@ -274,7 +275,7 @@ void InstallService()
BOOL success = ChangeServiceConf(myService,SERVICE_CONFIG_DESCRIPTION, &svDesc);
if (!success)
{
- printf("Unable to set service description: %s\n", RetrieveLastError());
+ std::cout << "Unable to set service description: " << RetrieveLastError() << std::endl;
CloseServiceHandle(myService);
CloseServiceHandle(scm);
return;
@@ -283,7 +284,7 @@ void InstallService()
FreeLibrary(advapi32);
}
- printf("Service installed.\n");
+ std::cout << "Service installed." << std::endl;
CloseServiceHandle(myService);
CloseServiceHandle(scm);
}
@@ -296,27 +297,27 @@ void RemoveService()
scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
if (!scm)
{
- printf("Unable to open service control manager: %s\n", RetrieveLastError());
+ std::cout << "Unable to open service control manager: " << RetrieveLastError() << std::endl;
return;
}
myService = OpenService(scm,TEXT("InspIRCd"),SERVICE_ALL_ACCESS);
if (!myService)
{
- printf("Unable to open service: %s\n", RetrieveLastError());
+ std::cout << "Unable to open service: " << RetrieveLastError() << std::endl;
CloseServiceHandle(scm);
return;
}
if (!DeleteService(myService))
{
- printf("Unable to delete service: %s\n", RetrieveLastError());
+ std::cout << "Unable to delete service: " << RetrieveLastError() << std::endl;
CloseServiceHandle(myService);
CloseServiceHandle(scm);
return;
}
- printf("Service removed.\n");
+ std::cout << "Service removed." << std::endl;
CloseServiceHandle(myService);
CloseServiceHandle(scm);
}