diff options
author | Dominik Wenger <domonoky@googlemail.com> | 2007-07-15 11:13:18 +0000 |
---|---|---|
committer | Dominik Wenger <domonoky@googlemail.com> | 2007-07-15 11:13:18 +0000 |
commit | 8c964e1be375318791bd8f11f088e0e05e4a4f60 (patch) | |
tree | 21211de77d61cafadfd298608f7ad179313d368b | |
parent | 3d73b8eb16b216637646aede5e81cc01886603e5 (diff) | |
download | rockbox-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.h | 1 | ||||
-rw-r--r-- | rbutil/rbutil.cpp | 49 |
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) | |||
261 | int UnzipFile(wxString src, wxString destdir, bool isInstall) | 268 | int 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); |