]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Report failure to load configs
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 11 Nov 2007 18:57:22 +0000 (18:57 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 11 Nov 2007 18:57:22 +0000 (18:57 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8571 e03df62e-2008-0410-955e-edbf42e46eb7

include/configreader.h
src/configreader.cpp
src/inspircd.cpp

index a903bd5d65be46f3ed63e201a513fd21714191de..eed74f10a9b964eb79aa6cd645277019fc266b79 100644 (file)
@@ -242,9 +242,9 @@ class CoreExport ServerConfig : public Extensible
         */
        bool CheckOnce(char* tag);
 
+ public:
+
        std::map<std::string, std::istream*> IncludedFiles;
-  
-  public:
 
        size_t TotalDownloaded;
        size_t FileErrors;
index e9301d70abefe27aab40af865d47fde8d1aacd17..13ef5ddadab82c42631be17929e05ec49f60c8db 100644 (file)
@@ -1268,7 +1268,7 @@ void ServerConfig::StartDownloads()
                ServerInstance->Log(DEBUG,"Begin download for %s", file.c_str());
                if ((file[0] == '/') || (file.substr(0, 7) == "file://"))
                {
-                       ServerInstance->Log(DEBUG,"Core-handled schema for %s %s", file.c_str(), file.substr(0,7).c_str());
+                       ServerInstance->Log(DEBUG,"Core-handled schema for %s", file.c_str());
                        /* For file:// schema files, we use std::ifstream which is a derivative of std::istream.
                         * For all other file schemas, we use a std::stringstream.
                         */
@@ -1282,7 +1282,11 @@ void ServerConfig::StartDownloads()
                                x->second = conf;
                        }
                        else
+                       {
+                               delete x->second;
+                               x->second = NULL;
                                FileErrors++;
+                       }
 
                        TotalDownloaded++;
                }
@@ -1290,6 +1294,12 @@ void ServerConfig::StartDownloads()
                {
                        /* Modules handle these */
                        ServerInstance->Log(DEBUG,"Module-handled schema for %s", x->first.c_str());
+
+                       /* For now, error it */
+                       FileErrors++;
+                       TotalDownloaded++;
+                       delete x->second;
+                       x->second = NULL;
                }
        }
 }
@@ -1321,8 +1331,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
        }
        else
        {
-               /* Check if the file open failed first */
-               if (IncludedFiles.find(filename) == IncludedFiles.end())
+               std::map<std::string, std::istream*>::iterator x = IncludedFiles.find(filename);
+               if (x == IncludedFiles.end())
                {
                        if (pass == 0)
                        {
@@ -1340,7 +1350,15 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o
                        }
                }
                else
-                       conf = IncludedFiles.find(filename)->second;
+               {
+                       if (x->second)
+                               conf = IncludedFiles.find(filename)->second;
+                       else
+                       {
+                               errorstream << "File " << filename << " could not be opened." << std::endl;
+                               return false;
+                       }
+               }
        }
 
        /* Start reading characters... */
index 87af7b06e8bca45c064c0904ea352b2d0f893f0c..e8a7d85dca4f933e632424f6aea209363f1b0e2a 100644 (file)
@@ -515,6 +515,12 @@ InspIRCd::InspIRCd(int argc, char** argv)
                /* One or more file download/access errors, do not
                 * proceed to second pass
                 */
+               for (std::map<std::string, std::istream*>::iterator x = Config->IncludedFiles.begin(); x != Config->IncludedFiles.end(); ++x)
+               {
+                       if (!x->second)
+                               printf("ERROR: Failed to access the file: %s.\n", x->first.c_str());
+               }
+               printf("Initialisation of configuration failed.\n");
                Exit(EXIT_STATUS_CONFIG);
        }