rbutil: fix unzipping (FS#7439) Thanks to Dave Hopper.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13904 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Wenger 2007-07-15 11:13:18 +00:00
parent 3d73b8eb16
commit 8c964e1be3
2 changed files with 37 additions and 13 deletions

View file

@ -29,6 +29,7 @@ static const wxString rbutil_developers[] = {
wxT("Dave Chapman"), wxT("Dave Chapman"),
wxT("Dominik Wenger"), wxT("Dominik Wenger"),
wxT("Bryan Childs"), wxT("Bryan Childs"),
wxT("Dave Hopper"),
wxT("") wxT("")
}; };

View file

@ -111,11 +111,18 @@ bool checkZip(wxString zipname)
wxString name = entry->GetName(); wxString name = entry->GetName();
if(entry->IsDir()) if(entry->IsDir())
{ {
if(name.Contains(wxT(".rockbox"))) if( 0==name.Cmp(wxT(".rockbox"))
{ || 0==name.Cmp(wxT(".rockbox\\"))
return true; || 0==name.Cmp(wxT(".rockbox/")) )
} return true;
} }
else
{
if( name.StartsWith(wxT(".rockbox/"))
|| name.StartsWith(wxT(".rockbox\\")) )
return true;
}
return false; return false;
} }
@ -261,7 +268,7 @@ int DownloadURL(wxString src, wxString dest)
int UnzipFile(wxString src, wxString destdir, bool isInstall) int UnzipFile(wxString src, wxString destdir, bool isInstall)
{ {
wxZipEntryPtr entry; wxZipEntryPtr entry;
wxString in_str, progress_msg, buf; wxString in_str, progress_msg, buf,subdir;
int errnum = 0, curfile = 0, totalfiles = 0; int errnum = 0, curfile = 0, totalfiles = 0;
InstallLog* log = NULL; InstallLog* log = NULL;
@ -324,7 +331,8 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
curfile++; curfile++;
wxString name = entry->GetName(); wxString name = entry->GetName();
progress_msg = wxT("Unpacking ") + name; progress_msg = wxT("Unpacking ") + name;
if (! progress->Update(curfile, progress_msg) ) { if (! progress->Update(curfile, progress_msg) )
{
MESG_DIALOG(wxT("Unpacking cancelled by user")); MESG_DIALOG(wxT("Unpacking cancelled by user"));
errnum = 1000; errnum = 1000;
break; break;
@ -332,16 +340,31 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
in_str = destdir + wxT("" PATH_SEP) + name; in_str = destdir + wxT("" PATH_SEP) + name;
if (entry->IsDir() ) { subdir = wxPathOnly(in_str);
if (!wxDirExists(in_str) ) { if(!(wxDirExists(subdir)))
if (! wxMkdir(in_str, 0777) ) { {
buf = wxT("Unable to create directory ") + in_str; if (! wxMkdir(subdir, 0777) )
{
buf = wxT("Unable to create directory ") + subdir;
errnum = 100;
break;
}
log->WriteFile(subdir, true); // Directory
}
if(entry->IsDir())
{
if(!wxDirExists(name))
{
if(!wxMkdir(name, 0777) )
{
buf = wxT("Unable to create directory ") + name;
errnum = 100; errnum = 100;
break; break;
} }
} }
log->WriteFile(name, true); // Directory log->WriteFile(name, true); // Directory
continue; continue; // this is just a directory, nothing else to do
} }
wxFFileOutputStream* out = new wxFFileOutputStream(in_str); wxFFileOutputStream* out = new wxFFileOutputStream(in_str);
@ -349,8 +372,8 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
{ {
buf = wxT("Can't open file ") + in_str + wxT(" for writing"); buf = wxT("Can't open file ") + in_str + wxT(" for writing");
delete out; delete out;
delete progress; errnum = 100;
return 100; break;
} else if (isInstall) } else if (isInstall)
{ {
log->WriteFile(name); log->WriteFile(name);