diff options
Diffstat (limited to 'backends/platform/ds/arm9/source/zipreader.cpp')
-rw-r--r-- | backends/platform/ds/arm9/source/zipreader.cpp | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/backends/platform/ds/arm9/source/zipreader.cpp b/backends/platform/ds/arm9/source/zipreader.cpp index 01321f44f5..7af0718a44 100644 --- a/backends/platform/ds/arm9/source/zipreader.cpp +++ b/backends/platform/ds/arm9/source/zipreader.cpp @@ -17,7 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * + * */ @@ -29,25 +29,25 @@ ZipFile::ZipFile() { // Locate a zip file in cartridge memory space - + // consolePrintf("ZIP file check..."); - + char* p = (char *) ZF_SEARCH_START; bool found = false; - + _zipFile = NULL; - + while ((p != (char *) ZF_SEARCH_END) && (!found)) { // Zip file header is: 0x504B0304 - + if ( (*p == 0x50) && (*(p + 1) == 0x4B) && (*(p + 2) == 0x03) && (*(p + 3) == 0x04) ) { // Found header! found = true; _zipFile = p; } - + if (!found) p += ZF_SEARCH_STRIDE; - + } if (_zipFile) { @@ -56,14 +56,14 @@ ZipFile::ZipFile() { // consolePrintf("Not in use!\n"); return; } - + changeToRoot(); restartFile(); - + if (_currentFile->compSize != (u32) getFileSize()) { consolePrintf("Error: ZIP file contains compression!\n"); } - + _allFilesVisible = false; } @@ -83,19 +83,19 @@ bool ZipFile::restartFile() { getFileName(name); more = skipFile(); } - + return more; } bool ZipFile::currentFileInFolder() { char name[128]; - + if (_allFilesVisible) return true; - + getFileName(name); // consolePrintf("N:'%s'D:'%s'\n", name, _directory); - + if (_directory[0] == 0) { // Root directory name[strlen(name) - 1] = 0; return !strchr(name, '\\'); // Not in root if contains a / character before the last character @@ -104,52 +104,52 @@ bool ZipFile::currentFileInFolder() { && (no slashes after the directory || it's the last character) && (slash follows directory) */ - if ((strstr(name, _directory) == name) && (strlen(name) != strlen(_directory)) + if ((strstr(name, _directory) == name) && (strlen(name) != strlen(_directory)) && ((strchr(name + strlen(_directory) + 1, '\\') == NULL) || (strchr(name + strlen(_directory) + 1, '\\') == name + strlen(name) - 1)) && (*(name + strlen(_directory)) == '\\')) { return true; } } - + return false; } void ZipFile::getFileName(char* name) { strncpy(name, (char *) (_currentFile + 1), _currentFile->nameLength); - + for (int r = 0; r < (int) strlen(name); r++) { if (name[r] == '/') name[r] = '\\'; } name[_currentFile->nameLength] = 0; - + if (name[strlen(name) - 1] == '\\') { name[strlen(name) - 1] = 0; - } + } } bool ZipFile::skipFile() { bool valid; do { - + // Move on to the next file _currentFile = (FileHeader *) ( ((char *) (_currentFile)) + sizeof(*_currentFile) + _currentFile->nameLength + _currentFile->fileSize + _currentFile->extraLength ); - + // Return true if there are more files. Check this by looking for the magic number valid = (_currentFile->magic[0] == 0x50) && (_currentFile->magic[1] == 0x4B) && (_currentFile->magic[2] == 0x03) && (_currentFile->magic[3] == 0x04); - - + + } while (valid && !currentFileInFolder()); - + return valid; - + // Currently doesn't handle data descriptors! } @@ -180,7 +180,7 @@ char* ZipFile::getFile() { bool ZipFile::findFile(char* search) { changeToRoot(); restartFile(); - + char searchName[128]; strcpy(searchName, search); for (int r = 0; r < (int) strlen(searchName); r++) { @@ -191,15 +191,15 @@ bool ZipFile::findFile(char* search) { *(searchName + strlen(searchName) - 1) = '\0'; // which we need to dispose of. } - + do { char name[128]; getFileName(name); if (*(name + strlen(name) - 1) == '\\') { // Directories have a terminating slash *(name + strlen(name) - 1) = '\0'; // which we need to dispose of. } - - + + if (!stricmp(name, searchName)) { // consolePrintf("'%s'=='%s'\n", name, searchName); return true; // Got it! @@ -222,7 +222,7 @@ void ZipFile::changeDirectory(char* dir) { for (int r = 0; r < (int) strlen(_directory); r++) { if (_directory[r] == '/') _directory[r] = '\\'; } - + if (_directory[strlen(_directory) - 1] == '\\') { _directory[strlen(_directory) - 1] = '\0'; } |