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