]> git.saurik.com Git - wxWidgets.git/commitdiff
return false from wxXmlResource::Load if the resource is corrupted
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 10 Oct 2003 09:48:52 +0000 (09:48 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 10 Oct 2003 09:48:52 +0000 (09:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24151 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

contrib/include/wx/xrc/xmlres.h
contrib/src/xrc/xmlres.cpp
include/wx/xrc/xmlres.h
src/xrc/xmlres.cpp

index 607ed3f8d2402407f32da79b59332a2c3cffb3b1..bf3f3c9d7682167944aca1dddc696ecc8e24c6d8 100644 (file)
@@ -237,7 +237,7 @@ public:
 protected:
     // Scans the resources list for unloaded files and loads them. Also reloads
     // files that have been modified since last loading.
-    void UpdateResources();
+    bool UpdateResources();
 
     // Finds a resource (calls UpdateResources) and returns a node containing it.
     wxXmlNode *FindResource(const wxString& name, const wxString& classname, bool recursive = FALSE);
index 36d3989fc2ea243d724f8314be305be6ab01d49b..cd440746ffd4a5ea1b824bdcf737a7efe143b460 100644 (file)
@@ -142,7 +142,7 @@ bool wxXmlResource::Load(const wxString& filemask)
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
-    return rt;
+    return rt && UpdateResources();
 }
 
 
@@ -321,8 +321,9 @@ static void ProcessPlatformProperty(wxXmlNode *node)
 
 
 
-void wxXmlResource::UpdateResources()
+bool wxXmlResource::UpdateResources()
 {
+    bool rt = true;
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
@@ -350,7 +351,10 @@ void wxXmlResource::UpdateResources()
             file = fsys.OpenFile(m_data[i].File);
             modif = file && file->GetModificationTime() > m_data[i].Time;
             if (!file)
+            {
                 wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str());
+                rt = false;
+            }
             wxDELETE(file);
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
@@ -379,11 +383,13 @@ void wxXmlResource::UpdateResources()
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
             {
                 wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else
                        {
@@ -399,7 +405,10 @@ void wxXmlResource::UpdateResources()
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
+                {
                     wxLogError(_("Resource files must have same version number!"));
+                    rt = false;
+                }
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
                                m_data[i].Time = file->GetModificationTime();
@@ -412,6 +421,8 @@ void wxXmlResource::UpdateResources()
 #           endif
         }
     }
+
+    return rt;
 }
 
 
index 607ed3f8d2402407f32da79b59332a2c3cffb3b1..bf3f3c9d7682167944aca1dddc696ecc8e24c6d8 100644 (file)
@@ -237,7 +237,7 @@ public:
 protected:
     // Scans the resources list for unloaded files and loads them. Also reloads
     // files that have been modified since last loading.
-    void UpdateResources();
+    bool UpdateResources();
 
     // Finds a resource (calls UpdateResources) and returns a node containing it.
     wxXmlNode *FindResource(const wxString& name, const wxString& classname, bool recursive = FALSE);
index 36d3989fc2ea243d724f8314be305be6ab01d49b..cd440746ffd4a5ea1b824bdcf737a7efe143b460 100644 (file)
@@ -142,7 +142,7 @@ bool wxXmlResource::Load(const wxString& filemask)
     }
 #   undef wxXmlFindFirst
 #   undef wxXmlFindNext
-    return rt;
+    return rt && UpdateResources();
 }
 
 
@@ -321,8 +321,9 @@ static void ProcessPlatformProperty(wxXmlNode *node)
 
 
 
-void wxXmlResource::UpdateResources()
+bool wxXmlResource::UpdateResources()
 {
+    bool rt = true;
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
@@ -350,7 +351,10 @@ void wxXmlResource::UpdateResources()
             file = fsys.OpenFile(m_data[i].File);
             modif = file && file->GetModificationTime() > m_data[i].Time;
             if (!file)
+            {
                 wxLogError(_("Cannot open file '%s'."), m_data[i].File.c_str());
+                rt = false;
+            }
             wxDELETE(file);
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
@@ -379,11 +383,13 @@ void wxXmlResource::UpdateResources()
                 wxLogError(_("Cannot load resources from file '%s'."),
                            m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else if (m_data[i].Doc->GetRoot()->GetName() != wxT("resource"))
             {
                 wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), m_data[i].File.c_str());
                 wxDELETE(m_data[i].Doc);
+                rt = false;
             }
             else
                        {
@@ -399,7 +405,10 @@ void wxXmlResource::UpdateResources()
                 if (m_version == -1)
                     m_version = version;
                 if (m_version != version)
+                {
                     wxLogError(_("Resource files must have same version number!"));
+                    rt = false;
+                }
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
                                m_data[i].Time = file->GetModificationTime();
@@ -412,6 +421,8 @@ void wxXmlResource::UpdateResources()
 #           endif
         }
     }
+
+    return rt;
 }