]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Check for windows drive letters on the start of paths and treat them the same as...
[user/henk/code/inspircd.git] / src / configreader.cpp
index 29dff39caafc32176e3c24d4bb825740096af82b..3f99a52e21791197ad55dbc0bc947ea56f1fb7cc 100644 (file)
@@ -36,7 +36,7 @@ bool DoneELine(ServerConfig* conf, const char* tag);
 ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance)
 {
        this->ClearStack();
-       *ServerName = *Network = *ServerDesc = *AdminName = '\0';
+       *sid = *ServerName = *Network = *ServerDesc = *AdminName = '\0';
        *HideWhoisServer = *AdminEmail = *AdminNick = *diepass = *restartpass = *FixedQuit = *HideKillsServer = '\0';
        *DefaultModes = *CustomVersion = *motd = *rules = *PrefixQuit = *DieValue = *DNSServer = '\0';
        *UserStats = *ModPath = *MyExecutable = *DisabledCommands = *PID = *SuffixQuit = '\0';
@@ -1333,9 +1333,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, FILE* &conf, const char* fil
        include_stack.push_back(filename);
 
        /* Start reading characters... */
-       while (!feof(conf))
+       while ((ch = fgetc(conf)) != EOF)
        {
-               ch = fgetc(conf);
                /*
                 * Fix for moronic windows issue spotted by Adremelech.
                 * Some windows editors save text files as utf-16, which is
@@ -1650,6 +1649,11 @@ bool ServerConfig::DoPipe(ConfigDataHash &target, const std::string &file, std::
        return ret;
 }
 
+bool ServerConfig::StartsWithWindowsDriveLetter(const std::string &path)
+{
+       return (path.length() > 2 && isalpha(path[0]) && path[1] == ':');
+}
+
 bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream)
 {
        std::string confpath;
@@ -1662,7 +1666,7 @@ bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, st
        std::replace(newfile.begin(),newfile.end(),'\\','/');
        std::replace(confpath.begin(),confpath.end(),'\\','/');
 
-       if ((newfile[0] != '/') && (newfile.find("://") == std::string::npos))
+       if ((newfile[0] != '/') && (!StartsWithWindowsDriveLetter(newfile)))
        {
                if((pos = confpath.rfind("/")) != std::string::npos)
                {
@@ -1884,17 +1888,19 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
 
        F.clear();
 
-       if ((*fname != '/') && (*fname != '\\'))
+       if ((*fname != '/') && (*fname != '\\') && (!StartsWithWindowsDriveLetter(fname)))
        {
                std::string::size_type pos;
                std::string confpath = ServerInstance->ConfigFileName;
                std::string newfile = fname;
 
-               if ((pos = confpath.rfind("/")) != std::string::npos)
+               if (((pos = confpath.rfind("/"))) != std::string::npos)
                        newfile = confpath.substr(0, pos) + std::string("/") + fname;
-               else if ((pos = confpath.rfind("\\")) != std::string::npos)
+               else if (((pos = confpath.rfind("\\"))) != std::string::npos)
                        newfile = confpath.substr(0, pos) + std::string("\\") + fname;
 
+               ServerInstance->Logs->Log("config", DEBUG, "Filename: %s", newfile.c_str());
+
                if (!FileExists(newfile.c_str()))
                        return false;
                file =  fopen(newfile.c_str(), "r");
@@ -1915,10 +1921,7 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
                        else
                                *linebuf = 0;
 
-                       if (!feof(file))
-                       {
-                               F.push_back(*linebuf ? linebuf : " ");
-                       }
+                       F.push_back(*linebuf ? linebuf : " ");
                }
 
                fclose(file);
@@ -1960,7 +1963,7 @@ bool ServerConfig::DirValid(const char* dirandfile)
 {
 #ifdef WINDOWS
        return true;
-#endif
+#else
 
        char work[1024];
        char buffer[1024];
@@ -2011,6 +2014,7 @@ bool ServerConfig::DirValid(const char* dirandfile)
        {
                return false;
        }
+#endif
 }
 
 std::string ServerConfig::GetFullProgDir()