summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2007-07-15 11:13:18 +0000
committerDominik Wenger <domonoky@googlemail.com>2007-07-15 11:13:18 +0000
commit8c964e1be375318791bd8f11f088e0e05e4a4f60 (patch)
tree21211de77d61cafadfd298608f7ad179313d368b
parent3d73b8eb16b216637646aede5e81cc01886603e5 (diff)
downloadrockbox-8c964e1be375318791bd8f11f088e0e05e4a4f60.tar.gz
rockbox-8c964e1be375318791bd8f11f088e0e05e4a4f60.zip
rbutil: fix unzipping (FS#7439) Thanks to Dave Hopper.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13904 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/credits.h1
-rw-r--r--rbutil/rbutil.cpp49
2 files changed, 37 insertions, 13 deletions
diff --git a/rbutil/credits.h b/rbutil/credits.h
index ad56a32af3..5c12fbf7bb 100644
--- a/rbutil/credits.h
+++ b/rbutil/credits.h
@@ -29,6 +29,7 @@ static const wxString rbutil_developers[] = {
29 wxT("Dave Chapman"), 29 wxT("Dave Chapman"),
30 wxT("Dominik Wenger"), 30 wxT("Dominik Wenger"),
31 wxT("Bryan Childs"), 31 wxT("Bryan Childs"),
32 wxT("Dave Hopper"),
32 wxT("") 33 wxT("")
33}; 34};
34 35
diff --git a/rbutil/rbutil.cpp b/rbutil/rbutil.cpp
index 1528ccb2c5..0f58c09707 100644
--- a/rbutil/rbutil.cpp
+++ b/rbutil/rbutil.cpp
@@ -111,11 +111,18 @@ bool checkZip(wxString zipname)
111 wxString name = entry->GetName(); 111 wxString name = entry->GetName();
112 if(entry->IsDir()) 112 if(entry->IsDir())
113 { 113 {
114 if(name.Contains(wxT(".rockbox"))) 114 if( 0==name.Cmp(wxT(".rockbox"))
115 { 115 || 0==name.Cmp(wxT(".rockbox\\"))
116 return true; 116 || 0==name.Cmp(wxT(".rockbox/")) )
117 } 117 return true;
118 }
119 else
120 {
121 if( name.StartsWith(wxT(".rockbox/"))
122 || name.StartsWith(wxT(".rockbox\\")) )
123 return true;
118 } 124 }
125
119 return false; 126 return false;
120} 127}
121 128
@@ -261,7 +268,7 @@ int DownloadURL(wxString src, wxString dest)
261int UnzipFile(wxString src, wxString destdir, bool isInstall) 268int UnzipFile(wxString src, wxString destdir, bool isInstall)
262{ 269{
263 wxZipEntryPtr entry; 270 wxZipEntryPtr entry;
264 wxString in_str, progress_msg, buf; 271 wxString in_str, progress_msg, buf,subdir;
265 int errnum = 0, curfile = 0, totalfiles = 0; 272 int errnum = 0, curfile = 0, totalfiles = 0;
266 InstallLog* log = NULL; 273 InstallLog* log = NULL;
267 274
@@ -324,7 +331,8 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
324 curfile++; 331 curfile++;
325 wxString name = entry->GetName(); 332 wxString name = entry->GetName();
326 progress_msg = wxT("Unpacking ") + name; 333 progress_msg = wxT("Unpacking ") + name;
327 if (! progress->Update(curfile, progress_msg) ) { 334 if (! progress->Update(curfile, progress_msg) )
335 {
328 MESG_DIALOG(wxT("Unpacking cancelled by user")); 336 MESG_DIALOG(wxT("Unpacking cancelled by user"));
329 errnum = 1000; 337 errnum = 1000;
330 break; 338 break;
@@ -332,16 +340,31 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
332 340
333 in_str = destdir + wxT("" PATH_SEP) + name; 341 in_str = destdir + wxT("" PATH_SEP) + name;
334 342
335 if (entry->IsDir() ) { 343 subdir = wxPathOnly(in_str);
336 if (!wxDirExists(in_str) ) { 344 if(!(wxDirExists(subdir)))
337 if (! wxMkdir(in_str, 0777) ) { 345 {
338 buf = wxT("Unable to create directory ") + in_str; 346 if (! wxMkdir(subdir, 0777) )
347 {
348 buf = wxT("Unable to create directory ") + subdir;
349 errnum = 100;
350 break;
351 }
352 log->WriteFile(subdir, true); // Directory
353 }
354
355 if(entry->IsDir())
356 {
357 if(!wxDirExists(name))
358 {
359 if(!wxMkdir(name, 0777) )
360 {
361 buf = wxT("Unable to create directory ") + name;
339 errnum = 100; 362 errnum = 100;
340 break; 363 break;
341 } 364 }
342 } 365 }
343 log->WriteFile(name, true); // Directory 366 log->WriteFile(name, true); // Directory
344 continue; 367 continue; // this is just a directory, nothing else to do
345 } 368 }
346 369
347 wxFFileOutputStream* out = new wxFFileOutputStream(in_str); 370 wxFFileOutputStream* out = new wxFFileOutputStream(in_str);
@@ -349,8 +372,8 @@ int UnzipFile(wxString src, wxString destdir, bool isInstall)
349 { 372 {
350 buf = wxT("Can't open file ") + in_str + wxT(" for writing"); 373 buf = wxT("Can't open file ") + in_str + wxT(" for writing");
351 delete out; 374 delete out;
352 delete progress; 375 errnum = 100;
353 return 100; 376 break;
354 } else if (isInstall) 377 } else if (isInstall)
355 { 378 {
356 log->WriteFile(name); 379 log->WriteFile(name);