Log Message:
-----------
restore checking file signature

Modified Files:
--------------
    pgadmin3/src/include:
        frmRestore.h (r1.2 -> r1.3)
    pgadmin3/src/ui:
        frmRestore.cpp (r1.2 -> r1.3)

Index: frmRestore.h
===================================================================
RCS file: /projects/pgadmin3/src/include/frmRestore.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lsrc/include/frmRestore.h -Lsrc/include/frmRestore.h -u -w -r1.2 -r1.3
--- src/include/frmRestore.h
+++ src/include/frmRestore.h
@@ -35,6 +35,7 @@
     
 private:
     wxString GetHelpPage() const;
+    void OnChangeName(wxCommandEvent &ev);
     void OnChange(wxCommandEvent &ev);
     void OnSelectFilename(wxCommandEvent &ev);
     void OnView(wxCommandEvent &ev);
@@ -46,7 +47,7 @@
 
     frmMain *form;
     pgObject *object;
-    bool viewRunning;
+    bool viewRunning, filenameValid;
 
     DECLARE_EVENT_TABLE()
 };
Index: frmRestore.cpp
===================================================================
RCS file: /projects/pgadmin3/src/ui/frmRestore.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lsrc/ui/frmRestore.cpp -Lsrc/ui/frmRestore.cpp -u -w -r1.2 -r1.3
--- src/ui/frmRestore.cpp
+++ src/ui/frmRestore.cpp
@@ -22,6 +22,7 @@
 #include "pgTable.h"
 #include <wx/process.h>
 #include <wx/textbuf.h>
+#include <wx/file.h>
 
 // Icons
 #include "images/restore.xpm"
@@ -43,7 +44,7 @@
 
 
 BEGIN_EVENT_TABLE(frmRestore, ExternProcessDialog)
-    EVT_TEXT(XRCID("txtFilename"),          frmRestore::OnChange)
+    EVT_TEXT(XRCID("txtFilename"),          frmRestore::OnChangeName)
     EVT_BUTTON(XRCID("btnFilename"),        frmRestore::OnSelectFilename)
     EVT_BUTTON(XRCID("btnOK"),              frmRestore::OnOK)
     EVT_BUTTON(XRCID("btnView"),            frmRestore::OnView)
@@ -72,6 +73,7 @@
     txtMessages = CTRL_TEXT("txtMessages");
     txtMessages->SetMaxLength(0L);
     btnOK->Disable();
+    filenameValid=false;
 
     wxCommandEvent ev;
     OnChange(ev);
@@ -107,9 +109,40 @@
 }
 
 
+void frmRestore::OnChangeName(wxCommandEvent &ev)
+{
+    wxString name=txtFilename->GetValue();
+    if (name.IsEmpty() || !wxFile::Exists(name))
+        filenameValid=false;
+    else
+    {
+        wxFile file(name, wxFile::read);
+        if (file.IsOpened())
+        {
+            char buffer[8];
+            off_t size=file.Read(buffer, 8);
+            if (size == 8)
+            {
+                if (memcmp(buffer, "PGDMP", 5) && !memcmp(buffer, "toc.dat", 8))
+                {
+                    // tar format?
+                    file.Seek(512);
+                    size=file.Read(buffer, 8);
+                }
+                if (size == 8 && !memcmp(buffer, "PGDMP", 5))
+                {
+                    // check version here?
+                    filenameValid=true;
+                }
+            }
+        }
+    }
+    OnChange(ev);
+}
+
+
 void frmRestore::OnChange(wxCommandEvent &ev)
 {
-    bool filenameValid=!txtFilename->GetValue().IsEmpty();
     btnOK->Enable(filenameValid);
     btnView->Enable(filenameValid);
 }
---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to