From 957330d722db21a389063084a3f7cb059c4d19b6 Mon Sep 17 00:00:00 2001 From: cigumo Date: Thu, 16 Nov 2017 19:53:41 -0300 Subject: [PATCH 1/4] Changes Filesystem::setSource mount order on Android Simplifies the way setSource is handled on Android. It tries to mount first and if that fails it will copy to memory and mount. The /sdcard/lovegame fallback is moved to GameActivity.java. Also a flag is added (mustCacheArchive) that will copy the game.love file to the cache dir, so it can be mounted directly and not loaded to memory, which does not work for large .love files. The Filesystem.cpp change was also submitted to rude/love repo in this push request: https://bitbucket.org/rude/love/pull-requests/99 --- .../modules/filesystem/physfs/Filesystem.cpp | 62 ++++--------- .../java/org/love2d/android/GameActivity.java | 88 +++++++++++++++++-- 2 files changed, 98 insertions(+), 52 deletions(-) diff --git a/love/src/jni/love/src/modules/filesystem/physfs/Filesystem.cpp b/love/src/jni/love/src/modules/filesystem/physfs/Filesystem.cpp index 4d19d58f..3da360e0 100644 --- a/love/src/jni/love/src/modules/filesystem/physfs/Filesystem.cpp +++ b/love/src/jni/love/src/modules/filesystem/physfs/Filesystem.cpp @@ -233,57 +233,29 @@ bool Filesystem::setSource(const char *source) if (!love::android::createStorageDirectories()) SDL_Log("Error creating storage directories!"); - char* game_archive_ptr = NULL; - size_t game_archive_size = 0; - bool archive_loaded = false; + new_search_path = love::android::getSelectedGameFile(); - // try to load the game that was sent to LÖVE via a Intent - archive_loaded = love::android::loadGameArchiveToMemory(love::android::getSelectedGameFile(), &game_archive_ptr, &game_archive_size); - - if (!archive_loaded) + // try mounting first, if that fails, load to memory and mount + if (!PHYSFS_mount(new_search_path.c_str(), nullptr, 1)) { - // try to load the game in the assets/ folder - archive_loaded = love::android::loadGameArchiveToMemory("game.love", &game_archive_ptr, &game_archive_size); - } - - if (archive_loaded) - { - if (!PHYSFS_mountMemory(game_archive_ptr, game_archive_size, love::android::freeGameArchiveMemory, "archive.zip", "/", 0)) + // PHYSFS cannot yet mount a zip file inside an .apk + SDL_Log("Mounting %s did not work. Loading to memory.", + new_search_path.c_str()); + char* game_archive_ptr = NULL; + size_t game_archive_size = 0; + if (!love::android::loadGameArchiveToMemory( + new_search_path.c_str(), &game_archive_ptr, + &game_archive_size)) { - SDL_Log("Mounting of in-memory game archive failed!"); - love::android::freeGameArchiveMemory(game_archive_ptr); + SDL_Log("Failure memory loading archive %s", new_search_path.c_str()); return false; } - } - else - { - // try to load the game in the directory that was sent to LÖVE via an - // Intent ... - std::string game_path = std::string(love::android::getSelectedGameFile()); - - if (game_path == "") + if (!PHYSFS_mountMemory( + game_archive_ptr, game_archive_size, + love::android::freeGameArchiveMemory, "archive.zip", "/", 0)) { - // ... or fall back to the game at /sdcard/lovegame - game_path = "/sdcard/lovegame/"; - } - - SDL_RWops *sdcard_main = SDL_RWFromFile(std::string(game_path + "main.lua").c_str(), "rb"); - - if (sdcard_main) - { - new_search_path = game_path; - sdcard_main->close(sdcard_main); - - if (!PHYSFS_mount(new_search_path.c_str(), nullptr, 1)) - { - SDL_Log("mounting of %s failed", new_search_path.c_str()); - return false; - } - } - else - { - // Neither assets/game.love or /sdcard/lovegame was mounted - // sucessfully, therefore simply fail. + SDL_Log("Failure mounting in-memory archive."); + love::android::freeGameArchiveMemory(game_archive_ptr); return false; } } diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index 215fe830..3d8e5884 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -2,9 +2,11 @@ package org.love2d.android; import org.libsdl.app.SDLActivity; +import java.util.Arrays; import java.util.List; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -39,7 +41,7 @@ public class GameActivity extends SDLActivity { private static Context context; private static Vibrator vibrator = null; private static boolean immersiveActive = false; - + private static boolean mustCacheArchive = false; @Override protected String[] getLibraries() { return new String[] { @@ -76,14 +78,13 @@ public class GameActivity extends SDLActivity { handleIntent (intent); resetNative(); startNative(); - }; + } protected void handleIntent (Intent intent) { Uri game = intent.getData(); if (game != null) { if (game.getScheme().equals ("file")) { Log.d("GameActivity", "Received intent with path: " + game.getPath()); - // If we were given the path of a main.lua then use its // directory. Otherwise use full path. List path_segments = game.getPathSegments(); @@ -93,12 +94,36 @@ public class GameActivity extends SDLActivity { gamePath = game.getPath(); } } else { - copyGameToCache (game); + // if archive exists, copy it to the cache + copyGameToCache (game); + return; } - Log.d("GameActivity", "new gamePath: " + gamePath); + + } else { + boolean archiveExists = false; + try { + List assets = Arrays.asList(getAssets().list("")); + archiveExists = assets.contains("game.love"); + } catch (Exception e) { + Log.d("GameActivity", "could not list application assets:" + e.getMessage()); + } + if (archiveExists) { + String df = this.getCacheDir().getPath()+"/game.love"; + if (mustCacheArchive && copyAssetFile("game.love",df)) + gamePath = df; + else + gamePath = "game.love"; + } else { + File ext = Environment.getExternalStorageDirectory(); + if ((new File(ext,"/lovegame/main.lua")).exists()) { + gamePath = ext.getPath() + "/lovegame/"; + } + } + + Log.d("GameActivity", "new gamePath: " + gamePath); } - }; + } @Override protected void onDestroy() { @@ -198,7 +223,56 @@ public class GameActivity extends SDLActivity { i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } - + + boolean copyAssetFile(String fileName, String destF) + { + boolean success = false; + + // open streams + BufferedOutputStream bos = null; + try { + bos = new BufferedOutputStream(new FileOutputStream(destF, false)); + } catch (IOException e) { + Log.d ("GameActivity", "Could not open destination file:" + e.getMessage()); + } + InputStream ins = null; + try { + ins = getAssets().open(fileName); + } catch (IOException e) { + Log.d("GameActivity", "Could not open game file:" + e.getMessage()); + } + + // copy + int bytes_written = 0; + if (ins != null && bos != null) { + int chunk_read = 0; + try { + byte[] buf = new byte[8192]; + chunk_read = ins.read(buf); + do { + bos.write(buf, 0, chunk_read); + bytes_written += chunk_read; + chunk_read = ins.read(buf); + } while(chunk_read != -1); + } catch (IOException e) { + Log.d ("GameActivity", "Copying failed:" + e.getMessage()); + } + } + + // close streams + try { + if (ins != null) ins.close(); + if (bos != null) bos.close(); + success = true; + } catch (IOException e) { + Log.d ("GameActivity", "Copying failed: " + e.getMessage()); + } + + Log.d("GameActivity", "Copied " + fileName + " to " + destF + + ". Wrote:" + bytes_written + " bytes"); + return success; + } + void copyGameToCache (Uri sourceuri) { String destinationFilename = this.getCacheDir().getPath()+"/downloaded.love"; From 391429367db4ab762aebbc5ed56b70c947280f8c Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Tue, 26 Dec 2017 13:37:35 +0100 Subject: [PATCH 2/4] Updated gradle scripts so that it uses newer gradle version --- app/build.gradle | 4 ++-- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 0 love/build.gradle | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) mode change 100644 => 100755 gradlew diff --git a/app/build.gradle b/app/build.gradle index 263ef5c9..b819ac12 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "26.0.2" defaultConfig { applicationId "org.love2d.android" versionCode 22 versionName "0.10.2" minSdkVersion 10 - targetSdkVersion 18 + targetSdkVersion 25 } buildTypes { release { diff --git a/build.gradle b/build.gradle index e48302d0..de2eee4d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f3..0e24ff08 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 28 10:00:20 PST 2015 +#Tue Dec 26 11:41:12 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/love/build.gradle b/love/build.gradle index 6df3f799..4d84630e 100644 --- a/love/build.gradle +++ b/love/build.gradle @@ -7,15 +7,15 @@ android { // and http://stackoverflow.com/questions/27277433/why-does-gradle-build-my-module-in-release-mode-when-the-app-is-in-debug // defaultPublishConfig "debug" compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "26.0.2" defaultConfig { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "26.0.2" minSdkVersion 10 externalNativeBuild { ndkBuild { - arguments "-j2" + arguments "-j4" } } ndk { @@ -49,5 +49,5 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:25.0.0' + compile 'com.android.support:appcompat-v7:25.1.0' } From f68cf2fcc47058394f09940a6b070b913b68b735 Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Tue, 26 Dec 2017 14:10:08 +0100 Subject: [PATCH 3/4] Upgraded physfs to 3.0.1 --- love/src/jni/love/Android.mk | 2 +- love/src/jni/physfs-2.1.0/README.txt | 7 - love/src/jni/physfs-2.1.0/docs/INSTALL.txt | 152 - .../extras/makecasefoldhashtable.pl | 85 - .../jni/physfs-2.1.0/src/archiver_iso9660.c | 961 --- love/src/jni/physfs-2.1.0/src/archiver_lzma.c | 699 -- love/src/jni/physfs-2.1.0/src/archiver_slb.c | 126 - .../jni/physfs-2.1.0/src/archiver_unpacked.c | 464 -- love/src/jni/physfs-2.1.0/src/lzma/7zC.txt | 237 - .../jni/physfs-2.1.0/src/lzma/7zFormat.txt | 471 -- love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.c | 32 - love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.h | 21 - .../src/jni/physfs-2.1.0/src/lzma/C/7zCrcT8.c | 40 - love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.c | 119 - love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.h | 29 - .../src/lzma/C/Archive/7z/7zAlloc.c | 70 - .../src/lzma/C/Archive/7z/7zAlloc.h | 20 - .../src/lzma/C/Archive/7z/7zBuffer.c | 29 - .../src/lzma/C/Archive/7z/7zBuffer.h | 19 - .../src/lzma/C/Archive/7z/7zDecode.c | 345 - .../src/lzma/C/Archive/7z/7zDecode.h | 20 - .../src/lzma/C/Archive/7z/7zExtract.c | 119 - .../src/lzma/C/Archive/7z/7zExtract.h | 40 - .../src/lzma/C/Archive/7z/7zHeader.c | 5 - .../src/lzma/C/Archive/7z/7zHeader.h | 55 - .../physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.c | 1314 ---- .../physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.h | 55 - .../src/lzma/C/Archive/7z/7zItem.c | 134 - .../src/lzma/C/Archive/7z/7zItem.h | 95 - .../src/lzma/C/Archive/7z/7zMain.c | 428 -- .../src/lzma/C/Archive/7z/7zMethodID.c | 10 - .../src/lzma/C/Archive/7z/7zMethodID.h | 10 - .../src/lzma/C/Archive/7z/7z_C.dsp | 211 - .../src/lzma/C/Archive/7z/7z_C.dsw | 29 - .../src/lzma/C/Archive/7z/makefile | 74 - .../src/lzma/C/Archive/7z/makefile.gcc | 55 - .../src/lzma/C/Compress/Branch/BranchARM.c | 26 - .../src/lzma/C/Compress/Branch/BranchARM.h | 10 - .../lzma/C/Compress/Branch/BranchARMThumb.c | 35 - .../lzma/C/Compress/Branch/BranchARMThumb.h | 10 - .../src/lzma/C/Compress/Branch/BranchIA64.c | 66 - .../src/lzma/C/Compress/Branch/BranchIA64.h | 10 - .../src/lzma/C/Compress/Branch/BranchPPC.c | 36 - .../src/lzma/C/Compress/Branch/BranchPPC.h | 10 - .../src/lzma/C/Compress/Branch/BranchSPARC.c | 36 - .../src/lzma/C/Compress/Branch/BranchSPARC.h | 10 - .../src/lzma/C/Compress/Branch/BranchTypes.h | 51 - .../src/lzma/C/Compress/Branch/BranchX86.c | 84 - .../src/lzma/C/Compress/Branch/BranchX86.h | 12 - .../src/lzma/C/Compress/Branch/BranchX86_2.c | 135 - .../src/lzma/C/Compress/Branch/BranchX86_2.h | 28 - .../lzma/C/Compress/Huffman/HuffmanEncode.c | 146 - .../lzma/C/Compress/Huffman/HuffmanEncode.h | 18 - .../src/lzma/C/Compress/Lz/LzHash.h | 53 - .../src/lzma/C/Compress/Lz/MatchFinder.c | 742 -- .../src/lzma/C/Compress/Lz/MatchFinder.h | 106 - .../src/lzma/C/Compress/Lz/MatchFinderMt.c | 806 --- .../src/lzma/C/Compress/Lz/MatchFinderMt.h | 95 - .../src/lzma/C/Compress/Lzma/LzmaDecode.c | 584 -- .../src/lzma/C/Compress/Lzma/LzmaDecode.h | 113 - .../src/lzma/C/Compress/Lzma/LzmaDecodeSize.c | 712 -- .../lzma/C/Compress/Lzma/LzmaStateDecode.c | 521 -- .../lzma/C/Compress/Lzma/LzmaStateDecode.h | 96 - .../src/lzma/C/Compress/Lzma/LzmaStateTest.c | 195 - .../src/lzma/C/Compress/Lzma/LzmaTest.c | 342 - .../src/lzma/C/Compress/Lzma/LzmaTypes.h | 45 - .../src/jni/physfs-2.1.0/src/lzma/C/CpuArch.h | 18 - .../src/jni/physfs-2.1.0/src/lzma/C/IStream.h | 19 - love/src/jni/physfs-2.1.0/src/lzma/C/Sort.c | 92 - love/src/jni/physfs-2.1.0/src/lzma/C/Sort.h | 11 - .../src/jni/physfs-2.1.0/src/lzma/C/Threads.c | 106 - .../src/jni/physfs-2.1.0/src/lzma/C/Threads.h | 69 - love/src/jni/physfs-2.1.0/src/lzma/C/Types.h | 100 - .../src/lzma/CPP/7zip/Archive/7z/7z.ico | Bin 4710 -> 0 bytes .../CPP/7zip/Archive/7z/7zCompressionMode.cpp | 3 - .../CPP/7zip/Archive/7z/7zCompressionMode.h | 50 - .../src/lzma/CPP/7zip/Archive/7z/7zDecode.cpp | 330 - .../src/lzma/CPP/7zip/Archive/7z/7zDecode.h | 68 - .../src/lzma/CPP/7zip/Archive/7z/7zEncode.cpp | 453 -- .../src/lzma/CPP/7zip/Archive/7z/7zEncode.h | 55 - .../lzma/CPP/7zip/Archive/7z/7zExtract.cpp | 269 - .../CPP/7zip/Archive/7z/7zFolderInStream.cpp | 130 - .../CPP/7zip/Archive/7z/7zFolderInStream.h | 66 - .../CPP/7zip/Archive/7z/7zFolderOutStream.cpp | 165 - .../CPP/7zip/Archive/7z/7zFolderOutStream.h | 60 - .../lzma/CPP/7zip/Archive/7z/7zHandler.cpp | 793 --- .../src/lzma/CPP/7zip/Archive/7z/7zHandler.h | 146 - .../lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp | 464 -- .../src/lzma/CPP/7zip/Archive/7z/7zHeader.cpp | 27 - .../src/lzma/CPP/7zip/Archive/7z/7zHeader.h | 96 - .../src/lzma/CPP/7zip/Archive/7z/7zIn.cpp | 1206 ---- .../src/lzma/CPP/7zip/Archive/7z/7zIn.h | 235 - .../src/lzma/CPP/7zip/Archive/7z/7zItem.h | 184 - .../src/lzma/CPP/7zip/Archive/7z/7zOut.cpp | 1026 --- .../src/lzma/CPP/7zip/Archive/7z/7zOut.h | 193 - .../lzma/CPP/7zip/Archive/7z/7zProperties.cpp | 162 - .../lzma/CPP/7zip/Archive/7z/7zProperties.h | 22 - .../lzma/CPP/7zip/Archive/7z/7zRegister.cpp | 18 - .../lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp | 24 - .../lzma/CPP/7zip/Archive/7z/7zSpecStream.h | 35 - .../src/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp | 1029 --- .../src/lzma/CPP/7zip/Archive/7z/7zUpdate.h | 80 - .../src/lzma/CPP/7zip/Archive/7z/StdAfx.cpp | 3 - .../src/lzma/CPP/7zip/Archive/7z/StdAfx.h | 9 - .../src/lzma/CPP/7zip/Archive/Archive.def | 6 - .../src/lzma/CPP/7zip/Archive/Archive2.def | 9 - .../lzma/CPP/7zip/Archive/ArchiveExports.cpp | 130 - .../CPP/7zip/Archive/Common/CoderMixer2.cpp | 121 - .../CPP/7zip/Archive/Common/CoderMixer2.h | 174 - .../CPP/7zip/Archive/Common/CoderMixer2MT.cpp | 228 - .../CPP/7zip/Archive/Common/CoderMixer2MT.h | 80 - .../Archive/Common/CrossThreadProgress.cpp | 15 - .../7zip/Archive/Common/CrossThreadProgress.h | 37 - .../7zip/Archive/Common/DummyOutStream.cpp | 22 - .../CPP/7zip/Archive/Common/DummyOutStream.h | 23 - .../CPP/7zip/Archive/Common/HandlerOut.cpp | 618 -- .../lzma/CPP/7zip/Archive/Common/HandlerOut.h | 86 - .../7zip/Archive/Common/InStreamWithCRC.cpp | 40 - .../CPP/7zip/Archive/Common/InStreamWithCRC.h | 69 - .../CPP/7zip/Archive/Common/ItemNameUtils.cpp | 59 - .../CPP/7zip/Archive/Common/ItemNameUtils.h | 24 - .../CPP/7zip/Archive/Common/MultiStream.cpp | 201 - .../CPP/7zip/Archive/Common/MultiStream.h | 76 - .../7zip/Archive/Common/OutStreamWithCRC.cpp | 24 - .../7zip/Archive/Common/OutStreamWithCRC.h | 38 - .../7zip/Archive/Common/ParseProperties.cpp | 174 - .../CPP/7zip/Archive/Common/ParseProperties.h | 18 - .../src/lzma/CPP/7zip/Archive/DllExports2.cpp | 82 - .../src/lzma/CPP/7zip/Archive/IArchive.h | 207 - .../lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp | 1453 ---- .../lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw | 29 - .../lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp | 3 - .../lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h | 9 - .../lzma/CPP/7zip/Bundles/Alone7z/makefile | 236 - .../lzma/CPP/7zip/Bundles/Alone7z/resource.rc | 3 - .../7zip/Bundles/Format7zExtractR/StdAfx.cpp | 3 - .../7zip/Bundles/Format7zExtractR/StdAfx.h | 9 - .../7zip/Bundles/Format7zExtractR/makefile | 165 - .../7zip/Bundles/Format7zExtractR/resource.rc | 5 - .../CPP/7zip/Bundles/Format7zR/StdAfx.cpp | 3 - .../lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h | 9 - .../lzma/CPP/7zip/Bundles/Format7zR/makefile | 188 - .../CPP/7zip/Bundles/Format7zR/resource.rc | 5 - .../src/lzma/CPP/7zip/Common/CreateCoder.cpp | 292 - .../src/lzma/CPP/7zip/Common/CreateCoder.h | 98 - .../CPP/7zip/Common/FilePathAutoRename.cpp | 57 - .../lzma/CPP/7zip/Common/FilePathAutoRename.h | 10 - .../src/lzma/CPP/7zip/Common/FileStreams.cpp | 261 - .../src/lzma/CPP/7zip/Common/FileStreams.h | 143 - .../src/lzma/CPP/7zip/Common/FilterCoder.cpp | 264 - .../src/lzma/CPP/7zip/Common/FilterCoder.h | 143 - .../src/lzma/CPP/7zip/Common/InBuffer.cpp | 83 - .../src/lzma/CPP/7zip/Common/InBuffer.h | 75 - .../lzma/CPP/7zip/Common/InOutTempBuffer.cpp | 122 - .../lzma/CPP/7zip/Common/InOutTempBuffer.h | 55 - .../lzma/CPP/7zip/Common/LimitedStreams.cpp | 24 - .../src/lzma/CPP/7zip/Common/LimitedStreams.h | 33 - .../src/lzma/CPP/7zip/Common/LockedStream.cpp | 23 - .../src/lzma/CPP/7zip/Common/LockedStream.h | 38 - .../src/lzma/CPP/7zip/Common/MethodId.cpp | 27 - .../src/lzma/CPP/7zip/Common/MethodId.h | 10 - .../src/lzma/CPP/7zip/Common/MethodProps.cpp | 96 - .../src/lzma/CPP/7zip/Common/MethodProps.h | 41 - .../src/lzma/CPP/7zip/Common/OffsetStream.cpp | 35 - .../src/lzma/CPP/7zip/Common/OffsetStream.h | 25 - .../src/lzma/CPP/7zip/Common/OutBuffer.cpp | 119 - .../src/lzma/CPP/7zip/Common/OutBuffer.h | 64 - .../lzma/CPP/7zip/Common/ProgressUtils.cpp | 42 - .../src/lzma/CPP/7zip/Common/ProgressUtils.h | 34 - .../src/lzma/CPP/7zip/Common/RegisterArc.h | 36 - .../src/lzma/CPP/7zip/Common/RegisterCodec.h | 33 - .../src/lzma/CPP/7zip/Common/StdAfx.h | 9 - .../src/lzma/CPP/7zip/Common/StreamBinder.cpp | 150 - .../src/lzma/CPP/7zip/Common/StreamBinder.h | 32 - .../lzma/CPP/7zip/Common/StreamObjects.cpp | 68 - .../src/lzma/CPP/7zip/Common/StreamObjects.h | 117 - .../src/lzma/CPP/7zip/Common/StreamUtils.cpp | 44 - .../src/lzma/CPP/7zip/Common/StreamUtils.h | 11 - .../src/lzma/CPP/7zip/Common/VirtThread.cpp | 45 - .../src/lzma/CPP/7zip/Common/VirtThread.h | 23 - .../src/lzma/CPP/7zip/Compress/Branch/ARM.cpp | 19 - .../src/lzma/CPP/7zip/Compress/Branch/ARM.h | 10 - .../CPP/7zip/Compress/Branch/ARMThumb.cpp | 20 - .../lzma/CPP/7zip/Compress/Branch/ARMThumb.h | 10 - .../CPP/7zip/Compress/Branch/BCJ2Register.cpp | 18 - .../CPP/7zip/Compress/Branch/BCJRegister.cpp | 18 - .../CPP/7zip/Compress/Branch/BranchCoder.cpp | 18 - .../CPP/7zip/Compress/Branch/BranchCoder.h | 45 - .../7zip/Compress/Branch/BranchRegister.cpp | 34 - .../lzma/CPP/7zip/Compress/Branch/IA64.cpp | 19 - .../src/lzma/CPP/7zip/Compress/Branch/IA64.h | 10 - .../src/lzma/CPP/7zip/Compress/Branch/PPC.cpp | 19 - .../src/lzma/CPP/7zip/Compress/Branch/PPC.h | 10 - .../lzma/CPP/7zip/Compress/Branch/SPARC.cpp | 19 - .../src/lzma/CPP/7zip/Compress/Branch/SPARC.h | 10 - .../lzma/CPP/7zip/Compress/Branch/StdAfx.cpp | 3 - .../lzma/CPP/7zip/Compress/Branch/StdAfx.h | 8 - .../src/lzma/CPP/7zip/Compress/Branch/x86.cpp | 14 - .../src/lzma/CPP/7zip/Compress/Branch/x86.h | 21 - .../lzma/CPP/7zip/Compress/Branch/x86_2.cpp | 392 -- .../src/lzma/CPP/7zip/Compress/Branch/x86_2.h | 123 - .../CPP/7zip/Compress/ByteSwap/ByteSwap.cpp | 38 - .../CPP/7zip/Compress/ByteSwap/ByteSwap.h | 37 - .../Compress/ByteSwap/ByteSwapRegister.cpp | 17 - .../CPP/7zip/Compress/ByteSwap/StdAfx.cpp | 3 - .../lzma/CPP/7zip/Compress/ByteSwap/StdAfx.h | 8 - .../lzma/CPP/7zip/Compress/CodecExports.cpp | 157 - .../lzma/CPP/7zip/Compress/Copy/CopyCoder.cpp | 62 - .../lzma/CPP/7zip/Compress/Copy/CopyCoder.h | 33 - .../CPP/7zip/Compress/Copy/CopyRegister.cpp | 13 - .../lzma/CPP/7zip/Compress/Copy/StdAfx.cpp | 3 - .../src/lzma/CPP/7zip/Compress/Copy/StdAfx.h | 8 - .../lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp | 16 - .../lzma/CPP/7zip/Compress/LZ/LZOutWindow.h | 65 - .../src/lzma/CPP/7zip/Compress/LZ/StdAfx.h | 6 - .../src/lzma/CPP/7zip/Compress/LZMA/LZMA.h | 82 - .../CPP/7zip/Compress/LZMA/LZMADecoder.cpp | 338 - .../lzma/CPP/7zip/Compress/LZMA/LZMADecoder.h | 255 - .../CPP/7zip/Compress/LZMA/LZMAEncoder.cpp | 1547 ----- .../lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.h | 465 -- .../CPP/7zip/Compress/LZMA/LZMARegister.cpp | 19 - .../lzma/CPP/7zip/Compress/LZMA/StdAfx.cpp | 3 - .../src/lzma/CPP/7zip/Compress/LZMA/StdAfx.h | 8 - .../7zip/Compress/LZMA_Alone/AloneLZMA.dsp | 504 -- .../7zip/Compress/LZMA_Alone/AloneLZMA.dsw | 29 - .../7zip/Compress/LZMA_Alone/LzmaAlone.cpp | 554 -- .../7zip/Compress/LZMA_Alone/LzmaBench.cpp | 1024 --- .../CPP/7zip/Compress/LZMA_Alone/LzmaBench.h | 48 - .../7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp | 311 - .../7zip/Compress/LZMA_Alone/LzmaBenchCon.h | 20 - .../CPP/7zip/Compress/LZMA_Alone/LzmaRam.cpp | 226 - .../CPP/7zip/Compress/LZMA_Alone/LzmaRam.h | 46 - .../7zip/Compress/LZMA_Alone/LzmaRamDecode.c | 78 - .../7zip/Compress/LZMA_Alone/LzmaRamDecode.h | 55 - .../CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp | 3 - .../CPP/7zip/Compress/LZMA_Alone/StdAfx.h | 8 - .../CPP/7zip/Compress/LZMA_Alone/makefile | 136 - .../CPP/7zip/Compress/LZMA_Alone/makefile.gcc | 139 - .../CPP/7zip/Compress/RangeCoder/RangeCoder.h | 205 - .../Compress/RangeCoder/RangeCoderBit.cpp | 80 - .../7zip/Compress/RangeCoder/RangeCoderBit.h | 120 - .../Compress/RangeCoder/RangeCoderBitTree.h | 161 - .../7zip/Compress/RangeCoder/RangeCoderOpt.h | 31 - .../CPP/7zip/Compress/RangeCoder/StdAfx.h | 6 - .../physfs-2.1.0/src/lzma/CPP/7zip/ICoder.h | 185 - .../physfs-2.1.0/src/lzma/CPP/7zip/IDecl.h | 15 - .../src/lzma/CPP/7zip/IPassword.h | 24 - .../src/lzma/CPP/7zip/IProgress.h | 30 - .../physfs-2.1.0/src/lzma/CPP/7zip/IStream.h | 58 - .../src/lzma/CPP/7zip/MyVersion.h | 8 - .../src/lzma/CPP/7zip/MyVersionInfo.rc | 45 - .../physfs-2.1.0/src/lzma/CPP/7zip/PropID.h | 60 - .../lzma/CPP/7zip/UI/Client7z/Client7z.cpp | 880 --- .../lzma/CPP/7zip/UI/Client7z/Client7z.dsp | 226 - .../lzma/CPP/7zip/UI/Client7z/Client7z.dsw | 29 - .../src/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp | 3 - .../src/lzma/CPP/7zip/UI/Client7z/StdAfx.h | 9 - .../src/lzma/CPP/7zip/UI/Client7z/makefile | 45 - .../CPP/7zip/UI/Common/ArchiveCommandLine.cpp | 1003 --- .../CPP/7zip/UI/Common/ArchiveCommandLine.h | 104 - .../7zip/UI/Common/ArchiveExtractCallback.cpp | 479 -- .../7zip/UI/Common/ArchiveExtractCallback.h | 139 - .../lzma/CPP/7zip/UI/Common/ArchiveName.cpp | 46 - .../src/lzma/CPP/7zip/UI/Common/ArchiveName.h | 10 - .../7zip/UI/Common/ArchiveOpenCallback.cpp | 137 - .../CPP/7zip/UI/Common/ArchiveOpenCallback.h | 93 - .../lzma/CPP/7zip/UI/Common/DefaultName.cpp | 26 - .../src/lzma/CPP/7zip/UI/Common/DefaultName.h | 11 - .../src/lzma/CPP/7zip/UI/Common/DirItem.h | 34 - .../lzma/CPP/7zip/UI/Common/EnumDirItems.cpp | 281 - .../lzma/CPP/7zip/UI/Common/EnumDirItems.h | 39 - .../src/lzma/CPP/7zip/UI/Common/ExitCode.h | 27 - .../src/lzma/CPP/7zip/UI/Common/Extract.cpp | 187 - .../src/lzma/CPP/7zip/UI/Common/Extract.h | 77 - .../src/lzma/CPP/7zip/UI/Common/ExtractMode.h | 31 - .../CPP/7zip/UI/Common/ExtractingFilePath.cpp | 96 - .../CPP/7zip/UI/Common/ExtractingFilePath.h | 10 - .../CPP/7zip/UI/Common/IFileExtractCallback.h | 43 - .../lzma/CPP/7zip/UI/Common/LoadCodecs.cpp | 644 -- .../src/lzma/CPP/7zip/UI/Common/LoadCodecs.h | 215 - .../lzma/CPP/7zip/UI/Common/OpenArchive.cpp | 461 -- .../src/lzma/CPP/7zip/UI/Common/OpenArchive.h | 130 - .../lzma/CPP/7zip/UI/Common/PropIDUtils.cpp | 89 - .../src/lzma/CPP/7zip/UI/Common/PropIDUtils.h | 10 - .../src/lzma/CPP/7zip/UI/Common/Property.h | 14 - .../lzma/CPP/7zip/UI/Common/SetProperties.cpp | 65 - .../lzma/CPP/7zip/UI/Common/SetProperties.h | 10 - .../src/lzma/CPP/7zip/UI/Common/SortUtils.cpp | 22 - .../src/lzma/CPP/7zip/UI/Common/SortUtils.h | 10 - .../src/lzma/CPP/7zip/UI/Common/TempFiles.cpp | 22 - .../src/lzma/CPP/7zip/UI/Common/TempFiles.h | 16 - .../src/lzma/CPP/7zip/UI/Common/Update.cpp | 852 --- .../src/lzma/CPP/7zip/UI/Common/Update.h | 165 - .../lzma/CPP/7zip/UI/Common/UpdateAction.cpp | 64 - .../lzma/CPP/7zip/UI/Common/UpdateAction.h | 57 - .../CPP/7zip/UI/Common/UpdateCallback.cpp | 267 - .../lzma/CPP/7zip/UI/Common/UpdateCallback.h | 82 - .../lzma/CPP/7zip/UI/Common/UpdatePair.cpp | 166 - .../src/lzma/CPP/7zip/UI/Common/UpdatePair.h | 24 - .../lzma/CPP/7zip/UI/Common/UpdateProduce.cpp | 63 - .../lzma/CPP/7zip/UI/Common/UpdateProduce.h | 31 - .../src/lzma/CPP/7zip/UI/Common/WorkDir.cpp | 64 - .../src/lzma/CPP/7zip/UI/Common/WorkDir.h | 10 - .../src/lzma/CPP/7zip/UI/Common/ZipRegistry.h | 98 - .../lzma/CPP/7zip/UI/Console/ConsoleClose.cpp | 63 - .../lzma/CPP/7zip/UI/Console/ConsoleClose.h | 24 - .../UI/Console/ExtractCallbackConsole.cpp | 235 - .../7zip/UI/Console/ExtractCallbackConsole.h | 65 - .../src/lzma/CPP/7zip/UI/Console/List.cpp | 579 -- .../src/lzma/CPP/7zip/UI/Console/List.h | 16 - .../src/lzma/CPP/7zip/UI/Console/Main.cpp | 563 -- .../src/lzma/CPP/7zip/UI/Console/MainAr.cpp | 161 - .../7zip/UI/Console/OpenCallbackConsole.cpp | 58 - .../CPP/7zip/UI/Console/OpenCallbackConsole.h | 27 - .../CPP/7zip/UI/Console/PercentPrinter.cpp | 90 - .../lzma/CPP/7zip/UI/Console/PercentPrinter.h | 31 - .../src/lzma/CPP/7zip/UI/Console/StdAfx.cpp | 3 - .../src/lzma/CPP/7zip/UI/Console/StdAfx.h | 9 - .../7zip/UI/Console/UpdateCallbackConsole.cpp | 208 - .../7zip/UI/Console/UpdateCallbackConsole.h | 58 - .../CPP/7zip/UI/Console/UserInputUtils.cpp | 58 - .../lzma/CPP/7zip/UI/Console/UserInputUtils.h | 24 - .../src/lzma/CPP/7zip/UI/Console/afxres.h | 1 - .../jni/physfs-2.1.0/src/lzma/CPP/Build.mak | 68 - .../src/lzma/CPP/Common/AutoPtr.h | 35 - .../physfs-2.1.0/src/lzma/CPP/Common/Buffer.h | 77 - .../physfs-2.1.0/src/lzma/CPP/Common/CRC.cpp | 14 - .../src/lzma/CPP/Common/C_FileIO.cpp | 88 - .../src/lzma/CPP/Common/C_FileIO.h | 47 - .../physfs-2.1.0/src/lzma/CPP/Common/ComTry.h | 17 - .../src/lzma/CPP/Common/CommandLineParser.cpp | 232 - .../src/lzma/CPP/Common/CommandLineParser.h | 72 - .../physfs-2.1.0/src/lzma/CPP/Common/Defs.h | 20 - .../src/lzma/CPP/Common/DynamicBuffer.h | 47 - .../src/lzma/CPP/Common/IntToString.cpp | 63 - .../src/lzma/CPP/Common/IntToString.h | 15 - .../src/lzma/CPP/Common/ListFileUtils.cpp | 74 - .../src/lzma/CPP/Common/ListFileUtils.h | 11 - .../physfs-2.1.0/src/lzma/CPP/Common/MyCom.h | 218 - .../src/lzma/CPP/Common/MyException.h | 14 - .../src/lzma/CPP/Common/MyGuidDef.h | 54 - .../src/lzma/CPP/Common/MyInitGuid.h | 15 - .../src/lzma/CPP/Common/MyString.cpp | 198 - .../src/lzma/CPP/Common/MyString.h | 636 -- .../src/lzma/CPP/Common/MyUnknown.h | 24 - .../src/lzma/CPP/Common/MyVector.cpp | 78 - .../src/lzma/CPP/Common/MyVector.h | 254 - .../src/lzma/CPP/Common/MyWindows.h | 214 - .../src/lzma/CPP/Common/NewHandler.cpp | 116 - .../src/lzma/CPP/Common/NewHandler.h | 16 - .../physfs-2.1.0/src/lzma/CPP/Common/StdAfx.h | 9 - .../src/lzma/CPP/Common/StdInStream.cpp | 84 - .../src/lzma/CPP/Common/StdInStream.h | 31 - .../src/lzma/CPP/Common/StdOutStream.cpp | 93 - .../src/lzma/CPP/Common/StdOutStream.h | 35 - .../src/lzma/CPP/Common/StringConvert.cpp | 94 - .../src/lzma/CPP/Common/StringConvert.h | 71 - .../src/lzma/CPP/Common/StringToInt.cpp | 68 - .../src/lzma/CPP/Common/StringToInt.h | 17 - .../physfs-2.1.0/src/lzma/CPP/Common/Types.h | 57 - .../src/lzma/CPP/Common/UTFConvert.cpp | 91 - .../src/lzma/CPP/Common/UTFConvert.h | 11 - .../src/lzma/CPP/Common/Wildcard.cpp | 458 -- .../src/lzma/CPP/Common/Wildcard.h | 80 - .../physfs-2.1.0/src/lzma/CPP/Windows/DLL.cpp | 115 - .../physfs-2.1.0/src/lzma/CPP/Windows/DLL.h | 54 - .../physfs-2.1.0/src/lzma/CPP/Windows/Defs.h | 23 - .../src/lzma/CPP/Windows/Error.cpp | 50 - .../physfs-2.1.0/src/lzma/CPP/Windows/Error.h | 33 - .../src/lzma/CPP/Windows/FileDir.cpp | 841 --- .../src/lzma/CPP/Windows/FileDir.h | 178 - .../src/lzma/CPP/Windows/FileFind.cpp | 408 -- .../src/lzma/CPP/Windows/FileFind.h | 153 - .../src/lzma/CPP/Windows/FileIO.cpp | 318 - .../src/lzma/CPP/Windows/FileIO.h | 99 - .../src/lzma/CPP/Windows/FileMapping.cpp | 14 - .../src/lzma/CPP/Windows/FileMapping.h | 50 - .../src/lzma/CPP/Windows/FileName.cpp | 54 - .../src/lzma/CPP/Windows/FileName.h | 27 - .../src/lzma/CPP/Windows/Handle.h | 37 - .../src/lzma/CPP/Windows/MemoryLock.cpp | 78 - .../src/lzma/CPP/Windows/MemoryLock.h | 13 - .../src/lzma/CPP/Windows/PropVariant.cpp | 312 - .../src/lzma/CPP/Windows/PropVariant.h | 57 - .../CPP/Windows/PropVariantConversions.cpp | 150 - .../lzma/CPP/Windows/PropVariantConversions.h | 14 - .../src/lzma/CPP/Windows/StdAfx.h | 9 - .../src/lzma/CPP/Windows/Synchronization.cpp | 10 - .../src/lzma/CPP/Windows/Synchronization.h | 168 - .../src/lzma/CPP/Windows/System.cpp | 64 - .../src/lzma/CPP/Windows/System.h | 16 - .../src/lzma/CPP/Windows/Thread.h | 38 - .../physfs-2.1.0/src/lzma/CPP/Windows/Time.h | 66 - .../src/lzma/CS/7zip/Common/CRC.cs | 55 - .../lzma/CS/7zip/Common/CommandLineParser.cs | 274 - .../src/lzma/CS/7zip/Common/InBuffer.cs | 72 - .../src/lzma/CS/7zip/Common/OutBuffer.cs | 47 - .../lzma/CS/7zip/Compress/LZ/IMatchFinder.cs | 24 - .../src/lzma/CS/7zip/Compress/LZ/LzBinTree.cs | 367 - .../lzma/CS/7zip/Compress/LZ/LzInWindow.cs | 132 - .../lzma/CS/7zip/Compress/LZ/LzOutWindow.cs | 110 - .../lzma/CS/7zip/Compress/LZMA/LzmaBase.cs | 76 - .../lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs | 398 -- .../lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs | 1480 ---- .../CS/7zip/Compress/LzmaAlone/LzmaAlone.cs | 364 - .../7zip/Compress/LzmaAlone/LzmaAlone.csproj | 90 - .../CS/7zip/Compress/LzmaAlone/LzmaAlone.sln | 20 - .../CS/7zip/Compress/LzmaAlone/LzmaBench.cs | 340 - .../LzmaAlone/Properties/AssemblyInfo.cs | 29 - .../LzmaAlone/Properties/Resources.cs | 70 - .../Compress/LzmaAlone/Properties/Settings.cs | 42 - .../CS/7zip/Compress/RangeCoder/RangeCoder.cs | 234 - .../7zip/Compress/RangeCoder/RangeCoderBit.cs | 117 - .../Compress/RangeCoder/RangeCoderBitTree.cs | 157 - .../physfs-2.1.0/src/lzma/CS/7zip/ICoder.cs | 145 - .../src/lzma/Java/SevenZip/CRC.java | 52 - .../Java/SevenZip/Compression/LZ/BinTree.java | 382 -- .../SevenZip/Compression/LZ/InWindow.java | 131 - .../SevenZip/Compression/LZ/OutWindow.java | 85 - .../Java/SevenZip/Compression/LZMA/Base.java | 88 - .../SevenZip/Compression/LZMA/Decoder.java | 329 - .../SevenZip/Compression/LZMA/Encoder.java | 1416 ---- .../RangeCoder/BitTreeDecoder.java | 55 - .../RangeCoder/BitTreeEncoder.java | 99 - .../Compression/RangeCoder/Decoder.java | 88 - .../Compression/RangeCoder/Encoder.java | 151 - .../src/lzma/Java/SevenZip/ICodeProgress.java | 6 - .../src/lzma/Java/SevenZip/LzmaAlone.java | 253 - .../src/lzma/Java/SevenZip/LzmaBench.java | 392 -- love/src/jni/physfs-2.1.0/src/lzma/LGPL.txt | 504 -- .../src/jni/physfs-2.1.0/src/lzma/Methods.txt | 141 - .../src/jni/physfs-2.1.0/src/lzma/history.txt | 198 - love/src/jni/physfs-2.1.0/src/lzma/lzma.exe | Bin 73216 -> 0 bytes love/src/jni/physfs-2.1.0/src/lzma/lzma.txt | 663 -- .../jni/physfs-2.1.0/src/physfs_casefolding.h | 2013 ------ .../jni/physfs-2.1.0/src/platform_macosx.c | 326 - .../.hg_archival.txt | 0 .../{physfs-2.1.0 => physfs-3.0.1}/.hgignore | 0 .../{physfs-2.1.0 => physfs-3.0.1}/.hgtags | 0 .../{physfs-2.1.0 => physfs-3.0.1}/Android.mk | 6 +- .../CMakeLists.txt | 292 +- .../LICENSE.txt | 19 +- love/src/jni/physfs-3.0.1/README.txt | 9 + .../docs/CHANGELOG.txt | 2 +- .../docs/CREDITS.txt | 22 + .../docs/Doxyfile | 0 love/src/jni/physfs-3.0.1/docs/INSTALL.txt | 173 + .../docs/README-API-documentation.txt | 18 + .../docs/TODO.txt | 25 +- .../extras/PhysFS.NET/AssemblyInfo.cs | 0 .../extras/PhysFS.NET/PhysFS.NET.csproj | 0 .../extras/PhysFS.NET/PhysFS.NET.sln | 0 .../extras/PhysFS.NET/PhysFS.cs | 0 .../extras/PhysFS.NET/PhysFSFileStream.cs | 0 .../extras/PhysFS.NET/PhysFS_DLL.cs | 0 .../extras/PhysFS.NET/README.txt | 0 .../extras/PhysFS.NET/TestApp/App.ico | Bin .../extras/PhysFS.NET/TestApp/AssemblyInfo.cs | 0 .../extras/PhysFS.NET/TestApp/TestApp.csproj | 0 .../extras/PhysFS.NET/TestApp/TestApp.sln | 0 .../extras/PhysFS.NET/TestApp/TestAppForm.cs | 0 .../PhysFS.NET/TestApp/TestAppForm.resx | 0 .../jni/physfs-3.0.1/extras/README-CSharp.txt | 11 + .../extras/abs-file.h | 0 .../physfs-3.0.1/extras/buildbot-checker.sh | 101 + .../extras/buildbot-emscripten.sh | 78 + .../jni/physfs-3.0.1/extras/buildbot-os2.sh | 87 + .../extras/buildbot-raspberrypi.sh | 72 + .../extras/casefolding.txt | 364 +- .../extras/globbing.c | 0 .../extras/globbing.h | 0 .../extras/ignorecase.c | 24 +- .../extras/ignorecase.h | 7 +- .../extras/makecasefoldhashtable.pl | 276 + .../extras/physfs-swig.i | 0 .../extras/physfs.pc.in | 0 .../extras/physfshttpd.c | 159 +- .../extras/physfsrwops.c | 64 +- .../extras/physfsrwops.h | 3 +- .../extras/physfsunpack.c | 0 .../extras/selfextract.c | 0 .../extras/uninstall.sh | 0 .../src/physfs.c | 1078 ++- .../src/physfs.h | 817 ++- .../jni/physfs-3.0.1/src/physfs_archiver_7z.c | 428 ++ .../src/physfs_archiver_dir.c} | 63 +- .../src/physfs_archiver_grp.c} | 74 +- .../src/physfs_archiver_hog.c} | 68 +- .../src/physfs_archiver_iso9660.c | 386 ++ .../src/physfs_archiver_mvl.c} | 67 +- .../src/physfs_archiver_qpak.c} | 77 +- .../physfs-3.0.1/src/physfs_archiver_slb.c | 135 + .../src/physfs_archiver_unpacked.c | 305 + .../physfs-3.0.1/src/physfs_archiver_vdf.c | 168 + .../src/physfs_archiver_wad.c} | 88 +- .../src/physfs_archiver_zip.c} | 952 ++- .../src/physfs_byteorder.c | 6 +- .../jni/physfs-3.0.1/src/physfs_casefolding.h | 2572 +++++++ .../src/physfs_internal.h | 300 +- .../src/jni/physfs-3.0.1/src/physfs_lzmasdk.h | 6028 +++++++++++++++++ .../src/physfs_miniz.h | 9 +- .../physfs-3.0.1/src/physfs_platform_apple.m | 188 + .../src/physfs_platform_haiku.cpp} | 73 +- .../physfs-3.0.1/src/physfs_platform_os2.c | 812 +++ .../src/physfs_platform_posix.c} | 97 +- .../physfs-3.0.1/src/physfs_platform_qnx.c | 169 + .../src/physfs_platform_unix.c} | 70 +- .../src/physfs_platform_windows.c} | 590 +- .../src/physfs_platform_winrt.cpp | 41 + .../src/physfs_platforms.h | 30 +- .../src/physfs_unicode.c | 309 +- .../test/test_physfs.c | 160 +- .../test/test_physfs.pl | 0 .../test/test_physfs.rb | 0 514 files changed, 15659 insertions(+), 66908 deletions(-) delete mode 100644 love/src/jni/physfs-2.1.0/README.txt delete mode 100644 love/src/jni/physfs-2.1.0/docs/INSTALL.txt delete mode 100755 love/src/jni/physfs-2.1.0/extras/makecasefoldhashtable.pl delete mode 100644 love/src/jni/physfs-2.1.0/src/archiver_iso9660.c delete mode 100644 love/src/jni/physfs-2.1.0/src/archiver_lzma.c delete mode 100644 love/src/jni/physfs-2.1.0/src/archiver_slb.c delete mode 100644 love/src/jni/physfs-2.1.0/src/archiver_unpacked.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/7zC.txt delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/7zFormat.txt delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/7zCrcT8.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMain.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsw delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile.gcc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchTypes.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/LzHash.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecodeSize.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateTest.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTest.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTypes.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/CpuArch.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/IStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Sort.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Sort.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Threads.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Threads.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/C/Types.h delete mode 100755 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7z.ico delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zExtract.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zItem.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zRegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive.def delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive2.def delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/ArchiveExports.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/DllExports2.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/IArchive.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/resource.rc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/resource.rc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterArc.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterCodec.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJ2Register.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJRegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchRegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwapRegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/CodecExports.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyRegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMA.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMARegister.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.c delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile.gcc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBitTree.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderOpt.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/ICoder.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IDecl.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IPassword.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IProgress.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersion.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersionInfo.rc delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/PropID.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsw delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/makefile delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DirItem.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExitCode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractMode.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Property.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ZipRegistry.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/Main.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/MainAr.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/afxres.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Build.mak delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/AutoPtr.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Buffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CRC.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ComTry.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Defs.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/DynamicBuffer.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyCom.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyException.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyGuidDef.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyInitGuid.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyUnknown.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyWindows.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Types.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Defs.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Handle.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/StdAfx.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.cpp delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Thread.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Time.h delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CRC.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CommandLineParser.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/InBuffer.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/OutBuffer.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzBinTree.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzInWindow.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/ICoder.cs delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/CRC.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/BinTree.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/InWindow.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/OutWindow.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Base.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Decoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Encoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/ICodeProgress.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaAlone.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaBench.java delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/LGPL.txt delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/Methods.txt delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/history.txt delete mode 100755 love/src/jni/physfs-2.1.0/src/lzma/lzma.exe delete mode 100644 love/src/jni/physfs-2.1.0/src/lzma/lzma.txt delete mode 100644 love/src/jni/physfs-2.1.0/src/physfs_casefolding.h delete mode 100644 love/src/jni/physfs-2.1.0/src/platform_macosx.c rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/.hg_archival.txt (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/.hgignore (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/.hgtags (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/Android.mk (74%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/CMakeLists.txt (51%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/LICENSE.txt (55%) create mode 100644 love/src/jni/physfs-3.0.1/README.txt rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/docs/CHANGELOG.txt (86%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/docs/CREDITS.txt (89%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/docs/Doxyfile (100%) create mode 100644 love/src/jni/physfs-3.0.1/docs/INSTALL.txt create mode 100644 love/src/jni/physfs-3.0.1/docs/README-API-documentation.txt rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/docs/TODO.txt (62%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/AssemblyInfo.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/PhysFS.NET.csproj (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/PhysFS.NET.sln (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/PhysFS.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/PhysFSFileStream.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/PhysFS_DLL.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/README.txt (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/App.ico (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/AssemblyInfo.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/TestApp.csproj (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/TestApp.sln (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/TestAppForm.cs (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/PhysFS.NET/TestApp/TestAppForm.resx (100%) create mode 100644 love/src/jni/physfs-3.0.1/extras/README-CSharp.txt rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/abs-file.h (100%) create mode 100755 love/src/jni/physfs-3.0.1/extras/buildbot-checker.sh create mode 100755 love/src/jni/physfs-3.0.1/extras/buildbot-emscripten.sh create mode 100755 love/src/jni/physfs-3.0.1/extras/buildbot-os2.sh create mode 100755 love/src/jni/physfs-3.0.1/extras/buildbot-raspberrypi.sh rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/casefolding.txt (76%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/globbing.c (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/globbing.h (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/ignorecase.c (90%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/ignorecase.h (95%) create mode 100755 love/src/jni/physfs-3.0.1/extras/makecasefoldhashtable.pl rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfs-swig.i (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfs.pc.in (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfshttpd.c (62%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfsrwops.c (82%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfsrwops.h (96%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/physfsunpack.c (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/selfextract.c (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/extras/uninstall.sh (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs.c (70%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs.h (81%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_archiver_7z.c rename love/src/jni/{physfs-2.1.0/src/archiver_dir.c => physfs-3.0.1/src/physfs_archiver_dir.c} (71%) rename love/src/jni/{physfs-2.1.0/src/archiver_grp.c => physfs-3.0.1/src/physfs_archiver_grp.c} (55%) rename love/src/jni/{physfs-2.1.0/src/archiver_hog.c => physfs-3.0.1/src/physfs_archiver_hog.c} (57%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_archiver_iso9660.c rename love/src/jni/{physfs-2.1.0/src/archiver_mvl.c => physfs-3.0.1/src/physfs_archiver_mvl.c} (53%) rename love/src/jni/{physfs-2.1.0/src/archiver_qpak.c => physfs-3.0.1/src/physfs_archiver_qpak.c} (50%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_archiver_slb.c create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_archiver_unpacked.c create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_archiver_vdf.c rename love/src/jni/{physfs-2.1.0/src/archiver_wad.c => physfs-3.0.1/src/physfs_archiver_wad.c} (56%) rename love/src/jni/{physfs-2.1.0/src/archiver_zip.c => physfs-3.0.1/src/physfs_archiver_zip.c} (63%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs_byteorder.c (95%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_casefolding.h rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs_internal.h (68%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_lzmasdk.h rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs_miniz.h (98%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_platform_apple.m rename love/src/jni/{physfs-2.1.0/src/platform_beos.cpp => physfs-3.0.1/src/physfs_platform_haiku.cpp} (71%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_platform_os2.c rename love/src/jni/{physfs-2.1.0/src/platform_posix.c => physfs-3.0.1/src/physfs_platform_posix.c} (78%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_platform_qnx.c rename love/src/jni/{physfs-2.1.0/src/platform_unix.c => physfs-3.0.1/src/physfs_platform_unix.c} (85%) rename love/src/jni/{physfs-2.1.0/src/platform_windows.c => physfs-3.0.1/src/physfs_platform_windows.c} (62%) create mode 100644 love/src/jni/physfs-3.0.1/src/physfs_platform_winrt.cpp rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs_platforms.h (67%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/src/physfs_unicode.c (71%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/test/test_physfs.c (89%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/test/test_physfs.pl (100%) rename love/src/jni/{physfs-2.1.0 => physfs-3.0.1}/test/test_physfs.rb (100%) diff --git a/love/src/jni/love/Android.mk b/love/src/jni/love/Android.mk index 8babba9c..c2efd2cf 100644 --- a/love/src/jni/love/Android.mk +++ b/love/src/jni/love/Android.mk @@ -25,7 +25,7 @@ LOCAL_C_INCLUDES := \ ${LOCAL_PATH}/../openal-soft-1.17.0/OpenAL32/Include \ ${LOCAL_PATH}/../freetype2-android/include \ ${LOCAL_PATH}/../freetype2-android/src \ - ${LOCAL_PATH}/../physfs-2.1.0/src \ + ${LOCAL_PATH}/../physfs-3.0.1/src \ ${LOCAL_PATH}/../mpg123-1.17.0/src/libmpg123 \ ${LOCAL_PATH}/../libmodplug-0.8.8.4/src \ ${LOCAL_PATH}/../libvorbis-1.3.5/include \ diff --git a/love/src/jni/physfs-2.1.0/README.txt b/love/src/jni/physfs-2.1.0/README.txt deleted file mode 100644 index b1225b73..00000000 --- a/love/src/jni/physfs-2.1.0/README.txt +++ /dev/null @@ -1,7 +0,0 @@ - -PhysicsFS; a portable, flexible file i/o abstraction. - - http://icculus.org/physfs/ - -Please see the docs directory for documentation, licensing, and information. - diff --git a/love/src/jni/physfs-2.1.0/docs/INSTALL.txt b/love/src/jni/physfs-2.1.0/docs/INSTALL.txt deleted file mode 100644 index fcc3e6cd..00000000 --- a/love/src/jni/physfs-2.1.0/docs/INSTALL.txt +++ /dev/null @@ -1,152 +0,0 @@ - -The latest PhysicsFS information and releases can be found at: - http://icculus.org/physfs/ - -Building is (ahem) very easy. - - -ALL PLATFORMS: - -Please understand your rights and mine: read the text file LICENSE.txt in the - root of the source tree. If you can't abide by it, delete this source tree - now. The license is extremely liberal, even to closed-source, commercial - applications. - -If you've got Doxygen (http://www.doxygen.org/) installed, you can run it - without any command line arguments in the root of the source tree to generate - the API reference (or build the "docs" target from your build system). This - is optional. You can browse the API docs online here: - - http://icculus.org/physfs/docs/ - - - - -UNIX: - -You will need CMake (http://www.cmake.org/) 2.4 or later installed. - -Make a directory, wherever you like. This will be your build directory. - -Chdir to your build directory. Run "cmake /where/i/unpacked/physfs" to - generate Makefiles. You can then run "ccmake ." and customize the build, - but the defaults are probably okay. You can have CMake generate KDevelop - project files if you prefer these. - -Run "make". PhysicsFS will now build. - -As root, run "make install". - If you get sick of the library, run "xargs rm < install_manifest.txt" as root - and it will remove all traces of the library from the system paths. - -Once you are satisfied, you can delete the build directory. - -Primary Unix development is done with GNU/Linux, but PhysicsFS is known to - work out of the box with several flavors of Unix. It it doesn't work, patches - to get it running can be sent to icculus@icculus.org. - - - -BeOS, Zeta, and Haiku: - -Use the "Unix" instructions, above. The CMake port to BeOS is fairly new at - the time of this writing, but it works. You can get a build of CMake from - bebits.com or build it yourself from source from cmake.org. - - - -Windows: - -If building with Cygwin, mingw32, MSYS, or something else that uses the GNU - toolchain, follow the Unix instructions, above. - -If you want to use Visual Studio, nmake, or the Platform SDK, you will need - CMake (http://www.cmake.org/) 2.4 or later installed. Point CMake at the - CMakeLists.txt file in the root of the source directory and hit the - "Configure" button. After telling it what type of compiler you are targeting - (Borland, Visual Studio, etc), CMake will process for while and then give you - a list of options you can change (what archivers you want to support, etc). - If you aren't sure, the defaults are probably fine. Hit the "Configure" - button again, then "OK" once configuration has completed with options that - match your liking. Now project files for your favorite programming - environment will be generated for you in the directory you specified. - Go there and use them to build PhysicsFS. - -PhysicsFS will only link directly against system libraries that have existed - since Windows 95 and Windows NT 3.51. If there's a newer API we want to use, - we try to dynamically load it at runtime and fallback to a reasonable - behaviour when we can't find it...this is used for Unicode support and - locating user-specific directories, etc. - -PhysicsFS works on 32-bit and 64-bit Windows. There is no 16-bit Windows - support at all. Reports of success and problems can go to Ryan at - icculus@icculus.org ... - -If someone is willing to maintain prebuilt PhysicsFS DLLs, I'd like to hear -from you; send an email to icculus@icculus.org ... - - -PocketPC/WindowsCE: - -Support for PocketPC was removed in PhysicsFS 2.1.0. This was known to work - in the 1.0 releases, but wasn't tested in 2.0 and later. PhysicsFS is not - known to work on Windows Phone 7 (the latest Microsoft mobile tech at the - time of this writing). - - -MAC OS 8/9: - -Classic Mac OS support has been dropped in PhysicsFS 2.0. Apple hasn't updated - pre-OSX versions in more than a decade at this point, none of the hardware - they've shipped will boot it for almost as many years, and finding - developer tools for it is becoming almost impossible. As the switch to Intel - hardware has removed the "Classic" emulation environment, it was time to - remove support from PhysicsFS. That being said, the PhysicsFS 1.0 branch can - still target back to Mac OS 8.5, so you can use that if you need support for - this legacy OS. We still very much support Mac OS X, though: see below. - - - -MAC OS X: - -You will need CMake (http://www.cmake.org/) 2.4 or later installed. - -You can either generate a Unix makefile with CMake, or generate an Xcode - project, whichever makes you more comfortable. - -PowerPC and Intel Macs should both be supported. - -If someone is willing to maintain prebuilt PhysicsFS Shared Libraries for - Mac OS X, I'd like to hear from you; send an email to icculus@icculus.org. - - - -OS/2: - -You need Innotek GCC and libc installed (or kLIBC). I tried this on a stock - Warp 4 install, no fixpaks. You need to install link386.exe (Selective - Install, "link object modules" option). Once klibc and GCC are installed - correctly, unpack the source to PhysicsFS and run the script - file "makeos2.cmd". I know this isn't ideal, but I wanted to have this build - without users having to hunt down a "make" program. - -Someone please port CMake to OS/2. Ideally I'd like to be able to target - Innotek GCC and OpenWatcom with CMake. - -If someone is willing to maintain prebuilt PhysicsFS Shared Libraries for - OS/2, I'd like to hear from you; send an email to icculus@icculus.org. - - - -OTHER PLATFORMS: - -Many Unix-like platforms might "just work" with CMake. Some of these platforms - are known to have worked at one time, but have not been heavily tested, if - tested at all. PhysicsFS is, as far as we know, 64-bit and byteorder clean, - and is known to compile on several compilers across many platforms. To - implement a new platform or archiver, please read the heavily-commented - physfs_internal.h and look in the platform/ and archiver/ directories for - examples. - ---ryan. (icculus@icculus.org) - diff --git a/love/src/jni/physfs-2.1.0/extras/makecasefoldhashtable.pl b/love/src/jni/physfs-2.1.0/extras/makecasefoldhashtable.pl deleted file mode 100755 index 7be2e931..00000000 --- a/love/src/jni/physfs-2.1.0/extras/makecasefoldhashtable.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/perl -w - -use warnings; -use strict; - -print <<__EOF__; -/* - * This file is part of PhysicsFS (http://icculus.org/physfs/) - * - * This data generated by physfs/extras/makecasefoldhashtable.pl ... - * Do not manually edit this file! - * - * Please see the file LICENSE.txt in the source's root directory. - */ - -#ifndef __PHYSICSFS_INTERNAL__ -#error Do not include this header from your applications. -#endif - -__EOF__ - - -my @foldPairs; - -for (my $i = 0; $i < 256; $i++) { - $foldPairs[$i] = ''; -} - -open(FH,'<','casefolding.txt') or die("failed to open casefolding.txt: $!\n"); -while () { - chomp; - # strip comments from textfile... - s/\#.*\Z//; - - # strip whitespace... - s/\A\s+//; - s/\s+\Z//; - - next if not /\A([a-fA-F0-9]+)\;\s*(.)\;\s*(.+)\;/; - my ($code, $status, $mapping) = ($1, $2, $3); - my $hexxed = hex($code); - my $hashed = (($hexxed ^ ($hexxed >> 8)) & 0xFF); - #print("// code '$code' status '$status' mapping '$mapping'\n"); - #print("// hexxed '$hexxed' hashed '$hashed'\n"); - - if (($status eq 'C') or ($status eq 'F')) { - my ($map1, $map2, $map3) = ('0000', '0000', '0000'); - $map1 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; - $map2 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; - $map3 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; - die("mapping space too small for '$code'\n") if ($mapping ne ''); - $foldPairs[$hashed] .= " { 0x$code, 0x$map1, 0x$map2, 0x$map3 },\n"; - } -} -close(FH); - -for (my $i = 0; $i < 256; $i++) { - $foldPairs[$i] =~ s/,\n\Z//; - my $str = $foldPairs[$i]; - next if $str eq ''; - my $num = '000' . $i; - $num =~ s/\A.*?(\d\d\d)\Z/$1/; - my $sym = "case_fold_${num}"; - print("static const CaseFoldMapping ${sym}[] = {\n$str\n};\n\n"); -} - -print("\nstatic const CaseFoldHashBucket case_fold_hash[256] = {\n"); - -for (my $i = 0; $i < 256; $i++) { - my $str = $foldPairs[$i]; - if ($str eq '') { - print(" { 0, NULL },\n"); - } else { - my $num = '000' . $i; - $num =~ s/\A.*?(\d\d\d)\Z/$1/; - my $sym = "case_fold_${num}"; - print(" { __PHYSFS_ARRAYLEN($sym), $sym },\n"); - } -} -print("};\n\n"); - -exit 0; - -# end of makecashfoldhashtable.pl ... - diff --git a/love/src/jni/physfs-2.1.0/src/archiver_iso9660.c b/love/src/jni/physfs-2.1.0/src/archiver_iso9660.c deleted file mode 100644 index 0f0895fb..00000000 --- a/love/src/jni/physfs-2.1.0/src/archiver_iso9660.c +++ /dev/null @@ -1,961 +0,0 @@ -/* - * ISO9660 support routines for PhysicsFS. - * - * Please see the file LICENSE.txt in the source's root directory. - * - * This file written by Christoph Nelles. - */ - -/* !!! FIXME: this file needs Ryanification. */ - -/* - * Handles CD-ROM disk images (and raw CD-ROM devices). - * - * Not supported: - * - RockRidge - * - Non 2048 Sectors - * - UDF - * - * Deviations from the standard - * - Ignores mandatory sort order - * - Allows various invalid file names - * - * Problems - * - Ambiguities in the standard - */ - -#define __PHYSICSFS_INTERNAL__ -#include "physfs_internal.h" - -#if PHYSFS_SUPPORTS_ISO9660 - -#include - -/* cache files smaller than this completely in memory */ -#define ISO9660_FULLCACHEMAXSIZE 2048 - -/* !!! FIXME: this is going to cause trouble. */ -#pragma pack(push) /* push current alignment to stack */ -#pragma pack(1) /* set alignment to 1 byte boundary */ - -/* This is the format as defined by the standard -typedef struct -{ - PHYSFS_uint32 lsb; - PHYSFS_uint32 msb; -} ISOBB32bit; // 32byte Both Byte type, means the value first in LSB then in MSB - -typedef struct -{ - PHYSFS_uint16 lsb; - PHYSFS_uint16 msb; -} ISOBB16bit; // 16byte Both Byte type, means the value first in LSB then in MSB -*/ - -/* define better ones to simplify coding (less if's) */ -#if PHYSFS_BYTEORDER == PHYSFS_LIL_ENDIAN -#define ISOBB32bit(name) PHYSFS_uint32 name; PHYSFS_uint32 __dummy_##name; -#define ISOBB16bit(name) PHYSFS_uint16 name; PHYSFS_uint16 __dummy_##name; -#else -#define ISOBB32bit(name) PHYSFS_uint32 __dummy_##name; PHYSFS_uint32 name; -#define ISOBB16bit(name) PHYSFS_uint16 __dummy_##name; PHYSFS_uint16 name; -#endif - -typedef struct -{ - char year[4]; - char month[2]; - char day[2]; - char hour[2]; - char minute[2]; - char second[2]; - char centisec[2]; - PHYSFS_sint8 offset; /* in 15min from GMT */ -} ISO9660VolumeTimestamp; - -typedef struct -{ - PHYSFS_uint8 year; - PHYSFS_uint8 month; - PHYSFS_uint8 day; - PHYSFS_uint8 hour; - PHYSFS_uint8 minute; - PHYSFS_uint8 second; - PHYSFS_sint8 offset; -} ISO9660FileTimestamp; - -typedef struct -{ - unsigned existence:1; - unsigned directory:1; - unsigned associated_file:1; - unsigned record:1; - unsigned protection:1; - unsigned reserved:2; - unsigned multiextent:1; -} ISO9660FileFlags; - -typedef struct -{ - PHYSFS_uint8 length; - PHYSFS_uint8 attribute_length; - ISOBB32bit(extent_location) - ISOBB32bit(data_length) - ISO9660FileTimestamp timestamp; - ISO9660FileFlags file_flags; - PHYSFS_uint8 file_unit_size; - PHYSFS_uint8 gap_size; - ISOBB16bit(vol_seq_no) - PHYSFS_uint8 len_fi; - char unused; -} ISO9660RootDirectoryRecord; - -/* this structure is combined for all Volume descriptor types */ -typedef struct -{ - PHYSFS_uint8 type; - char identifier[5]; - PHYSFS_uint8 version; - PHYSFS_uint8 flags; - char system_identifier[32]; - char volume_identifier[32]; - char unused2[8]; - ISOBB32bit(space_size) - PHYSFS_uint8 escape_sequences[32]; - ISOBB16bit(vol_set_size) - ISOBB16bit(vol_seq_no) - ISOBB16bit(block_size) - ISOBB32bit(path_table_size) -/* PHYSFS_uint32 path_table_start_lsb; // why didn't they use both byte type? - PHYSFS_uint32 opt_path_table_start_lsb; - PHYSFS_uint32 path_table_start_msb; - PHYSFS_uint32 opt_path_table_start_msb;*/ -#if PHYSFS_BYTEORDER == PHYSFS_LIL_ENDIAN - PHYSFS_uint32 path_table_start; - PHYSFS_uint32 opt_path_table_start; - PHYSFS_uint32 unused6; - PHYSFS_uint32 unused7; -#else - PHYSFS_uint32 unused6; - PHYSFS_uint32 unused7; - PHYSFS_uint32 path_table_start; - PHYSFS_uint32 opt_path_table_start; -#endif - ISO9660RootDirectoryRecord rootdirectory; - char set_identifier[128]; - char publisher_identifier[128]; - char preparer_identifer[128]; - char application_identifier[128]; - char copyright_file_identifier[37]; - char abstract_file_identifier[37]; - char bibliographic_file_identifier[37]; - ISO9660VolumeTimestamp creation_timestamp; - ISO9660VolumeTimestamp modification_timestamp; - ISO9660VolumeTimestamp expiration_timestamp; - ISO9660VolumeTimestamp effective_timestamp; - PHYSFS_uint8 file_structure_version; - char unused4; - char application_use[512]; - char unused5[653]; -} ISO9660VolumeDescriptor; - -typedef struct -{ - PHYSFS_uint8 recordlen; - PHYSFS_uint8 extattributelen; - ISOBB32bit(extentpos) - ISOBB32bit(datalen) - ISO9660FileTimestamp recordtime; - ISO9660FileFlags flags; - PHYSFS_uint8 file_unit_size; - PHYSFS_uint8 interleave_gap; - ISOBB16bit(volseqno) - PHYSFS_uint8 filenamelen; - char filename[222]; /* This is not exact, but makes reading easier */ -} ISO9660FileDescriptor; - -typedef struct -{ - ISOBB16bit(owner) - ISOBB16bit(group) - PHYSFS_uint16 flags; /* not implemented*/ - ISO9660VolumeTimestamp create_time; /* yes, not file timestamp */ - ISO9660VolumeTimestamp mod_time; - ISO9660VolumeTimestamp expire_time; - ISO9660VolumeTimestamp effective_time; - PHYSFS_uint8 record_format; - PHYSFS_uint8 record_attributes; - ISOBB16bit(record_len) - char system_identifier[32]; - char system_use[64]; - PHYSFS_uint8 version; - ISOBB16bit(escape_len) - char reserved[64]; - /** further fields not implemented */ -} ISO9660ExtAttributeRec; - -#pragma pack(pop) /* restore original alignment from stack */ - -typedef struct -{ - PHYSFS_Io *io; - PHYSFS_uint32 rootdirstart; - PHYSFS_uint32 rootdirsize; - PHYSFS_uint64 currpos; - int isjoliet; - char *path; - void *mutex; -} ISO9660Handle; - - -typedef struct __ISO9660FileHandle -{ - PHYSFS_sint64 filesize; - PHYSFS_uint64 currpos; - PHYSFS_uint64 startblock; - ISO9660Handle *isohandle; - PHYSFS_uint32 (*read) (struct __ISO9660FileHandle *filehandle, void *buffer, - PHYSFS_uint64 len); - int (*seek)(struct __ISO9660FileHandle *filehandle, PHYSFS_sint64 offset); - void (*close)(struct __ISO9660FileHandle *filehandle); - /* !!! FIXME: anonymouse union is going to cause problems. */ - union - { - /* !!! FIXME: just use a memory PHYSFS_Io here, unify all this code. */ - char *cacheddata; /* data of file when cached */ - PHYSFS_Io *io; /* handle to separate opened file */ - }; -} ISO9660FileHandle; - -/******************************************************************************* - * Time conversion functions - ******************************************************************************/ - -static PHYSFS_sint64 iso_mktime(ISO9660FileTimestamp *timestamp) -{ - struct tm tm; - tm.tm_year = timestamp->year; - tm.tm_mon = timestamp->month - 1; - tm.tm_mday = timestamp->day; - tm.tm_hour = timestamp->hour; - tm.tm_min = timestamp->minute; - tm.tm_sec = timestamp->second; - /* Ignore GMT offset for now... */ - return mktime(&tm); -} /* iso_mktime */ - -static int iso_atoi2(char *text) -{ - return ((text[0] - 40) * 10) + (text[1] - 40); -} /* iso_atoi2 */ - -static int iso_atoi4(char *text) -{ - return ((text[0] - 40) * 1000) + ((text[1] - 40) * 100) + - ((text[2] - 40) * 10) + (text[3] - 40); -} /* iso_atoi4 */ - -static PHYSFS_sint64 iso_volume_mktime(ISO9660VolumeTimestamp *timestamp) -{ - struct tm tm; - tm.tm_year = iso_atoi4(timestamp->year); - tm.tm_mon = iso_atoi2(timestamp->month) - 1; - tm.tm_mday = iso_atoi2(timestamp->day); - tm.tm_hour = iso_atoi2(timestamp->hour); - tm.tm_min = iso_atoi2(timestamp->minute); - tm.tm_sec = iso_atoi2(timestamp->second); - /* this allows values outside the range of a unix timestamp... sanitize them */ - PHYSFS_sint64 value = mktime(&tm); - return value == -1 ? 0 : value; -} /* iso_volume_mktime */ - -/******************************************************************************* - * Filename extraction - ******************************************************************************/ - -static int iso_extractfilenameISO(ISO9660FileDescriptor *descriptor, - char *filename, int *version) -{ - *filename = '\0'; - if (descriptor->flags.directory) - { - strncpy(filename, descriptor->filename, descriptor->filenamelen); - filename[descriptor->filenamelen] = '\0'; - *version = 0; - } /* if */ - else - { - /* find last SEPARATOR2 */ - int pos = 0; - int lastfound = -1; - for(;pos < descriptor->filenamelen; pos++) - if (descriptor->filename[pos] == ';') - lastfound = pos; - BAIL_IF_MACRO(lastfound < 1, PHYSFS_ERR_NOT_FOUND /* !!! FIXME: PHYSFS_ERR_BAD_FILENAME */, -1); - BAIL_IF_MACRO(lastfound == (descriptor->filenamelen -1), PHYSFS_ERR_NOT_FOUND /* !!! PHYSFS_ERR_BAD_FILENAME */, -1); - strncpy(filename, descriptor->filename, lastfound); - if (filename[lastfound - 1] == '.') - filename[lastfound - 1] = '\0'; /* consume trailing ., as done in all implementations */ - else - filename[lastfound] = '\0'; - *version = atoi(descriptor->filename + lastfound); - } /* else */ - - return 0; -} /* iso_extractfilenameISO */ - - -static int iso_extractfilenameUCS2(ISO9660FileDescriptor *descriptor, - char *filename, int *version) -{ - PHYSFS_uint16 tmp[128]; - PHYSFS_uint16 *src; - int len; - - *filename = '\0'; - *version = 1; /* Joliet does not have versions.. at least not on my images */ - - src = (PHYSFS_uint16*) descriptor->filename; - len = descriptor->filenamelen / 2; - tmp[len] = 0; - - while(len--) - tmp[len] = PHYSFS_swapUBE16(src[len]); - - PHYSFS_utf8FromUcs2(tmp, filename, 255); - - return 0; -} /* iso_extractfilenameUCS2 */ - - -static int iso_extractfilename(ISO9660Handle *handle, - ISO9660FileDescriptor *descriptor, char *filename,int *version) -{ - if (handle->isjoliet) - return iso_extractfilenameUCS2(descriptor, filename, version); - else - return iso_extractfilenameISO(descriptor, filename, version); -} /* iso_extractfilename */ - -/******************************************************************************* - * Basic image read functions - ******************************************************************************/ - -static int iso_readimage(ISO9660Handle *handle, PHYSFS_uint64 where, - void *buffer, PHYSFS_uint64 len) -{ - BAIL_IF_MACRO(!__PHYSFS_platformGrabMutex(handle->mutex), ERRPASS, -1); - int rc = -1; - if (where != handle->currpos) - GOTO_IF_MACRO(!handle->io->seek(handle->io,where), ERRPASS, unlockme); - rc = handle->io->read(handle->io, buffer, len); - if (rc == -1) - { - handle->currpos = (PHYSFS_uint64) -1; - goto unlockme; - } /* if */ - handle->currpos += rc; - - unlockme: - __PHYSFS_platformReleaseMutex(handle->mutex); - return rc; -} /* iso_readimage */ - - -static PHYSFS_sint64 iso_readfiledescriptor(ISO9660Handle *handle, - PHYSFS_uint64 where, - ISO9660FileDescriptor *descriptor) -{ - PHYSFS_sint64 rc = iso_readimage(handle, where, descriptor, - sizeof (descriptor->recordlen)); - BAIL_IF_MACRO(rc == -1, ERRPASS, -1); - BAIL_IF_MACRO(rc != 1, PHYSFS_ERR_CORRUPT, -1); - - if (descriptor->recordlen == 0) - return 0; /* fill bytes at the end of a sector */ - - rc = iso_readimage(handle, where + 1, &descriptor->extattributelen, - descriptor->recordlen - sizeof(descriptor->recordlen)); - BAIL_IF_MACRO(rc == -1, ERRPASS, -1); - BAIL_IF_MACRO(rc != 1, PHYSFS_ERR_CORRUPT, -1); - - return 0; -} /* iso_readfiledescriptor */ - -static void iso_extractsubpath(char *path, char **subpath) -{ - *subpath = strchr(path,'/'); - if (*subpath != 0) - { - **subpath = 0; - *subpath +=1; - } /* if */ -} /* iso_extractsubpath */ - -/* - * Don't use path tables, they are not necessarily faster, but more complicated - * to implement as they store only directories and not files, so searching for - * a file needs to branch to the directory extent sooner or later. - */ -static int iso_find_dir_entry(ISO9660Handle *handle,const char *path, - ISO9660FileDescriptor *descriptor) -{ - char *subpath = 0; - PHYSFS_uint64 readpos, end_of_dir; - char filename[255]; - char pathcopy[256]; - char *mypath; - int version = 0; - - strcpy(pathcopy, path); - mypath = pathcopy; - - readpos = handle->rootdirstart; - end_of_dir = handle->rootdirstart + handle->rootdirsize; - iso_extractsubpath(mypath, &subpath); - while (1) - { - BAIL_IF_MACRO(iso_readfiledescriptor(handle, readpos, descriptor), ERRPASS, -1); - - /* recordlen = 0 -> no more entries or fill entry */ - if (!descriptor->recordlen) - { - /* if we are in the last sector of the directory & it's 0 -> end */ - if ((end_of_dir - 2048) <= (readpos -1)) - break; /* finished */ - - /* else skip to the next sector & continue; */ - readpos = (((readpos - 1) / 2048) + 1) * 2048; - continue; - } /* if */ - - readpos += descriptor->recordlen; - if (descriptor->filenamelen == 1 && (descriptor->filename[0] == 0 - || descriptor->filename[0] == 1)) - continue; /* special ones, ignore */ - - BAIL_IF_MACRO( - iso_extractfilename(handle, descriptor, filename, &version), - ERRPASS, -1); - - if (strcmp(filename, mypath) == 0) - { - if ( (subpath == 0) || (subpath[0] == 0) ) - return 0; /* no subpaths left and we found the entry */ - - if (descriptor->flags.directory) - { - /* shorten the path to the subpath */ - mypath = subpath; - iso_extractsubpath(mypath, &subpath); - /* gosub to the new directory extent */ - readpos = descriptor->extentpos * 2048; - end_of_dir = readpos + descriptor->datalen; - } /* if */ - else - { - /* !!! FIXME: set PHYSFS_ERR_NOT_FOUND? */ - /* we're at a file but have a remaining subpath -> no match */ - return 0; - } /* else */ - } /* if */ - } /* while */ - - /* !!! FIXME: set PHYSFS_ERR_NOT_FOUND? */ - return 0; -} /* iso_find_dir_entry */ - - -static int iso_read_ext_attributes(ISO9660Handle *handle, int block, - ISO9660ExtAttributeRec *attributes) -{ - return iso_readimage(handle, block * 2048, attributes, - sizeof(ISO9660ExtAttributeRec)); -} /* iso_read_ext_attributes */ - - -static int ISO9660_flush(PHYSFS_Io *io) { return 1; /* no write support. */ } - -static PHYSFS_Io *ISO9660_duplicate(PHYSFS_Io *_io) -{ - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); /* !!! FIXME: write me. */ -} /* ISO9660_duplicate */ - - -static void ISO9660_destroy(PHYSFS_Io *io) -{ - ISO9660FileHandle *fhandle = (ISO9660FileHandle*) io->opaque; - fhandle->close(fhandle); - allocator.Free(io); -} /* ISO9660_destroy */ - - -static PHYSFS_sint64 ISO9660_read(PHYSFS_Io *io, void *buf, PHYSFS_uint64 len) -{ - ISO9660FileHandle *fhandle = (ISO9660FileHandle*) io->opaque; - return fhandle->read(fhandle, buf, len); -} /* ISO9660_read */ - - -static PHYSFS_sint64 ISO9660_write(PHYSFS_Io *io, const void *b, PHYSFS_uint64 l) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, -1); -} /* ISO9660_write */ - - -static PHYSFS_sint64 ISO9660_tell(PHYSFS_Io *io) -{ - return ((ISO9660FileHandle*) io->opaque)->currpos; -} /* ISO9660_tell */ - - -static int ISO9660_seek(PHYSFS_Io *io, PHYSFS_uint64 offset) -{ - ISO9660FileHandle *fhandle = (ISO9660FileHandle*) io->opaque; - return fhandle->seek(fhandle, offset); -} /* ISO9660_seek */ - - -static PHYSFS_sint64 ISO9660_length(PHYSFS_Io *io) -{ - return ((ISO9660FileHandle*) io->opaque)->filesize; -} /* ISO9660_length */ - - -static const PHYSFS_Io ISO9660_Io = -{ - CURRENT_PHYSFS_IO_API_VERSION, NULL, - ISO9660_read, - ISO9660_write, - ISO9660_seek, - ISO9660_tell, - ISO9660_length, - ISO9660_duplicate, - ISO9660_flush, - ISO9660_destroy -}; - - -/******************************************************************************* - * Archive management functions - ******************************************************************************/ - -static void *ISO9660_openArchive(PHYSFS_Io *io, const char *filename, int forWriting) -{ - char magicnumber[6]; - ISO9660Handle *handle; - int founddescriptor = 0; - int foundjoliet = 0; - - assert(io != NULL); /* shouldn't ever happen. */ - - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - - /* Skip system area to magic number in Volume descriptor */ - BAIL_IF_MACRO(!io->seek(io, 32769), ERRPASS, NULL); - BAIL_IF_MACRO(!io->read(io, magicnumber, 5) != 5, ERRPASS, NULL); - if (memcmp(magicnumber, "CD001", 6) != 0) - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); - - handle = allocator.Malloc(sizeof(ISO9660Handle)); - GOTO_IF_MACRO(!handle, PHYSFS_ERR_OUT_OF_MEMORY, errorcleanup); - handle->path = 0; - handle->mutex= 0; - handle->io = NULL; - - handle->path = allocator.Malloc(strlen(filename) + 1); - GOTO_IF_MACRO(!handle->path, PHYSFS_ERR_OUT_OF_MEMORY, errorcleanup); - strcpy(handle->path, filename); - - handle->mutex = __PHYSFS_platformCreateMutex(); - GOTO_IF_MACRO(!handle->mutex, ERRPASS, errorcleanup); - - handle->io = io; - - /* seek Primary Volume Descriptor */ - GOTO_IF_MACRO(!io->seek(io, 32768), PHYSFS_ERR_IO, errorcleanup); - - while (1) - { - ISO9660VolumeDescriptor descriptor; - GOTO_IF_MACRO(io->read(io, &descriptor, sizeof(ISO9660VolumeDescriptor)) != sizeof(ISO9660VolumeDescriptor), PHYSFS_ERR_IO, errorcleanup); - GOTO_IF_MACRO(strncmp(descriptor.identifier, "CD001", 5) != 0, PHYSFS_ERR_UNSUPPORTED, errorcleanup); - - if (descriptor.type == 255) - { - /* type 255 terminates the volume descriptor list */ - if (founddescriptor) - return handle; /* ok, we've found one volume descriptor */ - else - GOTO_MACRO(PHYSFS_ERR_CORRUPT, errorcleanup); - } /* if */ - if (descriptor.type == 1 && !founddescriptor) - { - handle->currpos = io->tell(io); - handle->rootdirstart = - descriptor.rootdirectory.extent_location * 2048; - handle->rootdirsize = - descriptor.rootdirectory.data_length; - handle->isjoliet = 0; - founddescriptor = 1; /* continue search for joliet */ - } /* if */ - if (descriptor.type == 2 && !foundjoliet) - { - /* check if is joliet */ - PHYSFS_uint8 *s = descriptor.escape_sequences; - int joliet = !(descriptor.flags & 1) - && (s[0] == 0x25) - && (s[1] == 0x2F) - && ((s[2] == 0x40) || (s[2] == 0x43) || (s[2] == 0x45)); - if (!joliet) - continue; - - handle->currpos = io->tell(io); - handle->rootdirstart = - descriptor.rootdirectory.extent_location * 2048; - handle->rootdirsize = - descriptor.rootdirectory.data_length; - handle->isjoliet = 1; - founddescriptor = 1; - foundjoliet = 1; - } /* if */ - } /* while */ - - GOTO_MACRO(PHYSFS_ERR_CORRUPT, errorcleanup); /* not found. */ - -errorcleanup: - if (handle) - { - if (handle->path) - allocator.Free(handle->path); - if (handle->mutex) - __PHYSFS_platformDestroyMutex(handle->mutex); - allocator.Free(handle); - } /* if */ - return NULL; -} /* ISO9660_openArchive */ - - -static void ISO9660_closeArchive(void *opaque) -{ - ISO9660Handle *handle = (ISO9660Handle*) opaque; - handle->io->destroy(handle->io); - __PHYSFS_platformDestroyMutex(handle->mutex); - allocator.Free(handle->path); - allocator.Free(handle); -} /* ISO9660_closeArchive */ - - -/******************************************************************************* - * Read functions - ******************************************************************************/ - - -static PHYSFS_uint32 iso_file_read_mem(ISO9660FileHandle *filehandle, - void *buffer, PHYSFS_uint64 len) -{ - /* check remaining bytes & max obj which can be fetched */ - const PHYSFS_sint64 bytesleft = filehandle->filesize - filehandle->currpos; - if (bytesleft < len) - len = bytesleft; - - if (len == 0) - return 0; - - memcpy(buffer, filehandle->cacheddata + filehandle->currpos, (size_t) len); - - filehandle->currpos += len; - return (PHYSFS_uint32) len; -} /* iso_file_read_mem */ - - -static int iso_file_seek_mem(ISO9660FileHandle *fhandle, PHYSFS_sint64 offset) -{ - BAIL_IF_MACRO(offset < 0, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(offset >= fhandle->filesize, PHYSFS_ERR_PAST_EOF, 0); - - fhandle->currpos = offset; - return 0; -} /* iso_file_seek_mem */ - - -static void iso_file_close_mem(ISO9660FileHandle *fhandle) -{ - allocator.Free(fhandle->cacheddata); - allocator.Free(fhandle); -} /* iso_file_close_mem */ - - -static PHYSFS_uint32 iso_file_read_foreign(ISO9660FileHandle *filehandle, - void *buffer, PHYSFS_uint64 len) -{ - /* check remaining bytes & max obj which can be fetched */ - const PHYSFS_sint64 bytesleft = filehandle->filesize - filehandle->currpos; - if (bytesleft < len) - len = bytesleft; - - const PHYSFS_sint64 rc = filehandle->io->read(filehandle->io, buffer, len); - BAIL_IF_MACRO(rc == -1, ERRPASS, -1); - - filehandle->currpos += rc; /* i trust my internal book keeping */ - BAIL_IF_MACRO(rc < len, PHYSFS_ERR_CORRUPT, -1); - return rc; -} /* iso_file_read_foreign */ - - -static int iso_file_seek_foreign(ISO9660FileHandle *fhandle, - PHYSFS_sint64 offset) -{ - BAIL_IF_MACRO(offset < 0, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(offset >= fhandle->filesize, PHYSFS_ERR_PAST_EOF, 0); - - PHYSFS_sint64 pos = fhandle->startblock * 2048 + offset; - BAIL_IF_MACRO(!fhandle->io->seek(fhandle->io, pos), ERRPASS, -1); - - fhandle->currpos = offset; - return 0; -} /* iso_file_seek_foreign */ - - -static void iso_file_close_foreign(ISO9660FileHandle *fhandle) -{ - fhandle->io->destroy(fhandle->io); - allocator.Free(fhandle); -} /* iso_file_close_foreign */ - - -static int iso_file_open_mem(ISO9660Handle *handle, ISO9660FileHandle *fhandle) -{ - fhandle->cacheddata = allocator.Malloc(fhandle->filesize); - BAIL_IF_MACRO(!fhandle->cacheddata, PHYSFS_ERR_OUT_OF_MEMORY, -1); - int rc = iso_readimage(handle, fhandle->startblock * 2048, - fhandle->cacheddata, fhandle->filesize); - GOTO_IF_MACRO(rc < 0, ERRPASS, freemem); - GOTO_IF_MACRO(rc == 0, PHYSFS_ERR_CORRUPT, freemem); - - fhandle->read = iso_file_read_mem; - fhandle->seek = iso_file_seek_mem; - fhandle->close = iso_file_close_mem; - return 0; - -freemem: - allocator.Free(fhandle->cacheddata); - return -1; -} /* iso_file_open_mem */ - - -static int iso_file_open_foreign(ISO9660Handle *handle, - ISO9660FileHandle *fhandle) -{ - int rc; - fhandle->io = __PHYSFS_createNativeIo(handle->path, 'r'); - BAIL_IF_MACRO(!fhandle->io, ERRPASS, -1); - rc = fhandle->io->seek(fhandle->io, fhandle->startblock * 2048); - GOTO_IF_MACRO(!rc, ERRPASS, closefile); - - fhandle->read = iso_file_read_foreign; - fhandle->seek = iso_file_seek_foreign; - fhandle->close = iso_file_close_foreign; - return 0; - -closefile: - fhandle->io->destroy(fhandle->io); - return -1; -} /* iso_file_open_foreign */ - - -static PHYSFS_Io *ISO9660_openRead(void *opaque, const char *filename) -{ - PHYSFS_Io *retval = NULL; - ISO9660Handle *handle = (ISO9660Handle*) opaque; - ISO9660FileHandle *fhandle; - ISO9660FileDescriptor descriptor; - int rc; - - fhandle = allocator.Malloc(sizeof(ISO9660FileHandle)); - BAIL_IF_MACRO(fhandle == 0, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - fhandle->cacheddata = 0; - - retval = allocator.Malloc(sizeof(PHYSFS_Io)); - GOTO_IF_MACRO(retval == 0, PHYSFS_ERR_OUT_OF_MEMORY, errorhandling); - - /* find file descriptor */ - rc = iso_find_dir_entry(handle, filename, &descriptor); - GOTO_IF_MACRO(rc, ERRPASS, errorhandling); - - fhandle->startblock = descriptor.extentpos + descriptor.extattributelen; - fhandle->filesize = descriptor.datalen; - fhandle->currpos = 0; - fhandle->isohandle = handle; - fhandle->cacheddata = NULL; - fhandle->io = NULL; - - if (descriptor.datalen <= ISO9660_FULLCACHEMAXSIZE) - rc = iso_file_open_mem(handle, fhandle); - else - rc = iso_file_open_foreign(handle, fhandle); - GOTO_IF_MACRO(rc, ERRPASS, errorhandling); - - memcpy(retval, &ISO9660_Io, sizeof (PHYSFS_Io)); - retval->opaque = fhandle; - return retval; - -errorhandling: - if (retval) allocator.Free(retval); - if (fhandle) allocator.Free(fhandle); - return NULL; -} /* ISO9660_openRead */ - - - -/******************************************************************************* - * Information gathering functions - ******************************************************************************/ - -static void ISO9660_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata) -{ - ISO9660Handle *handle = (ISO9660Handle*) opaque; - ISO9660FileDescriptor descriptor; - PHYSFS_uint64 readpos; - PHYSFS_uint64 end_of_dir; - char filename[130]; /* ISO allows 31, Joliet 128 -> 128 + 2 eol bytes */ - int version = 0; - - if (*dname == '\0') - { - readpos = handle->rootdirstart; - end_of_dir = readpos + handle->rootdirsize; - } /* if */ - else - { - printf("pfad %s\n",dname); - BAIL_IF_MACRO(iso_find_dir_entry(handle,dname, &descriptor), ERRPASS,); - BAIL_IF_MACRO(!descriptor.flags.directory, ERRPASS,); - - readpos = descriptor.extentpos * 2048; - end_of_dir = readpos + descriptor.datalen; - } /* else */ - - while (1) - { - BAIL_IF_MACRO(iso_readfiledescriptor(handle, readpos, &descriptor), ERRPASS, ); - - /* recordlen = 0 -> no more entries or fill entry */ - if (!descriptor.recordlen) - { - /* if we are in the last sector of the directory & it's 0 -> end */ - if ((end_of_dir - 2048) <= (readpos -1)) - break; /* finished */ - - /* else skip to the next sector & continue; */ - readpos = (((readpos - 1) / 2048) + 1) * 2048; - continue; - } /* if */ - - readpos += descriptor.recordlen; - if (descriptor.filenamelen == 1 && (descriptor.filename[0] == 0 - || descriptor.filename[0] == 1)) - continue; /* special ones, ignore */ - - strncpy(filename,descriptor.filename,descriptor.filenamelen); - iso_extractfilename(handle, &descriptor, filename, &version); - cb(callbackdata, origdir,filename); - } /* while */ -} /* ISO9660_enumerateFiles */ - - -static int ISO9660_stat(void *opaque, const char *name, PHYSFS_Stat *stat) -{ - ISO9660Handle *handle = (ISO9660Handle*) opaque; - ISO9660FileDescriptor descriptor; - ISO9660ExtAttributeRec extattr; - BAIL_IF_MACRO(iso_find_dir_entry(handle, name, &descriptor), ERRPASS, -1); - - stat->readonly = 1; - - /* try to get extended info */ - if (descriptor.extattributelen) - { - BAIL_IF_MACRO(iso_read_ext_attributes(handle, - descriptor.extentpos, &extattr), ERRPASS, -1); - stat->createtime = iso_volume_mktime(&extattr.create_time); - stat->modtime = iso_volume_mktime(&extattr.mod_time); - stat->accesstime = iso_volume_mktime(&extattr.mod_time); - } /* if */ - else - { - stat->createtime = iso_mktime(&descriptor.recordtime); - stat->modtime = iso_mktime(&descriptor.recordtime); - stat->accesstime = iso_mktime(&descriptor.recordtime); - } /* else */ - - if (descriptor.flags.directory) - { - stat->filesize = 0; - stat->filetype = PHYSFS_FILETYPE_DIRECTORY; - } /* if */ - else - { - stat->filesize = descriptor.datalen; - stat->filetype = PHYSFS_FILETYPE_REGULAR; - } /* else */ - - return 1; -} /* ISO9660_stat */ - - -/******************************************************************************* - * Not supported functions - ******************************************************************************/ - -static PHYSFS_Io *ISO9660_openWrite(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* ISO9660_openWrite */ - - -static PHYSFS_Io *ISO9660_openAppend(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* ISO9660_openAppend */ - - -static int ISO9660_remove(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* ISO9660_remove */ - - -static int ISO9660_mkdir(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* ISO9660_mkdir */ - - -const PHYSFS_Archiver __PHYSFS_Archiver_ISO9660 = -{ - CURRENT_PHYSFS_ARCHIVER_API_VERSION, - { - "ISO", - "ISO9660 image file", - "Christoph Nelles ", - "http://www.evilazrael.de/", - 0, /* supportsSymlinks */ - }, - ISO9660_openArchive, - ISO9660_enumerateFiles, - ISO9660_openRead, - ISO9660_openWrite, - ISO9660_openAppend, - ISO9660_remove, - ISO9660_mkdir, - ISO9660_stat, - ISO9660_closeArchive -}; - -#endif /* defined PHYSFS_SUPPORTS_ISO9660 */ - -/* end of archiver_iso9660.c ... */ - diff --git a/love/src/jni/physfs-2.1.0/src/archiver_lzma.c b/love/src/jni/physfs-2.1.0/src/archiver_lzma.c deleted file mode 100644 index 064a4b25..00000000 --- a/love/src/jni/physfs-2.1.0/src/archiver_lzma.c +++ /dev/null @@ -1,699 +0,0 @@ -/* - * LZMA support routines for PhysicsFS. - * - * Please see the file lzma.txt in the lzma/ directory. - * - * This file was written by Dennis Schridde, with some peeking at "7zMain.c" - * by Igor Pavlov. - */ - -#define __PHYSICSFS_INTERNAL__ -#include "physfs_internal.h" - -#if PHYSFS_SUPPORTS_7Z - -#include "lzma/C/7zCrc.h" -#include "lzma/C/Archive/7z/7zIn.h" -#include "lzma/C/Archive/7z/7zExtract.h" - - -/* 7z internal from 7zIn.c */ -extern int TestSignatureCandidate(Byte *testBytes); - - -#ifdef _LZMA_IN_CB -# define BUFFER_SIZE (1 << 12) -#endif /* _LZMA_IN_CB */ - - -/* - * Carries filestream metadata through 7z - */ -typedef struct _FileInputStream -{ - ISzAlloc allocImp; /* Allocation implementation, used by 7z */ - ISzAlloc allocTempImp; /* Temporary allocation implementation, used by 7z */ - ISzInStream inStream; /* Input stream with read callbacks, used by 7z */ - PHYSFS_Io *io; /* Filehandle, used by read implementation */ -#ifdef _LZMA_IN_CB - Byte buffer[BUFFER_SIZE]; /* Buffer, used by read implementation */ -#endif /* _LZMA_IN_CB */ -} FileInputStream; - -/* - * In the 7z format archives are splited into blocks, those are called folders - * Set by LZMA_read() -*/ -typedef struct _LZMAfolder -{ - PHYSFS_uint32 index; /* Index of folder in archive */ - PHYSFS_uint32 references; /* Number of files using this block */ - PHYSFS_uint8 *cache; /* Cached folder */ - size_t size; /* Size of folder */ -} LZMAfolder; - -/* - * Set by LZMA_openArchive(), except folder which gets it's values - * in LZMA_read() - */ -typedef struct _LZMAarchive -{ - struct _LZMAfile *files; /* Array of files, size == archive->db.Database.NumFiles */ - LZMAfolder *folders; /* Array of folders, size == archive->db.Database.NumFolders */ - CArchiveDatabaseEx db; /* For 7z: Database */ - FileInputStream stream; /* For 7z: Input file incl. read and seek callbacks */ -} LZMAarchive; - -/* Set by LZMA_openArchive(), except offset which is set by LZMA_read() */ -typedef struct _LZMAfile -{ - PHYSFS_uint32 index; /* Index of file in archive */ - LZMAarchive *archive; /* Link to corresponding archive */ - LZMAfolder *folder; /* Link to corresponding folder */ - CFileItem *item; /* For 7z: File info, eg. name, size */ - size_t offset; /* Offset in folder */ - size_t position; /* Current "virtual" position in file */ -} LZMAfile; - - -/* Memory management implementations to be passed to 7z */ - -static void *SzAllocPhysicsFS(size_t size) -{ - return ((size == 0) ? NULL : allocator.Malloc(size)); -} /* SzAllocPhysicsFS */ - - -static void SzFreePhysicsFS(void *address) -{ - if (address != NULL) - allocator.Free(address); -} /* SzFreePhysicsFS */ - - -/* Filesystem implementations to be passed to 7z */ - -#ifdef _LZMA_IN_CB - -/* - * Read implementation, to be passed to 7z - * WARNING: If the ISzInStream in 'object' is not contained in a valid FileInputStream this _will_ break horribly! - */ -SZ_RESULT SzFileReadImp(void *object, void **buffer, size_t maxReqSize, - size_t *processedSize) -{ - FileInputStream *s = (FileInputStream *)(object - offsetof(FileInputStream, inStream)); /* HACK! */ - PHYSFS_sint64 processedSizeLoc = 0; - - if (maxReqSize > BUFFER_SIZE) - maxReqSize = BUFFER_SIZE; - processedSizeLoc = s->io->read(s->io, s->buffer, maxReqSize); - *buffer = s->buffer; - if (processedSize != NULL) - *processedSize = (size_t) processedSizeLoc; - - return SZ_OK; -} /* SzFileReadImp */ - -#else - -/* - * Read implementation, to be passed to 7z - * WARNING: If the ISzInStream in 'object' is not contained in a valid FileInputStream this _will_ break horribly! - */ -SZ_RESULT SzFileReadImp(void *object, void *buffer, size_t size, - size_t *processedSize) -{ - FileInputStream *s = (FileInputStream *)((unsigned long)object - offsetof(FileInputStream, inStream)); /* HACK! */ - const size_t processedSizeLoc = s->io->read(s->io, buffer, size); - if (processedSize != NULL) - *processedSize = processedSizeLoc; - return SZ_OK; -} /* SzFileReadImp */ - -#endif - -/* - * Seek implementation, to be passed to 7z - * WARNING: If the ISzInStream in 'object' is not contained in a valid FileInputStream this _will_ break horribly! - */ -SZ_RESULT SzFileSeekImp(void *object, CFileSize pos) -{ - FileInputStream *s = (FileInputStream *)((unsigned long)object - offsetof(FileInputStream, inStream)); /* HACK! */ - if (s->io->seek(s->io, (PHYSFS_uint64) pos)) - return SZ_OK; - return SZE_FAIL; -} /* SzFileSeekImp */ - - -/* - * Translate Microsoft FILETIME (used by 7zip) into UNIX timestamp - */ -static PHYSFS_sint64 lzma_filetime_to_unix_timestamp(CArchiveFileTime *ft) -{ - /* MS counts in nanoseconds ... */ - const PHYSFS_uint64 FILETIME_NANOTICKS_PER_SECOND = __PHYSFS_UI64(10000000); - /* MS likes to count seconds since 01.01.1601 ... */ - const PHYSFS_uint64 FILETIME_UNIX_DIFF = __PHYSFS_UI64(11644473600); - - PHYSFS_uint64 filetime = ft->Low | ((PHYSFS_uint64)ft->High << 32); - return filetime/FILETIME_NANOTICKS_PER_SECOND - FILETIME_UNIX_DIFF; -} /* lzma_filetime_to_unix_timestamp */ - - -/* - * Compare a file with a given name, C89 stdlib variant - * Used for sorting - */ -static int lzma_file_cmp_stdlib(const void *key, const void *object) -{ - const char *name = (const char *) key; - LZMAfile *file = (LZMAfile *) object; - return strcmp(name, file->item->Name); -} /* lzma_file_cmp_posix */ - - -/* - * Compare two files with each other based on the name - * Used for sorting - */ -static int lzma_file_cmp(void *_a, size_t one, size_t two) -{ - LZMAfile *files = (LZMAfile *) _a; - return strcmp(files[one].item->Name, files[two].item->Name); -} /* lzma_file_cmp */ - - -/* - * Swap two entries in the file array - */ -static void lzma_file_swap(void *_a, size_t one, size_t two) -{ - LZMAfile tmp; - LZMAfile *first = &(((LZMAfile *) _a)[one]); - LZMAfile *second = &(((LZMAfile *) _a)[two]); - memcpy(&tmp, first, sizeof (LZMAfile)); - memcpy(first, second, sizeof (LZMAfile)); - memcpy(second, &tmp, sizeof (LZMAfile)); -} /* lzma_file_swap */ - - -/* - * Find entry 'name' in 'archive' - */ -static LZMAfile * lzma_find_file(const LZMAarchive *archive, const char *name) -{ - LZMAfile *file = bsearch(name, archive->files, archive->db.Database.NumFiles, sizeof(*archive->files), lzma_file_cmp_stdlib); /* FIXME: Should become __PHYSFS_search!!! */ - - BAIL_IF_MACRO(file == NULL, PHYSFS_ERR_NOT_FOUND, NULL); - - return file; -} /* lzma_find_file */ - - -/* - * Load metadata for the file at given index - */ -static int lzma_file_init(LZMAarchive *archive, PHYSFS_uint32 fileIndex) -{ - LZMAfile *file = &archive->files[fileIndex]; - PHYSFS_uint32 folderIndex = archive->db.FileIndexToFolderIndexMap[fileIndex]; - - file->index = fileIndex; /* Store index into 7z array, since we sort our own. */ - file->archive = archive; - file->folder = (folderIndex != (PHYSFS_uint32)-1 ? &archive->folders[folderIndex] : NULL); /* Directories don't have a folder (they contain no own data...) */ - file->item = &archive->db.Database.Files[fileIndex]; /* Holds crucial data and is often referenced -> Store link */ - file->position = 0; - file->offset = 0; /* Offset will be set by LZMA_read() */ - - return 1; -} /* lzma_load_file */ - - -/* - * Load metadata for all files - */ -static int lzma_files_init(LZMAarchive *archive) -{ - PHYSFS_uint32 fileIndex = 0, numFiles = archive->db.Database.NumFiles; - - for (fileIndex = 0; fileIndex < numFiles; fileIndex++ ) - { - if (!lzma_file_init(archive, fileIndex)) - { - return 0; /* FALSE on failure */ - } - } /* for */ - - __PHYSFS_sort(archive->files, (size_t) numFiles, lzma_file_cmp, lzma_file_swap); - - return 1; -} /* lzma_load_files */ - - -/* - * Initialise specified archive - */ -static void lzma_archive_init(LZMAarchive *archive) -{ - memset(archive, 0, sizeof(*archive)); - - /* Prepare callbacks for 7z */ - archive->stream.inStream.Read = SzFileReadImp; - archive->stream.inStream.Seek = SzFileSeekImp; - - archive->stream.allocImp.Alloc = SzAllocPhysicsFS; - archive->stream.allocImp.Free = SzFreePhysicsFS; - - archive->stream.allocTempImp.Alloc = SzAllocPhysicsFS; - archive->stream.allocTempImp.Free = SzFreePhysicsFS; -} - - -/* - * Deinitialise archive - */ -static void lzma_archive_exit(LZMAarchive *archive) -{ - /* Free arrays */ - allocator.Free(archive->folders); - allocator.Free(archive->files); - allocator.Free(archive); -} - -/* - * Wrap all 7z calls in this, so the physfs error state is set appropriately. - */ -static int lzma_err(SZ_RESULT rc) -{ - switch (rc) - { - case SZ_OK: /* Same as LZMA_RESULT_OK */ - break; - case SZE_DATA_ERROR: /* Same as LZMA_RESULT_DATA_ERROR */ - PHYSFS_setErrorCode(PHYSFS_ERR_CORRUPT); /*!!!FIXME: was "PHYSFS_ERR_DATA_ERROR" */ - break; - case SZE_OUTOFMEMORY: - PHYSFS_setErrorCode(PHYSFS_ERR_OUT_OF_MEMORY); - break; - case SZE_CRC_ERROR: - PHYSFS_setErrorCode(PHYSFS_ERR_CORRUPT); - break; - case SZE_NOTIMPL: - PHYSFS_setErrorCode(PHYSFS_ERR_UNSUPPORTED); - break; - case SZE_FAIL: - PHYSFS_setErrorCode(PHYSFS_ERR_OTHER_ERROR); /* !!! FIXME: right? */ - break; - case SZE_ARCHIVE_ERROR: - PHYSFS_setErrorCode(PHYSFS_ERR_CORRUPT); /* !!! FIXME: right? */ - break; - default: - PHYSFS_setErrorCode(PHYSFS_ERR_OTHER_ERROR); - } /* switch */ - - return rc; -} /* lzma_err */ - - -static PHYSFS_sint64 LZMA_read(PHYSFS_Io *io, void *outBuf, PHYSFS_uint64 len) -{ - LZMAfile *file = (LZMAfile *) io->opaque; - - size_t wantedSize = (size_t) len; - const size_t remainingSize = file->item->Size - file->position; - size_t fileSize = 0; - - BAIL_IF_MACRO(wantedSize == 0, ERRPASS, 0); /* quick rejection. */ - BAIL_IF_MACRO(remainingSize == 0, PHYSFS_ERR_PAST_EOF, 0); - - if (wantedSize > remainingSize) - wantedSize = remainingSize; - - /* Only decompress the folder if it is not already cached */ - if (file->folder->cache == NULL) - { - const int rc = lzma_err(SzExtract( - &file->archive->stream.inStream, /* compressed data */ - &file->archive->db, /* 7z's database, containing everything */ - file->index, /* Index into database arrays */ - /* Index of cached folder, will be changed by SzExtract */ - &file->folder->index, - /* Cache for decompressed folder, allocated/freed by SzExtract */ - &file->folder->cache, - /* Size of cache, will be changed by SzExtract */ - &file->folder->size, - /* Offset of this file inside the cache, set by SzExtract */ - &file->offset, - &fileSize, /* Size of this file */ - &file->archive->stream.allocImp, - &file->archive->stream.allocTempImp)); - - if (rc != SZ_OK) - return -1; - } /* if */ - - /* Copy wanted bytes over from cache to outBuf */ - memcpy(outBuf, (file->folder->cache + file->offset + file->position), - wantedSize); - file->position += wantedSize; /* Increase virtual position */ - - return wantedSize; -} /* LZMA_read */ - - -static PHYSFS_sint64 LZMA_write(PHYSFS_Io *io, const void *b, PHYSFS_uint64 len) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, -1); -} /* LZMA_write */ - - -static PHYSFS_sint64 LZMA_tell(PHYSFS_Io *io) -{ - LZMAfile *file = (LZMAfile *) io->opaque; - return file->position; -} /* LZMA_tell */ - - -static int LZMA_seek(PHYSFS_Io *io, PHYSFS_uint64 offset) -{ - LZMAfile *file = (LZMAfile *) io->opaque; - - BAIL_IF_MACRO(offset > file->item->Size, PHYSFS_ERR_PAST_EOF, 0); - - file->position = offset; /* We only use a virtual position... */ - - return 1; -} /* LZMA_seek */ - - -static PHYSFS_sint64 LZMA_length(PHYSFS_Io *io) -{ - const LZMAfile *file = (LZMAfile *) io->opaque; - return (file->item->Size); -} /* LZMA_length */ - - -static PHYSFS_Io *LZMA_duplicate(PHYSFS_Io *_io) -{ - /* !!! FIXME: this archiver needs to be reworked to allow multiple - * !!! FIXME: opens before we worry about duplication. */ - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); -} /* LZMA_duplicate */ - - -static int LZMA_flush(PHYSFS_Io *io) { return 1; /* no write support. */ } - - -static void LZMA_destroy(PHYSFS_Io *io) -{ - LZMAfile *file = (LZMAfile *) io->opaque; - - if (file->folder != NULL) - { - /* Only decrease refcount if someone actually requested this file... Prevents from overflows and close-on-open... */ - if (file->folder->references > 0) - file->folder->references--; - if (file->folder->references == 0) - { - /* Free the cache which might have been allocated by LZMA_read() */ - allocator.Free(file->folder->cache); - file->folder->cache = NULL; - } - /* !!! FIXME: we don't free (file) or (file->folder)?! */ - } /* if */ -} /* LZMA_destroy */ - - -static const PHYSFS_Io LZMA_Io = -{ - CURRENT_PHYSFS_IO_API_VERSION, NULL, - LZMA_read, - LZMA_write, - LZMA_seek, - LZMA_tell, - LZMA_length, - LZMA_duplicate, - LZMA_flush, - LZMA_destroy -}; - - -static void *LZMA_openArchive(PHYSFS_Io *io, const char *name, int forWriting) -{ - PHYSFS_uint8 sig[k7zSignatureSize]; - size_t len = 0; - LZMAarchive *archive = NULL; - - assert(io != NULL); /* shouldn't ever happen. */ - - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - - if (io->read(io, sig, k7zSignatureSize) != k7zSignatureSize) - return 0; - BAIL_IF_MACRO(!TestSignatureCandidate(sig), PHYSFS_ERR_UNSUPPORTED, NULL); - BAIL_IF_MACRO(!io->seek(io, 0), ERRPASS, NULL); - - archive = (LZMAarchive *) allocator.Malloc(sizeof (LZMAarchive)); - BAIL_IF_MACRO(archive == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - lzma_archive_init(archive); - archive->stream.io = io; - - CrcGenerateTable(); - SzArDbExInit(&archive->db); - if (lzma_err(SzArchiveOpen(&archive->stream.inStream, - &archive->db, - &archive->stream.allocImp, - &archive->stream.allocTempImp)) != SZ_OK) - { - SzArDbExFree(&archive->db, SzFreePhysicsFS); - lzma_archive_exit(archive); - return NULL; /* Error is set by lzma_err! */ - } /* if */ - - len = archive->db.Database.NumFiles * sizeof (LZMAfile); - archive->files = (LZMAfile *) allocator.Malloc(len); - if (archive->files == NULL) - { - SzArDbExFree(&archive->db, SzFreePhysicsFS); - lzma_archive_exit(archive); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - } - - /* - * Init with 0 so we know when a folder is already cached - * Values will be set by LZMA_openRead() - */ - memset(archive->files, 0, len); - - len = archive->db.Database.NumFolders * sizeof (LZMAfolder); - archive->folders = (LZMAfolder *) allocator.Malloc(len); - if (archive->folders == NULL) - { - SzArDbExFree(&archive->db, SzFreePhysicsFS); - lzma_archive_exit(archive); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - } - - /* - * Init with 0 so we know when a folder is already cached - * Values will be set by LZMA_read() - */ - memset(archive->folders, 0, len); - - if(!lzma_files_init(archive)) - { - SzArDbExFree(&archive->db, SzFreePhysicsFS); - lzma_archive_exit(archive); - BAIL_MACRO(PHYSFS_ERR_OTHER_ERROR, NULL); - } - - return archive; -} /* LZMA_openArchive */ - - -/* - * Moved to seperate function so we can use alloca then immediately throw - * away the allocated stack space... - */ -static void doEnumCallback(PHYSFS_EnumFilesCallback cb, void *callbackdata, - const char *odir, const char *str, size_t flen) -{ - char *newstr = __PHYSFS_smallAlloc(flen + 1); - if (newstr == NULL) - return; - - memcpy(newstr, str, flen); - newstr[flen] = '\0'; - cb(callbackdata, odir, newstr); - __PHYSFS_smallFree(newstr); -} /* doEnumCallback */ - - -static void LZMA_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata) -{ - size_t dlen = strlen(dname), - dlen_inc = dlen + ((dlen > 0) ? 1 : 0); - LZMAarchive *archive = (LZMAarchive *) opaque; - LZMAfile *file = NULL, - *lastFile = &archive->files[archive->db.Database.NumFiles]; - if (dlen) - { - file = lzma_find_file(archive, dname); - if (file != NULL) /* if 'file' is NULL it should stay so, otherwise errors will not be handled */ - file += 1; - } - else - { - file = archive->files; - } - - BAIL_IF_MACRO(file == NULL, PHYSFS_ERR_NOT_FOUND, ); - - while (file < lastFile) - { - const char * fname = file->item->Name; - const char * dirNameEnd = fname + dlen_inc; - - if (strncmp(dname, fname, dlen) != 0) /* Stop after mismatch, archive->files is sorted */ - break; - - if (strchr(dirNameEnd, '/')) /* Skip subdirs */ - { - file++; - continue; - } - - /* Do the actual callback... */ - doEnumCallback(cb, callbackdata, origdir, dirNameEnd, strlen(dirNameEnd)); - - file++; - } -} /* LZMA_enumerateFiles */ - - -static PHYSFS_Io *LZMA_openRead(void *opaque, const char *name) -{ - LZMAarchive *archive = (LZMAarchive *) opaque; - LZMAfile *file = lzma_find_file(archive, name); - PHYSFS_Io *io = NULL; - - BAIL_IF_MACRO(file == NULL, PHYSFS_ERR_NOT_FOUND, NULL); - BAIL_IF_MACRO(file->folder == NULL, PHYSFS_ERR_NOT_A_FILE, NULL); - - file->position = 0; - file->folder->references++; /* Increase refcount for automatic cleanup... */ - - io = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - BAIL_IF_MACRO(io == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - memcpy(io, &LZMA_Io, sizeof (*io)); - io->opaque = file; - - return io; -} /* LZMA_openRead */ - - -static PHYSFS_Io *LZMA_openWrite(void *opaque, const char *filename) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* LZMA_openWrite */ - - -static PHYSFS_Io *LZMA_openAppend(void *opaque, const char *filename) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* LZMA_openAppend */ - - -static void LZMA_closeArchive(void *opaque) -{ - LZMAarchive *archive = (LZMAarchive *) opaque; - -#if 0 /* !!! FIXME: you shouldn't have to do this. */ - PHYSFS_uint32 fileIndex = 0, numFiles = archive->db.Database.NumFiles; - for (fileIndex = 0; fileIndex < numFiles; fileIndex++) - { - LZMA_fileClose(&archive->files[fileIndex]); - } /* for */ -#endif - - SzArDbExFree(&archive->db, SzFreePhysicsFS); - archive->stream.io->destroy(archive->stream.io); - lzma_archive_exit(archive); -} /* LZMA_closeArchive */ - - -static int LZMA_remove(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* LZMA_remove */ - - -static int LZMA_mkdir(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* LZMA_mkdir */ - -static int LZMA_stat(void *opaque, const char *filename, PHYSFS_Stat *stat) -{ - const LZMAarchive *archive = (const LZMAarchive *) opaque; - const LZMAfile *file = lzma_find_file(archive, filename); - - if (!file) - return 0; - - if(file->item->IsDirectory) - { - stat->filesize = 0; - stat->filetype = PHYSFS_FILETYPE_DIRECTORY; - } /* if */ - else - { - stat->filesize = (PHYSFS_sint64) file->item->Size; - stat->filetype = PHYSFS_FILETYPE_REGULAR; - } /* else */ - - /* !!! FIXME: the 0's should be -1's? */ - if (file->item->IsLastWriteTimeDefined) - stat->modtime = lzma_filetime_to_unix_timestamp(&file->item->LastWriteTime); - else - stat->modtime = 0; - - /* real create and accesstype are currently not in the lzma SDK */ - stat->createtime = stat->modtime; - stat->accesstime = 0; - - stat->readonly = 1; /* 7zips are always read only */ - - return 1; -} /* LZMA_stat */ - - -const PHYSFS_Archiver __PHYSFS_Archiver_LZMA = -{ - CURRENT_PHYSFS_ARCHIVER_API_VERSION, - { - "7Z", - "LZMA (7zip) format", - "Dennis Schridde ", - "http://icculus.org/physfs/", - 0, /* supportsSymlinks */ - }, - LZMA_openArchive, - LZMA_enumerateFiles, - LZMA_openRead, - LZMA_openWrite, - LZMA_openAppend, - LZMA_remove, - LZMA_mkdir, - LZMA_stat, - LZMA_closeArchive -}; - -#endif /* defined PHYSFS_SUPPORTS_7Z */ - -/* end of archiver_lzma.c ... */ - diff --git a/love/src/jni/physfs-2.1.0/src/archiver_slb.c b/love/src/jni/physfs-2.1.0/src/archiver_slb.c deleted file mode 100644 index befd2051..00000000 --- a/love/src/jni/physfs-2.1.0/src/archiver_slb.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SLB support routines for PhysicsFS. - * - * This driver handles SLB archives ("slab files"). This uncompressed format - * is used in I-War / Independence War and Independence War: Defiance. - * - * The format begins with four zero bytes (version?), the file count and the - * location of the table of contents. Each ToC entry contains a 64-byte buffer - * containing a zero-terminated filename, the offset of the data, and its size. - * All the filenames begin with the separator character '\'. - * - * Please see the file LICENSE.txt in the source's root directory. - * - * This file written by Aleksi Nurmi, based on the GRP archiver by - * Ryan C. Gordon. - */ - -#define __PHYSICSFS_INTERNAL__ -#include "physfs_internal.h" - -#if PHYSFS_SUPPORTS_SLB - -static UNPKentry *slbLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 fileCount) -{ - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; - - entries = (UNPKentry *) allocator.Malloc(sizeof (UNPKentry) * fileCount); - BAIL_IF_MACRO(entries == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - for (entry = entries; fileCount > 0; fileCount--, entry++) - { - char *ptr; - - /* don't include the '\' in the beginning */ - char backslash; - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &backslash, 1), ERRPASS, failed); - GOTO_IF_MACRO(backslash != '\\', ERRPASS, failed); - - /* read the rest of the buffer, 63 bytes */ - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->name, 63), ERRPASS, failed); - entry->name[63] = '\0'; /* in case the name lacks the null terminator */ - - /* convert backslashes */ - for (ptr = entry->name; *ptr; ptr++) - { - if (*ptr == '\\') - *ptr = '/'; - } /* for */ - - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->startPos, 4), - ERRPASS, failed); - entry->startPos = PHYSFS_swapULE32(entry->startPos); - - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->size, 4), ERRPASS, failed); - entry->size = PHYSFS_swapULE32(entry->size); - } /* for */ - - return entries; - -failed: - allocator.Free(entries); - return NULL; - -} /* slbLoadEntries */ - - -static void *SLB_openArchive(PHYSFS_Io *io, const char *name, int forWriting) -{ - PHYSFS_uint32 version; - PHYSFS_uint32 count = 0; - PHYSFS_uint32 tocPos = 0; - UNPKentry *entries = NULL; - - assert(io != NULL); /* shouldn't ever happen. */ - - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &version, sizeof(version)), - ERRPASS, NULL); - version = PHYSFS_swapULE32(version); - BAIL_IF_MACRO(version != 0, ERRPASS, NULL); - - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &count, sizeof(count)), ERRPASS, NULL); - count = PHYSFS_swapULE32(count); - - /* offset of the table of contents */ - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &tocPos, sizeof(tocPos)), - ERRPASS, NULL); - tocPos = PHYSFS_swapULE32(tocPos); - - /* seek to the table of contents */ - BAIL_IF_MACRO(!io->seek(io, tocPos), ERRPASS, NULL); - - entries = slbLoadEntries(io, count); - BAIL_IF_MACRO(!entries, ERRPASS, NULL); - - return UNPK_openArchive(io, entries, count); -} /* SLB_openArchive */ - - -const PHYSFS_Archiver __PHYSFS_Archiver_SLB = -{ - CURRENT_PHYSFS_ARCHIVER_API_VERSION, - { - "SLB", - "I-War / Independence War Slab file", - "Aleksi Nurmi ", - "http://bitbucket.org/ahnurmi/", - 0, /* supportsSymlinks */ - }, - SLB_openArchive, - UNPK_enumerateFiles, - UNPK_openRead, - UNPK_openWrite, - UNPK_openAppend, - UNPK_remove, - UNPK_mkdir, - UNPK_stat, - UNPK_closeArchive -}; - -#endif /* defined PHYSFS_SUPPORTS_SLB */ - -/* end of archiver_slb.c ... */ - diff --git a/love/src/jni/physfs-2.1.0/src/archiver_unpacked.c b/love/src/jni/physfs-2.1.0/src/archiver_unpacked.c deleted file mode 100644 index bb0dab6e..00000000 --- a/love/src/jni/physfs-2.1.0/src/archiver_unpacked.c +++ /dev/null @@ -1,464 +0,0 @@ -/* - * High-level PhysicsFS archiver for simple unpacked file formats. - * - * This is a framework that basic archivers build on top of. It's for simple - * formats that can just hand back a list of files and the offsets of their - * uncompressed data. There are an alarming number of formats like this. - * - * RULES: Archive entries must be uncompressed, must not have separate subdir - * entries (but can have subdirs), must be case insensitive LOW ASCII - * filenames <= 64 bytes. No symlinks, etc. We can relax some of these rules - * as necessary. - * - * Please see the file LICENSE.txt in the source's root directory. - * - * This file written by Ryan C. Gordon. - */ - -#define __PHYSICSFS_INTERNAL__ -#include "physfs_internal.h" - -typedef struct -{ - PHYSFS_Io *io; - PHYSFS_uint32 entryCount; - UNPKentry *entries; -} UNPKinfo; - - -typedef struct -{ - PHYSFS_Io *io; - UNPKentry *entry; - PHYSFS_uint32 curPos; -} UNPKfileinfo; - - -void UNPK_closeArchive(void *opaque) -{ - UNPKinfo *info = ((UNPKinfo *) opaque); - info->io->destroy(info->io); - allocator.Free(info->entries); - allocator.Free(info); -} /* UNPK_closeArchive */ - - -static PHYSFS_sint64 UNPK_read(PHYSFS_Io *io, void *buffer, PHYSFS_uint64 len) -{ - UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; - const UNPKentry *entry = finfo->entry; - const PHYSFS_uint64 bytesLeft = (PHYSFS_uint64)(entry->size-finfo->curPos); - PHYSFS_sint64 rc; - - if (bytesLeft < len) - len = bytesLeft; - - rc = finfo->io->read(finfo->io, buffer, len); - if (rc > 0) - finfo->curPos += (PHYSFS_uint32) rc; - - return rc; -} /* UNPK_read */ - - -static PHYSFS_sint64 UNPK_write(PHYSFS_Io *io, const void *b, PHYSFS_uint64 len) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, -1); -} /* UNPK_write */ - - -static PHYSFS_sint64 UNPK_tell(PHYSFS_Io *io) -{ - return ((UNPKfileinfo *) io->opaque)->curPos; -} /* UNPK_tell */ - - -static int UNPK_seek(PHYSFS_Io *io, PHYSFS_uint64 offset) -{ - UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; - const UNPKentry *entry = finfo->entry; - int rc; - - BAIL_IF_MACRO(offset >= entry->size, PHYSFS_ERR_PAST_EOF, 0); - rc = finfo->io->seek(finfo->io, entry->startPos + offset); - if (rc) - finfo->curPos = (PHYSFS_uint32) offset; - - return rc; -} /* UNPK_seek */ - - -static PHYSFS_sint64 UNPK_length(PHYSFS_Io *io) -{ - const UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; - return ((PHYSFS_sint64) finfo->entry->size); -} /* UNPK_length */ - - -static PHYSFS_Io *UNPK_duplicate(PHYSFS_Io *_io) -{ - UNPKfileinfo *origfinfo = (UNPKfileinfo *) _io->opaque; - PHYSFS_Io *io = NULL; - PHYSFS_Io *retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - UNPKfileinfo *finfo = (UNPKfileinfo *) allocator.Malloc(sizeof (UNPKfileinfo)); - GOTO_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_duplicate_failed); - GOTO_IF_MACRO(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_duplicate_failed); - - io = origfinfo->io->duplicate(origfinfo->io); - if (!io) goto UNPK_duplicate_failed; - finfo->io = io; - finfo->entry = origfinfo->entry; - finfo->curPos = 0; - memcpy(retval, _io, sizeof (PHYSFS_Io)); - retval->opaque = finfo; - return retval; - -UNPK_duplicate_failed: - if (finfo != NULL) allocator.Free(finfo); - if (retval != NULL) allocator.Free(retval); - if (io != NULL) io->destroy(io); - return NULL; -} /* UNPK_duplicate */ - -static int UNPK_flush(PHYSFS_Io *io) { return 1; /* no write support. */ } - -static void UNPK_destroy(PHYSFS_Io *io) -{ - UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; - finfo->io->destroy(finfo->io); - allocator.Free(finfo); - allocator.Free(io); -} /* UNPK_destroy */ - - -static const PHYSFS_Io UNPK_Io = -{ - CURRENT_PHYSFS_IO_API_VERSION, NULL, - UNPK_read, - UNPK_write, - UNPK_seek, - UNPK_tell, - UNPK_length, - UNPK_duplicate, - UNPK_flush, - UNPK_destroy -}; - - -static int entryCmp(void *_a, size_t one, size_t two) -{ - if (one != two) - { - const UNPKentry *a = (const UNPKentry *) _a; - return __PHYSFS_stricmpASCII(a[one].name, a[two].name); - } /* if */ - - return 0; -} /* entryCmp */ - - -static void entrySwap(void *_a, size_t one, size_t two) -{ - if (one != two) - { - UNPKentry tmp; - UNPKentry *first = &(((UNPKentry *) _a)[one]); - UNPKentry *second = &(((UNPKentry *) _a)[two]); - memcpy(&tmp, first, sizeof (UNPKentry)); - memcpy(first, second, sizeof (UNPKentry)); - memcpy(second, &tmp, sizeof (UNPKentry)); - } /* if */ -} /* entrySwap */ - - -static PHYSFS_sint32 findStartOfDir(UNPKinfo *info, const char *path, - int stop_on_first_find) -{ - PHYSFS_sint32 lo = 0; - PHYSFS_sint32 hi = (PHYSFS_sint32) (info->entryCount - 1); - PHYSFS_sint32 middle; - PHYSFS_uint32 dlen = (PHYSFS_uint32) strlen(path); - PHYSFS_sint32 retval = -1; - const char *name; - int rc; - - if (*path == '\0') /* root dir? */ - return 0; - - if ((dlen > 0) && (path[dlen - 1] == '/')) /* ignore trailing slash. */ - dlen--; - - while (lo <= hi) - { - middle = lo + ((hi - lo) / 2); - name = info->entries[middle].name; - rc = __PHYSFS_strnicmpASCII(path, name, dlen); - if (rc == 0) - { - char ch = name[dlen]; - if (ch < '/') /* make sure this isn't just a substr match. */ - rc = -1; - else if (ch > '/') - rc = 1; - else - { - if (stop_on_first_find) /* Just checking dir's existance? */ - return middle; - - if (name[dlen + 1] == '\0') /* Skip initial dir entry. */ - return (middle + 1); - - /* there might be more entries earlier in the list. */ - retval = middle; - hi = middle - 1; - } /* else */ - } /* if */ - - if (rc > 0) - lo = middle + 1; - else - hi = middle - 1; - } /* while */ - - return retval; -} /* findStartOfDir */ - - -/* - * Moved to seperate function so we can use alloca then immediately throw - * away the allocated stack space... - */ -static void doEnumCallback(PHYSFS_EnumFilesCallback cb, void *callbackdata, - const char *odir, const char *str, PHYSFS_sint32 ln) -{ - char *newstr = __PHYSFS_smallAlloc(ln + 1); - if (newstr == NULL) - return; - - memcpy(newstr, str, ln); - newstr[ln] = '\0'; - cb(callbackdata, odir, newstr); - __PHYSFS_smallFree(newstr); -} /* doEnumCallback */ - - -void UNPK_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata) -{ - UNPKinfo *info = ((UNPKinfo *) opaque); - PHYSFS_sint32 dlen, dlen_inc, max, i; - - i = findStartOfDir(info, dname, 0); - if (i == -1) /* no such directory. */ - return; - - dlen = (PHYSFS_sint32) strlen(dname); - if ((dlen > 0) && (dname[dlen - 1] == '/')) /* ignore trailing slash. */ - dlen--; - - dlen_inc = ((dlen > 0) ? 1 : 0) + dlen; - max = (PHYSFS_sint32) info->entryCount; - while (i < max) - { - char *add; - char *ptr; - PHYSFS_sint32 ln; - char *e = info->entries[i].name; - if ((dlen) && - ((__PHYSFS_strnicmpASCII(e, dname, dlen)) || (e[dlen] != '/'))) - { - break; /* past end of this dir; we're done. */ - } /* if */ - - add = e + dlen_inc; - ptr = strchr(add, '/'); - ln = (PHYSFS_sint32) ((ptr) ? ptr-add : strlen(add)); - doEnumCallback(cb, callbackdata, origdir, add, ln); - ln += dlen_inc; /* point past entry to children... */ - - /* increment counter and skip children of subdirs... */ - while ((++i < max) && (ptr != NULL)) - { - char *e_new = info->entries[i].name; - if ((__PHYSFS_strnicmpASCII(e, e_new, ln) != 0) || - (e_new[ln] != '/')) - { - break; - } /* if */ - } /* while */ - } /* while */ -} /* UNPK_enumerateFiles */ - - -/* - * This will find the UNPKentry associated with a path in platform-independent - * notation. Directories don't have UNPKentries associated with them, but - * (*isDir) will be set to non-zero if a dir was hit. - */ -static UNPKentry *findEntry(const UNPKinfo *info, const char *path, int *isDir) -{ - UNPKentry *a = info->entries; - PHYSFS_sint32 pathlen = (PHYSFS_sint32) strlen(path); - PHYSFS_sint32 lo = 0; - PHYSFS_sint32 hi = (PHYSFS_sint32) (info->entryCount - 1); - PHYSFS_sint32 middle; - const char *thispath = NULL; - int rc; - - while (lo <= hi) - { - middle = lo + ((hi - lo) / 2); - thispath = a[middle].name; - rc = __PHYSFS_strnicmpASCII(path, thispath, pathlen); - - if (rc > 0) - lo = middle + 1; - - else if (rc < 0) - hi = middle - 1; - - else /* substring match...might be dir or entry or nothing. */ - { - if (isDir != NULL) - { - *isDir = (thispath[pathlen] == '/'); - if (*isDir) - return NULL; - } /* if */ - - if (thispath[pathlen] == '\0') /* found entry? */ - return &a[middle]; - /* adjust search params, try again. */ - else if (thispath[pathlen] > '/') - hi = middle - 1; - else - lo = middle + 1; - } /* if */ - } /* while */ - - if (isDir != NULL) - *isDir = 0; - - BAIL_MACRO(PHYSFS_ERR_NOT_FOUND, NULL); -} /* findEntry */ - - -PHYSFS_Io *UNPK_openRead(void *opaque, const char *name) -{ - PHYSFS_Io *retval = NULL; - UNPKinfo *info = (UNPKinfo *) opaque; - UNPKfileinfo *finfo = NULL; - int isdir = 0; - UNPKentry *entry = findEntry(info, name, &isdir); - - GOTO_IF_MACRO(isdir, PHYSFS_ERR_NOT_A_FILE, UNPK_openRead_failed); - GOTO_IF_MACRO(!entry, ERRPASS, UNPK_openRead_failed); - - retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - GOTO_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_openRead_failed); - - finfo = (UNPKfileinfo *) allocator.Malloc(sizeof (UNPKfileinfo)); - GOTO_IF_MACRO(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_openRead_failed); - - finfo->io = info->io->duplicate(info->io); - GOTO_IF_MACRO(!finfo->io, ERRPASS, UNPK_openRead_failed); - - if (!finfo->io->seek(finfo->io, entry->startPos)) - goto UNPK_openRead_failed; - - finfo->curPos = 0; - finfo->entry = entry; - - memcpy(retval, &UNPK_Io, sizeof (*retval)); - retval->opaque = finfo; - return retval; - -UNPK_openRead_failed: - if (finfo != NULL) - { - if (finfo->io != NULL) - finfo->io->destroy(finfo->io); - allocator.Free(finfo); - } /* if */ - - if (retval != NULL) - allocator.Free(retval); - - return NULL; -} /* UNPK_openRead */ - - -PHYSFS_Io *UNPK_openWrite(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* UNPK_openWrite */ - - -PHYSFS_Io *UNPK_openAppend(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); -} /* UNPK_openAppend */ - - -int UNPK_remove(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* UNPK_remove */ - - -int UNPK_mkdir(void *opaque, const char *name) -{ - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); -} /* UNPK_mkdir */ - - -int UNPK_stat(void *opaque, const char *filename, PHYSFS_Stat *stat) -{ - int isDir = 0; - const UNPKinfo *info = (const UNPKinfo *) opaque; - const UNPKentry *entry = findEntry(info, filename, &isDir); - - if (isDir) - { - stat->filetype = PHYSFS_FILETYPE_DIRECTORY; - stat->filesize = 0; - } /* if */ - else if (entry != NULL) - { - stat->filetype = PHYSFS_FILETYPE_REGULAR; - stat->filesize = entry->size; - } /* else if */ - else - { - return 0; - } /* else */ - - stat->modtime = -1; - stat->createtime = -1; - stat->accesstime = -1; - stat->readonly = 1; - - return 1; -} /* UNPK_stat */ - - -void *UNPK_openArchive(PHYSFS_Io *io, UNPKentry *e, const PHYSFS_uint32 num) -{ - UNPKinfo *info = (UNPKinfo *) allocator.Malloc(sizeof (UNPKinfo)); - if (info == NULL) - { - allocator.Free(e); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - } /* if */ - - __PHYSFS_sort(e, (size_t) num, entryCmp, entrySwap); - info->io = io; - info->entryCount = num; - info->entries = e; - - return info; -} /* UNPK_openArchive */ - -/* end of archiver_unpacked.c ... */ - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/7zC.txt b/love/src/jni/physfs-2.1.0/src/lzma/7zC.txt deleted file mode 100644 index 84129547..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/7zC.txt +++ /dev/null @@ -1,237 +0,0 @@ -7z ANSI-C Decoder 4.48 ----------------------- - -7z ANSI-C Decoder 4.48 Copyright (C) 1999-2006 Igor Pavlov - -7z ANSI-C provides 7z/LZMA decoding. -7z ANSI-C version is simplified version ported from C++ code. - -LZMA is default and general compression method of 7z format -in 7-Zip compression program (www.7-zip.org). LZMA provides high -compression ratio and very fast decompression. - - -LICENSE -------- - -Read lzma.txt for information about license. - - -Files ---------------------- - -7zAlloc.* - Allocate and Free -7zBuffer.* - Buffer structure -7zCrc.* - CRC32 code -7zDecode.* - Low level memory->memory decoding -7zExtract.* - High level stream->memory decoding -7zHeader.* - .7z format constants -7zIn.* - .7z archive opening -7zItem.* - .7z structures -7zMain.c - Test application -7zMethodID.* - MethodID structure -7zTypes.h - Base types and constants - - -How To Use ----------- - -You must download 7-Zip program from www.7-zip.org. - -You can create .7z archive with 7z.exe or 7za.exe: - - 7za.exe a archive.7z *.htm -r -mx -m0fb=255 - -If you have big number of files in archive, and you need fast extracting, -you can use partly-solid archives: - - 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K - -In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only -512KB for extracting one file from such archive. - - -Limitations of current version of 7z ANSI-C Decoder ---------------------------------------------------- - - - It reads only "FileName", "Size", "LastWriteTime" and "CRC" information for each file in archive. - - It supports only LZMA and Copy (no compression) methods with BCJ or BCJ2 filters. - - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. - -These limitations will be fixed in future versions. - - -Using 7z ANSI-C Decoder Test application: ------------------------------------------ - -Usage: 7zDec - -: - e: Extract files from archive - l: List contents of archive - t: Test integrity of archive - -Example: - - 7zDec l archive.7z - -lists contents of archive.7z - - 7zDec e archive.7z - -extracts files from archive.7z to current folder. - - -How to use .7z Decoder ----------------------- - -.7z Decoder can be compiled in one of two modes: - -1) Default mode. In that mode 7z Decoder will read full compressed - block to RAM before decompressing. - -2) Mode with defined _LZMA_IN_CB. In that mode 7z Decoder can read - compressed block by parts. And you can specify desired buffer size. - So memory requirements can be reduced. But decompressing speed will - be 5-10% lower and code size is slightly larger. - - -Memory allocation -~~~~~~~~~~~~~~~~~ - -7z Decoder uses two memory pools: -1) Temporary pool -2) Main pool -Such scheme can allow you to avoid fragmentation of allocated blocks. - -Steps for using 7z decoder --------------------------- - -Use code at 7zMain.c as example. - -1) Declare variables: - inStream /* implements ISzInStream interface */ - CArchiveDatabaseEx db; /* 7z archive database structure */ - ISzAlloc allocImp; /* memory functions for main pool */ - ISzAlloc allocTempImp; /* memory functions for temporary pool */ - -2) call InitCrcTable(); function to initialize CRC structures. - -3) call SzArDbExInit(&db); function to initialize db structures. - -4) call SzArchiveOpen(inStream, &db, &allocMain, &allocTemp) to open archive - -This function opens archive "inStream" and reads headers to "db". -All items in "db" will be allocated with "allocMain" functions. -SzArchiveOpen function allocates and frees temporary structures by "allocTemp" functions. - -5) List items or Extract items - - Listing code: - ~~~~~~~~~~~~~ - { - UInt32 i; - for (i = 0; i < db.Database.NumFiles; i++) - { - CFileItem *f = db.Database.Files + i; - printf("%10d %s\n", (int)f->Size, f->Name); - } - } - - Extracting code: - ~~~~~~~~~~~~~~~~ - - SZ_RESULT SzExtract( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - - If you need to decompress more than one file, you can send these values from previous call: - blockIndex, - outBuffer, - outBufferSize, - You can consider "outBuffer" as cache of solid block. If your archive is solid, - it will increase decompression speed. - - After decompressing you must free "outBuffer": - allocImp.Free(outBuffer); - -6) call SzArDbExFree(&db, allocImp.Free) to free allocated items in "db". - - - - -Memory requirements for .7z decoding ------------------------------------- - -Memory usage for Archive opening: - - Temporary pool: - - Memory for compressed .7z headers (if _LZMA_IN_CB is not defined) - - Memory for uncompressed .7z headers - - some other temporary blocks - - Main pool: - - Memory for database: - Estimated size of one file structures in solid archive: - - Size (4 or 8 Bytes) - - CRC32 (4 bytes) - - LastWriteTime (8 bytes) - - Some file information (4 bytes) - - File Name (variable length) + pointer + allocation structures - -Memory usage for archive Decompressing: - - Temporary pool: - - Memory for compressed solid block (if _LZMA_IN_CB is not defined) - - Memory for LZMA decompressing structures - - Main pool: - - Memory for decompressed solid block - - Memory for temprorary buffers, if BCJ2 fileter is used. Usually these - temprorary buffers can be about 15% of solid block size. - - -If _LZMA_IN_CB is defined, 7z Decoder will not allocate memory for -compressed blocks. Instead of this, you must allocate buffer with desired -size before calling 7z Decoder. Use 7zMain.c as example. - - - -EXIT codes ------------ - -7z Decoder functions can return one of the following codes: - -#define SZ_OK (0) -#define SZE_DATA_ERROR (1) -#define SZE_OUTOFMEMORY (2) -#define SZE_CRC_ERROR (3) - -#define SZE_NOTIMPL (4) -#define SZE_FAIL (5) - -#define SZE_ARCHIVE_ERROR (6) - - - -LZMA Defines ------------- - -_LZMA_IN_CB - Use special callback mode for input stream to reduce memory requirements - -_SZ_FILE_SIZE_32 - define it if you need only support for files smaller than 4 GB -_SZ_NO_INT_64 - define it if your compiler doesn't support long long int or __int64. - -_LZMA_PROB32 - it can increase LZMA decompressing speed on some 32-bit CPUs. - -_SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. - - ---- - -http://www.7-zip.org -http://www.7-zip.org/support.html diff --git a/love/src/jni/physfs-2.1.0/src/lzma/7zFormat.txt b/love/src/jni/physfs-2.1.0/src/lzma/7zFormat.txt deleted file mode 100644 index e1cf7380..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/7zFormat.txt +++ /dev/null @@ -1,471 +0,0 @@ -7z Format description (2.30 Beta 25) ------------------------------------ - -This file contains description of 7z archive format. -7z archive can contain files compressed with any method. -See "Methods.txt" for description for defined compressing methods. - - -Format structure Overview -------------------------- - -Some fields can be optional. - -Archive structure -~~~~~~~~~~~~~~~~~ -SignatureHeader -[PackedStreams] -[PackedStreamsForHeaders] -[ - Header - or - { - Packed Header - HeaderInfo - } -] - - - -Header structure -~~~~~~~~~~~~~~~~ -{ - ArchiveProperties - AdditionalStreams - { - PackInfo - { - PackPos - NumPackStreams - Sizes[NumPackStreams] - CRCs[NumPackStreams] - } - CodersInfo - { - NumFolders - Folders[NumFolders] - { - NumCoders - CodersInfo[NumCoders] - { - ID - NumInStreams; - NumOutStreams; - PropertiesSize - Properties[PropertiesSize] - } - NumBindPairs - BindPairsInfo[NumBindPairs] - { - InIndex; - OutIndex; - } - PackedIndices - } - UnPackSize[Folders][Folders.NumOutstreams] - CRCs[NumFolders] - } - SubStreamsInfo - { - NumUnPackStreamsInFolders[NumFolders]; - UnPackSizes[] - CRCs[] - } - } - MainStreamsInfo - { - (Same as in AdditionalStreams) - } - FilesInfo - { - NumFiles - Properties[] - { - ID - Size - Data - } - } -} - -HeaderInfo structure -~~~~~~~~~~~~~~~~~~~~ -{ - (Same as in AdditionalStreams) -} - - - -Notes about Notation and encoding ---------------------------------- - -7z uses little endian encoding. - -7z archive format has optional headers that are marked as -[] -Header -[] - -REAL_UINT64 means real UINT64. - -UINT64 means real UINT64 encoded with the following scheme: - - Size of encoding sequence depends from first byte: - First_Byte Extra_Bytes Value - (binary) - 0xxxxxxx : ( xxxxxxx ) - 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y - 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y - ... - 1111110x BYTE y[6] : ( x << (8 * 6)) + y - 11111110 BYTE y[7] : y - 11111111 BYTE y[8] : y - - - -Property IDs ------------- - -0x00 = kEnd, - -0x01 = kHeader, - -0x02 = kArchiveProperties, - -0x03 = kAdditionalStreamsInfo, -0x04 = kMainStreamsInfo, -0x05 = kFilesInfo, - -0x06 = kPackInfo, -0x07 = kUnPackInfo, -0x08 = kSubStreamsInfo, - -0x09 = kSize, -0x0A = kCRC, - -0x0B = kFolder, - -0x0C = kCodersUnPackSize, -0x0D = kNumUnPackStream, - -0x0E = kEmptyStream, -0x0F = kEmptyFile, -0x10 = kAnti, - -0x11 = kName, -0x12 = kCreationTime, -0x13 = kLastAccessTime, -0x14 = kLastWriteTime, -0x15 = kWinAttributes, -0x16 = kComment, - -0x17 = kEncodedHeader, - - -7z format headers ------------------ - -SignatureHeader -~~~~~~~~~~~~~~~ - BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; - - ArchiveVersion - { - BYTE Major; // now = 0 - BYTE Minor; // now = 2 - }; - - UINT32 StartHeaderCRC; - - StartHeader - { - REAL_UINT64 NextHeaderOffset - REAL_UINT64 NextHeaderSize - UINT32 NextHeaderCRC - } - - -........................... - - -ArchiveProperties -~~~~~~~~~~~~~~~~~ -BYTE NID::kArchiveProperties (0x02) -for (;;) -{ - BYTE PropertyType; - if (aType == 0) - break; - UINT64 PropertySize; - BYTE PropertyData[PropertySize]; -} - - -Digests (NumStreams) -~~~~~~~~~~~~~~~~~~~~~ - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumStreams) - BIT Defined - } - UINT32 CRCs[NumDefined] - - -PackInfo -~~~~~~~~~~~~ - BYTE NID::kPackInfo (0x06) - UINT64 PackPos - UINT64 NumPackStreams - - [] - BYTE NID::kSize (0x09) - UINT64 PackSizes[NumPackStreams] - [] - - [] - BYTE NID::kCRC (0x0A) - PackStreamDigests[NumPackStreams] - [] - - BYTE NID::kEnd - - -Folder -~~~~~~ - UINT64 NumCoders; - for (NumCoders) - { - BYTE - { - 0:3 DecompressionMethod.IDSize - 4: - 0 - IsSimple - 1 - Is not simple - 5: - 0 - No Attributes - 1 - There Are Attributes - 7: - 0 - Last Method in Alternative_Method_List - 1 - There are more alternative methods - } - BYTE DecompressionMethod.ID[DecompressionMethod.IDSize] - if (!IsSimple) - { - UINT64 NumInStreams; - UINT64 NumOutStreams; - } - if (DecompressionMethod[0] != 0) - { - UINT64 PropertiesSize - BYTE Properties[PropertiesSize] - } - } - - NumBindPairs = NumOutStreamsTotal - 1; - - for (NumBindPairs) - { - UINT64 InIndex; - UINT64 OutIndex; - } - - NumPackedStreams = NumInStreamsTotal - NumBindPairs; - if (NumPackedStreams > 1) - for(NumPackedStreams) - { - UINT64 Index; - }; - - - - -Coders Info -~~~~~~~~~~~ - - BYTE NID::kUnPackInfo (0x07) - - - BYTE NID::kFolder (0x0B) - UINT64 NumFolders - BYTE External - switch(External) - { - case 0: - Folders[NumFolders] - case 1: - UINT64 DataStreamIndex - } - - - BYTE ID::kCodersUnPackSize (0x0C) - for(Folders) - for(Folder.NumOutStreams) - UINT64 UnPackSize; - - - [] - BYTE NID::kCRC (0x0A) - UnPackDigests[NumFolders] - [] - - - - BYTE NID::kEnd - - - -SubStreams Info -~~~~~~~~~~~~~~ - BYTE NID::kSubStreamsInfo; (0x08) - - [] - BYTE NID::kNumUnPackStream; (0x0D) - UINT64 NumUnPackStreamsInFolders[NumFolders]; - [] - - - [] - BYTE NID::kSize (0x09) - UINT64 UnPackSizes[] - [] - - - [] - BYTE NID::kCRC (0x0A) - Digests[Number of streams with unknown CRC] - [] - - - BYTE NID::kEnd - - -Streams Info -~~~~~~~~~~~~ - - [] - PackInfo - [] - - - [] - CodersInfo - [] - - - [] - SubStreamsInfo - [] - - BYTE NID::kEnd - - -FilesInfo -~~~~~~~~~ - BYTE NID::kFilesInfo; (0x05) - UINT64 NumFiles - - for (;;) - { - BYTE PropertyType; - if (aType == 0) - break; - - UINT64 Size; - - switch(PropertyType) - { - kEmptyStream: (0x0E) - for(NumFiles) - BIT IsEmptyStream - - kEmptyFile: (0x0F) - for(EmptyStreams) - BIT IsEmptyFile - - kAnti: (0x10) - for(EmptyStreams) - BIT IsAntiFile - - case kCreationTime: (0x12) - case kLastAccessTime: (0x13) - case kLastWriteTime: (0x14) - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumFiles) - BIT TimeDefined - } - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Definded Items) - UINT32 Time - [] - - kNames: (0x11) - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Files) - { - wchar_t Names[NameSize]; - wchar_t 0; - } - [] - - kAttributes: (0x15) - BYTE AllAreDefined - if (AllAreDefined == 0) - { - for(NumFiles) - BIT AttributesAreDefined - } - BYTE External; - if(External != 0) - UINT64 DataIndex - [] - for(Definded Attributes) - UINT32 Attributes - [] - } - } - - -Header -~~~~~~ - BYTE NID::kHeader (0x01) - - [] - ArchiveProperties - [] - - [] - BYTE NID::kAdditionalStreamsInfo; (0x03) - StreamsInfo - [] - - [] - BYTE NID::kMainStreamsInfo; (0x04) - StreamsInfo - [] - - [] - FilesInfo - [] - - BYTE NID::kEnd - - -HeaderInfo -~~~~~~~~~~ - [] - BYTE NID::kEncodedHeader; (0x17) - StreamsInfo for Encoded Header - [] - - ---- -End of document diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.c b/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.c deleted file mode 100644 index 1436b993..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.c +++ /dev/null @@ -1,32 +0,0 @@ -/* 7zCrc.c */ - -#include "7zCrc.h" - -#define kCrcPoly 0xEDB88320 -UInt32 g_CrcTable[256]; - -void MY_FAST_CALL CrcGenerateTable(void) -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); - g_CrcTable[i] = r; - } -} - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) -{ - const Byte *p = (const Byte *)data; - for (; size > 0 ; size--, p++) - v = CRC_UPDATE_BYTE(v, *p); - return v; -} - -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) -{ - return CrcUpdate(CRC_INIT_VAL, data, size) ^ 0xFFFFFFFF; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.h b/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.h deleted file mode 100644 index 6cb10161..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrc.h +++ /dev/null @@ -1,21 +0,0 @@ -/* 7zCrc.h */ - -#ifndef __7Z_CRC_H -#define __7Z_CRC_H - -#include - -#include "Types.h" - -extern UInt32 g_CrcTable[]; - -void MY_FAST_CALL CrcGenerateTable(void); - -#define CRC_INIT_VAL 0xFFFFFFFF -#define CRC_GET_DIGEST(crc) ((crc) ^ 0xFFFFFFFF) -#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size); -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrcT8.c b/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrcT8.c deleted file mode 100644 index 83aa95f7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/7zCrcT8.c +++ /dev/null @@ -1,40 +0,0 @@ -/* 7zCrcT8.c */ - -#include "7zCrc.h" - -#define kCrcPoly 0xEDB88320 -#define CRC_NUM_TABLES 8 - -UInt32 g_CrcTable[256 * CRC_NUM_TABLES]; - -void MY_FAST_CALL CrcGenerateTable() -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); - g_CrcTable[i] = r; - } - #if CRC_NUM_TABLES > 1 - for (; i < 256 * CRC_NUM_TABLES; i++) - { - UInt32 r = g_CrcTable[i - 256]; - g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8); - } - #endif -} - -UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); - -UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) -{ - return CrcUpdateT8(v, data, size, g_CrcTable); -} - -UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) -{ - return CrcUpdateT8(CRC_INIT_VAL, data, size, g_CrcTable) ^ 0xFFFFFFFF; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.c deleted file mode 100644 index 7b5af420..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Alloc.c */ - -#ifdef _WIN32 -#include -#endif -#include - -#include "Alloc.h" - -/* #define _SZ_ALLOC_DEBUG */ - -/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ -#ifdef _SZ_ALLOC_DEBUG -#include -int g_allocCount = 0; -int g_allocCountMid = 0; -int g_allocCountBig = 0; -#endif - -void *MyAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount++); - #endif - return malloc(size); -} - -void MyFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree; count = %10d", --g_allocCount); - #endif - free(address); -} - -#ifdef _WIN32 - -void *MidAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_Mid %10d bytes; count = %10d", size, g_allocCountMid++); - #endif - return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); -} - -void MidFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree_Mid; count = %10d", --g_allocCountMid); - #endif - if (address == 0) - return; - VirtualFree(address, 0, MEM_RELEASE); -} - -#ifndef MEM_LARGE_PAGES -#undef _7ZIP_LARGE_PAGES -#endif - -#ifdef _7ZIP_LARGE_PAGES -SIZE_T g_LargePageSize = 0; -typedef SIZE_T (WINAPI *GetLargePageMinimumP)(); -#endif - -void SetLargePageSize() -{ - #ifdef _7ZIP_LARGE_PAGES - SIZE_T size = 0; - GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP) - GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum"); - if (largePageMinimum == 0) - return; - size = largePageMinimum(); - if (size == 0 || (size & (size - 1)) != 0) - return; - g_LargePageSize = size; - #endif -} - - -void *BigAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_Big %10d bytes; count = %10d", size, g_allocCountBig++); - #endif - - #ifdef _7ZIP_LARGE_PAGES - if (g_LargePageSize != 0 && g_LargePageSize <= (1 << 30) && size >= (1 << 18)) - { - void *res = VirtualAlloc(0, (size + g_LargePageSize - 1) & (~(g_LargePageSize - 1)), - MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE); - if (res != 0) - return res; - } - #endif - return VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); -} - -void BigFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - fprintf(stderr, "\nFree_Big; count = %10d", --g_allocCountBig); - #endif - - if (address == 0) - return; - VirtualFree(address, 0, MEM_RELEASE); -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.h deleted file mode 100644 index d748cb18..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Alloc.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Alloc.h */ - -#ifndef __COMMON_ALLOC_H -#define __COMMON_ALLOC_H - -#include - -void *MyAlloc(size_t size); -void MyFree(void *address); - -#ifdef _WIN32 - -void SetLargePageSize(); - -void *MidAlloc(size_t size); -void MidFree(void *address); -void *BigAlloc(size_t size); -void BigFree(void *address); - -#else - -#define MidAlloc(size) MyAlloc(size) -#define MidFree(address) MyFree(address) -#define BigAlloc(size) MyAlloc(size) -#define BigFree(address) MyFree(address) - -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.c deleted file mode 100644 index 21bb30c7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.c +++ /dev/null @@ -1,70 +0,0 @@ -/* 7zAlloc.c */ - -#include -#include "7zAlloc.h" - -/* #define _SZ_ALLOC_DEBUG */ -/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ - -#ifdef _SZ_ALLOC_DEBUG - -#ifdef _WIN32 -#include -#endif -#include -int g_allocCount = 0; -int g_allocCountTemp = 0; -#endif - -void *SzAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount); - g_allocCount++; - #endif - return malloc(size); -} - -void SzFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCount--; - fprintf(stderr, "\nFree; count = %10d", g_allocCount); - } - #endif - free(address); -} - -void *SzAllocTemp(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp); - g_allocCountTemp++; - #ifdef _WIN32 - return HeapAlloc(GetProcessHeap(), 0, size); - #endif - #endif - return malloc(size); -} - -void SzFreeTemp(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCountTemp--; - fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp); - } - #ifdef _WIN32 - HeapFree(GetProcessHeap(), 0, address); - return; - #endif - #endif - free(address); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.h deleted file mode 100644 index 4ca4170c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zAlloc.h +++ /dev/null @@ -1,20 +0,0 @@ -/* 7zAlloc.h */ - -#ifndef __7Z_ALLOC_H -#define __7Z_ALLOC_H - -#include - -typedef struct _ISzAlloc -{ - void *(*Alloc)(size_t size); - void (*Free)(void *address); /* address can be 0 */ -} ISzAlloc; - -void *SzAlloc(size_t size); -void SzFree(void *address); - -void *SzAllocTemp(size_t size); -void SzFreeTemp(void *address); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.c deleted file mode 100644 index 3c4b71e8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 7zBuffer.c */ - -#include "7zBuffer.h" -#include "7zAlloc.h" - -void SzByteBufferInit(CSzByteBuffer *buffer) -{ - buffer->Capacity = 0; - buffer->Items = 0; -} - -int SzByteBufferCreate(CSzByteBuffer *buffer, size_t newCapacity, void * (*allocFunc)(size_t size)) -{ - buffer->Capacity = newCapacity; - if (newCapacity == 0) - { - buffer->Items = 0; - return 1; - } - buffer->Items = (Byte *)allocFunc(newCapacity); - return (buffer->Items != 0); -} - -void SzByteBufferFree(CSzByteBuffer *buffer, void (*freeFunc)(void *)) -{ - freeFunc(buffer->Items); - buffer->Items = 0; - buffer->Capacity = 0; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.h deleted file mode 100644 index 05c6d748..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zBuffer.h +++ /dev/null @@ -1,19 +0,0 @@ -/* 7zBuffer.h */ - -#ifndef __7Z_BUFFER_H -#define __7Z_BUFFER_H - -#include -#include "../../Types.h" - -typedef struct _CSzByteBuffer -{ - size_t Capacity; - Byte *Items; -}CSzByteBuffer; - -void SzByteBufferInit(CSzByteBuffer *buffer); -int SzByteBufferCreate(CSzByteBuffer *buffer, size_t newCapacity, void * (*allocFunc)(size_t size)); -void SzByteBufferFree(CSzByteBuffer *buffer, void (*freeFunc)(void *)); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.c deleted file mode 100644 index 524e5476..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.c +++ /dev/null @@ -1,345 +0,0 @@ -/* 7zDecode.c */ - -#include - -/* BEGIN PHYSFS CHANGE */ -#include -/* END PHYSFS CHANGE */ - -#include "7zDecode.h" -#ifdef _SZ_ONE_DIRECTORY -#include "LzmaDecode.h" -#else -#include "../../Compress/Lzma/LzmaDecode.h" -#include "../../Compress/Branch/BranchX86.h" -#include "../../Compress/Branch/BranchX86_2.h" -#endif - -#define k_Copy 0 -#define k_LZMA 0x30101 -#define k_BCJ 0x03030103 -#define k_BCJ2 0x0303011B - -#ifdef _LZMA_IN_CB - -typedef struct _CLzmaInCallbackImp -{ - ILzmaInCallback InCallback; - ISzInStream *InStream; - CFileSize Size; -} CLzmaInCallbackImp; - -int LzmaReadImp(void *object, const unsigned char **buffer, SizeT *size) -{ - CLzmaInCallbackImp *cb = (CLzmaInCallbackImp *)object; - size_t processedSize; - SZ_RESULT res; - size_t curSize = (1 << 20); - if (curSize > cb->Size) - curSize = (size_t)cb->Size; - *size = 0; - res = cb->InStream->Read((void *)cb->InStream, (void **)buffer, curSize, &processedSize); - *size = (SizeT)processedSize; - if (processedSize > curSize) - return (int)SZE_FAIL; - cb->Size -= processedSize; - if (res == SZ_OK) - return 0; - return (int)res; -} - -#endif - -SZ_RESULT SzDecodeLzma(CCoderInfo *coder, CFileSize inSize, - #ifdef _LZMA_IN_CB - ISzInStream *inStream, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain) -{ - #ifdef _LZMA_IN_CB - CLzmaInCallbackImp lzmaCallback; - #else - SizeT inProcessed; - #endif - - CLzmaDecoderState state; /* it's about 24-80 bytes structure, if int is 32-bit */ - int result; - SizeT outSizeProcessedLoc; - - #ifdef _LZMA_IN_CB - lzmaCallback.Size = inSize; - lzmaCallback.InStream = inStream; - lzmaCallback.InCallback.Read = LzmaReadImp; - #endif - - if (LzmaDecodeProperties(&state.Properties, coder->Properties.Items, - (unsigned)coder->Properties.Capacity) != LZMA_RESULT_OK) - return SZE_FAIL; - - state.Probs = (CProb *)allocMain->Alloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return SZE_OUTOFMEMORY; - - #ifdef _LZMA_OUT_READ - if (state.Properties.DictionarySize == 0) - state.Dictionary = 0; - else - { - state.Dictionary = (unsigned char *)allocMain->Alloc(state.Properties.DictionarySize); - if (state.Dictionary == 0) - { - allocMain->Free(state.Probs); - return SZE_OUTOFMEMORY; - } - } - LzmaDecoderInit(&state); - #endif - - result = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &lzmaCallback.InCallback, - #else - inBuffer, (SizeT)inSize, &inProcessed, - #endif - outBuffer, (SizeT)outSize, &outSizeProcessedLoc); - allocMain->Free(state.Probs); - #ifdef _LZMA_OUT_READ - allocMain->Free(state.Dictionary); - #endif - if (result == LZMA_RESULT_DATA_ERROR) - return SZE_DATA_ERROR; - if (result != LZMA_RESULT_OK) - return SZE_FAIL; - return (outSizeProcessedLoc == outSize) ? SZ_OK : SZE_DATA_ERROR; -} - -#ifdef _LZMA_IN_CB -SZ_RESULT SzDecodeCopy(CFileSize inSize, ISzInStream *inStream, Byte *outBuffer) -{ - while (inSize > 0) - { - void *inBuffer; - size_t processedSize, curSize = (1 << 18); - if (curSize > inSize) - curSize = (size_t)(inSize); - RINOK(inStream->Read((void *)inStream, (void **)&inBuffer, curSize, &processedSize)); - if (processedSize == 0) - return SZE_DATA_ERROR; - if (processedSize > curSize) - return SZE_FAIL; - memcpy(outBuffer, inBuffer, processedSize); - outBuffer += processedSize; - inSize -= processedSize; - } - return SZ_OK; -} -#endif - -#define IS_UNSUPPORTED_METHOD(m) ((m) != k_Copy && (m) != k_LZMA) -#define IS_UNSUPPORTED_CODER(c) (IS_UNSUPPORTED_METHOD(c.MethodID) || c.NumInStreams != 1 || c.NumOutStreams != 1) -#define IS_NO_BCJ(c) (c.MethodID != k_BCJ || c.NumInStreams != 1 || c.NumOutStreams != 1) -#define IS_NO_BCJ2(c) (c.MethodID != k_BCJ2 || c.NumInStreams != 4 || c.NumOutStreams != 1) - -SZ_RESULT CheckSupportedFolder(const CFolder *f) -{ - if (f->NumCoders < 1 || f->NumCoders > 4) - return SZE_NOTIMPL; - if (IS_UNSUPPORTED_CODER(f->Coders[0])) - return SZE_NOTIMPL; - if (f->NumCoders == 1) - { - if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBindPairs != 0) - return SZE_NOTIMPL; - return SZ_OK; - } - if (f->NumCoders == 2) - { - if (IS_NO_BCJ(f->Coders[1]) || - f->NumPackStreams != 1 || f->PackStreams[0] != 0 || - f->NumBindPairs != 1 || - f->BindPairs[0].InIndex != 1 || f->BindPairs[0].OutIndex != 0) - return SZE_NOTIMPL; - return SZ_OK; - } - if (f->NumCoders == 4) - { - if (IS_UNSUPPORTED_CODER(f->Coders[1]) || - IS_UNSUPPORTED_CODER(f->Coders[2]) || - IS_NO_BCJ2(f->Coders[3])) - return SZE_NOTIMPL; - if (f->NumPackStreams != 4 || - f->PackStreams[0] != 2 || - f->PackStreams[1] != 6 || - f->PackStreams[2] != 1 || - f->PackStreams[3] != 0 || - f->NumBindPairs != 3 || - f->BindPairs[0].InIndex != 5 || f->BindPairs[0].OutIndex != 0 || - f->BindPairs[1].InIndex != 4 || f->BindPairs[1].OutIndex != 1 || - f->BindPairs[2].InIndex != 3 || f->BindPairs[2].OutIndex != 2) - return SZE_NOTIMPL; - return SZ_OK; - } - return SZE_NOTIMPL; -} - -CFileSize GetSum(const CFileSize *values, UInt32 index) -{ - CFileSize sum = 0; - UInt32 i; - for (i = 0; i < index; i++) - sum += values[i]; - return sum; -} - -SZ_RESULT SzDecode2(const CFileSize *packSizes, const CFolder *folder, - #ifdef _LZMA_IN_CB - ISzInStream *inStream, CFileSize startPos, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain, - Byte *tempBuf[]) -{ - UInt32 ci; - size_t tempSizes[3] = { 0, 0, 0}; - size_t tempSize3 = 0; - Byte *tempBuf3 = 0; - - RINOK(CheckSupportedFolder(folder)); - - for (ci = 0; ci < folder->NumCoders; ci++) - { - CCoderInfo *coder = &folder->Coders[ci]; - - if (coder->MethodID == k_Copy || coder->MethodID == k_LZMA) - { - UInt32 si = 0; - CFileSize offset; - CFileSize inSize; - Byte *outBufCur = outBuffer; - size_t outSizeCur = outSize; - if (folder->NumCoders == 4) - { - UInt32 indices[] = { 3, 2, 0 }; - CFileSize unpackSize = folder->UnPackSizes[ci]; - si = indices[ci]; - if (ci < 2) - { - Byte *temp; - outSizeCur = (size_t)unpackSize; - if (outSizeCur != unpackSize) - return SZE_OUTOFMEMORY; - temp = (Byte *)allocMain->Alloc(outSizeCur); - if (temp == 0 && outSizeCur != 0) - return SZE_OUTOFMEMORY; - outBufCur = tempBuf[1 - ci] = temp; - tempSizes[1 - ci] = outSizeCur; - } - else if (ci == 2) - { - if (unpackSize > outSize) - return SZE_OUTOFMEMORY; - tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize); - tempSize3 = outSizeCur = (size_t)unpackSize; - } - else - return SZE_NOTIMPL; - } - offset = GetSum(packSizes, si); - inSize = packSizes[si]; - #ifdef _LZMA_IN_CB - RINOK(inStream->Seek(inStream, startPos + offset)); - #endif - - if (coder->MethodID == k_Copy) - { - if (inSize != outSizeCur) - return SZE_DATA_ERROR; - - #ifdef _LZMA_IN_CB - RINOK(SzDecodeCopy(inSize, inStream, outBufCur)); - #else - memcpy(outBufCur, inBuffer + (size_t)offset, (size_t)inSize); - #endif - } - else - { - SZ_RESULT res = SzDecodeLzma(coder, inSize, - #ifdef _LZMA_IN_CB - inStream, - #else - inBuffer + (size_t)offset, - #endif - outBufCur, outSizeCur, allocMain); - RINOK(res) - } - } - else if (coder->MethodID == k_BCJ) - { - UInt32 state; - if (ci != 1) - return SZE_NOTIMPL; - x86_Convert_Init(state); - x86_Convert(outBuffer, outSize, 0, &state, 0); - } - else if (coder->MethodID == k_BCJ2) - { - CFileSize offset = GetSum(packSizes, 1); - CFileSize s3Size = packSizes[1]; - SZ_RESULT res; - if (ci != 3) - return SZE_NOTIMPL; - - #ifdef _LZMA_IN_CB - RINOK(inStream->Seek(inStream, startPos + offset)); - tempSizes[2] = (size_t)s3Size; - if (tempSizes[2] != s3Size) - return SZE_OUTOFMEMORY; - tempBuf[2] = (Byte *)allocMain->Alloc(tempSizes[2]); - if (tempBuf[2] == 0 && tempSizes[2] != 0) - return SZE_OUTOFMEMORY; - res = SzDecodeCopy(s3Size, inStream, tempBuf[2]); - RINOK(res) - #endif - - res = x86_2_Decode( - tempBuf3, tempSize3, - tempBuf[0], tempSizes[0], - tempBuf[1], tempSizes[1], - #ifdef _LZMA_IN_CB - tempBuf[2], tempSizes[2], - #else - inBuffer + (size_t)offset, (size_t)s3Size, - #endif - outBuffer, outSize); - RINOK(res) - } - else - return SZE_NOTIMPL; - } - return SZ_OK; -} - -SZ_RESULT SzDecode(const CFileSize *packSizes, const CFolder *folder, - #ifdef _LZMA_IN_CB - ISzInStream *inStream, CFileSize startPos, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain) -{ - Byte *tempBuf[3] = { 0, 0, 0}; - int i; - SZ_RESULT res = SzDecode2(packSizes, folder, - #ifdef _LZMA_IN_CB - inStream, startPos, - #else - inBuffer, - #endif - outBuffer, outSize, allocMain, tempBuf); - for (i = 0; i < 3; i++) - allocMain->Free(tempBuf[i]); - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.h deleted file mode 100644 index 175896ef..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zDecode.h +++ /dev/null @@ -1,20 +0,0 @@ -/* 7zDecode.h */ - -#ifndef __7Z_DECODE_H -#define __7Z_DECODE_H - -#include "7zItem.h" -#include "7zAlloc.h" -#ifdef _LZMA_IN_CB -#include "7zIn.h" -#endif - -SZ_RESULT SzDecode(const CFileSize *packSizes, const CFolder *folder, - #ifdef _LZMA_IN_CB - ISzInStream *stream, CFileSize startPos, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, ISzAlloc *allocMain); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.c deleted file mode 100644 index 1760a3ce..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.c +++ /dev/null @@ -1,119 +0,0 @@ -/* 7zExtract.c */ - -#include "7zExtract.h" -#include "7zDecode.h" -#include "../../7zCrc.h" - -SZ_RESULT SzExtract( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, - UInt32 *blockIndex, - Byte **outBuffer, - size_t *outBufferSize, - size_t *offset, - size_t *outSizeProcessed, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt32 folderIndex = db->FileIndexToFolderIndexMap[fileIndex]; - SZ_RESULT res = SZ_OK; - *offset = 0; - *outSizeProcessed = 0; - if (folderIndex == (UInt32)-1) - { - allocMain->Free(*outBuffer); - *blockIndex = folderIndex; - *outBuffer = 0; - *outBufferSize = 0; - return SZ_OK; - } - - if (*outBuffer == 0 || *blockIndex != folderIndex) - { - CFolder *folder = db->Database.Folders + folderIndex; - CFileSize unPackSizeSpec = SzFolderGetUnPackSize(folder); - size_t unPackSize = (size_t)unPackSizeSpec; - CFileSize startOffset = SzArDbGetFolderStreamPos(db, folderIndex, 0); - #ifndef _LZMA_IN_CB - Byte *inBuffer = 0; - size_t processedSize; - CFileSize packSizeSpec; - size_t packSize; - RINOK(SzArDbGetFolderFullPackSize(db, folderIndex, &packSizeSpec)); - packSize = (size_t)packSizeSpec; - if (packSize != packSizeSpec) - return SZE_OUTOFMEMORY; - #endif - if (unPackSize != unPackSizeSpec) - return SZE_OUTOFMEMORY; - *blockIndex = folderIndex; - allocMain->Free(*outBuffer); - *outBuffer = 0; - - RINOK(inStream->Seek(inStream, startOffset)); - - #ifndef _LZMA_IN_CB - if (packSize != 0) - { - inBuffer = (Byte *)allocTemp->Alloc(packSize); - if (inBuffer == 0) - return SZE_OUTOFMEMORY; - } - res = inStream->Read(inStream, inBuffer, packSize, &processedSize); - if (res == SZ_OK && processedSize != packSize) - res = SZE_FAIL; - #endif - if (res == SZ_OK) - { - *outBufferSize = unPackSize; - if (unPackSize != 0) - { - *outBuffer = (Byte *)allocMain->Alloc(unPackSize); - if (*outBuffer == 0) - res = SZE_OUTOFMEMORY; - } - if (res == SZ_OK) - { - res = SzDecode(db->Database.PackSizes + - db->FolderStartPackStreamIndex[folderIndex], folder, - #ifdef _LZMA_IN_CB - inStream, startOffset, - #else - inBuffer, - #endif - *outBuffer, unPackSize, allocTemp); - if (res == SZ_OK) - { - if (folder->UnPackCRCDefined) - { - if (CrcCalc(*outBuffer, unPackSize) != folder->UnPackCRC) - res = SZE_CRC_ERROR; - } - } - } - } - #ifndef _LZMA_IN_CB - allocTemp->Free(inBuffer); - #endif - } - if (res == SZ_OK) - { - UInt32 i; - CFileItem *fileItem = db->Database.Files + fileIndex; - *offset = 0; - for(i = db->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) - *offset += (UInt32)db->Database.Files[i].Size; - *outSizeProcessed = (size_t)fileItem->Size; - if (*offset + *outSizeProcessed > *outBufferSize) - return SZE_FAIL; - { - if (fileItem->IsFileCRCDefined) - { - if (CrcCalc(*outBuffer + *offset, *outSizeProcessed) != fileItem->FileCRC) - res = SZE_CRC_ERROR; - } - } - } - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.h deleted file mode 100644 index e9a4fb4e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zExtract.h +++ /dev/null @@ -1,40 +0,0 @@ -/* 7zExtract.h */ - -#ifndef __7Z_EXTRACT_H -#define __7Z_EXTRACT_H - -#include "7zIn.h" - -/* - SzExtract extracts file from archive - - *outBuffer must be 0 before first call for each new archive. - - Extracting cache: - If you need to decompress more than one file, you can send - these values from previous call: - *blockIndex, - *outBuffer, - *outBufferSize - You can consider "*outBuffer" as cache of solid block. If your archive is solid, - it will increase decompression speed. - - If you use external function, you can declare these 3 cache variables - (blockIndex, outBuffer, outBufferSize) as static in that external function. - - Free *outBuffer and set *outBuffer to 0, if you want to flush cache. -*/ - -SZ_RESULT SzExtract( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.c deleted file mode 100644 index 3be4bc27..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.c +++ /dev/null @@ -1,5 +0,0 @@ -/* 7zHeader.c */ - -#include "7zHeader.h" - -Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.h deleted file mode 100644 index 3e67cf57..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zHeader.h +++ /dev/null @@ -1,55 +0,0 @@ -/* 7zHeader.h */ - -#ifndef __7Z_HEADER_H -#define __7Z_HEADER_H - -#include "../../Types.h" - -#define k7zSignatureSize 6 -extern Byte k7zSignature[k7zSignatureSize]; - -#define k7zMajorVersion 0 - -#define k7zStartHeaderSize 0x20 - -enum EIdEnum -{ - k7zIdEnd, - - k7zIdHeader, - - k7zIdArchiveProperties, - - k7zIdAdditionalStreamsInfo, - k7zIdMainStreamsInfo, - k7zIdFilesInfo, - - k7zIdPackInfo, - k7zIdUnPackInfo, - k7zIdSubStreamsInfo, - - k7zIdSize, - k7zIdCRC, - - k7zIdFolder, - - k7zIdCodersUnPackSize, - k7zIdNumUnPackStream, - - k7zIdEmptyStream, - k7zIdEmptyFile, - k7zIdAnti, - - k7zIdName, - k7zIdCreationTime, - k7zIdLastAccessTime, - k7zIdLastWriteTime, - k7zIdWinAttributes, - k7zIdComment, - - k7zIdEncodedHeader, - - k7zIdStartPos -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.c deleted file mode 100644 index ac25dbc7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.c +++ /dev/null @@ -1,1314 +0,0 @@ -/* 7zIn.c */ - -#include "7zIn.h" -#include "7zDecode.h" -#include "../../7zCrc.h" - -#define RINOM(x) { if((x) == 0) return SZE_OUTOFMEMORY; } - -void SzArDbExInit(CArchiveDatabaseEx *db) -{ - SzArchiveDatabaseInit(&db->Database); - db->FolderStartPackStreamIndex = 0; - db->PackStreamStartPositions = 0; - db->FolderStartFileIndex = 0; - db->FileIndexToFolderIndexMap = 0; -} - -void SzArDbExFree(CArchiveDatabaseEx *db, void (*freeFunc)(void *)) -{ - freeFunc(db->FolderStartPackStreamIndex); - freeFunc(db->PackStreamStartPositions); - freeFunc(db->FolderStartFileIndex); - freeFunc(db->FileIndexToFolderIndexMap); - SzArchiveDatabaseFree(&db->Database, freeFunc); - SzArDbExInit(db); -} - -/* -CFileSize GetFolderPackStreamSize(int folderIndex, int streamIndex) const -{ - return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; -} - -CFileSize GetFilePackSize(int fileIndex) const -{ - int folderIndex = FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex >= 0) - { - const CFolder &folderInfo = Folders[folderIndex]; - if (FolderStartFileIndex[folderIndex] == fileIndex) - return GetFolderFullPackSize(folderIndex); - } - return 0; -} -*/ - -#define MY_ALLOC(T, p, size, allocFunc) { if ((size) == 0) p = 0; else \ - if ((p = (T *)allocFunc((size) * sizeof(T))) == 0) return SZE_OUTOFMEMORY; } - -SZ_RESULT SzArDbExFill(CArchiveDatabaseEx *db, void * (*allocFunc)(size_t size)) -{ - UInt32 startPos = 0; - CFileSize startPosSize = 0; - UInt32 i; - UInt32 folderIndex = 0; - UInt32 indexInFolder = 0; - MY_ALLOC(UInt32, db->FolderStartPackStreamIndex, db->Database.NumFolders, allocFunc); - for(i = 0; i < db->Database.NumFolders; i++) - { - db->FolderStartPackStreamIndex[i] = startPos; - startPos += db->Database.Folders[i].NumPackStreams; - } - - MY_ALLOC(CFileSize, db->PackStreamStartPositions, db->Database.NumPackStreams, allocFunc); - - for(i = 0; i < db->Database.NumPackStreams; i++) - { - db->PackStreamStartPositions[i] = startPosSize; - startPosSize += db->Database.PackSizes[i]; - } - - MY_ALLOC(UInt32, db->FolderStartFileIndex, db->Database.NumFolders, allocFunc); - MY_ALLOC(UInt32, db->FileIndexToFolderIndexMap, db->Database.NumFiles, allocFunc); - - for (i = 0; i < db->Database.NumFiles; i++) - { - CFileItem *file = db->Database.Files + i; - int emptyStream = !file->HasStream; - if (emptyStream && indexInFolder == 0) - { - db->FileIndexToFolderIndexMap[i] = (UInt32)-1; - continue; - } - if (indexInFolder == 0) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: Loop for skipping empty folders - */ - for (;;) - { - if (folderIndex >= db->Database.NumFolders) - return SZE_ARCHIVE_ERROR; - db->FolderStartFileIndex[folderIndex] = i; - if (db->Database.Folders[folderIndex].NumUnPackStreams != 0) - break; - folderIndex++; - } - } - db->FileIndexToFolderIndexMap[i] = folderIndex; - if (emptyStream) - continue; - indexInFolder++; - if (indexInFolder >= db->Database.Folders[folderIndex].NumUnPackStreams) - { - folderIndex++; - indexInFolder = 0; - } - } - return SZ_OK; -} - - -CFileSize SzArDbGetFolderStreamPos(CArchiveDatabaseEx *db, UInt32 folderIndex, UInt32 indexInFolder) -{ - return db->ArchiveInfo.DataStartPosition + - db->PackStreamStartPositions[db->FolderStartPackStreamIndex[folderIndex] + indexInFolder]; -} - -int SzArDbGetFolderFullPackSize(CArchiveDatabaseEx *db, UInt32 folderIndex, CFileSize *resSize) -{ - UInt32 packStreamIndex = db->FolderStartPackStreamIndex[folderIndex]; - CFolder *folder = db->Database.Folders + folderIndex; - CFileSize size = 0; - UInt32 i; - for (i = 0; i < folder->NumPackStreams; i++) - { - CFileSize t = size + db->Database.PackSizes[packStreamIndex + i]; - if (t < size) - return SZE_FAIL; - size = t; - } - *resSize = size; - return SZ_OK; -} - - -/* -SZ_RESULT SzReadTime(const CObjectVector &dataVector, - CObjectVector &files, UInt64 type) -{ - CBoolVector boolVector; - RINOK(ReadBoolVector2(files.Size(), boolVector)) - - CStreamSwitch streamSwitch; - RINOK(streamSwitch.Set(this, &dataVector)); - - for(int i = 0; i < files.Size(); i++) - { - CFileItem &file = files[i]; - CArchiveFileTime fileTime; - bool defined = boolVector[i]; - if (defined) - { - UInt32 low, high; - RINOK(SzReadUInt32(low)); - RINOK(SzReadUInt32(high)); - fileTime.dwLowDateTime = low; - fileTime.dwHighDateTime = high; - } - switch(type) - { - case k7zIdCreationTime: - file.IsCreationTimeDefined = defined; - if (defined) - file.CreationTime = fileTime; - break; - case k7zIdLastWriteTime: - file.IsLastWriteTimeDefined = defined; - if (defined) - file.LastWriteTime = fileTime; - break; - case k7zIdLastAccessTime: - file.IsLastAccessTimeDefined = defined; - if (defined) - file.LastAccessTime = fileTime; - break; - } - } - return SZ_OK; -} -*/ - -SZ_RESULT SafeReadDirect(ISzInStream *inStream, Byte *data, size_t size) -{ - #ifdef _LZMA_IN_CB - while (size > 0) - { - void *inBufferSpec; - size_t processedSize; - const Byte *inBuffer; - RINOK(inStream->Read(inStream, (void **)&inBufferSpec, size, &processedSize)); - inBuffer = (const Byte *)inBufferSpec; - if (processedSize == 0 || processedSize > size) - return SZE_FAIL; - size -= processedSize; - do - { - *data++ = *inBuffer++; - } - while (--processedSize != 0); - } - #else - size_t processedSize; - RINOK(inStream->Read(inStream, data, size, &processedSize)); - if (processedSize != size) - return SZE_FAIL; - #endif - return SZ_OK; -} - -SZ_RESULT SafeReadDirectByte(ISzInStream *inStream, Byte *data) -{ - return SafeReadDirect(inStream, data, 1); -} - -SZ_RESULT SafeReadDirectUInt32(ISzInStream *inStream, UInt32 *value, UInt32 *crc) -{ - int i; - *value = 0; - for (i = 0; i < 4; i++) - { - Byte b; - RINOK(SafeReadDirectByte(inStream, &b)); - *value |= ((UInt32)b << (8 * i)); - *crc = CRC_UPDATE_BYTE(*crc, b); - } - return SZ_OK; -} - -SZ_RESULT SafeReadDirectUInt64(ISzInStream *inStream, UInt64 *value, UInt32 *crc) -{ - int i; - *value = 0; - for (i = 0; i < 8; i++) - { - Byte b; - RINOK(SafeReadDirectByte(inStream, &b)); - *value |= ((UInt64)b << (8 * i)); - *crc = CRC_UPDATE_BYTE(*crc, b); - } - return SZ_OK; -} - -int TestSignatureCandidate(Byte *testBytes) -{ - size_t i; - for (i = 0; i < k7zSignatureSize; i++) - if (testBytes[i] != k7zSignature[i]) - return 0; - return 1; -} - -typedef struct _CSzState -{ - Byte *Data; - size_t Size; -}CSzData; - -SZ_RESULT SzReadByte(CSzData *sd, Byte *b) -{ - if (sd->Size == 0) - return SZE_ARCHIVE_ERROR; - sd->Size--; - *b = *sd->Data++; - return SZ_OK; -} - -SZ_RESULT SzReadBytes(CSzData *sd, Byte *data, size_t size) -{ - size_t i; - for (i = 0; i < size; i++) - { - RINOK(SzReadByte(sd, data + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadUInt32(CSzData *sd, UInt32 *value) -{ - int i; - *value = 0; - for (i = 0; i < 4; i++) - { - Byte b; - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt32)(b) << (8 * i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadNumber(CSzData *sd, UInt64 *value) -{ - Byte firstByte; - Byte mask = 0x80; - int i; - RINOK(SzReadByte(sd, &firstByte)); - *value = 0; - for (i = 0; i < 8; i++) - { - Byte b; - if ((firstByte & mask) == 0) - { - UInt64 highPart = firstByte & (mask - 1); - *value += (highPart << (8 * i)); - return SZ_OK; - } - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt64)b << (8 * i)); - mask >>= 1; - } - return SZ_OK; -} - -SZ_RESULT SzReadSize(CSzData *sd, CFileSize *value) -{ - UInt64 value64; - RINOK(SzReadNumber(sd, &value64)); - *value = (CFileSize)value64; - return SZ_OK; -} - -SZ_RESULT SzReadNumber32(CSzData *sd, UInt32 *value) -{ - UInt64 value64; - RINOK(SzReadNumber(sd, &value64)); - if (value64 >= 0x80000000) - return SZE_NOTIMPL; - if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 2))) - return SZE_NOTIMPL; - *value = (UInt32)value64; - return SZ_OK; -} - -SZ_RESULT SzReadID(CSzData *sd, UInt64 *value) -{ - return SzReadNumber(sd, value); -} - -SZ_RESULT SzSkeepDataSize(CSzData *sd, UInt64 size) -{ - if (size > sd->Size) - return SZE_ARCHIVE_ERROR; - sd->Size -= (size_t)size; - sd->Data += (size_t)size; - return SZ_OK; -} - -SZ_RESULT SzSkeepData(CSzData *sd) -{ - UInt64 size; - RINOK(SzReadNumber(sd, &size)); - return SzSkeepDataSize(sd, size); -} - -SZ_RESULT SzReadArchiveProperties(CSzData *sd) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - SzSkeepData(sd); - } - return SZ_OK; -} - -SZ_RESULT SzWaitAttribute(CSzData *sd, UInt64 attribute) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == attribute) - return SZ_OK; - if (type == k7zIdEnd) - return SZE_ARCHIVE_ERROR; - RINOK(SzSkeepData(sd)); - } -} - -SZ_RESULT SzReadBoolVector(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size)) -{ - Byte b = 0; - Byte mask = 0; - size_t i; - MY_ALLOC(Byte, *v, numItems, allocFunc); - for (i = 0; i < numItems; i++) - { - if (mask == 0) - { - RINOK(SzReadByte(sd, &b)); - mask = 0x80; - } - (*v)[i] = (Byte)(((b & mask) != 0) ? 1 : 0); - mask >>= 1; - } - return SZ_OK; -} - -SZ_RESULT SzReadBoolVector2(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size)) -{ - Byte allAreDefined; - size_t i; - RINOK(SzReadByte(sd, &allAreDefined)); - if (allAreDefined == 0) - return SzReadBoolVector(sd, numItems, v, allocFunc); - MY_ALLOC(Byte, *v, numItems, allocFunc); - for(i = 0; i < numItems; i++) - (*v)[i] = 1; - return SZ_OK; -} - -SZ_RESULT SzReadHashDigests( - CSzData *sd, - size_t numItems, - Byte **digestsDefined, - UInt32 **digests, - void * (*allocFunc)(size_t size)) -{ - size_t i; - RINOK(SzReadBoolVector2(sd, numItems, digestsDefined, allocFunc)); - MY_ALLOC(UInt32, *digests, numItems, allocFunc); - for(i = 0; i < numItems; i++) - if ((*digestsDefined)[i]) - { - RINOK(SzReadUInt32(sd, (*digests) + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadPackInfo( - CSzData *sd, - CFileSize *dataOffset, - UInt32 *numPackStreams, - CFileSize **packSizes, - Byte **packCRCsDefined, - UInt32 **packCRCs, - void * (*allocFunc)(size_t size)) -{ - UInt32 i; - RINOK(SzReadSize(sd, dataOffset)); - RINOK(SzReadNumber32(sd, numPackStreams)); - - RINOK(SzWaitAttribute(sd, k7zIdSize)); - - MY_ALLOC(CFileSize, *packSizes, (size_t)*numPackStreams, allocFunc); - - for(i = 0; i < *numPackStreams; i++) - { - RINOK(SzReadSize(sd, (*packSizes) + i)); - } - - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - if (type == k7zIdCRC) - { - RINOK(SzReadHashDigests(sd, (size_t)*numPackStreams, packCRCsDefined, packCRCs, allocFunc)); - continue; - } - RINOK(SzSkeepData(sd)); - } - if (*packCRCsDefined == 0) - { - MY_ALLOC(Byte, *packCRCsDefined, (size_t)*numPackStreams, allocFunc); - MY_ALLOC(UInt32, *packCRCs, (size_t)*numPackStreams, allocFunc); - for(i = 0; i < *numPackStreams; i++) - { - (*packCRCsDefined)[i] = 0; - (*packCRCs)[i] = 0; - } - } - return SZ_OK; -} - -SZ_RESULT SzReadSwitch(CSzData *sd) -{ - Byte external; - RINOK(SzReadByte(sd, &external)); - return (external == 0) ? SZ_OK: SZE_ARCHIVE_ERROR; -} - -SZ_RESULT SzGetNextFolderItem(CSzData *sd, CFolder *folder, void * (*allocFunc)(size_t size)) -{ - UInt32 numCoders; - UInt32 numBindPairs; - UInt32 numPackedStreams; - UInt32 i; - UInt32 numInStreams = 0; - UInt32 numOutStreams = 0; - RINOK(SzReadNumber32(sd, &numCoders)); - folder->NumCoders = numCoders; - - MY_ALLOC(CCoderInfo, folder->Coders, (size_t)numCoders, allocFunc); - - for (i = 0; i < numCoders; i++) - SzCoderInfoInit(folder->Coders + i); - - for (i = 0; i < numCoders; i++) - { - Byte mainByte; - CCoderInfo *coder = folder->Coders + i; - { - unsigned idSize, j; - Byte longID[15]; - RINOK(SzReadByte(sd, &mainByte)); - idSize = (unsigned)(mainByte & 0xF); - RINOK(SzReadBytes(sd, longID, idSize)); - if (idSize > sizeof(coder->MethodID)) - return SZE_NOTIMPL; - coder->MethodID = 0; - for (j = 0; j < idSize; j++) - coder->MethodID |= (CMethodID)longID[idSize - 1 - j] << (8 * j); - - if ((mainByte & 0x10) != 0) - { - RINOK(SzReadNumber32(sd, &coder->NumInStreams)); - RINOK(SzReadNumber32(sd, &coder->NumOutStreams)); - } - else - { - coder->NumInStreams = 1; - coder->NumOutStreams = 1; - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - if (!SzByteBufferCreate(&coder->Properties, (size_t)propertiesSize, allocFunc)) - return SZE_OUTOFMEMORY; - RINOK(SzReadBytes(sd, coder->Properties.Items, (size_t)propertiesSize)); - } - } - while ((mainByte & 0x80) != 0) - { - RINOK(SzReadByte(sd, &mainByte)); - RINOK(SzSkeepDataSize(sd, (mainByte & 0xF))); - if ((mainByte & 0x10) != 0) - { - UInt32 n; - RINOK(SzReadNumber32(sd, &n)); - RINOK(SzReadNumber32(sd, &n)); - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - RINOK(SzSkeepDataSize(sd, propertiesSize)); - } - } - numInStreams += (UInt32)coder->NumInStreams; - numOutStreams += (UInt32)coder->NumOutStreams; - } - - numBindPairs = numOutStreams - 1; - folder->NumBindPairs = numBindPairs; - - - MY_ALLOC(CBindPair, folder->BindPairs, (size_t)numBindPairs, allocFunc); - - for (i = 0; i < numBindPairs; i++) - { - CBindPair *bindPair = folder->BindPairs + i;; - RINOK(SzReadNumber32(sd, &bindPair->InIndex)); - RINOK(SzReadNumber32(sd, &bindPair->OutIndex)); - } - - numPackedStreams = numInStreams - (UInt32)numBindPairs; - - folder->NumPackStreams = numPackedStreams; - MY_ALLOC(UInt32, folder->PackStreams, (size_t)numPackedStreams, allocFunc); - - if (numPackedStreams == 1) - { - UInt32 j; - UInt32 pi = 0; - for (j = 0; j < numInStreams; j++) - if (SzFolderFindBindPairForInStream(folder, j) < 0) - { - folder->PackStreams[pi++] = j; - break; - } - } - else - for(i = 0; i < numPackedStreams; i++) - { - RINOK(SzReadNumber32(sd, folder->PackStreams + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadUnPackInfo( - CSzData *sd, - UInt32 *numFolders, - CFolder **folders, /* for allocFunc */ - void * (*allocFunc)(size_t size), - ISzAlloc *allocTemp) -{ - UInt32 i; - RINOK(SzWaitAttribute(sd, k7zIdFolder)); - RINOK(SzReadNumber32(sd, numFolders)); - { - RINOK(SzReadSwitch(sd)); - - MY_ALLOC(CFolder, *folders, (size_t)*numFolders, allocFunc); - - for(i = 0; i < *numFolders; i++) - SzFolderInit((*folders) + i); - - for(i = 0; i < *numFolders; i++) - { - RINOK(SzGetNextFolderItem(sd, (*folders) + i, allocFunc)); - } - } - - RINOK(SzWaitAttribute(sd, k7zIdCodersUnPackSize)); - - for(i = 0; i < *numFolders; i++) - { - UInt32 j; - CFolder *folder = (*folders) + i; - UInt32 numOutStreams = SzFolderGetNumOutStreams(folder); - - MY_ALLOC(CFileSize, folder->UnPackSizes, (size_t)numOutStreams, allocFunc); - - for(j = 0; j < numOutStreams; j++) - { - RINOK(SzReadSize(sd, folder->UnPackSizes + j)); - } - } - - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - return SZ_OK; - if (type == k7zIdCRC) - { - SZ_RESULT res; - Byte *crcsDefined = 0; - UInt32 *crcs = 0; - res = SzReadHashDigests(sd, *numFolders, &crcsDefined, &crcs, allocTemp->Alloc); - if (res == SZ_OK) - { - for(i = 0; i < *numFolders; i++) - { - CFolder *folder = (*folders) + i; - folder->UnPackCRCDefined = crcsDefined[i]; - folder->UnPackCRC = crcs[i]; - } - } - allocTemp->Free(crcs); - allocTemp->Free(crcsDefined); - RINOK(res); - continue; - } - RINOK(SzSkeepData(sd)); - } -} - -SZ_RESULT SzReadSubStreamsInfo( - CSzData *sd, - UInt32 numFolders, - CFolder *folders, - UInt32 *numUnPackStreams, - CFileSize **unPackSizes, - Byte **digestsDefined, - UInt32 **digests, - ISzAlloc *allocTemp) -{ - UInt64 type = 0; - UInt32 i; - UInt32 si = 0; - UInt32 numDigests = 0; - - for(i = 0; i < numFolders; i++) - folders[i].NumUnPackStreams = 1; - *numUnPackStreams = numFolders; - - for (;;) - { - RINOK(SzReadID(sd, &type)); - if (type == k7zIdNumUnPackStream) - { - *numUnPackStreams = 0; - for(i = 0; i < numFolders; i++) - { - UInt32 numStreams; - RINOK(SzReadNumber32(sd, &numStreams)); - folders[i].NumUnPackStreams = numStreams; - *numUnPackStreams += numStreams; - } - continue; - } - if (type == k7zIdCRC || type == k7zIdSize) - break; - if (type == k7zIdEnd) - break; - RINOK(SzSkeepData(sd)); - } - - if (*numUnPackStreams == 0) - { - *unPackSizes = 0; - *digestsDefined = 0; - *digests = 0; - } - else - { - *unPackSizes = (CFileSize *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(CFileSize)); - RINOM(*unPackSizes); - *digestsDefined = (Byte *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(Byte)); - RINOM(*digestsDefined); - *digests = (UInt32 *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(UInt32)); - RINOM(*digests); - } - - for(i = 0; i < numFolders; i++) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: we check that folder is empty - */ - CFileSize sum = 0; - UInt32 j; - UInt32 numSubstreams = folders[i].NumUnPackStreams; - if (numSubstreams == 0) - continue; - if (type == k7zIdSize) - for (j = 1; j < numSubstreams; j++) - { - CFileSize size; - RINOK(SzReadSize(sd, &size)); - (*unPackSizes)[si++] = size; - sum += size; - } - (*unPackSizes)[si++] = SzFolderGetUnPackSize(folders + i) - sum; - } - if (type == k7zIdSize) - { - RINOK(SzReadID(sd, &type)); - } - - for(i = 0; i < *numUnPackStreams; i++) - { - (*digestsDefined)[i] = 0; - (*digests)[i] = 0; - } - - - for(i = 0; i < numFolders; i++) - { - UInt32 numSubstreams = folders[i].NumUnPackStreams; - if (numSubstreams != 1 || !folders[i].UnPackCRCDefined) - numDigests += numSubstreams; - } - - - si = 0; - for (;;) - { - if (type == k7zIdCRC) - { - int digestIndex = 0; - Byte *digestsDefined2 = 0; - UInt32 *digests2 = 0; - SZ_RESULT res = SzReadHashDigests(sd, numDigests, &digestsDefined2, &digests2, allocTemp->Alloc); - if (res == SZ_OK) - { - for (i = 0; i < numFolders; i++) - { - CFolder *folder = folders + i; - UInt32 numSubstreams = folder->NumUnPackStreams; - if (numSubstreams == 1 && folder->UnPackCRCDefined) - { - (*digestsDefined)[si] = 1; - (*digests)[si] = folder->UnPackCRC; - si++; - } - else - { - UInt32 j; - for (j = 0; j < numSubstreams; j++, digestIndex++) - { - (*digestsDefined)[si] = digestsDefined2[digestIndex]; - (*digests)[si] = digests2[digestIndex]; - si++; - } - } - } - } - allocTemp->Free(digestsDefined2); - allocTemp->Free(digests2); - RINOK(res); - } - else if (type == k7zIdEnd) - return SZ_OK; - else - { - RINOK(SzSkeepData(sd)); - } - RINOK(SzReadID(sd, &type)); - } -} - - -SZ_RESULT SzReadStreamsInfo( - CSzData *sd, - CFileSize *dataOffset, - CArchiveDatabase *db, - UInt32 *numUnPackStreams, - CFileSize **unPackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - void * (*allocFunc)(size_t size), - ISzAlloc *allocTemp) -{ - for (;;) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if ((UInt64)(int)type != type) - return SZE_FAIL; - switch((int)type) - { - case k7zIdEnd: - return SZ_OK; - case k7zIdPackInfo: - { - RINOK(SzReadPackInfo(sd, dataOffset, &db->NumPackStreams, - &db->PackSizes, &db->PackCRCsDefined, &db->PackCRCs, allocFunc)); - break; - } - case k7zIdUnPackInfo: - { - RINOK(SzReadUnPackInfo(sd, &db->NumFolders, &db->Folders, allocFunc, allocTemp)); - break; - } - case k7zIdSubStreamsInfo: - { - RINOK(SzReadSubStreamsInfo(sd, db->NumFolders, db->Folders, - numUnPackStreams, unPackSizes, digestsDefined, digests, allocTemp)); - break; - } - default: - return SZE_FAIL; - } - } -} - -Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - -SZ_RESULT SzReadFileNames(CSzData *sd, UInt32 numFiles, CFileItem *files, - void * (*allocFunc)(size_t size)) -{ - UInt32 i; - for(i = 0; i < numFiles; i++) - { - UInt32 len = 0; - UInt32 pos = 0; - CFileItem *file = files + i; - while(pos + 2 <= sd->Size) - { - int numAdds; - UInt32 value = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); - pos += 2; - len++; - if (value == 0) - break; - if (value < 0x80) - continue; - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2; - if (value >= 0xDC00) - return SZE_ARCHIVE_ERROR; - if (pos + 2 > sd->Size) - return SZE_ARCHIVE_ERROR; - c2 = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); - pos += 2; - if (c2 < 0xDC00 || c2 >= 0xE000) - return SZE_ARCHIVE_ERROR; - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - len += numAdds; - } - - MY_ALLOC(char, file->Name, (size_t)len, allocFunc); - - len = 0; - while(2 <= sd->Size) - { - int numAdds; - UInt32 value = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); - SzSkeepDataSize(sd, 2); - if (value < 0x80) - { - file->Name[len++] = (char)value; - if (value == 0) - break; - continue; - } - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2 = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); - SzSkeepDataSize(sd, 2); - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - file->Name[len++] = (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); - do - { - numAdds--; - file->Name[len++] = (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); - } - while(numAdds > 0); - - len += numAdds; - } - } - return SZ_OK; -} - -SZ_RESULT SzReadHeader2( - CSzData *sd, - CArchiveDatabaseEx *db, /* allocMain */ - CFileSize **unPackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - Byte **emptyStreamVector, /* allocTemp */ - Byte **emptyFileVector, /* allocTemp */ - Byte **lwtVector, /* allocTemp */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt64 type; - UInt32 numUnPackStreams = 0; - UInt32 numFiles = 0; - CFileItem *files = 0; - UInt32 numEmptyStreams = 0; - UInt32 i; - - RINOK(SzReadID(sd, &type)); - - if (type == k7zIdArchiveProperties) - { - RINOK(SzReadArchiveProperties(sd)); - RINOK(SzReadID(sd, &type)); - } - - - if (type == k7zIdMainStreamsInfo) - { - RINOK(SzReadStreamsInfo(sd, - &db->ArchiveInfo.DataStartPosition, - &db->Database, - &numUnPackStreams, - unPackSizes, - digestsDefined, - digests, allocMain->Alloc, allocTemp)); - db->ArchiveInfo.DataStartPosition += db->ArchiveInfo.StartPositionAfterHeader; - RINOK(SzReadID(sd, &type)); - } - - if (type == k7zIdEnd) - return SZ_OK; - if (type != k7zIdFilesInfo) - return SZE_ARCHIVE_ERROR; - - RINOK(SzReadNumber32(sd, &numFiles)); - db->Database.NumFiles = numFiles; - - MY_ALLOC(CFileItem, files, (size_t)numFiles, allocMain->Alloc); - - db->Database.Files = files; - for(i = 0; i < numFiles; i++) - SzFileInit(files + i); - - for (;;) - { - UInt64 type; - UInt64 size; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - RINOK(SzReadNumber(sd, &size)); - - if ((UInt64)(int)type != type) - { - RINOK(SzSkeepDataSize(sd, size)); - } - else - switch((int)type) - { - case k7zIdName: - { - RINOK(SzReadSwitch(sd)); - RINOK(SzReadFileNames(sd, numFiles, files, allocMain->Alloc)) - break; - } - case k7zIdEmptyStream: - { - RINOK(SzReadBoolVector(sd, numFiles, emptyStreamVector, allocTemp->Alloc)); - numEmptyStreams = 0; - for (i = 0; i < numFiles; i++) - if ((*emptyStreamVector)[i]) - numEmptyStreams++; - break; - } - case k7zIdEmptyFile: - { - RINOK(SzReadBoolVector(sd, numEmptyStreams, emptyFileVector, allocTemp->Alloc)); - break; - } - case k7zIdLastWriteTime: - { - RINOK(SzReadBoolVector2(sd, numFiles, lwtVector, allocTemp->Alloc)); - RINOK(SzReadSwitch(sd)); - for (i = 0; i < numFiles; i++) - { - CFileItem *f = &files[i]; - Byte defined = (*lwtVector)[i]; - f->IsLastWriteTimeDefined = defined; - f->LastWriteTime.Low = f->LastWriteTime.High = 0; - if (defined) - { - RINOK(SzReadUInt32(sd, &f->LastWriteTime.Low)); - RINOK(SzReadUInt32(sd, &f->LastWriteTime.High)); - } - } - break; - } - default: - { - RINOK(SzSkeepDataSize(sd, size)); - } - } - } - - { - UInt32 emptyFileIndex = 0; - UInt32 sizeIndex = 0; - for(i = 0; i < numFiles; i++) - { - CFileItem *file = files + i; - file->IsAnti = 0; - if (*emptyStreamVector == 0) - file->HasStream = 1; - else - file->HasStream = (Byte)((*emptyStreamVector)[i] ? 0 : 1); - if(file->HasStream) - { - file->IsDirectory = 0; - file->Size = (*unPackSizes)[sizeIndex]; - file->FileCRC = (*digests)[sizeIndex]; - file->IsFileCRCDefined = (Byte)(*digestsDefined)[sizeIndex]; - sizeIndex++; - } - else - { - if (*emptyFileVector == 0) - file->IsDirectory = 1; - else - file->IsDirectory = (Byte)((*emptyFileVector)[emptyFileIndex] ? 0 : 1); - emptyFileIndex++; - file->Size = 0; - file->IsFileCRCDefined = 0; - } - } - } - return SzArDbExFill(db, allocMain->Alloc); -} - -SZ_RESULT SzReadHeader( - CSzData *sd, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - CFileSize *unPackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - Byte *emptyStreamVector = 0; - Byte *emptyFileVector = 0; - Byte *lwtVector = 0; - SZ_RESULT res = SzReadHeader2(sd, db, - &unPackSizes, &digestsDefined, &digests, - &emptyStreamVector, &emptyFileVector, &lwtVector, - allocMain, allocTemp); - allocTemp->Free(unPackSizes); - allocTemp->Free(digestsDefined); - allocTemp->Free(digests); - allocTemp->Free(emptyStreamVector); - allocTemp->Free(emptyFileVector); - allocTemp->Free(lwtVector); - return res; -} - -SZ_RESULT SzReadAndDecodePackedStreams2( - ISzInStream *inStream, - CSzData *sd, - CSzByteBuffer *outBuffer, - CFileSize baseOffset, - CArchiveDatabase *db, - CFileSize **unPackSizes, - Byte **digestsDefined, - UInt32 **digests, - #ifndef _LZMA_IN_CB - Byte **inBuffer, - #endif - ISzAlloc *allocTemp) -{ - - UInt32 numUnPackStreams = 0; - CFileSize dataStartPos; - CFolder *folder; - #ifndef _LZMA_IN_CB - CFileSize packSize = 0; - UInt32 i = 0; - #endif - CFileSize unPackSize; - SZ_RESULT res; - - RINOK(SzReadStreamsInfo(sd, &dataStartPos, db, - &numUnPackStreams, unPackSizes, digestsDefined, digests, - allocTemp->Alloc, allocTemp)); - - dataStartPos += baseOffset; - if (db->NumFolders != 1) - return SZE_ARCHIVE_ERROR; - - folder = db->Folders; - unPackSize = SzFolderGetUnPackSize(folder); - - RINOK(inStream->Seek(inStream, dataStartPos)); - - #ifndef _LZMA_IN_CB - for (i = 0; i < db->NumPackStreams; i++) - packSize += db->PackSizes[i]; - - MY_ALLOC(Byte, *inBuffer, (size_t)packSize, allocTemp->Alloc); - - RINOK(SafeReadDirect(inStream, *inBuffer, (size_t)packSize)); - #endif - - if (!SzByteBufferCreate(outBuffer, (size_t)unPackSize, allocTemp->Alloc)) - return SZE_OUTOFMEMORY; - - res = SzDecode(db->PackSizes, folder, - #ifdef _LZMA_IN_CB - inStream, dataStartPos, - #else - *inBuffer, - #endif - outBuffer->Items, (size_t)unPackSize, allocTemp); - RINOK(res) - if (folder->UnPackCRCDefined) - if (CrcCalc(outBuffer->Items, (size_t)unPackSize) != folder->UnPackCRC) - return SZE_FAIL; - return SZ_OK; -} - -SZ_RESULT SzReadAndDecodePackedStreams( - ISzInStream *inStream, - CSzData *sd, - CSzByteBuffer *outBuffer, - CFileSize baseOffset, - ISzAlloc *allocTemp) -{ - CArchiveDatabase db; - CFileSize *unPackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - #ifndef _LZMA_IN_CB - Byte *inBuffer = 0; - #endif - SZ_RESULT res; - SzArchiveDatabaseInit(&db); - res = SzReadAndDecodePackedStreams2(inStream, sd, outBuffer, baseOffset, - &db, &unPackSizes, &digestsDefined, &digests, - #ifndef _LZMA_IN_CB - &inBuffer, - #endif - allocTemp); - SzArchiveDatabaseFree(&db, allocTemp->Free); - allocTemp->Free(unPackSizes); - allocTemp->Free(digestsDefined); - allocTemp->Free(digests); - #ifndef _LZMA_IN_CB - allocTemp->Free(inBuffer); - #endif - return res; -} - -SZ_RESULT SzArchiveOpen2( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - Byte signature[k7zSignatureSize]; - Byte version; - UInt32 crcFromArchive; - UInt64 nextHeaderOffset; - UInt64 nextHeaderSize; - UInt32 nextHeaderCRC; - UInt32 crc = 0; - CFileSize pos = 0; - CSzByteBuffer buffer; - CSzData sd; - SZ_RESULT res; - - RINOK(SafeReadDirect(inStream, signature, k7zSignatureSize)); - - if (!TestSignatureCandidate(signature)) - return SZE_ARCHIVE_ERROR; - - /* - db.Clear(); - db.ArchiveInfo.StartPosition = _arhiveBeginStreamPosition; - */ - RINOK(SafeReadDirectByte(inStream, &version)); - if (version != k7zMajorVersion) - return SZE_ARCHIVE_ERROR; - RINOK(SafeReadDirectByte(inStream, &version)); - - RINOK(SafeReadDirectUInt32(inStream, &crcFromArchive, &crc)); - - crc = CRC_INIT_VAL; - RINOK(SafeReadDirectUInt64(inStream, &nextHeaderOffset, &crc)); - RINOK(SafeReadDirectUInt64(inStream, &nextHeaderSize, &crc)); - RINOK(SafeReadDirectUInt32(inStream, &nextHeaderCRC, &crc)); - - pos = k7zStartHeaderSize; - db->ArchiveInfo.StartPositionAfterHeader = pos; - - if (CRC_GET_DIGEST(crc) != crcFromArchive) - return SZE_ARCHIVE_ERROR; - - if (nextHeaderSize == 0) - return SZ_OK; - - RINOK(inStream->Seek(inStream, (CFileSize)(pos + nextHeaderOffset))); - - if (!SzByteBufferCreate(&buffer, (size_t)nextHeaderSize, allocTemp->Alloc)) - return SZE_OUTOFMEMORY; - - res = SafeReadDirect(inStream, buffer.Items, (size_t)nextHeaderSize); - if (res == SZ_OK) - { - res = SZE_ARCHIVE_ERROR; - if (CrcCalc(buffer.Items, (UInt32)nextHeaderSize) == nextHeaderCRC) - { - for (;;) - { - UInt64 type; - sd.Data = buffer.Items; - sd.Size = buffer.Capacity; - res = SzReadID(&sd, &type); - if (res != SZ_OK) - break; - if (type == k7zIdHeader) - { - res = SzReadHeader(&sd, db, allocMain, allocTemp); - break; - } - if (type != k7zIdEncodedHeader) - { - res = SZE_ARCHIVE_ERROR; - break; - } - { - CSzByteBuffer outBuffer; - res = SzReadAndDecodePackedStreams(inStream, &sd, &outBuffer, - db->ArchiveInfo.StartPositionAfterHeader, - allocTemp); - if (res != SZ_OK) - { - SzByteBufferFree(&outBuffer, allocTemp->Free); - break; - } - SzByteBufferFree(&buffer, allocTemp->Free); - buffer.Items = outBuffer.Items; - buffer.Capacity = outBuffer.Capacity; - } - } - } - } - SzByteBufferFree(&buffer, allocTemp->Free); - return res; -} - -SZ_RESULT SzArchiveOpen( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - SZ_RESULT res = SzArchiveOpen2(inStream, db, allocMain, allocTemp); - if (res != SZ_OK) - SzArDbExFree(db, allocMain->Free); - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.h deleted file mode 100644 index 0b4ca08d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zIn.h +++ /dev/null @@ -1,55 +0,0 @@ -/* 7zIn.h */ - -#ifndef __7Z_IN_H -#define __7Z_IN_H - -#include "7zHeader.h" -#include "7zItem.h" -#include "7zAlloc.h" - -typedef struct _CInArchiveInfo -{ - CFileSize StartPositionAfterHeader; - CFileSize DataStartPosition; -}CInArchiveInfo; - -typedef struct _CArchiveDatabaseEx -{ - CArchiveDatabase Database; - CInArchiveInfo ArchiveInfo; - UInt32 *FolderStartPackStreamIndex; - CFileSize *PackStreamStartPositions; - UInt32 *FolderStartFileIndex; - UInt32 *FileIndexToFolderIndexMap; -}CArchiveDatabaseEx; - -void SzArDbExInit(CArchiveDatabaseEx *db); -void SzArDbExFree(CArchiveDatabaseEx *db, void (*freeFunc)(void *)); -CFileSize SzArDbGetFolderStreamPos(CArchiveDatabaseEx *db, UInt32 folderIndex, UInt32 indexInFolder); -int SzArDbGetFolderFullPackSize(CArchiveDatabaseEx *db, UInt32 folderIndex, CFileSize *resSize); - -typedef struct _ISzInStream -{ - #ifdef _LZMA_IN_CB - SZ_RESULT (*Read)( - void *object, /* pointer to ISzInStream itself */ - void **buffer, /* out: pointer to buffer with data */ - size_t maxRequiredSize, /* max required size to read */ - size_t *processedSize); /* real processed size. - processedSize can be less than maxRequiredSize. - If processedSize == 0, then there are no more - bytes in stream. */ - #else - SZ_RESULT (*Read)(void *object, void *buffer, size_t size, size_t *processedSize); - #endif - SZ_RESULT (*Seek)(void *object, CFileSize pos); -} ISzInStream; - - -int SzArchiveOpen( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.c deleted file mode 100644 index a88afe9a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.c +++ /dev/null @@ -1,134 +0,0 @@ -/* 7zItem.c */ - -#include "7zItem.h" -#include "7zAlloc.h" - -void SzCoderInfoInit(CCoderInfo *coder) -{ - SzByteBufferInit(&coder->Properties); -} - -void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p)) -{ - SzByteBufferFree(&coder->Properties, freeFunc); - SzCoderInfoInit(coder); -} - -void SzFolderInit(CFolder *folder) -{ - folder->NumCoders = 0; - folder->Coders = 0; - folder->NumBindPairs = 0; - folder->BindPairs = 0; - folder->NumPackStreams = 0; - folder->PackStreams = 0; - folder->UnPackSizes = 0; - folder->UnPackCRCDefined = 0; - folder->UnPackCRC = 0; - folder->NumUnPackStreams = 0; -} - -void SzFolderFree(CFolder *folder, void (*freeFunc)(void *p)) -{ - UInt32 i; - for (i = 0; i < folder->NumCoders; i++) - SzCoderInfoFree(&folder->Coders[i], freeFunc); - freeFunc(folder->Coders); - freeFunc(folder->BindPairs); - freeFunc(folder->PackStreams); - freeFunc(folder->UnPackSizes); - SzFolderInit(folder); -} - -UInt32 SzFolderGetNumOutStreams(CFolder *folder) -{ - UInt32 result = 0; - UInt32 i; - for (i = 0; i < folder->NumCoders; i++) - result += folder->Coders[i].NumOutStreams; - return result; -} - -int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex) -{ - UInt32 i; - for(i = 0; i < folder->NumBindPairs; i++) - if (folder->BindPairs[i].InIndex == inStreamIndex) - return i; - return -1; -} - - -int SzFolderFindBindPairForOutStream(CFolder *folder, UInt32 outStreamIndex) -{ - UInt32 i; - for(i = 0; i < folder->NumBindPairs; i++) - if (folder->BindPairs[i].OutIndex == outStreamIndex) - return i; - return -1; -} - -CFileSize SzFolderGetUnPackSize(CFolder *folder) -{ - int i = (int)SzFolderGetNumOutStreams(folder); - if (i == 0) - return 0; - for (i--; i >= 0; i--) - if (SzFolderFindBindPairForOutStream(folder, i) < 0) - return folder->UnPackSizes[i]; - /* throw 1; */ - return 0; -} - -/* -int FindPackStreamArrayIndex(int inStreamIndex) const -{ - for(int i = 0; i < PackStreams.Size(); i++) - if (PackStreams[i] == inStreamIndex) - return i; - return -1; -} -*/ - -void SzFileInit(CFileItem *fileItem) -{ - fileItem->IsFileCRCDefined = 0; - fileItem->HasStream = 1; - fileItem->IsDirectory = 0; - fileItem->IsAnti = 0; - fileItem->IsLastWriteTimeDefined = 0; - fileItem->Name = 0; -} - -void SzFileFree(CFileItem *fileItem, void (*freeFunc)(void *p)) -{ - freeFunc(fileItem->Name); - SzFileInit(fileItem); -} - -void SzArchiveDatabaseInit(CArchiveDatabase *db) -{ - db->NumPackStreams = 0; - db->PackSizes = 0; - db->PackCRCsDefined = 0; - db->PackCRCs = 0; - db->NumFolders = 0; - db->Folders = 0; - db->NumFiles = 0; - db->Files = 0; -} - -void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *)) -{ - UInt32 i; - for (i = 0; i < db->NumFolders; i++) - SzFolderFree(&db->Folders[i], freeFunc); - for (i = 0; i < db->NumFiles; i++) - SzFileFree(&db->Files[i], freeFunc); - freeFunc(db->PackSizes); - freeFunc(db->PackCRCsDefined); - freeFunc(db->PackCRCs); - freeFunc(db->Folders); - freeFunc(db->Files); - SzArchiveDatabaseInit(db); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.h deleted file mode 100644 index 05567bff..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zItem.h +++ /dev/null @@ -1,95 +0,0 @@ -/* 7zItem.h */ - -#ifndef __7Z_ITEM_H -#define __7Z_ITEM_H - -#include "7zMethodID.h" -#include "7zHeader.h" -#include "7zBuffer.h" - -typedef struct _CCoderInfo -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; - CMethodID MethodID; - CSzByteBuffer Properties; -}CCoderInfo; - -void SzCoderInfoInit(CCoderInfo *coder); -void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p)); - -typedef struct _CBindPair -{ - UInt32 InIndex; - UInt32 OutIndex; -}CBindPair; - -typedef struct _CFolder -{ - UInt32 NumCoders; - CCoderInfo *Coders; - UInt32 NumBindPairs; - CBindPair *BindPairs; - UInt32 NumPackStreams; - UInt32 *PackStreams; - CFileSize *UnPackSizes; - int UnPackCRCDefined; - UInt32 UnPackCRC; - - UInt32 NumUnPackStreams; -}CFolder; - -void SzFolderInit(CFolder *folder); -CFileSize SzFolderGetUnPackSize(CFolder *folder); -int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex); -UInt32 SzFolderGetNumOutStreams(CFolder *folder); -CFileSize SzFolderGetUnPackSize(CFolder *folder); - -typedef struct _CArchiveFileTime -{ - UInt32 Low; - UInt32 High; -} CArchiveFileTime; - -typedef struct _CFileItem -{ - CArchiveFileTime LastWriteTime; - /* - CFileSize StartPos; - UInt32 Attributes; - */ - CFileSize Size; - UInt32 FileCRC; - char *Name; - - Byte IsFileCRCDefined; - Byte HasStream; - Byte IsDirectory; - Byte IsAnti; - Byte IsLastWriteTimeDefined; - /* - int AreAttributesDefined; - int IsLastWriteTimeDefined; - int IsStartPosDefined; - */ -}CFileItem; - -void SzFileInit(CFileItem *fileItem); - -typedef struct _CArchiveDatabase -{ - UInt32 NumPackStreams; - CFileSize *PackSizes; - Byte *PackCRCsDefined; - UInt32 *PackCRCs; - UInt32 NumFolders; - CFolder *Folders; - UInt32 NumFiles; - CFileItem *Files; -}CArchiveDatabase; - -void SzArchiveDatabaseInit(CArchiveDatabase *db); -void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *)); - - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMain.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMain.c deleted file mode 100644 index 0deef893..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMain.c +++ /dev/null @@ -1,428 +0,0 @@ -/* -7zMain.c -Test application for 7z Decoder -LZMA SDK 4.43 Copyright (c) 1999-2006 Igor Pavlov (2006-06-04) -*/ - -#include -#include -#include - -#ifdef _WIN32 -#define USE_WINDOWS_FUNCTIONS -#endif - -#ifdef USE_WINDOWS_FUNCTIONS -#include -#endif - -#include "7zIn.h" -#include "7zExtract.h" - -#include "../../7zCrc.h" - - -#ifdef USE_WINDOWS_FUNCTIONS -typedef HANDLE MY_FILE_HANDLE; -#else -typedef FILE *MY_FILE_HANDLE; -#endif - -void ConvertNumberToString(CFileSize value, char *s) -{ - char temp[32]; - int pos = 0; - do - { - temp[pos++] = (char)('0' + (int)(value % 10)); - value /= 10; - } - while (value != 0); - do - *s++ = temp[--pos]; - while(pos > 0); - *s = '\0'; -} - -#define PERIOD_4 (4 * 365 + 1) -#define PERIOD_100 (PERIOD_4 * 25 - 1) -#define PERIOD_400 (PERIOD_100 * 4 + 1) - -void ConvertFileTimeToString(CArchiveFileTime *ft, char *s) -{ - unsigned year, mon, day, hour, min, sec; - UInt64 v64 = ft->Low | ((UInt64)ft->High << 32); - Byte ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - unsigned temp; - UInt32 v; - v64 /= 10000000; - sec = (unsigned)(v64 % 60); - v64 /= 60; - min = (unsigned)(v64 % 60); - v64 /= 60; - hour = (unsigned)(v64 % 24); - v64 /= 24; - - v = (UInt32)v64; - - year = (unsigned)(1601 + v / PERIOD_400 * 400); - v %= PERIOD_400; - - temp = (unsigned)(v / PERIOD_100); - if (temp == 4) - temp = 3; - year += temp * 100; - v -= temp * PERIOD_100; - - temp = v / PERIOD_4; - if (temp == 25) - temp = 24; - year += temp * 4; - v -= temp * PERIOD_4; - - temp = v / 365; - if (temp == 4) - temp = 3; - year += temp; - v -= temp * 365; - - if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) - ms[1] = 29; - for (mon = 1; mon <= 12; mon++) - { - unsigned s = ms[mon - 1]; - if (v < s) - break; - v -= s; - } - day = (unsigned)v + 1; - sprintf(s, "%04d-%02d-%02d %02d:%02d:%02d", year, mon, day, hour, min, sec); -} - - -#ifdef USE_WINDOWS_FUNCTIONS -/* - ReadFile and WriteFile functions in Windows have BUG: - If you Read or Write 64MB or more (probably min_failure_size = 64MB - 32KB + 1) - from/to Network file, it returns ERROR_NO_SYSTEM_RESOURCES - (Insufficient system resources exist to complete the requested service). -*/ -#define kChunkSizeMax (1 << 24) -#endif - -size_t MyReadFile(MY_FILE_HANDLE file, void *data, size_t size) -{ - if (size == 0) - return 0; - #ifdef USE_WINDOWS_FUNCTIONS - { - size_t processedSize = 0; - do - { - DWORD curSize = (size > kChunkSizeMax) ? kChunkSizeMax : (DWORD)size; - DWORD processedLoc = 0; - BOOL res = ReadFile(file, data, curSize, &processedLoc, NULL); - data = (void *)((unsigned char *)data + processedLoc); - size -= processedLoc; - processedSize += processedLoc; - if (!res || processedLoc == 0) - break; - } - while (size > 0); - return processedSize; - } - #else - return fread(data, 1, size, file); - #endif -} - -size_t MyWriteFile(MY_FILE_HANDLE file, void *data, size_t size) -{ - if (size == 0) - return 0; - #ifdef USE_WINDOWS_FUNCTIONS - { - size_t processedSize = 0; - do - { - DWORD curSize = (size > kChunkSizeMax) ? kChunkSizeMax : (DWORD)size; - DWORD processedLoc = 0; - BOOL res = WriteFile(file, data, curSize, &processedLoc, NULL); - data = (void *)((unsigned char *)data + processedLoc); - size -= processedLoc; - processedSize += processedLoc; - if (!res) - break; - } - while (size > 0); - return processedSize; - } - #else - return fwrite(data, 1, size, file); - #endif -} - -int MyCloseFile(MY_FILE_HANDLE file) -{ - #ifdef USE_WINDOWS_FUNCTIONS - return (CloseHandle(file) != FALSE) ? 0 : 1; - #else - return fclose(file); - #endif -} - -typedef struct _CFileInStream -{ - ISzInStream InStream; - MY_FILE_HANDLE File; -} CFileInStream; - -#ifdef _LZMA_IN_CB - -#define kBufferSize (1 << 12) -Byte g_Buffer[kBufferSize]; - -SZ_RESULT SzFileReadImp(void *object, void **buffer, size_t maxRequiredSize, size_t *processedSize) -{ - CFileInStream *s = (CFileInStream *)object; - size_t processedSizeLoc; - if (maxRequiredSize > kBufferSize) - maxRequiredSize = kBufferSize; - processedSizeLoc = MyReadFile(s->File, g_Buffer, maxRequiredSize); - *buffer = g_Buffer; - if (processedSize != 0) - *processedSize = processedSizeLoc; - return SZ_OK; -} - -#else - -SZ_RESULT SzFileReadImp(void *object, void *buffer, size_t size, size_t *processedSize) -{ - CFileInStream *s = (CFileInStream *)object; - size_t processedSizeLoc = MyReadFile(s->File, buffer, size); - if (processedSize != 0) - *processedSize = processedSizeLoc; - return SZ_OK; -} - -#endif - -SZ_RESULT SzFileSeekImp(void *object, CFileSize pos) -{ - CFileInStream *s = (CFileInStream *)object; - - #ifdef USE_WINDOWS_FUNCTIONS - { - LARGE_INTEGER value; - value.LowPart = (DWORD)pos; - value.HighPart = (LONG)((UInt64)pos >> 32); - #ifdef _SZ_FILE_SIZE_32 - /* VC 6.0 has bug with >> 32 shifts. */ - value.HighPart = 0; - #endif - value.LowPart = SetFilePointer(s->File, value.LowPart, &value.HighPart, FILE_BEGIN); - if (value.LowPart == 0xFFFFFFFF) - if(GetLastError() != NO_ERROR) - return SZE_FAIL; - return SZ_OK; - } - #else - int res = fseek(s->File, (long)pos, SEEK_SET); - if (res == 0) - return SZ_OK; - return SZE_FAIL; - #endif -} - -void PrintError(char *sz) -{ - printf("\nERROR: %s\n", sz); -} - -int main(int numargs, char *args[]) -{ - CFileInStream archiveStream; - CArchiveDatabaseEx db; - SZ_RESULT res; - ISzAlloc allocImp; - ISzAlloc allocTempImp; - - printf("\n7z ANSI-C Decoder 4.48 Copyright (c) 1999-2007 Igor Pavlov 2007-06-21\n"); - if (numargs == 1) - { - printf( - "\nUsage: 7zDec \n\n" - "\n" - " e: Extract files from archive\n" - " l: List contents of archive\n" - " t: Test integrity of archive\n"); - return 0; - } - if (numargs < 3) - { - PrintError("incorrect command"); - return 1; - } - - archiveStream.File = - #ifdef USE_WINDOWS_FUNCTIONS - CreateFile(args[2], GENERIC_READ, FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (archiveStream.File == INVALID_HANDLE_VALUE) - #else - archiveStream.File = fopen(args[2], "rb"); - if (archiveStream.File == 0) - #endif - { - PrintError("can not open input file"); - return 1; - } - - archiveStream.InStream.Read = SzFileReadImp; - archiveStream.InStream.Seek = SzFileSeekImp; - - allocImp.Alloc = SzAlloc; - allocImp.Free = SzFree; - - allocTempImp.Alloc = SzAllocTemp; - allocTempImp.Free = SzFreeTemp; - - CrcGenerateTable(); - - SzArDbExInit(&db); - res = SzArchiveOpen(&archiveStream.InStream, &db, &allocImp, &allocTempImp); - if (res == SZ_OK) - { - char *command = args[1]; - int listCommand = 0; - int testCommand = 0; - int extractCommand = 0; - if (strcmp(command, "l") == 0) - listCommand = 1; - if (strcmp(command, "t") == 0) - testCommand = 1; - else if (strcmp(command, "e") == 0) - extractCommand = 1; - - if (listCommand) - { - UInt32 i; - for (i = 0; i < db.Database.NumFiles; i++) - { - CFileItem *f = db.Database.Files + i; - char s[32], t[32]; - ConvertNumberToString(f->Size, s); - if (f->IsLastWriteTimeDefined) - ConvertFileTimeToString(&f->LastWriteTime, t); - else - strcpy(t, " "); - - printf("%10s %s %s\n", s, t, f->Name); - } - } - else if (testCommand || extractCommand) - { - UInt32 i; - - /* - if you need cache, use these 3 variables. - if you use external function, you can make these variable as static. - */ - UInt32 blockIndex = 0xFFFFFFFF; /* it can have any value before first call (if outBuffer = 0) */ - Byte *outBuffer = 0; /* it must be 0 before first call for each new archive. */ - size_t outBufferSize = 0; /* it can have any value before first call (if outBuffer = 0) */ - - printf("\n"); - for (i = 0; i < db.Database.NumFiles; i++) - { - size_t offset; - size_t outSizeProcessed; - CFileItem *f = db.Database.Files + i; - if (f->IsDirectory) - printf("Directory "); - else - printf(testCommand ? - "Testing ": - "Extracting"); - printf(" %s", f->Name); - if (f->IsDirectory) - { - printf("\n"); - continue; - } - res = SzExtract(&archiveStream.InStream, &db, i, - &blockIndex, &outBuffer, &outBufferSize, - &offset, &outSizeProcessed, - &allocImp, &allocTempImp); - if (res != SZ_OK) - break; - if (!testCommand) - { - MY_FILE_HANDLE outputHandle; - size_t processedSize; - char *fileName = f->Name; - size_t nameLen = strlen(f->Name); - for (; nameLen > 0; nameLen--) - if (f->Name[nameLen - 1] == '/') - { - fileName = f->Name + nameLen; - break; - } - - outputHandle = - #ifdef USE_WINDOWS_FUNCTIONS - CreateFile(fileName, GENERIC_WRITE, FILE_SHARE_READ, - NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (outputHandle == INVALID_HANDLE_VALUE) - #else - fopen(fileName, "wb+"); - if (outputHandle == 0) - #endif - { - PrintError("can not open output file"); - res = SZE_FAIL; - break; - } - processedSize = MyWriteFile(outputHandle, outBuffer + offset, outSizeProcessed); - if (processedSize != outSizeProcessed) - { - PrintError("can not write output file"); - res = SZE_FAIL; - break; - } - if (MyCloseFile(outputHandle)) - { - PrintError("can not close output file"); - res = SZE_FAIL; - break; - } - } - printf("\n"); - } - allocImp.Free(outBuffer); - } - else - { - PrintError("incorrect command"); - res = SZE_FAIL; - } - } - SzArDbExFree(&db, allocImp.Free); - - MyCloseFile(archiveStream.File); - if (res == SZ_OK) - { - printf("\nEverything is Ok\n"); - return 0; - } - if (res == (SZ_RESULT)SZE_NOTIMPL) - PrintError("decoder doesn't support this archive"); - else if (res == (SZ_RESULT)SZE_OUTOFMEMORY) - PrintError("can not allocate memory"); - else if (res == (SZ_RESULT)SZE_CRC_ERROR) - PrintError("CRC error"); - else - printf("\nERROR #%d\n", res); - return 1; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.c deleted file mode 100644 index a7e825de..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.c +++ /dev/null @@ -1,10 +0,0 @@ -/* 7zMethodID.c */ - -#include "7zMethodID.h" - -/* -int AreMethodsEqual(CMethodID *a1, CMethodID *a2) -{ - return (*a1 == *a2) ? 1 : 0; -} -*/ diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.h deleted file mode 100644 index 57f22a50..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7zMethodID.h +++ /dev/null @@ -1,10 +0,0 @@ -/* 7zMethodID.h */ - -#ifndef __7Z_METHOD_ID_H -#define __7Z_METHOD_ID_H - -#include "../../Types.h" - -typedef UInt64 CMethodID; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsp b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsp deleted file mode 100644 index 9a040ad1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsp +++ /dev/null @@ -1,211 +0,0 @@ -# Microsoft Developer Studio Project File - Name="7z_C" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=7z_C - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "7z_C.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "7z_C.mak" CFG="7z_C - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "7z_C - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "7z_C - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "7z_C - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W4 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_LZMA_PROB32" /D "_LZMA_IN_CB" /YX /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/7zDec.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "7z_C - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W4 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_LZMA_PROB32" /D "_LZMA_IN_CB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/7zDec.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "7z_C - Win32 Release" -# Name "7z_C - Win32 Debug" -# Begin Group "LZMA" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\Lzma\LzmaDecode.c -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma\LzmaDecode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Lzma\LzmaTypes.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\7zCrc.c -# End Source File -# Begin Source File - -SOURCE=..\..\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\Types.h -# End Source File -# End Group -# Begin Group "Branch" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchTypes.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchX86.c -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchX86.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchX86_2.c -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchX86_2.h -# End Source File -# End Group -# Begin Source File - -SOURCE=.\7zAlloc.c -# End Source File -# Begin Source File - -SOURCE=.\7zAlloc.h -# End Source File -# Begin Source File - -SOURCE=.\7zBuffer.c -# End Source File -# Begin Source File - -SOURCE=.\7zBuffer.h -# End Source File -# Begin Source File - -SOURCE=.\7zDecode.c -# End Source File -# Begin Source File - -SOURCE=.\7zDecode.h -# End Source File -# Begin Source File - -SOURCE=.\7zExtract.c -# End Source File -# Begin Source File - -SOURCE=.\7zExtract.h -# End Source File -# Begin Source File - -SOURCE=.\7zHeader.c -# End Source File -# Begin Source File - -SOURCE=.\7zHeader.h -# End Source File -# Begin Source File - -SOURCE=.\7zIn.c -# End Source File -# Begin Source File - -SOURCE=.\7zIn.h -# End Source File -# Begin Source File - -SOURCE=.\7zItem.c -# End Source File -# Begin Source File - -SOURCE=.\7zItem.h -# End Source File -# Begin Source File - -SOURCE=.\7zMain.c -# End Source File -# Begin Source File - -SOURCE=.\7zMethodID.c -# End Source File -# Begin Source File - -SOURCE=.\7zMethodID.h -# End Source File -# End Target -# End Project diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsw b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsw deleted file mode 100644 index 6fd39621..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/7z_C.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "7z_C"=.\7z_C.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile deleted file mode 100644 index 6ea3119a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile +++ /dev/null @@ -1,74 +0,0 @@ -PROG = 7zDec.exe - -!IFDEF CPU -LIBS = $(LIBS) bufferoverflowU.lib -CFLAGS = $(CFLAGS) -GS- -Zc:forScope -WX -GS- -Gy -W4 -!ENDIF - -!IFNDEF O -!IFDEF CPU -O=$(CPU) -!ELSE -O=O -!ENDIF -!ENDIF - -CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ -D_LZMA_IN_CB -CFLAGS_O1 = $(CFLAGS) -O1 -CFLAGS_O2 = $(CFLAGS) -O2 - -LFLAGS = $(LFLAGS) -nologo -OPT:NOWIN98 -OPT:REF - -PROGPATH = $O\$(PROG) - -COMPL_O1 = $(CPP) $(CFLAGS_O1) $** -COMPL_O2 = $(CPP) $(CFLAGS_O2) $** -COMPL = $(CPP) $(CFLAGS_O1) $** - -C_OBJS = \ - $O\7zCrc.obj \ - - -7Z_OBJS = \ - $O\7zAlloc.obj \ - $O\7zBuffer.obj \ - $O\7zDecode.obj \ - $O\7zExtract.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zItem.obj \ - $O\7zMain.obj \ - $O\7zMethodID.obj \ - -OBJS = \ - $(7Z_OBJS) \ - $O\LzmaDecode.obj \ - $O\BranchX86.obj \ - $O\BranchX86_2.obj \ - $(C_OBJS) \ - -all: $(PROGPATH) - -clean: - -del /Q $(PROGPATH) $O\*.exe $O\*.dll $O\*.obj $O\*.lib $O\*.exp $O\*.res $O\*.pch - -$O: - if not exist "$O" mkdir "$O" - -$(PROGPATH): $O $(OBJS) - link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS) - - -$(7Z_OBJS): $(*B).c - $(COMPL) -$O\LzmaDecode.obj: ../../Compress/Lzma/$(*B).c - $(COMPL_O2) - -$O\BranchX86.obj: ../../Compress/Branch/$(*B).c - $(COMPL_O2) - -$O\BranchX86_2.obj: ../../Compress/Branch/$(*B).c - $(COMPL_O2) - -$(C_OBJS): ../../$(*B).c - $(COMPL_O2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile.gcc b/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile.gcc deleted file mode 100644 index 664ac252..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Archive/7z/makefile.gcc +++ /dev/null @@ -1,55 +0,0 @@ -PROG = 7zDec -CXX = g++ -LIB = -RM = rm -f -CFLAGS = -c -O2 -Wall -D_LZMA_IN_CB - -OBJS = 7zAlloc.o 7zBuffer.o 7zCrc.o 7zDecode.o 7zExtract.o 7zHeader.o 7zIn.o 7zItem.o 7zMain.o 7zMethodID.o LzmaDecode.o BranchX86.o BranchX86_2.o - -all: $(PROG) - -$(PROG): $(OBJS) - $(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) - -7zAlloc.o: 7zAlloc.c - $(CXX) $(CFLAGS) 7zAlloc.c - -7zBuffer.o: 7zBuffer.c - $(CXX) $(CFLAGS) 7zBuffer.c - -7zCrc.o: ../../7zCrc.c - $(CXX) $(CFLAGS) ../../7zCrc.c - -7zDecode.o: 7zDecode.c - $(CXX) $(CFLAGS) 7zDecode.c - -7zExtract.o: 7zExtract.c - $(CXX) $(CFLAGS) 7zExtract.c - -7zHeader.o: 7zHeader.c - $(CXX) $(CFLAGS) 7zHeader.c - -7zIn.o: 7zIn.c - $(CXX) $(CFLAGS) 7zIn.c - -7zItem.o: 7zItem.c - $(CXX) $(CFLAGS) 7zItem.c - -7zMain.o: 7zMain.c - $(CXX) $(CFLAGS) 7zMain.c - -7zMethodID.o: 7zMethodID.c - $(CXX) $(CFLAGS) 7zMethodID.c - -LzmaDecode.o: ../../Compress/Lzma/LzmaDecode.c - $(CXX) $(CFLAGS) ../../Compress/Lzma/LzmaDecode.c - -BranchX86.o: ../../Compress/Branch/BranchX86.c - $(CXX) $(CFLAGS) ../../Compress/Branch/BranchX86.c - -BranchX86_2.o: ../../Compress/Branch/BranchX86_2.c - $(CXX) $(CFLAGS) ../../Compress/Branch/BranchX86_2.c - -clean: - -$(RM) $(PROG) $(OBJS) - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.c deleted file mode 100644 index da7db261..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.c +++ /dev/null @@ -1,26 +0,0 @@ -/* BranchARM.c */ - -#include "BranchARM.h" - -UInt32 ARM_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding) -{ - UInt32 i; - for (i = 0; i + 4 <= size; i += 4) - { - if (data[i + 3] == 0xEB) - { - UInt32 dest; - UInt32 src = (data[i + 2] << 16) | (data[i + 1] << 8) | (data[i + 0]); - src <<= 2; - if (encoding) - dest = nowPos + i + 8 + src; - else - dest = src - (nowPos + i + 8); - dest >>= 2; - data[i + 2] = (Byte)(dest >> 16); - data[i + 1] = (Byte)(dest >> 8); - data[i + 0] = (Byte)dest; - } - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.h deleted file mode 100644 index 3b4d63e1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARM.h +++ /dev/null @@ -1,10 +0,0 @@ -/* BranchARM.h */ - -#ifndef __BRANCH_ARM_H -#define __BRANCH_ARM_H - -#include "BranchTypes.h" - -UInt32 ARM_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.c deleted file mode 100644 index fa30e439..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.c +++ /dev/null @@ -1,35 +0,0 @@ -/* BranchARMThumb.c */ - -#include "BranchARMThumb.h" - -UInt32 ARMThumb_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding) -{ - UInt32 i; - for (i = 0; i + 4 <= size; i += 2) - { - if ((data[i + 1] & 0xF8) == 0xF0 && - (data[i + 3] & 0xF8) == 0xF8) - { - UInt32 dest; - UInt32 src = - ((data[i + 1] & 0x7) << 19) | - (data[i + 0] << 11) | - ((data[i + 3] & 0x7) << 8) | - (data[i + 2]); - - src <<= 1; - if (encoding) - dest = nowPos + i + 4 + src; - else - dest = src - (nowPos + i + 4); - dest >>= 1; - - data[i + 1] = (Byte)(0xF0 | ((dest >> 19) & 0x7)); - data[i + 0] = (Byte)(dest >> 11); - data[i + 3] = (Byte)(0xF8 | ((dest >> 8) & 0x7)); - data[i + 2] = (Byte)dest; - i += 2; - } - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.h deleted file mode 100644 index 304699ce..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchARMThumb.h +++ /dev/null @@ -1,10 +0,0 @@ -/* BranchARMThumb.h */ - -#ifndef __BRANCH_ARM_THUMB_H -#define __BRANCH_ARM_THUMB_H - -#include "BranchTypes.h" - -UInt32 ARMThumb_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.c deleted file mode 100644 index 009086b1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.c +++ /dev/null @@ -1,66 +0,0 @@ -/* BranchIA64.c */ - -#include "BranchIA64.h" - -const Byte kBranchTable[32] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 6, 6, 0, 0, 7, 7, - 4, 4, 0, 0, 4, 4, 0, 0 -}; - -UInt32 IA64_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding) -{ - UInt32 i; - for (i = 0; i + 16 <= size; i += 16) - { - UInt32 instrTemplate = data[i] & 0x1F; - UInt32 mask = kBranchTable[instrTemplate]; - UInt32 bitPos = 5; - int slot; - for (slot = 0; slot < 3; slot++, bitPos += 41) - { - UInt32 bytePos, bitRes; - UInt64 instruction, instNorm; - int j; - if (((mask >> slot) & 1) == 0) - continue; - bytePos = (bitPos >> 3); - bitRes = bitPos & 0x7; - instruction = 0; - for (j = 0; j < 6; j++) - instruction += (UInt64)(data[i + j + bytePos]) << (8 * j); - - instNorm = instruction >> bitRes; - if (((instNorm >> 37) & 0xF) == 0x5 - && ((instNorm >> 9) & 0x7) == 0 - /* && (instNorm & 0x3F)== 0 */ - ) - { - UInt32 src = (UInt32)((instNorm >> 13) & 0xFFFFF); - UInt32 dest; - src |= ((UInt32)(instNorm >> 36) & 1) << 20; - - src <<= 4; - - if (encoding) - dest = nowPos + i + src; - else - dest = src - (nowPos + i); - - dest >>= 4; - - instNorm &= ~((UInt64)(0x8FFFFF) << 13); - instNorm |= ((UInt64)(dest & 0xFFFFF) << 13); - instNorm |= ((UInt64)(dest & 0x100000) << (36 - 20)); - - instruction &= (1 << bitRes) - 1; - instruction |= (instNorm << bitRes); - for (j = 0; j < 6; j++) - data[i + j + bytePos] = (Byte)(instruction >> (8 * j)); - } - } - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.h deleted file mode 100644 index 8213cb50..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchIA64.h +++ /dev/null @@ -1,10 +0,0 @@ -/* BranchIA64.h */ - -#ifndef __BRANCH_IA64_H -#define __BRANCH_IA64_H - -#include "BranchTypes.h" - -UInt32 IA64_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.c deleted file mode 100644 index b3e5703f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.c +++ /dev/null @@ -1,36 +0,0 @@ -/* BranchPPC.c */ - -#include "BranchPPC.h" - -UInt32 PPC_B_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding) -{ - UInt32 i; - for (i = 0; i + 4 <= size; i += 4) - { - /* PowerPC branch 6(48) 24(Offset) 1(Abs) 1(Link) */ - if ((data[i] >> 2) == 0x12 && - ( - (data[i + 3] & 3) == 1 - /* || (data[i+3] & 3) == 3 */ - ) - ) - { - UInt32 src = ((data[i + 0] & 3) << 24) | - (data[i + 1] << 16) | - (data[i + 2] << 8) | - (data[i + 3] & (~3)); - - UInt32 dest; - if (encoding) - dest = nowPos + i + src; - else - dest = src - (nowPos + i); - data[i + 0] = (Byte)(0x48 | ((dest >> 24) & 0x3)); - data[i + 1] = (Byte)(dest >> 16); - data[i + 2] = (Byte)(dest >> 8); - data[i + 3] &= 0x3; - data[i + 3] |= dest; - } - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.h deleted file mode 100644 index 05e2a377..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchPPC.h +++ /dev/null @@ -1,10 +0,0 @@ -/* BranchPPC.h */ - -#ifndef __BRANCH_PPC_H -#define __BRANCH_PPC_H - -#include "BranchTypes.h" - -UInt32 PPC_B_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.c deleted file mode 100644 index 79da2ea7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.c +++ /dev/null @@ -1,36 +0,0 @@ -/* BranchSPARC.c */ - -#include "BranchSPARC.h" - -UInt32 SPARC_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding) -{ - UInt32 i; - for (i = 0; i + 4 <= size; i += 4) - { - if (data[i] == 0x40 && (data[i + 1] & 0xC0) == 0x00 || - data[i] == 0x7F && (data[i + 1] & 0xC0) == 0xC0) - { - UInt32 src = - ((UInt32)data[i + 0] << 24) | - ((UInt32)data[i + 1] << 16) | - ((UInt32)data[i + 2] << 8) | - ((UInt32)data[i + 3]); - UInt32 dest; - - src <<= 2; - if (encoding) - dest = nowPos + i + src; - else - dest = src - (nowPos + i); - dest >>= 2; - - dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000; - - data[i + 0] = (Byte)(dest >> 24); - data[i + 1] = (Byte)(dest >> 16); - data[i + 2] = (Byte)(dest >> 8); - data[i + 3] = (Byte)dest; - } - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.h deleted file mode 100644 index f3f83206..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchSPARC.h +++ /dev/null @@ -1,10 +0,0 @@ -/* BranchSPARC.h */ - -#ifndef __BRANCH_SPARC_H -#define __BRANCH_SPARC_H - -#include "BranchTypes.h" - -UInt32 SPARC_Convert(Byte *data, UInt32 size, UInt32 nowPos, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchTypes.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchTypes.h deleted file mode 100644 index 1bed56a9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchTypes.h +++ /dev/null @@ -1,51 +0,0 @@ -/* BranchTypes.h */ - -#ifndef __BRANCHTYPES_H -#define __BRANCHTYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -typedef unsigned char Byte; -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -#ifdef _LZMA_UINT32_IS_ULONG -typedef unsigned long UInt32; -#else -typedef unsigned int UInt32; -#endif -#endif - -#ifndef _7ZIP_UINT64_DEFINED -#define _7ZIP_UINT64_DEFINED -#ifdef _SZ_NO_INT_64 -typedef unsigned long UInt64; -#else -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef unsigned __int64 UInt64; -#else -typedef unsigned long long int UInt64; -#endif -#endif -#endif - -/* #define _LZMA_NO_SYSTEM_SIZE_T */ -/* You can use it, if you don't want */ - -#ifndef _7ZIP_SIZET_DEFINED -#define _7ZIP_SIZET_DEFINED -#ifdef _LZMA_NO_SYSTEM_SIZE_T -typedef UInt32 SizeT; -#else -#include -typedef size_t SizeT; -#endif -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.c deleted file mode 100644 index fd1d334e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.c +++ /dev/null @@ -1,84 +0,0 @@ -/* BranchX86.c */ - -#include "BranchX86.h" - -#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) - -const Byte kMaskToAllowedStatus[8] = {1, 1, 1, 0, 1, 0, 0, 0}; -const Byte kMaskToBitNumber[8] = {0, 1, 2, 2, 3, 3, 3, 3}; - -SizeT x86_Convert(Byte *buffer, SizeT endPos, UInt32 nowPos, UInt32 *prevMaskMix, int encoding) -{ - SizeT bufferPos = 0, prevPosT; - UInt32 prevMask = *prevMaskMix & 0x7; - if (endPos < 5) - return 0; - nowPos += 5; - prevPosT = (SizeT)0 - 1; - - for(;;) - { - Byte *p = buffer + bufferPos; - Byte *limit = buffer + endPos - 4; - for (; p < limit; p++) - if ((*p & 0xFE) == 0xE8) - break; - bufferPos = (SizeT)(p - buffer); - if (p >= limit) - break; - prevPosT = bufferPos - prevPosT; - if (prevPosT > 3) - prevMask = 0; - else - { - prevMask = (prevMask << ((int)prevPosT - 1)) & 0x7; - if (prevMask != 0) - { - Byte b = p[4 - kMaskToBitNumber[prevMask]]; - if (!kMaskToAllowedStatus[prevMask] || Test86MSByte(b)) - { - prevPosT = bufferPos; - prevMask = ((prevMask << 1) & 0x7) | 1; - bufferPos++; - continue; - } - } - } - prevPosT = bufferPos; - - if (Test86MSByte(p[4])) - { - UInt32 src = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]); - UInt32 dest; - for (;;) - { - Byte b; - int index; - if (encoding) - dest = (nowPos + (UInt32)bufferPos) + src; - else - dest = src - (nowPos + (UInt32)bufferPos); - if (prevMask == 0) - break; - index = kMaskToBitNumber[prevMask] * 8; - b = (Byte)(dest >> (24 - index)); - if (!Test86MSByte(b)) - break; - src = dest ^ ((1 << (32 - index)) - 1); - } - p[4] = (Byte)(~(((dest >> 24) & 1) - 1)); - p[3] = (Byte)(dest >> 16); - p[2] = (Byte)(dest >> 8); - p[1] = (Byte)dest; - bufferPos += 5; - } - else - { - prevMask = ((prevMask << 1) & 0x7) | 1; - bufferPos++; - } - } - prevPosT = bufferPos - prevPosT; - *prevMaskMix = ((prevPosT > 3) ? 0 : ((prevMask << ((int)prevPosT - 1)) & 0x7)); - return bufferPos; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.h deleted file mode 100644 index 5dfd02a7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86.h +++ /dev/null @@ -1,12 +0,0 @@ -/* BranchX86.h */ - -#ifndef __BRANCHX86_H -#define __BRANCHX86_H - -#include "BranchTypes.h" - -#define x86_Convert_Init(state) { state = 0; } - -SizeT x86_Convert(Byte *buffer, SizeT endPos, UInt32 nowPos, UInt32 *state, int encoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.c deleted file mode 100644 index 241789a5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.c +++ /dev/null @@ -1,135 +0,0 @@ -// BranchX86_2.c - -#include "BranchX86_2.h" - -#include "../../Alloc.h" - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb UInt16 -#endif - -#define IsJcc(b0, b1) ((b0) == 0x0F && ((b1) & 0xF0) == 0x80) -#define IsJ(b0, b1) ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)) - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*Buffer++) - -#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \ - { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }} - -#define RC_TEST { if (Buffer == BufferLim) return BCJ2_RESULT_DATA_ERROR; } - -#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2 - -#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } - -#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) -#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; -#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; -// #define UpdateBit0(p) Range = bound; *(p) = (CProb)(*(p) + ((kBitModelTotal - *(p)) >> kNumMoveBits)); -// #define UpdateBit1(p) Range -= bound; Code -= bound; *(p) = (CProb)(*(p) - (*(p) >> kNumMoveBits)); - -int x86_2_Decode( - const Byte *buf0, SizeT size0, - const Byte *buf1, SizeT size1, - const Byte *buf2, SizeT size2, - const Byte *buf3, SizeT size3, - Byte *outBuf, SizeT outSize) -{ - CProb p[256 + 2]; - SizeT inPos = 0, outPos = 0; - - const Byte *Buffer, *BufferLim; - UInt32 Range, Code; - Byte prevByte = 0; - - unsigned int i; - for (i = 0; i < sizeof(p) / sizeof(p[0]); i++) - p[i] = kBitModelTotal >> 1; - RC_INIT(buf3, size3); - - if (outSize == 0) - return BCJ2_RESULT_OK; - - for (;;) - { - Byte b; - CProb *prob; - UInt32 bound; - - SizeT limit = size0 - inPos; - if (outSize - outPos < limit) - limit = outSize - outPos; - while (limit != 0) - { - Byte b = buf0[inPos]; - outBuf[outPos++] = b; - if (IsJ(prevByte, b)) - break; - inPos++; - prevByte = b; - limit--; - } - - if (limit == 0 || outPos == outSize) - break; - - b = buf0[inPos++]; - - if (b == 0xE8) - prob = p + prevByte; - else if (b == 0xE9) - prob = p + 256; - else - prob = p + 257; - - IfBit0(prob) - { - UpdateBit0(prob) - prevByte = b; - } - else - { - UInt32 dest; - const Byte *v; - UpdateBit1(prob) - if (b == 0xE8) - { - v = buf1; - if (size1 < 4) - return BCJ2_RESULT_DATA_ERROR; - buf1 += 4; - size1 -= 4; - } - else - { - v = buf2; - if (size2 < 4) - return BCJ2_RESULT_DATA_ERROR; - buf2 += 4; - size2 -= 4; - } - dest = (((UInt32)v[0] << 24) | ((UInt32)v[1] << 16) | - ((UInt32)v[2] << 8) | ((UInt32)v[3])) - ((UInt32)outPos + 4); - outBuf[outPos++] = (Byte)dest; - if (outPos == outSize) - break; - outBuf[outPos++] = (Byte)(dest >> 8); - if (outPos == outSize) - break; - outBuf[outPos++] = (Byte)(dest >> 16); - if (outPos == outSize) - break; - outBuf[outPos++] = prevByte = (Byte)(dest >> 24); - } - } - return (outPos == outSize) ? BCJ2_RESULT_OK : BCJ2_RESULT_DATA_ERROR; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.h deleted file mode 100644 index 4d861fa3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Branch/BranchX86_2.h +++ /dev/null @@ -1,28 +0,0 @@ -// BranchX86_2.h - -#ifndef __BRANCHX86_2_H -#define __BRANCHX86_2_H - -#include "BranchTypes.h" - -#define BCJ2_RESULT_OK 0 -#define BCJ2_RESULT_DATA_ERROR 1 - -/* -Conditions: - outSize <= FullOutputSize, - where FullOutputSize is full size of output stream of x86_2 filter. - -If buf0 overlaps outBuf, there are two required conditions: - 1) (buf0 >= outBuf) - 2) (buf0 + size0 >= outBuf + FullOutputSize). -*/ - -int x86_2_Decode( - const Byte *buf0, SizeT size0, - const Byte *buf1, SizeT size1, - const Byte *buf2, SizeT size2, - const Byte *buf3, SizeT size3, - Byte *outBuf, SizeT outSize); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.c deleted file mode 100644 index f27607e6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Compress/HuffmanEncode.c */ - -#include "HuffmanEncode.h" -#include "../../Sort.h" - -#define kMaxLen 16 -#define NUM_BITS 10 -#define MASK ((1 << NUM_BITS) - 1) - -#define NUM_COUNTERS 64 - -/* use BLOCK_SORT_EXTERNAL_FLAGS if blockSize > 1M */ -#define HUFFMAN_SPEED_OPT - -void Huffman_Generate(const UInt32 *freqs, UInt32 *p, Byte *lens, UInt32 numSymbols, UInt32 maxLen) -{ - UInt32 num = 0; - /* if (maxLen > 10) maxLen = 10; */ - { - UInt32 i; - - #ifdef HUFFMAN_SPEED_OPT - - UInt32 counters[NUM_COUNTERS]; - for (i = 0; i < NUM_COUNTERS; i++) - counters[i] = 0; - for (i = 0; i < numSymbols; i++) - { - UInt32 freq = freqs[i]; - counters[(freq < NUM_COUNTERS - 1) ? freq : NUM_COUNTERS - 1]++; - } - - for (i = 1; i < NUM_COUNTERS; i++) - { - UInt32 temp = counters[i]; - counters[i] = num; - num += temp; - } - - for (i = 0; i < numSymbols; i++) - { - UInt32 freq = freqs[i]; - if (freq == 0) - lens[i] = 0; - else - p[counters[((freq < NUM_COUNTERS - 1) ? freq : NUM_COUNTERS - 1)]++] = i | (freq << NUM_BITS); - } - counters[0] = 0; - HeapSort(p + counters[NUM_COUNTERS - 2], counters[NUM_COUNTERS - 1] - counters[NUM_COUNTERS - 2]); - - #else - - for (i = 0; i < numSymbols; i++) - { - UInt32 freq = freqs[i]; - if (freq == 0) - lens[i] = 0; - else - p[num++] = i | (freq << NUM_BITS); - } - HeapSort(p, num); - - #endif - } - - if (num < 2) - { - int minCode = 0; - int maxCode = 1; - if (num == 1) - { - maxCode = p[0] & MASK; - if (maxCode == 0) - maxCode++; - } - p[minCode] = 0; - p[maxCode] = 1; - lens[minCode] = lens[maxCode] = 1; - return; - } - - { - UInt32 b, e, i; - - i = b = e = 0; - do - { - UInt32 n, m, freq; - n = (i != num && (b == e || (p[i] >> NUM_BITS) <= (p[b] >> NUM_BITS))) ? i++ : b++; - freq = (p[n] & ~MASK); - p[n] = (p[n] & MASK) | (e << NUM_BITS); - m = (i != num && (b == e || (p[i] >> NUM_BITS) <= (p[b] >> NUM_BITS))) ? i++ : b++; - freq += (p[m] & ~MASK); - p[m] = (p[m] & MASK) | (e << NUM_BITS); - p[e] = (p[e] & MASK) | freq; - e++; - } - while (num - e > 1); - - { - UInt32 lenCounters[kMaxLen + 1]; - for (i = 0; i <= kMaxLen; i++) - lenCounters[i] = 0; - - p[--e] &= MASK; - lenCounters[1] = 2; - while (e > 0) - { - UInt32 len = (p[p[--e] >> NUM_BITS] >> NUM_BITS) + 1; - p[e] = (p[e] & MASK) | (len << NUM_BITS); - if (len >= maxLen) - for (len = maxLen - 1; lenCounters[len] == 0; len--); - lenCounters[len]--; - lenCounters[len + 1] += 2; - } - - { - UInt32 len; - i = 0; - for (len = maxLen; len != 0; len--) - { - UInt32 num; - for (num = lenCounters[len]; num != 0; num--) - lens[p[i++] & MASK] = (Byte)len; - } - } - - { - UInt32 nextCodes[kMaxLen + 1]; - { - UInt32 code = 0; - UInt32 len; - for (len = 1; len <= kMaxLen; len++) - nextCodes[len] = code = (code + lenCounters[len - 1]) << 1; - } - /* if (code + lenCounters[kMaxLen] - 1 != (1 << kMaxLen) - 1) throw 1; */ - - { - UInt32 i; - for (i = 0; i < numSymbols; i++) - p[i] = nextCodes[lens[i]]++; - } - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.h deleted file mode 100644 index c8acc283..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Huffman/HuffmanEncode.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Compress/HuffmanEncode.h */ - -#ifndef __COMPRESS_HUFFMANENCODE_H -#define __COMPRESS_HUFFMANENCODE_H - -#include "../../Types.h" - -/* -Conditions: - num <= 1024 = 2 ^ NUM_BITS - Sum(freqs) < 4M = 2 ^ (32 - NUM_BITS) - maxLen <= 16 = kMaxLen - Num_Items(p) >= HUFFMAN_TEMP_SIZE(num) -*/ - -void Huffman_Generate(const UInt32 *freqs, UInt32 *p, Byte *lens, UInt32 num, UInt32 maxLen); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/LzHash.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/LzHash.h deleted file mode 100644 index 87c28365..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/LzHash.h +++ /dev/null @@ -1,53 +0,0 @@ -/* LzHash.h */ - -#ifndef __C_LZHASH_H -#define __C_LZHASH_H - -#define kHash2Size (1 << 10) -#define kHash3Size (1 << 16) -#define kHash4Size (1 << 20) - -#define kFix3HashSize (kHash2Size) -#define kFix4HashSize (kHash2Size + kHash3Size) -#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size) - -#define HASH2_CALC hashValue = cur[0] | ((UInt32)cur[1] << 8); - -#define HASH3_CALC { \ - UInt32 temp = g_CrcTable[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hashValue = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; } - -#define HASH4_CALC { \ - UInt32 temp = g_CrcTable[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hashValue = (temp ^ ((UInt32)cur[2] << 8) ^ (g_CrcTable[cur[3]] << 5)) & p->hashMask; } - -#define HASH5_CALC { \ - UInt32 temp = g_CrcTable[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (g_CrcTable[cur[3]] << 5)); \ - hashValue = (hash4Value ^ (g_CrcTable[cur[4]] << 3)) & p->hashMask; \ - hash4Value &= (kHash4Size - 1); } - -/* #define HASH_ZIP_CALC hashValue = ((cur[0] | ((UInt32)cur[1] << 8)) ^ g_CrcTable[cur[2]]) & 0xFFFF; */ -#define HASH_ZIP_CALC hashValue = ((cur[2] | ((UInt32)cur[0] << 8)) ^ g_CrcTable[cur[1]]) & 0xFFFF; - - -#define MT_HASH2_CALC \ - hash2Value = (g_CrcTable[cur[0]] ^ cur[1]) & (kHash2Size - 1); - -#define MT_HASH3_CALC { \ - UInt32 temp = g_CrcTable[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); } - -#define MT_HASH4_CALC { \ - UInt32 temp = g_CrcTable[cur[0]] ^ cur[1]; \ - hash2Value = temp & (kHash2Size - 1); \ - hash3Value = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); \ - hash4Value = (temp ^ ((UInt32)cur[2] << 8) ^ (g_CrcTable[cur[3]] << 5)) & (kHash4Size - 1); } - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.c deleted file mode 100644 index 0f530fc1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.c +++ /dev/null @@ -1,742 +0,0 @@ -/* MatchFinder.c */ -/* Please call InitCrcTable before */ - -#include - -#include "MatchFinder.h" -#include "LzHash.h" - -#include "../../7zCrc.h" - -#define kEmptyHashValue 0 -#define kMaxValForNormalize ((UInt32)0xFFFFFFFF) -#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */ -#define kNormalizeMask (~(kNormalizeStepMin - 1)) -#define kMaxHistorySize ((UInt32)3 << 30) - -#define kStartMaxLen 3 - -void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc) -{ - if (!p->directInput) - { - alloc->Free(p->bufferBase); - p->bufferBase = 0; - } -} - -/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */ - -int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc) -{ - UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv; - if (p->directInput) - { - p->blockSize = blockSize; - return 1; - } - if (p->bufferBase == 0 || p->blockSize != blockSize) - { - LzInWindow_Free(p, alloc); - p->blockSize = blockSize; - p->bufferBase = (Byte *)alloc->Alloc(blockSize); - } - return (p->bufferBase != 0); -} - -Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } -Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 index) { return p->buffer[index]; } - -UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; } - -void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue) -{ - p->posLimit -= subValue; - p->pos -= subValue; - p->streamPos -= subValue; -} - -void MatchFinder_ReadBlock(CMatchFinder *p) -{ - if (p->streamEndWasReached || p->result != SZ_OK) - return; - for (;;) - { - Byte *dest = p->buffer + (p->streamPos - p->pos); - UInt32 numReadBytes; - UInt32 size = (UInt32)(p->bufferBase + p->blockSize - dest); - if (size == 0) - return; - p->result = p->stream->Read(p->stream, dest, size, &numReadBytes); - if (p->result != SZ_OK) - return; - if (numReadBytes == 0) - { - p->streamEndWasReached = 1; - return; - } - p->streamPos += numReadBytes; - if (p->streamPos - p->pos > p->keepSizeAfter) - return; - } -} - -void MatchFinder_MoveBlock(CMatchFinder *p) -{ - memmove(p->bufferBase, - p->buffer - p->keepSizeBefore, - p->streamPos - p->pos + p->keepSizeBefore); - p->buffer = p->bufferBase + p->keepSizeBefore; -} - -int MatchFinder_NeedMove(CMatchFinder *p) -{ - /* if (p->streamEndWasReached) return 0; */ - return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); -} - -void MatchFinder_ReadIfRequired(CMatchFinder *p) -{ - if (p->streamEndWasReached) - return; - if (p->keepSizeAfter >= p->streamPos - p->pos) - MatchFinder_ReadBlock(p); -} - -void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p) -{ - if (MatchFinder_NeedMove(p)) - MatchFinder_MoveBlock(p); - MatchFinder_ReadBlock(p); -} - -void MatchFinder_SetDefaultSettings(CMatchFinder *p) -{ - p->cutValue = 32; - p->btMode = 1; - p->numHashBytes = 4; - /* p->skipModeBits = 0; */ - p->directInput = 0; - p->bigHash = 0; -} - -void MatchFinder_Construct(CMatchFinder *p) -{ - p->bufferBase = 0; - p->directInput = 0; - p->hash = 0; - MatchFinder_SetDefaultSettings(p); -} - -void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAlloc *alloc) -{ - alloc->Free(p->hash); - p->hash = 0; -} - -void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc) -{ - MatchFinder_FreeThisClassMemory(p, alloc); - LzInWindow_Free(p, alloc); -} - -CLzRef* AllocRefs(UInt32 num, ISzAlloc *alloc) -{ - size_t sizeInBytes = (size_t)num * sizeof(CLzRef); - if (sizeInBytes / sizeof(CLzRef) != num) - return 0; - return (CLzRef *)alloc->Alloc(sizeInBytes); -} - -int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, - UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, - ISzAlloc *alloc) -{ - UInt32 sizeReserv; - if (historySize > kMaxHistorySize) - { - MatchFinder_Free(p, alloc); - return 0; - } - sizeReserv = historySize >> 1; - if (historySize > ((UInt32)2 << 30)) - sizeReserv = historySize >> 2; - sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19); - - p->keepSizeBefore = historySize + keepAddBufferBefore + 1; - p->keepSizeAfter = matchMaxLen + keepAddBufferAfter; - /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */ - if (LzInWindow_Create(p, sizeReserv, alloc)) - { - UInt32 newCyclicBufferSize = (historySize /* >> p->skipModeBits */) + 1; - UInt32 hs; - p->matchMaxLen = matchMaxLen; - { - p->fixedHashSize = 0; - if (p->numHashBytes == 2) - hs = (1 << 16) - 1; - else - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - /* hs >>= p->skipModeBits; */ - hs |= 0xFFFF; /* don't change it! It's required for Deflate */ - if (hs > (1 << 24)) - { - if (p->numHashBytes == 3) - hs = (1 << 24) - 1; - else - hs >>= 1; - } - } - p->hashMask = hs; - hs++; - if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; - if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; - if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size; - hs += p->fixedHashSize; - } - - { - UInt32 prevSize = p->hashSizeSum + p->numSons; - UInt32 newSize; - p->historySize = historySize; - p->hashSizeSum = hs; - p->cyclicBufferSize = newCyclicBufferSize; - p->numSons = (p->btMode ? newCyclicBufferSize * 2 : newCyclicBufferSize); - newSize = p->hashSizeSum + p->numSons; - if (p->hash != 0 && prevSize == newSize) - return 1; - MatchFinder_FreeThisClassMemory(p, alloc); - p->hash = AllocRefs(newSize, alloc); - if (p->hash != 0) - { - p->son = p->hash + p->hashSizeSum; - return 1; - } - } - } - MatchFinder_Free(p, alloc); - return 0; -} - -void MatchFinder_SetLimits(CMatchFinder *p) -{ - UInt32 limit = kMaxValForNormalize - p->pos; - UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos; - if (limit2 < limit) - limit = limit2; - limit2 = p->streamPos - p->pos; - if (limit2 <= p->keepSizeAfter) - { - if (limit2 > 0) - limit2 = 1; - } - else - limit2 -= p->keepSizeAfter; - if (limit2 < limit) - limit = limit2; - { - UInt32 lenLimit = p->streamPos - p->pos; - if (lenLimit > p->matchMaxLen) - lenLimit = p->matchMaxLen; - p->lenLimit = lenLimit; - } - p->posLimit = p->pos + limit; -} - -void MatchFinder_Init(CMatchFinder *p) -{ - UInt32 i; - for(i = 0; i < p->hashSizeSum; i++) - p->hash[i] = kEmptyHashValue; - p->cyclicBufferPos = 0; - p->buffer = p->bufferBase; - p->pos = p->streamPos = p->cyclicBufferSize; - p->result = SZ_OK; - p->streamEndWasReached = 0; - MatchFinder_ReadBlock(p); - MatchFinder_SetLimits(p); -} - -UInt32 MatchFinder_GetSubValue(CMatchFinder *p) -{ - return (p->pos - p->historySize - 1) & kNormalizeMask; -} - -void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems) -{ - UInt32 i; - for (i = 0; i < numItems; i++) - { - UInt32 value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } -} - -void MatchFinder_Normalize(CMatchFinder *p) -{ - UInt32 subValue = MatchFinder_GetSubValue(p); - MatchFinder_Normalize3(subValue, p->hash, p->hashSizeSum + p->numSons); - MatchFinder_ReduceOffsets(p, subValue); -} - -void MatchFinder_CheckLimits(CMatchFinder *p) -{ - if (p->pos == kMaxValForNormalize) - MatchFinder_Normalize(p); - if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos) - MatchFinder_CheckAndMoveAndRead(p); - if (p->cyclicBufferPos == p->cyclicBufferSize) - p->cyclicBufferPos = 0; - MatchFinder_SetLimits(p); -} - -UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, - UInt32 *distances, UInt32 maxLen) -{ - son[_cyclicBufferPos] = curMatch; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - return distances; - { - const Byte *pb = cur - delta; - curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; - if (pb[maxLen] == cur[maxLen] && *pb == *cur) - { - UInt32 len = 0; - while(++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - return distances; - } - } - } - } -} - -UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, - UInt32 *distances, UInt32 maxLen) -{ - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - return distances; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - if (++len != lenLimit && pb[len] == cur[len]) - while(++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return distances; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } -} - -void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue) -{ - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - return; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - while(++len != lenLimit) - if (pb[len] != cur[len]) - break; - { - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } -} - -#define MOVE_POS \ - ++p->cyclicBufferPos; \ - p->buffer++; \ - if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p); - -#define MOVE_POS_RET MOVE_POS return offset; - -void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; } - -#define GET_MATCHES_HEADER2(minLen, ret_op) \ - UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \ - lenLimit = p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ - cur = p->buffer; - -#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0) -#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue) - -#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue - -#define GET_MATCHES_FOOTER(offset, maxLen) \ - offset = (UInt32)(GetMatchesSpec1(lenLimit, curMatch, MF_PARAMS(p), \ - distances + offset, maxLen) - distances); MOVE_POS_RET; - -#define SKIP_FOOTER \ - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS; - -UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(2) - HASH2_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = 0; - GET_MATCHES_FOOTER(offset, 1) -} - -UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = 0; - GET_MATCHES_FOOTER(offset, 2) -} - -UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, delta2, maxLen, offset; - GET_MATCHES_HEADER(3) - - HASH3_CALC; - - delta2 = p->pos - p->hash[hash2Value]; - curMatch = p->hash[kFix3HashSize + hashValue]; - - p->hash[hash2Value] = - p->hash[kFix3HashSize + hashValue] = p->pos; - - - maxLen = 2; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[0] = maxLen; - distances[1] = delta2 - 1; - offset = 2; - if (maxLen == lenLimit) - { - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); - MOVE_POS_RET; - } - } - GET_MATCHES_FOOTER(offset, maxLen) -} - -UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; - GET_MATCHES_HEADER(4) - - HASH4_CALC; - - delta2 = p->pos - p->hash[ hash2Value]; - delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; - curMatch = p->hash[kFix4HashSize + hashValue]; - - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - - maxLen = 1; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - distances[0] = maxLen = 2; - distances[1] = delta2 - 1; - offset = 2; - } - if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) - { - maxLen = 3; - distances[offset + 1] = delta3 - 1; - offset += 2; - delta2 = delta3; - } - if (offset != 0) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[offset - 2] = maxLen; - if (maxLen == lenLimit) - { - SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); - MOVE_POS_RET; - } - } - if (maxLen < 3) - maxLen = 3; - GET_MATCHES_FOOTER(offset, maxLen) -} - -UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; - GET_MATCHES_HEADER(4) - - HASH4_CALC; - - delta2 = p->pos - p->hash[ hash2Value]; - delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; - curMatch = p->hash[kFix4HashSize + hashValue]; - - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - - maxLen = 1; - offset = 0; - if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) - { - distances[0] = maxLen = 2; - distances[1] = delta2 - 1; - offset = 2; - } - if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) - { - maxLen = 3; - distances[offset + 1] = delta3 - 1; - offset += 2; - delta2 = delta3; - } - if (offset != 0) - { - for (; maxLen != lenLimit; maxLen++) - if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) - break; - distances[offset - 2] = maxLen; - if (maxLen == lenLimit) - { - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS_RET; - } - } - if (maxLen < 3) - maxLen = 3; - offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), - distances + offset, maxLen) - (distances)); - MOVE_POS_RET -} - -UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) -{ - UInt32 offset; - GET_MATCHES_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), - distances, 2) - (distances)); - MOVE_POS_RET -} - -void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(2) - HASH2_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value; - SKIP_HEADER(3) - HASH3_CALC; - curMatch = p->hash[kFix3HashSize + hashValue]; - p->hash[hash2Value] = - p->hash[kFix3HashSize + hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value, hash3Value; - SKIP_HEADER(4) - HASH4_CALC; - curMatch = p->hash[kFix4HashSize + hashValue]; - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = p->pos; - p->hash[kFix4HashSize + hashValue] = p->pos; - SKIP_FOOTER - } - while (--num != 0); -} - -void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - UInt32 hash2Value, hash3Value; - SKIP_HEADER(4) - HASH4_CALC; - curMatch = p->hash[kFix4HashSize + hashValue]; - p->hash[ hash2Value] = - p->hash[kFix3HashSize + hash3Value] = - p->hash[kFix4HashSize + hashValue] = p->pos; - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS - } - while (--num != 0); -} - -void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) -{ - do - { - SKIP_HEADER(3) - HASH_ZIP_CALC; - curMatch = p->hash[hashValue]; - p->hash[hashValue] = p->pos; - p->son[p->cyclicBufferPos] = curMatch; - MOVE_POS - } - while (--num != 0); -} - -void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable) -{ - vTable->Init = (Mf_Init_Func)MatchFinder_Init; - vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte; - vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes; - vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos; - if (!p->btMode) - { - vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip; - } - else if (p->numHashBytes == 2) - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip; - } - else if (p->numHashBytes == 3) - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip; - } - else - { - vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches; - vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.h deleted file mode 100644 index 74f52a8f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinder.h +++ /dev/null @@ -1,106 +0,0 @@ -/* MatchFinder.h */ - -#ifndef __MATCHFINDER_H -#define __MATCHFINDER_H - -#include "../../IStream.h" - -typedef UInt32 CLzRef; - -typedef struct _CMatchFinder -{ - Byte *buffer; - UInt32 pos; - UInt32 posLimit; - UInt32 streamPos; - UInt32 lenLimit; - - UInt32 cyclicBufferPos; - UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */ - - UInt32 matchMaxLen; - CLzRef *hash; - CLzRef *son; - UInt32 hashMask; - UInt32 cutValue; - - Byte *bufferBase; - ISeqInStream *stream; - int streamEndWasReached; - - UInt32 blockSize; - UInt32 keepSizeBefore; - UInt32 keepSizeAfter; - - UInt32 numHashBytes; - int directInput; - int btMode; - /* int skipModeBits; */ - int bigHash; - UInt32 historySize; - UInt32 fixedHashSize; - UInt32 hashSizeSum; - UInt32 numSons; - - HRes result; -} CMatchFinder; - -#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer) -#define Inline_MatchFinder_GetIndexByte(p, index) ((p)->buffer[(Int32)(index)]) - -#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos) - -int MatchFinder_NeedMove(CMatchFinder *p); -Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p); -void MatchFinder_MoveBlock(CMatchFinder *p); -void MatchFinder_ReadIfRequired(CMatchFinder *p); - -void MatchFinder_Construct(CMatchFinder *p); - -/* Conditions: - historySize <= 3 GB - keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB -*/ -int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, - UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, - ISzAlloc *alloc); -void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc); -void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems); -void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); - -UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, - UInt32 *distances, UInt32 maxLen); - -/* -Conditions: - Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func. - Mf_GetPointerToCurrentPos_Func's result must be used only before any other function -*/ - -typedef void (*Mf_Init_Func)(void *object); -typedef Byte (*Mf_GetIndexByte_Func)(void *object, Int32 index); -typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object); -typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object); -typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances); -typedef void (*Mf_Skip_Func)(void *object, UInt32); - -typedef struct _IMatchFinder -{ - Mf_Init_Func Init; - Mf_GetIndexByte_Func GetIndexByte; - Mf_GetNumAvailableBytes_Func GetNumAvailableBytes; - Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos; - Mf_GetMatches_Func GetMatches; - Mf_Skip_Func Skip; -} IMatchFinder; - -void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable); - -void MatchFinder_Init(CMatchFinder *p); -UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); -UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances); -void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); -void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.c deleted file mode 100644 index ea65a6e6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.c +++ /dev/null @@ -1,806 +0,0 @@ -/* MatchFinderMt.c */ - -#ifdef _WIN32 -#define USE_ALLOCA -#endif - -#ifdef USE_ALLOCA -#ifdef _WIN32 -#include -#else -#include -#endif -#endif - -#include "../../7zCrc.h" -#include "LzHash.h" - -#include "MatchFinderMt.h" - -void MtSync_Construct(CMtSync *p) -{ - p->wasCreated = False; - p->csWasInitialized = False; - p->csWasEntered = False; - Thread_Construct(&p->thread); - Event_Construct(&p->canStart); - Event_Construct(&p->wasStarted); - Event_Construct(&p->wasStopped); - Semaphore_Construct(&p->freeSemaphore); - Semaphore_Construct(&p->filledSemaphore); -} - -void MtSync_GetNextBlock(CMtSync *p) -{ - if (p->needStart) - { - p->numProcessedBlocks = 1; - p->needStart = False; - p->stopWriting = False; - p->exit = False; - Event_Reset(&p->wasStarted); - Event_Reset(&p->wasStopped); - - Event_Set(&p->canStart); - Event_Wait(&p->wasStarted); - } - else - { - CriticalSection_Leave(&p->cs); - p->csWasEntered = False; - p->numProcessedBlocks++; - Semaphore_Release1(&p->freeSemaphore); - } - Semaphore_Wait(&p->filledSemaphore); - CriticalSection_Enter(&p->cs); - p->csWasEntered = True; -} - -/* MtSync_StopWriting must be called if Writing was started */ - -void MtSync_StopWriting(CMtSync *p) -{ - UInt32 myNumBlocks = p->numProcessedBlocks; - if (!Thread_WasCreated(&p->thread) || p->needStart) - return; - p->stopWriting = True; - if (p->csWasEntered) - { - CriticalSection_Leave(&p->cs); - p->csWasEntered = False; - } - Semaphore_Release1(&p->freeSemaphore); - - Event_Wait(&p->wasStopped); - - while (myNumBlocks++ != p->numProcessedBlocks) - { - Semaphore_Wait(&p->filledSemaphore); - Semaphore_Release1(&p->freeSemaphore); - } - p->needStart = True; -} - -void MtSync_Destruct(CMtSync *p) -{ - if (Thread_WasCreated(&p->thread)) - { - MtSync_StopWriting(p); - p->exit = True; - if (p->needStart) - Event_Set(&p->canStart); - Thread_Wait(&p->thread); - Thread_Close(&p->thread); - } - if (p->csWasInitialized) - { - CriticalSection_Delete(&p->cs); - p->csWasInitialized = False; - } - - Event_Close(&p->canStart); - Event_Close(&p->wasStarted); - Event_Close(&p->wasStopped); - Semaphore_Close(&p->freeSemaphore); - Semaphore_Close(&p->filledSemaphore); - - p->wasCreated = False; -} - -HRes MtSync_Create2(CMtSync *p, unsigned (StdCall *startAddress)(void *), void *obj, UInt32 numBlocks) -{ - if (p->wasCreated) - return SZ_OK; - - RINOK(CriticalSection_Init(&p->cs)); - p->csWasInitialized = True; - - RINOK(AutoResetEvent_CreateNotSignaled(&p->canStart)); - RINOK(AutoResetEvent_CreateNotSignaled(&p->wasStarted)); - RINOK(AutoResetEvent_CreateNotSignaled(&p->wasStopped)); - - RINOK(Semaphore_Create(&p->freeSemaphore, numBlocks, numBlocks)); - RINOK(Semaphore_Create(&p->filledSemaphore, 0, numBlocks)); - - p->needStart = True; - - RINOK(Thread_Create(&p->thread, startAddress, obj)); - p->wasCreated = True; - return SZ_OK; -} - -HRes MtSync_Create(CMtSync *p, unsigned (StdCall *startAddress)(void *), void *obj, UInt32 numBlocks) -{ - HRes res = MtSync_Create2(p, startAddress, obj, numBlocks); - if (res != SZ_OK) - MtSync_Destruct(p); - return res; -} - - -void MtSync_Init(CMtSync *p) { p->needStart = True; } - -#define kMtMaxValForNormalize 0xFFFFFFFF - -#define DEF_GetHeads(name, v) \ -static void GetHeads ## name(const Byte *p, UInt32 pos, \ -UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads) { \ -for (; numHeads != 0; numHeads--) { \ -const UInt32 value = (v); p++; *heads++ = pos - hash[value]; hash[value] = pos++; } } - -DEF_GetHeads(2, (p[0] | ((UInt32)p[1] << 8)) & hashMask) -DEF_GetHeads(3, (g_CrcTable[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8)) & hashMask) -DEF_GetHeads(4, (g_CrcTable[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (g_CrcTable[p[3]] << 5)) & hashMask) -DEF_GetHeads(4b, (g_CrcTable[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ ((UInt32)p[3] << 16)) & hashMask) -DEF_GetHeads(5, (g_CrcTable[p[0]] ^ p[1] ^ ((UInt32)p[2] << 8) ^ (g_CrcTable[p[3]] << 5) ^ (g_CrcTable[p[4]] << 3)) & hashMask) - -void HashThreadFunc(CMatchFinderMt *mt) -{ - CMtSync *p = &mt->hashSync; - for (;;) - { - UInt32 numProcessedBlocks = 0; - Event_Wait(&p->canStart); - Event_Set(&p->wasStarted); - for (;;) - { - if (p->exit) - return; - if (p->stopWriting) - { - p->numProcessedBlocks = numProcessedBlocks; - Event_Set(&p->wasStopped); - break; - } - - { - CMatchFinder *mf = mt->MatchFinder; - if (MatchFinder_NeedMove(mf)) - { - CriticalSection_Enter(&mt->btSync.cs); - CriticalSection_Enter(&mt->hashSync.cs); - { - const Byte *beforePtr = MatchFinder_GetPointerToCurrentPos(mf); - const Byte *afterPtr; - MatchFinder_MoveBlock(mf); - afterPtr = MatchFinder_GetPointerToCurrentPos(mf); - mt->pointerToCurPos -= beforePtr - afterPtr; - mt->buffer -= beforePtr - afterPtr; - } - CriticalSection_Leave(&mt->btSync.cs); - CriticalSection_Leave(&mt->hashSync.cs); - continue; - } - - Semaphore_Wait(&p->freeSemaphore); - - MatchFinder_ReadIfRequired(mf); - if (mf->pos > (kMtMaxValForNormalize - kMtHashBlockSize)) - { - UInt32 subValue = (mf->pos - mf->historySize - 1); - MatchFinder_ReduceOffsets(mf, subValue); - MatchFinder_Normalize3(subValue, mf->hash + mf->fixedHashSize, mf->hashMask + 1); - } - { - UInt32 *heads = mt->hashBuf + ((numProcessedBlocks++) & kMtHashNumBlocksMask) * kMtHashBlockSize; - UInt32 num = mf->streamPos - mf->pos; - heads[0] = 2; - heads[1] = num; - if (num >= mf->numHashBytes) - { - num = num - mf->numHashBytes + 1; - if (num > kMtHashBlockSize - 2) - num = kMtHashBlockSize - 2; - mt->GetHeadsFunc(mf->buffer, mf->pos, mf->hash + mf->fixedHashSize, mf->hashMask, heads + 2, num); - heads[0] += num; - } - mf->pos += num; - mf->buffer += num; - } - } - - Semaphore_Release1(&p->filledSemaphore); - } - } -} - -void MatchFinderMt_GetNextBlock_Hash(CMatchFinderMt *p) -{ - MtSync_GetNextBlock(&p->hashSync); - p->hashBufPosLimit = p->hashBufPos = ((p->hashSync.numProcessedBlocks - 1) & kMtHashNumBlocksMask) * kMtHashBlockSize; - p->hashBufPosLimit += p->hashBuf[p->hashBufPos++]; - p->hashNumAvail = p->hashBuf[p->hashBufPos++]; -} - -#define kEmptyHashValue 0 - -/* #define MFMT_GM_INLINE */ - -#ifdef MFMT_GM_INLINE - -#if _MSC_VER >= 1300 -#define NO_INLINE __declspec(noinline) __fastcall -#else -#ifdef _MSC_VER -#define NO_INLINE __fastcall -#endif -#endif - -Int32 NO_INLINE GetMatchesSpecN(UInt32 lenLimit, UInt32 pos, const Byte *cur, CLzRef *son, - UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue, - UInt32 *_distances, UInt32 _maxLen, const UInt32 *hash, Int32 limit, UInt32 size, UInt32 *posRes) -{ - do - { - UInt32 *distances = _distances + 1; - UInt32 curMatch = pos - *hash++; - - CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; - CLzRef *ptr1 = son + (_cyclicBufferPos << 1); - UInt32 len0 = 0, len1 = 0; - UInt32 cutValue = _cutValue; - UInt32 maxLen = _maxLen; - for (;;) - { - UInt32 delta = pos - curMatch; - if (cutValue-- == 0 || delta >= _cyclicBufferSize) - { - *ptr0 = *ptr1 = kEmptyHashValue; - break; - } - { - CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); - const Byte *pb = cur - delta; - UInt32 len = (len0 < len1 ? len0 : len1); - if (pb[len] == cur[len]) - { - if (++len != lenLimit && pb[len] == cur[len]) - while(++len != lenLimit) - if (pb[len] != cur[len]) - break; - if (maxLen < len) - { - *distances++ = maxLen = len; - *distances++ = delta - 1; - if (len == lenLimit) - { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - break; - } - } - } - if (pb[len] < cur[len]) - { - *ptr1 = curMatch; - ptr1 = pair + 1; - curMatch = *ptr1; - len1 = len; - } - else - { - *ptr0 = curMatch; - ptr0 = pair; - curMatch = *ptr0; - len0 = len; - } - } - } - pos++; - _cyclicBufferPos++; - cur++; - { - UInt32 num = (UInt32)(distances - _distances); - *_distances = num - 1; - _distances += num; - limit -= num; - } - } - while (limit > 0 && --size != 0); - *posRes = pos; - return limit; -} - -#endif - -void BtGetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - UInt32 numProcessed = 0; - UInt32 curPos = 2; - UInt32 limit = kMtBtBlockSize - (p->matchMaxLen * 2); - distances[1] = p->hashNumAvail; - while (curPos < limit) - { - if (p->hashBufPos == p->hashBufPosLimit) - { - MatchFinderMt_GetNextBlock_Hash(p); - distances[1] = numProcessed + p->hashNumAvail; - if (p->hashNumAvail >= p->numHashBytes) - continue; - for (; p->hashNumAvail != 0; p->hashNumAvail--) - distances[curPos++] = 0; - break; - } - { - UInt32 size = p->hashBufPosLimit - p->hashBufPos; - UInt32 lenLimit = p->matchMaxLen; - UInt32 pos = p->pos; - UInt32 cyclicBufferPos = p->cyclicBufferPos; - if (lenLimit >= p->hashNumAvail) - lenLimit = p->hashNumAvail; - { - UInt32 size2 = p->hashNumAvail - lenLimit + 1; - if (size2 < size) - size = size2; - size2 = p->cyclicBufferSize - cyclicBufferPos; - if (size2 < size) - size = size2; - } - #ifndef MFMT_GM_INLINE - while (curPos < limit && size-- != 0) - { - UInt32 *startDistances = distances + curPos; - UInt32 num = (UInt32)(GetMatchesSpec1(lenLimit, pos - p->hashBuf[p->hashBufPos++], - pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue, - startDistances + 1, p->numHashBytes - 1) - startDistances); - *startDistances = num - 1; - curPos += num; - cyclicBufferPos++; - pos++; - p->buffer++; - } - #else - { - UInt32 posRes; - curPos = limit - GetMatchesSpecN(lenLimit, pos, p->buffer, p->son, cyclicBufferPos, p->cyclicBufferSize, p->cutValue, - distances + curPos, p->numHashBytes - 1, p->hashBuf + p->hashBufPos, (Int32)(limit - curPos) , size, &posRes); - p->hashBufPos += posRes - pos; - cyclicBufferPos += posRes - pos; - p->buffer += posRes - pos; - pos = posRes; - } - #endif - - numProcessed += pos - p->pos; - p->hashNumAvail -= pos - p->pos; - p->pos = pos; - if (cyclicBufferPos == p->cyclicBufferSize) - cyclicBufferPos = 0; - p->cyclicBufferPos = cyclicBufferPos; - } - } - distances[0] = curPos; -} - -void BtFillBlock(CMatchFinderMt *p, UInt32 globalBlockIndex) -{ - CMtSync *sync = &p->hashSync; - if (!sync->needStart) - { - CriticalSection_Enter(&sync->cs); - sync->csWasEntered = True; - } - - BtGetMatches(p, p->btBuf + (globalBlockIndex & kMtBtNumBlocksMask) * kMtBtBlockSize); - - if (p->pos > kMtMaxValForNormalize - kMtBtBlockSize) - { - UInt32 subValue = p->pos - p->cyclicBufferSize; - MatchFinder_Normalize3(subValue, p->son, p->cyclicBufferSize * 2); - p->pos -= subValue; - } - - if (!sync->needStart) - { - CriticalSection_Leave(&sync->cs); - sync->csWasEntered = False; - } -} - -void BtThreadFunc(CMatchFinderMt *mt) -{ - CMtSync *p = &mt->btSync; - for (;;) - { - UInt32 blockIndex = 0; - Event_Wait(&p->canStart); - Event_Set(&p->wasStarted); - for (;;) - { - if (p->exit) - return; - if (p->stopWriting) - { - p->numProcessedBlocks = blockIndex; - MtSync_StopWriting(&mt->hashSync); - Event_Set(&p->wasStopped); - break; - } - Semaphore_Wait(&p->freeSemaphore); - BtFillBlock(mt, blockIndex++); - Semaphore_Release1(&p->filledSemaphore); - } - } -} - -void MatchFinderMt_Construct(CMatchFinderMt *p) -{ - p->hashBuf = 0; - MtSync_Construct(&p->hashSync); - MtSync_Construct(&p->btSync); -} - -void MatchFinderMt_FreeMem(CMatchFinderMt *p, ISzAlloc *alloc) -{ - alloc->Free(p->hashBuf); - p->hashBuf = 0; -} - -void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAlloc *alloc) -{ - MtSync_Destruct(&p->hashSync); - MtSync_Destruct(&p->btSync); - MatchFinderMt_FreeMem(p, alloc); -} - -#define kHashBufferSize (kMtHashBlockSize * kMtHashNumBlocks) -#define kBtBufferSize (kMtBtBlockSize * kMtBtNumBlocks) - -static unsigned StdCall HashThreadFunc2(void *p) { HashThreadFunc((CMatchFinderMt *)p); return 0; } -static unsigned StdCall BtThreadFunc2(void *p) -{ - #ifdef USE_ALLOCA - alloca(0x180); - #endif - BtThreadFunc((CMatchFinderMt *)p); - return 0; -} - -HRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc) -{ - CMatchFinder *mf = p->MatchFinder; - p->historySize = historySize; - if (kMtBtBlockSize <= matchMaxLen * 4) - return E_INVALIDARG; - if (p->hashBuf == 0) - { - p->hashBuf = (UInt32 *)alloc->Alloc((kHashBufferSize + kBtBufferSize) * sizeof(UInt32)); - if (p->hashBuf == 0) - return SZE_OUTOFMEMORY; - p->btBuf = p->hashBuf + kHashBufferSize; - } - keepAddBufferBefore += (kHashBufferSize + kBtBufferSize); - keepAddBufferAfter += kMtHashBlockSize; - if (!MatchFinder_Create(mf, historySize, keepAddBufferBefore, matchMaxLen, keepAddBufferAfter, alloc)) - return SZE_OUTOFMEMORY; - - RINOK(MtSync_Create(&p->hashSync, HashThreadFunc2, p, kMtHashNumBlocks)); - RINOK(MtSync_Create(&p->btSync, BtThreadFunc2, p, kMtBtNumBlocks)); - return SZ_OK; -} - -/* Call it after ReleaseStream / SetStream */ -void MatchFinderMt_Init(CMatchFinderMt *p) -{ - CMatchFinder *mf = p->MatchFinder; - p->btBufPos = p->btBufPosLimit = 0; - p->hashBufPos = p->hashBufPosLimit = 0; - MatchFinder_Init(mf); - p->pointerToCurPos = MatchFinder_GetPointerToCurrentPos(mf); - p->btNumAvailBytes = 0; - p->lzPos = p->historySize + 1; - - p->hash = mf->hash; - p->fixedHashSize = mf->fixedHashSize; - - p->son = mf->son; - p->matchMaxLen = mf->matchMaxLen; - p->numHashBytes = mf->numHashBytes; - p->pos = mf->pos; - p->buffer = mf->buffer; - p->cyclicBufferPos = mf->cyclicBufferPos; - p->cyclicBufferSize = mf->cyclicBufferSize; - p->cutValue = mf->cutValue; -} - -/* ReleaseStream is required to finish multithreading */ -void MatchFinderMt_ReleaseStream(CMatchFinderMt *p) -{ - MtSync_StopWriting(&p->btSync); - /* p->MatchFinder->ReleaseStream(); */ -} - -void MatchFinderMt_Normalize(CMatchFinderMt *p) -{ - MatchFinder_Normalize3(p->lzPos - p->historySize - 1, p->hash, p->fixedHashSize); - p->lzPos = p->historySize + 1; -} - -void MatchFinderMt_GetNextBlock_Bt(CMatchFinderMt *p) -{ - UInt32 blockIndex; - MtSync_GetNextBlock(&p->btSync); - blockIndex = ((p->btSync.numProcessedBlocks - 1) & kMtBtNumBlocksMask); - p->btBufPosLimit = p->btBufPos = blockIndex * kMtBtBlockSize; - p->btBufPosLimit += p->btBuf[p->btBufPos++]; - p->btNumAvailBytes = p->btBuf[p->btBufPos++]; - if (p->lzPos >= kMtMaxValForNormalize - kMtBtBlockSize) - MatchFinderMt_Normalize(p); -} - -const Byte * MatchFinderMt_GetPointerToCurrentPos(CMatchFinderMt *p) -{ - return p->pointerToCurPos; -} - -#define GET_NEXT_BLOCK_IF_REQUIRED if (p->btBufPos == p->btBufPosLimit) MatchFinderMt_GetNextBlock_Bt(p); - -UInt32 MatchFinderMt_GetNumAvailableBytes(CMatchFinderMt *p) -{ - GET_NEXT_BLOCK_IF_REQUIRED; - return p->btNumAvailBytes; -} - -Byte MatchFinderMt_GetIndexByte(CMatchFinderMt *p, Int32 index) -{ - return p->pointerToCurPos[index]; -} - -UInt32 * MixMatches2(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, curMatch2; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH2_CALC - - curMatch2 = hash[hash2Value]; - hash[hash2Value] = lzPos; - - if (curMatch2 >= matchMinPos) - if (cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - *distances++ = 2; - *distances++ = lzPos - curMatch2 - 1; - } - return distances; -} - -UInt32 * MixMatches3(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, curMatch2, curMatch3; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH3_CALC - - curMatch2 = hash[ hash2Value]; - curMatch3 = hash[kFix3HashSize + hash3Value]; - - hash[ hash2Value] = - hash[kFix3HashSize + hash3Value] = - lzPos; - - if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch2 - 1; - if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2]) - { - distances[0] = 3; - return distances + 2; - } - distances[0] = 2; - distances += 2; - } - if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0]) - { - *distances++ = 3; - *distances++ = lzPos - curMatch3 - 1; - } - return distances; -} - -/* -UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *distances) -{ - UInt32 hash2Value, hash3Value, hash4Value, curMatch2, curMatch3, curMatch4; - UInt32 *hash = p->hash; - const Byte *cur = p->pointerToCurPos; - UInt32 lzPos = p->lzPos; - MT_HASH4_CALC - - curMatch2 = hash[ hash2Value]; - curMatch3 = hash[kFix3HashSize + hash3Value]; - curMatch4 = hash[kFix4HashSize + hash4Value]; - - hash[ hash2Value] = - hash[kFix3HashSize + hash3Value] = - hash[kFix4HashSize + hash4Value] = - lzPos; - - if (curMatch2 >= matchMinPos && cur[(ptrdiff_t)curMatch2 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch2 - 1; - if (cur[(ptrdiff_t)curMatch2 - lzPos + 2] == cur[2]) - { - distances[0] = (cur[(ptrdiff_t)curMatch2 - lzPos + 3] == cur[3]) ? 4 : 3; - return distances + 2; - } - distances[0] = 2; - distances += 2; - } - if (curMatch3 >= matchMinPos && cur[(ptrdiff_t)curMatch3 - lzPos] == cur[0]) - { - distances[1] = lzPos - curMatch3 - 1; - if (cur[(ptrdiff_t)curMatch3 - lzPos + 3] == cur[3]) - { - distances[0] = 4; - return distances + 2; - } - distances[0] = 3; - distances += 2; - } - - if (curMatch4 >= matchMinPos) - if ( - cur[(ptrdiff_t)curMatch4 - lzPos] == cur[0] && - cur[(ptrdiff_t)curMatch4 - lzPos + 3] == cur[3] - ) - { - *distances++ = 4; - *distances++ = lzPos - curMatch4 - 1; - } - return distances; -} -*/ - -#define INCREASE_LZ_POS p->lzPos++; p->pointerToCurPos++; - -UInt32 MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - const UInt32 *btBuf = p->btBuf + p->btBufPos; - UInt32 len = *btBuf++; - p->btBufPos += 1 + len; - p->btNumAvailBytes--; - { - UInt32 i; - for (i = 0; i < len; i += 2) - { - *distances++ = *btBuf++; - *distances++ = *btBuf++; - } - } - INCREASE_LZ_POS - return len; -} - -UInt32 MatchFinderMt_GetMatches(CMatchFinderMt *p, UInt32 *distances) -{ - const UInt32 *btBuf = p->btBuf + p->btBufPos; - UInt32 len = *btBuf++; - p->btBufPos += 1 + len; - - if (len == 0) - { - if (p->btNumAvailBytes-- >= 4) - len = (UInt32)(p->MixMatchesFunc(p, p->lzPos - p->historySize, distances) - (distances)); - } - else - { - /* Condition: there are matches in btBuf with length < p->numHashBytes */ - UInt32 *distances2; - p->btNumAvailBytes--; - distances2 = p->MixMatchesFunc(p, p->lzPos - btBuf[1], distances); - do - { - *distances2++ = *btBuf++; - *distances2++ = *btBuf++; - } - while ((len -= 2) != 0); - len = (UInt32)(distances2 - (distances)); - } - INCREASE_LZ_POS - return len; -} - -#define SKIP_HEADER2 do { GET_NEXT_BLOCK_IF_REQUIRED -#define SKIP_HEADER(n) SKIP_HEADER2 if (p->btNumAvailBytes-- >= (n)) { const Byte *cur = p->pointerToCurPos; UInt32 *hash = p->hash; -#define SKIP_FOOTER } INCREASE_LZ_POS p->btBufPos += p->btBuf[p->btBufPos] + 1; } while(--num != 0); - -void MatchFinderMt0_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER2 { p->btNumAvailBytes--; - SKIP_FOOTER -} - -void MatchFinderMt2_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(2) - UInt32 hash2Value; - MT_HASH2_CALC - hash[hash2Value] = p->lzPos; - SKIP_FOOTER -} - -void MatchFinderMt3_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(3) - UInt32 hash2Value, hash3Value; - MT_HASH3_CALC - hash[kFix3HashSize + hash3Value] = - hash[ hash2Value] = - p->lzPos; - SKIP_FOOTER -} - -/* -void MatchFinderMt4_Skip(CMatchFinderMt *p, UInt32 num) -{ - SKIP_HEADER(4) - UInt32 hash2Value, hash3Value, hash4Value; - MT_HASH4_CALC - hash[kFix4HashSize + hash4Value] = - hash[kFix3HashSize + hash3Value] = - hash[ hash2Value] = - p->lzPos; - SKIP_FOOTER -} -*/ - -void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable) -{ - vTable->Init = (Mf_Init_Func)MatchFinderMt_Init; - vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinderMt_GetIndexByte; - vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinderMt_GetNumAvailableBytes; - vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinderMt_GetPointerToCurrentPos; - vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt_GetMatches; - switch(p->MatchFinder->numHashBytes) - { - case 2: - p->GetHeadsFunc = GetHeads2; - p->MixMatchesFunc = (Mf_Mix_Matches)0; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt0_Skip; - vTable->GetMatches = (Mf_GetMatches_Func)MatchFinderMt2_GetMatches; - break; - case 3: - p->GetHeadsFunc = GetHeads3; - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches2; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt2_Skip; - break; - default: - /* case 4: */ - p->GetHeadsFunc = p->MatchFinder->bigHash ? GetHeads4b : GetHeads4; - /* p->GetHeadsFunc = GetHeads4; */ - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches3; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt3_Skip; - break; - /* - default: - p->GetHeadsFunc = GetHeads5; - p->MixMatchesFunc = (Mf_Mix_Matches)MixMatches4; - vTable->Skip = (Mf_Skip_Func)MatchFinderMt4_Skip; - break; - */ - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.h deleted file mode 100644 index e718a09e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lz/MatchFinderMt.h +++ /dev/null @@ -1,95 +0,0 @@ -/* MatchFinderMt.h */ - -#ifndef __MATCHFINDERMT_H -#define __MATCHFINDERMT_H - -#include "../../Threads.h" -#include "MatchFinder.h" - -#define kMtHashBlockSize (1 << 13) -#define kMtHashNumBlocks (1 << 3) -#define kMtHashNumBlocksMask (kMtHashNumBlocks - 1) - -#define kMtBtBlockSize (1 << 14) -#define kMtBtNumBlocks (1 << 6) -#define kMtBtNumBlocksMask (kMtBtNumBlocks - 1) - -typedef struct _CMtSync -{ - Bool wasCreated; - Bool needStart; - Bool exit; - Bool stopWriting; - - CThread thread; - CAutoResetEvent canStart; - CAutoResetEvent wasStarted; - CAutoResetEvent wasStopped; - CSemaphore freeSemaphore; - CSemaphore filledSemaphore; - Bool csWasInitialized; - Bool csWasEntered; - CCriticalSection cs; - UInt32 numProcessedBlocks; -} CMtSync; - -typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distances); - -/* kMtCacheLineDummy must be >= size_of_CPU_cache_line */ -#define kMtCacheLineDummy 128 - -typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos, - UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads); - -typedef struct _CMatchFinderMt -{ - /* LZ */ - const Byte *pointerToCurPos; - UInt32 *btBuf; - UInt32 btBufPos; - UInt32 btBufPosLimit; - UInt32 lzPos; - UInt32 btNumAvailBytes; - - UInt32 *hash; - UInt32 fixedHashSize; - UInt32 historySize; - - Mf_Mix_Matches MixMatchesFunc; - - /* LZ + BT */ - CMtSync btSync; - Byte btDummy[kMtCacheLineDummy]; - - /* BT */ - UInt32 *hashBuf; - UInt32 hashBufPos; - UInt32 hashBufPosLimit; - UInt32 hashNumAvail; - - CLzRef *son; - UInt32 matchMaxLen; - UInt32 numHashBytes; - UInt32 pos; - Byte *buffer; - UInt32 cyclicBufferPos; - UInt32 cyclicBufferSize; /* it must be historySize + 1 */ - UInt32 cutValue; - - /* BT + Hash */ - CMtSync hashSync; - /* Byte hashDummy[kMtCacheLineDummy]; */ - - /* Hash */ - Mf_GetHeads GetHeadsFunc; - CMatchFinder *MatchFinder; -} CMatchFinderMt; - -void MatchFinderMt_Construct(CMatchFinderMt *p); -void MatchFinderMt_Destruct(CMatchFinderMt *p, ISzAlloc *alloc); -HRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter, ISzAlloc *alloc); -void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder *vTable); -void MatchFinderMt_ReleaseStream(CMatchFinderMt *p); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.c deleted file mode 100644 index cb834537..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.c +++ /dev/null @@ -1,584 +0,0 @@ -/* - LzmaDecode.c - LZMA Decoder (optimized for Speed version) - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this Code, expressly permits you to - statically or dynamically link your Code (or bind by name) to the - interfaces of this file without subjecting your linked Code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#include "LzmaDecode.h" - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*Buffer++) - -#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \ - { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }} - -#ifdef _LZMA_IN_CB - -#define RC_TEST { if (Buffer == BufferLim) \ - { SizeT size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \ - BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }} - -#define RC_INIT Buffer = BufferLim = 0; RC_INIT2 - -#else - -#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; } - -#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2 - -#endif - -#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } - -#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) -#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; -#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; - -#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \ - { UpdateBit0(p); mi <<= 1; A0; } else \ - { UpdateBit1(p); mi = (mi + mi) + 1; A1; } - -#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;) - -#define RangeDecoderBitTreeDecode(probs, numLevels, res) \ - { int i = numLevels; res = 1; \ - do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \ - res -= (1 << numLevels); } - - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size) -{ - unsigned char prop0; - if (size < LZMA_PROPERTIES_SIZE) - return LZMA_RESULT_DATA_ERROR; - prop0 = propsData[0]; - if (prop0 >= (9 * 5 * 5)) - return LZMA_RESULT_DATA_ERROR; - { - for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5)); - for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9); - propsRes->lc = prop0; - /* - unsigned char remainder = (unsigned char)(prop0 / 9); - propsRes->lc = prop0 % 9; - propsRes->pb = remainder / 5; - propsRes->lp = remainder % 5; - */ - } - - #ifdef _LZMA_OUT_READ - { - int i; - propsRes->DictionarySize = 0; - for (i = 0; i < 4; i++) - propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8); - if (propsRes->DictionarySize == 0) - propsRes->DictionarySize = 1; - } - #endif - return LZMA_RESULT_OK; -} - -#define kLzmaStreamWasFinishedId (-1) - -int LzmaDecode(CLzmaDecoderState *vs, - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback, - #else - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - #endif - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed) -{ - CProb *p = vs->Probs; - SizeT nowPos = 0; - Byte previousByte = 0; - UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1; - UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1; - int lc = vs->Properties.lc; - - #ifdef _LZMA_OUT_READ - - UInt32 Range = vs->Range; - UInt32 Code = vs->Code; - #ifdef _LZMA_IN_CB - const Byte *Buffer = vs->Buffer; - const Byte *BufferLim = vs->BufferLim; - #else - const Byte *Buffer = inStream; - const Byte *BufferLim = inStream + inSize; - #endif - int state = vs->State; - UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; - int len = vs->RemainLen; - UInt32 globalPos = vs->GlobalPos; - UInt32 distanceLimit = vs->DistanceLimit; - - Byte *dictionary = vs->Dictionary; - UInt32 dictionarySize = vs->Properties.DictionarySize; - UInt32 dictionaryPos = vs->DictionaryPos; - - Byte tempDictionary[4]; - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - if (len == kLzmaStreamWasFinishedId) - return LZMA_RESULT_OK; - - if (dictionarySize == 0) - { - dictionary = tempDictionary; - dictionarySize = 1; - tempDictionary[0] = vs->TempDictionary[0]; - } - - if (len == kLzmaNeedInitId) - { - { - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - UInt32 i; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - rep0 = rep1 = rep2 = rep3 = 1; - state = 0; - globalPos = 0; - distanceLimit = 0; - dictionaryPos = 0; - dictionary[dictionarySize - 1] = 0; - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif - } - len = 0; - } - while(len != 0 && nowPos < outSize) - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - } - if (dictionaryPos == 0) - previousByte = dictionary[dictionarySize - 1]; - else - previousByte = dictionary[dictionaryPos - 1]; - - #else /* if !_LZMA_OUT_READ */ - - int state = 0; - UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1; - int len = 0; - const Byte *Buffer; - const Byte *BufferLim; - UInt32 Range; - UInt32 Code; - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - - { - UInt32 i; - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - } - - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif - - #endif /* _LZMA_OUT_READ */ - - while(nowPos < outSize) - { - CProb *prob; - UInt32 bound; - int posState = (int)( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & posStateMask); - - prob = p + IsMatch + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - int symbol = 1; - UpdateBit0(prob) - prob = p + Literal + (LZMA_LIT_SIZE * - ((( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & literalPosMask) << lc) + (previousByte >> (8 - lc)))); - - if (state >= kNumLitStates) - { - int matchByte; - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - matchByte = dictionary[pos]; - #else - matchByte = outStream[nowPos - rep0]; - #endif - do - { - int bit; - CProb *probLit; - matchByte <<= 1; - bit = (matchByte & 0x100); - probLit = prob + 0x100 + bit + symbol; - RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break) - } - while (symbol < 0x100); - } - while (symbol < 0x100) - { - CProb *probLit = prob + symbol; - RC_GET_BIT(probLit, symbol) - } - previousByte = (Byte)symbol; - - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #endif - if (state < 4) state = 0; - else if (state < 10) state -= 3; - else state -= 6; - } - else - { - UpdateBit1(prob); - prob = p + IsRep + state; - IfBit0(prob) - { - UpdateBit0(prob); - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - state = state < kNumLitStates ? 0 : 3; - prob = p + LenCoder; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG0 + state; - IfBit0(prob) - { - UpdateBit0(prob); - prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - #ifdef _LZMA_OUT_READ - UInt32 pos; - #endif - UpdateBit0(prob); - - #ifdef _LZMA_OUT_READ - if (distanceLimit == 0) - #else - if (nowPos == 0) - #endif - return LZMA_RESULT_DATA_ERROR; - - state = state < kNumLitStates ? 9 : 11; - #ifdef _LZMA_OUT_READ - pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - #endif - - continue; - } - else - { - UpdateBit1(prob); - } - } - else - { - UInt32 distance; - UpdateBit1(prob); - prob = p + IsRepG1 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep1; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG2 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep2; - } - else - { - UpdateBit1(prob); - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - state = state < kNumLitStates ? 8 : 11; - prob = p + RepLenCoder; - } - { - int numBits, offset; - CProb *probLen = prob + LenChoice; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - numBits = kLenNumLowBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenChoice2; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - numBits = kLenNumMidBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - numBits = kLenNumHighBits; - } - } - RangeDecoderBitTreeDecode(probLen, numBits, len); - len += offset; - } - - if (state < 4) - { - int posSlot; - state += kNumLitStates; - prob = p + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits); - RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - rep0 = (2 | ((UInt32)posSlot & 1)); - if (posSlot < kEndPosModelIndex) - { - rep0 <<= numDirectBits; - prob = p + SpecPos + rep0 - posSlot - 1; - } - else - { - numDirectBits -= kNumAlignBits; - do - { - RC_NORMALIZE - Range >>= 1; - rep0 <<= 1; - if (Code >= Range) - { - Code -= Range; - rep0 |= 1; - } - } - while (--numDirectBits != 0); - prob = p + Align; - rep0 <<= kNumAlignBits; - numDirectBits = kNumAlignBits; - } - { - int i = 1; - int mi = 1; - do - { - CProb *prob3 = prob + mi; - RC_GET_BIT2(prob3, mi, ; , rep0 |= i); - i <<= 1; - } - while(--numDirectBits != 0); - } - } - else - rep0 = posSlot; - if (++rep0 == (UInt32)(0)) - { - /* it's for stream version */ - len = kLzmaStreamWasFinishedId; - break; - } - } - - len += kMatchMinLen; - #ifdef _LZMA_OUT_READ - if (rep0 > distanceLimit) - #else - if (rep0 > nowPos) - #endif - return LZMA_RESULT_DATA_ERROR; - - #ifdef _LZMA_OUT_READ - if (dictionarySize - distanceLimit > (UInt32)len) - distanceLimit += len; - else - distanceLimit = dictionarySize; - #endif - - do - { - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - len--; - outStream[nowPos++] = previousByte; - } - while(len != 0 && nowPos < outSize); - } - } - RC_NORMALIZE; - - #ifdef _LZMA_OUT_READ - vs->Range = Range; - vs->Code = Code; - vs->DictionaryPos = dictionaryPos; - vs->GlobalPos = globalPos + (UInt32)nowPos; - vs->DistanceLimit = distanceLimit; - vs->Reps[0] = rep0; - vs->Reps[1] = rep1; - vs->Reps[2] = rep2; - vs->Reps[3] = rep3; - vs->State = state; - vs->RemainLen = len; - vs->TempDictionary[0] = tempDictionary[0]; - #endif - - #ifdef _LZMA_IN_CB - vs->Buffer = Buffer; - vs->BufferLim = BufferLim; - #else - *inSizeProcessed = (SizeT)(Buffer - inStream); - #endif - *outSizeProcessed = nowPos; - return LZMA_RESULT_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.h deleted file mode 100644 index 2870eeb9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecode.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - LzmaDecode.h - LZMA Decoder interface - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this code, expressly permits you to - statically or dynamically link your code (or bind by name) to the - interfaces of this file without subjecting your linked code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#ifndef __LZMADECODE_H -#define __LZMADECODE_H - -#include "LzmaTypes.h" - -/* #define _LZMA_IN_CB */ -/* Use callback for input data */ - -/* #define _LZMA_OUT_READ */ -/* Use read function for output data */ - -/* #define _LZMA_PROB32 */ -/* It can increase speed on some 32-bit CPUs, - but memory usage will be doubled in that case */ - -/* #define _LZMA_LOC_OPT */ -/* Enable local speed optimizations inside code */ - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb UInt16 -#endif - -#define LZMA_RESULT_OK 0 -#define LZMA_RESULT_DATA_ERROR 1 - -#ifdef _LZMA_IN_CB -typedef struct _ILzmaInCallback -{ - int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize); -} ILzmaInCallback; -#endif - -#define LZMA_BASE_SIZE 1846 -#define LZMA_LIT_SIZE 768 - -#define LZMA_PROPERTIES_SIZE 5 - -typedef struct _CLzmaProperties -{ - int lc; - int lp; - int pb; - #ifdef _LZMA_OUT_READ - UInt32 DictionarySize; - #endif -}CLzmaProperties; - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size); - -#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp))) - -#define kLzmaNeedInitId (-2) - -typedef struct _CLzmaDecoderState -{ - CLzmaProperties Properties; - CProb *Probs; - - #ifdef _LZMA_IN_CB - const unsigned char *Buffer; - const unsigned char *BufferLim; - #endif - - #ifdef _LZMA_OUT_READ - unsigned char *Dictionary; - UInt32 Range; - UInt32 Code; - UInt32 DictionaryPos; - UInt32 GlobalPos; - UInt32 DistanceLimit; - UInt32 Reps[4]; - int State; - int RemainLen; - unsigned char TempDictionary[4]; - #endif -} CLzmaDecoderState; - -#ifdef _LZMA_OUT_READ -#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; } -#endif - -int LzmaDecode(CLzmaDecoderState *vs, - #ifdef _LZMA_IN_CB - ILzmaInCallback *inCallback, - #else - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - #endif - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecodeSize.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecodeSize.c deleted file mode 100644 index a3a5eb9d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaDecodeSize.c +++ /dev/null @@ -1,712 +0,0 @@ -/* - LzmaDecodeSize.c - LZMA Decoder (optimized for Size version) - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this code, expressly permits you to - statically or dynamically link your code (or bind by name) to the - interfaces of this file without subjecting your linked code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#include "LzmaDecode.h" - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -typedef struct _CRangeDecoder -{ - const Byte *Buffer; - const Byte *BufferLim; - UInt32 Range; - UInt32 Code; - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback; - int Result; - #endif - int ExtraBytes; -} CRangeDecoder; - -Byte RangeDecoderReadByte(CRangeDecoder *rd) -{ - if (rd->Buffer == rd->BufferLim) - { - #ifdef _LZMA_IN_CB - SizeT size; - rd->Result = rd->InCallback->Read(rd->InCallback, &rd->Buffer, &size); - rd->BufferLim = rd->Buffer + size; - if (size == 0) - #endif - { - rd->ExtraBytes = 1; - return 0xFF; - } - } - return (*rd->Buffer++); -} - -/* #define ReadByte (*rd->Buffer++) */ -#define ReadByte (RangeDecoderReadByte(rd)) - -void RangeDecoderInit(CRangeDecoder *rd - #ifndef _LZMA_IN_CB - , const Byte *stream, SizeT bufferSize - #endif - ) -{ - int i; - #ifdef _LZMA_IN_CB - rd->Buffer = rd->BufferLim = 0; - #else - rd->Buffer = stream; - rd->BufferLim = stream + bufferSize; - #endif - rd->ExtraBytes = 0; - rd->Code = 0; - rd->Range = (0xFFFFFFFF); - for(i = 0; i < 5; i++) - rd->Code = (rd->Code << 8) | ReadByte; -} - -#define RC_INIT_VAR UInt32 range = rd->Range; UInt32 code = rd->Code; -#define RC_FLUSH_VAR rd->Range = range; rd->Code = code; -#define RC_NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | ReadByte; } - -UInt32 RangeDecoderDecodeDirectBits(CRangeDecoder *rd, int numTotalBits) -{ - RC_INIT_VAR - UInt32 result = 0; - int i; - for (i = numTotalBits; i != 0; i--) - { - /* UInt32 t; */ - range >>= 1; - - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - /* - t = (code - range) >> 31; - t &= 1; - code -= range & (t - 1); - result = (result + result) | (1 - t); - */ - RC_NORMALIZE - } - RC_FLUSH_VAR - return result; -} - -int RangeDecoderBitDecode(CProb *prob, CRangeDecoder *rd) -{ - UInt32 bound = (rd->Range >> kNumBitModelTotalBits) * *prob; - if (rd->Code < bound) - { - rd->Range = bound; - *prob += (kBitModelTotal - *prob) >> kNumMoveBits; - if (rd->Range < kTopValue) - { - rd->Code = (rd->Code << 8) | ReadByte; - rd->Range <<= 8; - } - return 0; - } - else - { - rd->Range -= bound; - rd->Code -= bound; - *prob -= (*prob) >> kNumMoveBits; - if (rd->Range < kTopValue) - { - rd->Code = (rd->Code << 8) | ReadByte; - rd->Range <<= 8; - } - return 1; - } -} - -#define RC_GET_BIT2(prob, mi, A0, A1) \ - UInt32 bound = (range >> kNumBitModelTotalBits) * *prob; \ - if (code < bound) \ - { A0; range = bound; *prob += (kBitModelTotal - *prob) >> kNumMoveBits; mi <<= 1; } \ - else \ - { A1; range -= bound; code -= bound; *prob -= (*prob) >> kNumMoveBits; mi = (mi + mi) + 1; } \ - RC_NORMALIZE - -#define RC_GET_BIT(prob, mi) RC_GET_BIT2(prob, mi, ; , ;) - -int RangeDecoderBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd) -{ - int mi = 1; - int i; - #ifdef _LZMA_LOC_OPT - RC_INIT_VAR - #endif - for(i = numLevels; i != 0; i--) - { - #ifdef _LZMA_LOC_OPT - CProb *prob = probs + mi; - RC_GET_BIT(prob, mi) - #else - mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd); - #endif - } - #ifdef _LZMA_LOC_OPT - RC_FLUSH_VAR - #endif - return mi - (1 << numLevels); -} - -int RangeDecoderReverseBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd) -{ - int mi = 1; - int i; - int symbol = 0; - #ifdef _LZMA_LOC_OPT - RC_INIT_VAR - #endif - for(i = 0; i < numLevels; i++) - { - #ifdef _LZMA_LOC_OPT - CProb *prob = probs + mi; - RC_GET_BIT2(prob, mi, ; , symbol |= (1 << i)) - #else - int bit = RangeDecoderBitDecode(probs + mi, rd); - mi = mi + mi + bit; - symbol |= (bit << i); - #endif - } - #ifdef _LZMA_LOC_OPT - RC_FLUSH_VAR - #endif - return symbol; -} - -Byte LzmaLiteralDecode(CProb *probs, CRangeDecoder *rd) -{ - int symbol = 1; - #ifdef _LZMA_LOC_OPT - RC_INIT_VAR - #endif - do - { - #ifdef _LZMA_LOC_OPT - CProb *prob = probs + symbol; - RC_GET_BIT(prob, symbol) - #else - symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd); - #endif - } - while (symbol < 0x100); - #ifdef _LZMA_LOC_OPT - RC_FLUSH_VAR - #endif - return symbol; -} - -Byte LzmaLiteralDecodeMatch(CProb *probs, CRangeDecoder *rd, Byte matchByte) -{ - int symbol = 1; - #ifdef _LZMA_LOC_OPT - RC_INIT_VAR - #endif - do - { - int bit; - int matchBit = (matchByte >> 7) & 1; - matchByte <<= 1; - #ifdef _LZMA_LOC_OPT - { - CProb *prob = probs + 0x100 + (matchBit << 8) + symbol; - RC_GET_BIT2(prob, symbol, bit = 0, bit = 1) - } - #else - bit = RangeDecoderBitDecode(probs + 0x100 + (matchBit << 8) + symbol, rd); - symbol = (symbol << 1) | bit; - #endif - if (matchBit != bit) - { - while (symbol < 0x100) - { - #ifdef _LZMA_LOC_OPT - CProb *prob = probs + symbol; - RC_GET_BIT(prob, symbol) - #else - symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd); - #endif - } - break; - } - } - while (symbol < 0x100); - #ifdef _LZMA_LOC_OPT - RC_FLUSH_VAR - #endif - return symbol; -} - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - -int LzmaLenDecode(CProb *p, CRangeDecoder *rd, int posState) -{ - if(RangeDecoderBitDecode(p + LenChoice, rd) == 0) - return RangeDecoderBitTreeDecode(p + LenLow + - (posState << kLenNumLowBits), kLenNumLowBits, rd); - if(RangeDecoderBitDecode(p + LenChoice2, rd) == 0) - return kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid + - (posState << kLenNumMidBits), kLenNumMidBits, rd); - return kLenNumLowSymbols + kLenNumMidSymbols + - RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd); -} - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size) -{ - unsigned char prop0; - if (size < LZMA_PROPERTIES_SIZE) - return LZMA_RESULT_DATA_ERROR; - prop0 = propsData[0]; - if (prop0 >= (9 * 5 * 5)) - return LZMA_RESULT_DATA_ERROR; - { - for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5)); - for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9); - propsRes->lc = prop0; - /* - unsigned char remainder = (unsigned char)(prop0 / 9); - propsRes->lc = prop0 % 9; - propsRes->pb = remainder / 5; - propsRes->lp = remainder % 5; - */ - } - - #ifdef _LZMA_OUT_READ - { - int i; - propsRes->DictionarySize = 0; - for (i = 0; i < 4; i++) - propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8); - if (propsRes->DictionarySize == 0) - propsRes->DictionarySize = 1; - } - #endif - return LZMA_RESULT_OK; -} - -#define kLzmaStreamWasFinishedId (-1) - -int LzmaDecode(CLzmaDecoderState *vs, - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback, - #else - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - #endif - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed) -{ - CProb *p = vs->Probs; - SizeT nowPos = 0; - Byte previousByte = 0; - UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1; - UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1; - int lc = vs->Properties.lc; - CRangeDecoder rd; - - #ifdef _LZMA_OUT_READ - - int state = vs->State; - UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; - int len = vs->RemainLen; - UInt32 globalPos = vs->GlobalPos; - UInt32 distanceLimit = vs->DistanceLimit; - - Byte *dictionary = vs->Dictionary; - UInt32 dictionarySize = vs->Properties.DictionarySize; - UInt32 dictionaryPos = vs->DictionaryPos; - - Byte tempDictionary[4]; - - rd.Range = vs->Range; - rd.Code = vs->Code; - #ifdef _LZMA_IN_CB - rd.InCallback = InCallback; - rd.Buffer = vs->Buffer; - rd.BufferLim = vs->BufferLim; - #else - rd.Buffer = inStream; - rd.BufferLim = inStream + inSize; - #endif - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - if (len == kLzmaStreamWasFinishedId) - return LZMA_RESULT_OK; - - if (dictionarySize == 0) - { - dictionary = tempDictionary; - dictionarySize = 1; - tempDictionary[0] = vs->TempDictionary[0]; - } - - if (len == kLzmaNeedInitId) - { - { - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - UInt32 i; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - rep0 = rep1 = rep2 = rep3 = 1; - state = 0; - globalPos = 0; - distanceLimit = 0; - dictionaryPos = 0; - dictionary[dictionarySize - 1] = 0; - RangeDecoderInit(&rd - #ifndef _LZMA_IN_CB - , inStream, inSize - #endif - ); - #ifdef _LZMA_IN_CB - if (rd.Result != LZMA_RESULT_OK) - return rd.Result; - #endif - if (rd.ExtraBytes != 0) - return LZMA_RESULT_DATA_ERROR; - } - len = 0; - } - while(len != 0 && nowPos < outSize) - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - } - if (dictionaryPos == 0) - previousByte = dictionary[dictionarySize - 1]; - else - previousByte = dictionary[dictionaryPos - 1]; - - #ifdef _LZMA_IN_CB - rd.Result = LZMA_RESULT_OK; - #endif - rd.ExtraBytes = 0; - - #else /* if !_LZMA_OUT_READ */ - - int state = 0; - UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1; - int len = 0; - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - - { - UInt32 i; - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - } - - #ifdef _LZMA_IN_CB - rd.InCallback = InCallback; - #endif - RangeDecoderInit(&rd - #ifndef _LZMA_IN_CB - , inStream, inSize - #endif - ); - - #ifdef _LZMA_IN_CB - if (rd.Result != LZMA_RESULT_OK) - return rd.Result; - #endif - if (rd.ExtraBytes != 0) - return LZMA_RESULT_DATA_ERROR; - - #endif /* _LZMA_OUT_READ */ - - - while(nowPos < outSize) - { - int posState = (int)( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & posStateMask); - #ifdef _LZMA_IN_CB - if (rd.Result != LZMA_RESULT_OK) - return rd.Result; - #endif - if (rd.ExtraBytes != 0) - return LZMA_RESULT_DATA_ERROR; - if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0) - { - CProb *probs = p + Literal + (LZMA_LIT_SIZE * - ((( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & literalPosMask) << lc) + (previousByte >> (8 - lc)))); - - if (state >= kNumLitStates) - { - Byte matchByte; - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - matchByte = dictionary[pos]; - #else - matchByte = outStream[nowPos - rep0]; - #endif - previousByte = LzmaLiteralDecodeMatch(probs, &rd, matchByte); - } - else - previousByte = LzmaLiteralDecode(probs, &rd); - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #endif - if (state < 4) state = 0; - else if (state < 10) state -= 3; - else state -= 6; - } - else - { - if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1) - { - if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0) - { - if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0) - { - #ifdef _LZMA_OUT_READ - UInt32 pos; - #endif - - #ifdef _LZMA_OUT_READ - if (distanceLimit == 0) - #else - if (nowPos == 0) - #endif - return LZMA_RESULT_DATA_ERROR; - - state = state < 7 ? 9 : 11; - #ifdef _LZMA_OUT_READ - pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - outStream[nowPos++] = previousByte; - - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - #endif - continue; - } - } - else - { - UInt32 distance; - if(RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0) - distance = rep1; - else - { - if(RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - len = LzmaLenDecode(p + RepLenCoder, &rd, posState); - state = state < 7 ? 8 : 11; - } - else - { - int posSlot; - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - state = state < 7 ? 7 : 10; - len = LzmaLenDecode(p + LenCoder, &rd, posState); - posSlot = RangeDecoderBitTreeDecode(p + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits), kNumPosSlotBits, &rd); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - rep0 = ((2 | ((UInt32)posSlot & 1)) << numDirectBits); - if (posSlot < kEndPosModelIndex) - { - rep0 += RangeDecoderReverseBitTreeDecode( - p + SpecPos + rep0 - posSlot - 1, numDirectBits, &rd); - } - else - { - rep0 += RangeDecoderDecodeDirectBits(&rd, - numDirectBits - kNumAlignBits) << kNumAlignBits; - rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd); - } - } - else - rep0 = posSlot; - if (++rep0 == (UInt32)(0)) - { - /* it's for stream version */ - len = kLzmaStreamWasFinishedId; - break; - } - } - - len += kMatchMinLen; - #ifdef _LZMA_OUT_READ - if (rep0 > distanceLimit) - #else - if (rep0 > nowPos) - #endif - return LZMA_RESULT_DATA_ERROR; - - #ifdef _LZMA_OUT_READ - if (dictionarySize - distanceLimit > (UInt32)len) - distanceLimit += len; - else - distanceLimit = dictionarySize; - #endif - - do - { - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - len--; - outStream[nowPos++] = previousByte; - } - while(len != 0 && nowPos < outSize); - } - } - - - #ifdef _LZMA_OUT_READ - vs->Range = rd.Range; - vs->Code = rd.Code; - vs->DictionaryPos = dictionaryPos; - vs->GlobalPos = globalPos + (UInt32)nowPos; - vs->DistanceLimit = distanceLimit; - vs->Reps[0] = rep0; - vs->Reps[1] = rep1; - vs->Reps[2] = rep2; - vs->Reps[3] = rep3; - vs->State = state; - vs->RemainLen = len; - vs->TempDictionary[0] = tempDictionary[0]; - #endif - - #ifdef _LZMA_IN_CB - vs->Buffer = rd.Buffer; - vs->BufferLim = rd.BufferLim; - #else - *inSizeProcessed = (SizeT)(rd.Buffer - inStream); - #endif - *outSizeProcessed = nowPos; - return LZMA_RESULT_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.c deleted file mode 100644 index 5dc8f0e2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.c +++ /dev/null @@ -1,521 +0,0 @@ -/* - LzmaStateDecode.c - LZMA Decoder (State version) - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this Code, expressly permits you to - statically or dynamically link your Code (or bind by name) to the - interfaces of this file without subjecting your linked Code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#include "LzmaStateDecode.h" - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*Buffer++) - -#define RC_INIT Code = 0; Range = 0xFFFFFFFF; \ - { int i; for(i = 0; i < 5; i++) { Code = (Code << 8) | RC_READ_BYTE; }} - -#define RC_NORMALIZE if (Range < kTopValue) { Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } - -#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) -#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; -#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; - -#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \ - { UpdateBit0(p); mi <<= 1; A0; } else \ - { UpdateBit1(p); mi = (mi + mi) + 1; A1; } - -#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;) - -#define RangeDecoderBitTreeDecode(probs, numLevels, res) \ - { int i = numLevels; res = 1; \ - do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \ - res -= (1 << numLevels); } - - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -/* kRequiredInBufferSize = number of required input bytes for worst case: - longest match with longest distance. - kLzmaInBufferSize must be larger than kRequiredInBufferSize - 23 bits = 2 (match select) + 10 (len) + 6 (distance) + 4(align) + 1 (RC_NORMALIZE) -*/ - -#define kRequiredInBufferSize ((23 * (kNumBitModelTotalBits - kNumMoveBits + 1) + 26 + 9) / 8) - -#define kLzmaStreamWasFinishedId (-1) - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size) -{ - unsigned char prop0; - if (size < LZMA_PROPERTIES_SIZE) - return LZMA_RESULT_DATA_ERROR; - prop0 = propsData[0]; - if (prop0 >= (9 * 5 * 5)) - return LZMA_RESULT_DATA_ERROR; - { - for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5)); - for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9); - propsRes->lc = prop0; - /* - unsigned char remainder = (unsigned char)(prop0 / 9); - propsRes->lc = prop0 % 9; - propsRes->pb = remainder / 5; - propsRes->lp = remainder % 5; - */ - } - - { - int i; - propsRes->DictionarySize = 0; - for (i = 0; i < 4; i++) - propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8); - if (propsRes->DictionarySize == 0) - propsRes->DictionarySize = 1; - return LZMA_RESULT_OK; - } -} - -int LzmaDecode( - CLzmaDecoderState *vs, - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed, - int finishDecoding) -{ - UInt32 Range = vs->Range; - UInt32 Code = vs->Code; - - unsigned char *Buffer = vs->Buffer; - int BufferSize = vs->BufferSize; /* don't change it to unsigned int */ - CProb *p = vs->Probs; - - int state = vs->State; - unsigned char previousByte; - UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; - SizeT nowPos = 0; - UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1; - UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1; - int lc = vs->Properties.lc; - int len = vs->RemainLen; - UInt32 globalPos = vs->GlobalPos; - UInt32 distanceLimit = vs->DistanceLimit; - - unsigned char *dictionary = vs->Dictionary; - UInt32 dictionarySize = vs->Properties.DictionarySize; - UInt32 dictionaryPos = vs->DictionaryPos; - - unsigned char tempDictionary[4]; - - (*inSizeProcessed) = 0; - (*outSizeProcessed) = 0; - if (len == kLzmaStreamWasFinishedId) - return LZMA_RESULT_OK; - - if (dictionarySize == 0) - { - dictionary = tempDictionary; - dictionarySize = 1; - tempDictionary[0] = vs->TempDictionary[0]; - } - - if (len == kLzmaNeedInitId) - { - while (inSize > 0 && BufferSize < kLzmaInBufferSize) - { - Buffer[BufferSize++] = *inStream++; - (*inSizeProcessed)++; - inSize--; - } - if (BufferSize < 5) - { - vs->BufferSize = BufferSize; - return finishDecoding ? LZMA_RESULT_DATA_ERROR : LZMA_RESULT_OK; - } - { - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - UInt32 i; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - rep0 = rep1 = rep2 = rep3 = 1; - state = 0; - globalPos = 0; - distanceLimit = 0; - dictionaryPos = 0; - dictionary[dictionarySize - 1] = 0; - RC_INIT; - } - len = 0; - } - while(len != 0 && nowPos < outSize) - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - } - if (dictionaryPos == 0) - previousByte = dictionary[dictionarySize - 1]; - else - previousByte = dictionary[dictionaryPos - 1]; - - for (;;) - { - int bufferPos = (int)(Buffer - vs->Buffer); - if (BufferSize - bufferPos < kRequiredInBufferSize) - { - int i; - BufferSize -= bufferPos; - if (BufferSize < 0) - return LZMA_RESULT_DATA_ERROR; - for (i = 0; i < BufferSize; i++) - vs->Buffer[i] = Buffer[i]; - Buffer = vs->Buffer; - while (inSize > 0 && BufferSize < kLzmaInBufferSize) - { - Buffer[BufferSize++] = *inStream++; - (*inSizeProcessed)++; - inSize--; - } - if (BufferSize < kRequiredInBufferSize && !finishDecoding) - break; - } - if (nowPos >= outSize) - break; - { - CProb *prob; - UInt32 bound; - int posState = (int)((nowPos + globalPos) & posStateMask); - - prob = p + IsMatch + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - int symbol = 1; - UpdateBit0(prob) - prob = p + Literal + (LZMA_LIT_SIZE * - ((((nowPos + globalPos)& literalPosMask) << lc) + (previousByte >> (8 - lc)))); - - if (state >= kNumLitStates) - { - int matchByte; - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - matchByte = dictionary[pos]; - do - { - int bit; - CProb *probLit; - matchByte <<= 1; - bit = (matchByte & 0x100); - probLit = prob + 0x100 + bit + symbol; - RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break) - } - while (symbol < 0x100); - } - while (symbol < 0x100) - { - CProb *probLit = prob + symbol; - RC_GET_BIT(probLit, symbol) - } - previousByte = (unsigned char)symbol; - - outStream[nowPos++] = previousByte; - if (distanceLimit < dictionarySize) - distanceLimit++; - - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - if (state < 4) state = 0; - else if (state < 10) state -= 3; - else state -= 6; - } - else - { - UpdateBit1(prob); - prob = p + IsRep + state; - IfBit0(prob) - { - UpdateBit0(prob); - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - state = state < kNumLitStates ? 0 : 3; - prob = p + LenCoder; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG0 + state; - IfBit0(prob) - { - UpdateBit0(prob); - prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - UInt32 pos; - UpdateBit0(prob); - if (distanceLimit == 0) - return LZMA_RESULT_DATA_ERROR; - if (distanceLimit < dictionarySize) - distanceLimit++; - state = state < kNumLitStates ? 9 : 11; - pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - outStream[nowPos++] = previousByte; - continue; - } - else - { - UpdateBit1(prob); - } - } - else - { - UInt32 distance; - UpdateBit1(prob); - prob = p + IsRepG1 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep1; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG2 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep2; - } - else - { - UpdateBit1(prob); - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - state = state < kNumLitStates ? 8 : 11; - prob = p + RepLenCoder; - } - { - int numBits, offset; - CProb *probLen = prob + LenChoice; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - numBits = kLenNumLowBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenChoice2; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - numBits = kLenNumMidBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - numBits = kLenNumHighBits; - } - } - RangeDecoderBitTreeDecode(probLen, numBits, len); - len += offset; - } - - if (state < 4) - { - int posSlot; - state += kNumLitStates; - prob = p + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits); - RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - rep0 = (2 | ((UInt32)posSlot & 1)); - if (posSlot < kEndPosModelIndex) - { - rep0 <<= numDirectBits; - prob = p + SpecPos + rep0 - posSlot - 1; - } - else - { - numDirectBits -= kNumAlignBits; - do - { - RC_NORMALIZE - Range >>= 1; - rep0 <<= 1; - if (Code >= Range) - { - Code -= Range; - rep0 |= 1; - } - } - while (--numDirectBits != 0); - prob = p + Align; - rep0 <<= kNumAlignBits; - numDirectBits = kNumAlignBits; - } - { - int i = 1; - int mi = 1; - do - { - CProb *prob3 = prob + mi; - RC_GET_BIT2(prob3, mi, ; , rep0 |= i); - i <<= 1; - } - while(--numDirectBits != 0); - } - } - else - rep0 = posSlot; - if (++rep0 == (UInt32)(0)) - { - /* it's for stream version */ - len = kLzmaStreamWasFinishedId; - break; - } - } - - len += kMatchMinLen; - if (rep0 > distanceLimit) - return LZMA_RESULT_DATA_ERROR; - if (dictionarySize - distanceLimit > (UInt32)len) - distanceLimit += len; - else - distanceLimit = dictionarySize; - - do - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - outStream[nowPos++] = previousByte; - } - while(len != 0 && nowPos < outSize); - } - } - } - RC_NORMALIZE; - - BufferSize -= (int)(Buffer - vs->Buffer); - if (BufferSize < 0) - return LZMA_RESULT_DATA_ERROR; - { - int i; - for (i = 0; i < BufferSize; i++) - vs->Buffer[i] = Buffer[i]; - } - vs->BufferSize = BufferSize; - vs->Range = Range; - vs->Code = Code; - vs->DictionaryPos = dictionaryPos; - vs->GlobalPos = (UInt32)(globalPos + nowPos); - vs->DistanceLimit = distanceLimit; - vs->Reps[0] = rep0; - vs->Reps[1] = rep1; - vs->Reps[2] = rep2; - vs->Reps[3] = rep3; - vs->State = state; - vs->RemainLen = len; - vs->TempDictionary[0] = tempDictionary[0]; - - (*outSizeProcessed) = nowPos; - return LZMA_RESULT_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.h deleted file mode 100644 index 26490d61..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateDecode.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - LzmaStateDecode.h - LZMA Decoder interface (State version) - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this code, expressly permits you to - statically or dynamically link your code (or bind by name) to the - interfaces of this file without subjecting your linked code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#ifndef __LZMASTATEDECODE_H -#define __LZMASTATEDECODE_H - -#include "LzmaTypes.h" - -/* #define _LZMA_PROB32 */ -/* It can increase speed on some 32-bit CPUs, - but memory usage will be doubled in that case */ - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb UInt16 -#endif - -#define LZMA_RESULT_OK 0 -#define LZMA_RESULT_DATA_ERROR 1 - -#define LZMA_BASE_SIZE 1846 -#define LZMA_LIT_SIZE 768 - -#define LZMA_PROPERTIES_SIZE 5 - -typedef struct _CLzmaProperties -{ - int lc; - int lp; - int pb; - UInt32 DictionarySize; -}CLzmaProperties; - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size); - -#define LzmaGetNumProbs(lzmaProps) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((lzmaProps)->lc + (lzmaProps)->lp))) - -#define kLzmaInBufferSize 64 /* don't change it. it must be larger than kRequiredInBufferSize */ - -#define kLzmaNeedInitId (-2) - -typedef struct _CLzmaDecoderState -{ - CLzmaProperties Properties; - CProb *Probs; - unsigned char *Dictionary; - - unsigned char Buffer[kLzmaInBufferSize]; - int BufferSize; - - UInt32 Range; - UInt32 Code; - UInt32 DictionaryPos; - UInt32 GlobalPos; - UInt32 DistanceLimit; - UInt32 Reps[4]; - int State; - int RemainLen; /* -2: decoder needs internal initialization - -1: stream was finished, - 0: ok - > 0: need to write RemainLen bytes as match Reps[0], - */ - unsigned char TempDictionary[4]; /* it's required when DictionarySize = 0 */ -} CLzmaDecoderState; - -#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; (vs)->BufferSize = 0; } - -/* LzmaDecode: decoding from input stream to output stream. - If finishDecoding != 0, then there are no more bytes in input stream - after inStream[inSize - 1]. */ - -int LzmaDecode(CLzmaDecoderState *vs, - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed, - int finishDecoding); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateTest.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateTest.c deleted file mode 100644 index 5df4e438..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaStateTest.c +++ /dev/null @@ -1,195 +0,0 @@ -/* -LzmaStateTest.c -Test application for LZMA Decoder (State version) - -This file written and distributed to public domain by Igor Pavlov. -This file is part of LZMA SDK 4.26 (2005-08-02) -*/ - -#include -#include -#include - -#include "LzmaStateDecode.h" - -const char *kCantReadMessage = "Can not read input file"; -const char *kCantWriteMessage = "Can not write output file"; -const char *kCantAllocateMessage = "Can not allocate memory"; - -#define kInBufferSize (1 << 15) -#define kOutBufferSize (1 << 15) - -unsigned char g_InBuffer[kInBufferSize]; -unsigned char g_OutBuffer[kOutBufferSize]; - -size_t MyReadFile(FILE *file, void *data, size_t size) - { return fread(data, 1, size, file); } - -int MyReadFileAndCheck(FILE *file, void *data, size_t size) - { return (MyReadFile(file, data, size) == size); } - -int PrintError(char *buffer, const char *message) -{ - sprintf(buffer + strlen(buffer), "\nError: "); - sprintf(buffer + strlen(buffer), message); - return 1; -} - -int main3(FILE *inFile, FILE *outFile, char *rs) -{ - /* We use two 32-bit integers to construct 64-bit integer for file size. - You can remove outSizeHigh, if you don't need >= 4GB supporting, - or you can use UInt64 outSize, if your compiler supports 64-bit integers*/ - UInt32 outSize = 0; - UInt32 outSizeHigh = 0; - - int waitEOS = 1; - /* waitEOS = 1, if there is no uncompressed size in headers, - so decoder will wait EOS (End of Stream Marker) in compressed stream */ - - int i; - int res = 0; - CLzmaDecoderState state; /* it's about 140 bytes structure, if int is 32-bit */ - unsigned char properties[LZMA_PROPERTIES_SIZE]; - SizeT inAvail = 0; - unsigned char *inBuffer = 0; - - if (sizeof(UInt32) < 4) - return PrintError(rs, "LZMA decoder needs correct UInt32"); - - /* Read LZMA properties for compressed stream */ - - if (!MyReadFileAndCheck(inFile, properties, sizeof(properties))) - return PrintError(rs, kCantReadMessage); - - /* Read uncompressed size */ - - for (i = 0; i < 8; i++) - { - unsigned char b; - if (!MyReadFileAndCheck(inFile, &b, 1)) - return PrintError(rs, kCantReadMessage); - if (b != 0xFF) - waitEOS = 0; - if (i < 4) - outSize += (UInt32)(b) << (i * 8); - else - outSizeHigh += (UInt32)(b) << ((i - 4) * 8); - } - - /* Decode LZMA properties and allocate memory */ - - if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) - return PrintError(rs, "Incorrect stream properties"); - state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return PrintError(rs, kCantAllocateMessage); - - if (state.Properties.DictionarySize == 0) - state.Dictionary = 0; - else - { - state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); - if (state.Dictionary == 0) - { - free(state.Probs); - return PrintError(rs, kCantAllocateMessage); - } - } - - /* Decompress */ - - LzmaDecoderInit(&state); - - do - { - SizeT inProcessed, outProcessed; - int finishDecoding; - UInt32 outAvail = kOutBufferSize; - if (!waitEOS && outSizeHigh == 0 && outAvail > outSize) - outAvail = outSize; - if (inAvail == 0) - { - inAvail = (SizeT)MyReadFile(inFile, g_InBuffer, kInBufferSize); - inBuffer = g_InBuffer; - } - finishDecoding = (inAvail == 0); - res = LzmaDecode(&state, - inBuffer, inAvail, &inProcessed, - g_OutBuffer, outAvail, &outProcessed, - finishDecoding); - if (res != 0) - { - sprintf(rs + strlen(rs), "\nDecoding error = %d\n", res); - res = 1; - break; - } - inAvail -= inProcessed; - inBuffer += inProcessed; - - if (outFile != 0) - if (fwrite(g_OutBuffer, 1, outProcessed, outFile) != outProcessed) - { - PrintError(rs, kCantWriteMessage); - res = 1; - break; - } - - if (outSize < outProcessed) - outSizeHigh--; - outSize -= (UInt32)outProcessed; - outSize &= 0xFFFFFFFF; - - if (outProcessed == 0 && finishDecoding) - { - if (!waitEOS && (outSize != 0 || outSizeHigh != 0)) - res = 1; - break; - } - } - while ((outSize != 0 && outSizeHigh == 0) || outSizeHigh != 0 || waitEOS); - - free(state.Dictionary); - free(state.Probs); - return res; -} - -int main2(int numArgs, const char *args[], char *rs) -{ - FILE *inFile = 0; - FILE *outFile = 0; - int res; - - sprintf(rs + strlen(rs), "\nLZMA Decoder 4.26 Copyright (c) 1999-2005 Igor Pavlov 2005-08-02\n"); - if (numArgs < 2 || numArgs > 3) - { - sprintf(rs + strlen(rs), "\nUsage: lzmadec file.lzma [outFile]\n"); - return 1; - } - - inFile = fopen(args[1], "rb"); - if (inFile == 0) - return PrintError(rs, "Can not open input file"); - - if (numArgs > 2) - { - outFile = fopen(args[2], "wb+"); - if (outFile == 0) - return PrintError(rs, "Can not open output file"); - } - - res = main3(inFile, outFile, rs); - - if (outFile != 0) - fclose(outFile); - fclose(inFile); - return res; -} - -int main(int numArgs, const char *args[]) -{ - char rs[800] = { 0 }; - int res = main2(numArgs, args, rs); - printf(rs); - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTest.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTest.c deleted file mode 100644 index f95a753b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTest.c +++ /dev/null @@ -1,342 +0,0 @@ -/* -LzmaTest.c -Test application for LZMA Decoder - -This file written and distributed to public domain by Igor Pavlov. -This file is part of LZMA SDK 4.26 (2005-08-05) -*/ - -#include -#include -#include - -#include "LzmaDecode.h" - -const char *kCantReadMessage = "Can not read input file"; -const char *kCantWriteMessage = "Can not write output file"; -const char *kCantAllocateMessage = "Can not allocate memory"; - -size_t MyReadFile(FILE *file, void *data, size_t size) -{ - if (size == 0) - return 0; - return fread(data, 1, size, file); -} - -int MyReadFileAndCheck(FILE *file, void *data, size_t size) - { return (MyReadFile(file, data, size) == size);} - -size_t MyWriteFile(FILE *file, const void *data, size_t size) -{ - if (size == 0) - return 0; - return fwrite(data, 1, size, file); -} - -int MyWriteFileAndCheck(FILE *file, const void *data, size_t size) - { return (MyWriteFile(file, data, size) == size); } - -#ifdef _LZMA_IN_CB -#define kInBufferSize (1 << 15) -typedef struct _CBuffer -{ - ILzmaInCallback InCallback; - FILE *File; - unsigned char Buffer[kInBufferSize]; -} CBuffer; - -int LzmaReadCompressed(void *object, const unsigned char **buffer, SizeT *size) -{ - CBuffer *b = (CBuffer *)object; - *buffer = b->Buffer; - *size = (SizeT)MyReadFile(b->File, b->Buffer, kInBufferSize); - return LZMA_RESULT_OK; -} -CBuffer g_InBuffer; - -#endif - -#ifdef _LZMA_OUT_READ -#define kOutBufferSize (1 << 15) -unsigned char g_OutBuffer[kOutBufferSize]; -#endif - -int PrintError(char *buffer, const char *message) -{ - sprintf(buffer + strlen(buffer), "\nError: "); - sprintf(buffer + strlen(buffer), message); - return 1; -} - -int main3(FILE *inFile, FILE *outFile, char *rs) -{ - /* We use two 32-bit integers to construct 64-bit integer for file size. - You can remove outSizeHigh, if you don't need >= 4GB supporting, - or you can use UInt64 outSize, if your compiler supports 64-bit integers*/ - UInt32 outSize = 0; - UInt32 outSizeHigh = 0; - #ifndef _LZMA_OUT_READ - SizeT outSizeFull; - unsigned char *outStream; - #endif - - int waitEOS = 1; - /* waitEOS = 1, if there is no uncompressed size in headers, - so decoder will wait EOS (End of Stream Marker) in compressed stream */ - - #ifndef _LZMA_IN_CB - SizeT compressedSize; - unsigned char *inStream; - #endif - - CLzmaDecoderState state; /* it's about 24-80 bytes structure, if int is 32-bit */ - unsigned char properties[LZMA_PROPERTIES_SIZE]; - - int res; - - #ifdef _LZMA_IN_CB - g_InBuffer.File = inFile; - #endif - - if (sizeof(UInt32) < 4) - return PrintError(rs, "LZMA decoder needs correct UInt32"); - - #ifndef _LZMA_IN_CB - { - long length; - fseek(inFile, 0, SEEK_END); - length = ftell(inFile); - fseek(inFile, 0, SEEK_SET); - if ((long)(SizeT)length != length) - return PrintError(rs, "Too big compressed stream"); - compressedSize = (SizeT)(length - (LZMA_PROPERTIES_SIZE + 8)); - } - #endif - - /* Read LZMA properties for compressed stream */ - - if (!MyReadFileAndCheck(inFile, properties, sizeof(properties))) - return PrintError(rs, kCantReadMessage); - - /* Read uncompressed size */ - - { - int i; - for (i = 0; i < 8; i++) - { - unsigned char b; - if (!MyReadFileAndCheck(inFile, &b, 1)) - return PrintError(rs, kCantReadMessage); - if (b != 0xFF) - waitEOS = 0; - if (i < 4) - outSize += (UInt32)(b) << (i * 8); - else - outSizeHigh += (UInt32)(b) << ((i - 4) * 8); - } - - #ifndef _LZMA_OUT_READ - if (waitEOS) - return PrintError(rs, "Stream with EOS marker is not supported"); - outSizeFull = (SizeT)outSize; - if (sizeof(SizeT) >= 8) - outSizeFull |= (((SizeT)outSizeHigh << 16) << 16); - else if (outSizeHigh != 0 || (UInt32)(SizeT)outSize != outSize) - return PrintError(rs, "Too big uncompressed stream"); - #endif - } - - /* Decode LZMA properties and allocate memory */ - - if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) - return PrintError(rs, "Incorrect stream properties"); - state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - - #ifdef _LZMA_OUT_READ - if (state.Properties.DictionarySize == 0) - state.Dictionary = 0; - else - state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); - #else - if (outSizeFull == 0) - outStream = 0; - else - outStream = (unsigned char *)malloc(outSizeFull); - #endif - - #ifndef _LZMA_IN_CB - if (compressedSize == 0) - inStream = 0; - else - inStream = (unsigned char *)malloc(compressedSize); - #endif - - if (state.Probs == 0 - #ifdef _LZMA_OUT_READ - || (state.Dictionary == 0 && state.Properties.DictionarySize != 0) - #else - || (outStream == 0 && outSizeFull != 0) - #endif - #ifndef _LZMA_IN_CB - || (inStream == 0 && compressedSize != 0) - #endif - ) - { - free(state.Probs); - #ifdef _LZMA_OUT_READ - free(state.Dictionary); - #else - free(outStream); - #endif - #ifndef _LZMA_IN_CB - free(inStream); - #endif - return PrintError(rs, kCantAllocateMessage); - } - - /* Decompress */ - - #ifdef _LZMA_IN_CB - g_InBuffer.InCallback.Read = LzmaReadCompressed; - #else - if (!MyReadFileAndCheck(inFile, inStream, compressedSize)) - return PrintError(rs, kCantReadMessage); - #endif - - #ifdef _LZMA_OUT_READ - { - #ifndef _LZMA_IN_CB - SizeT inAvail = compressedSize; - const unsigned char *inBuffer = inStream; - #endif - LzmaDecoderInit(&state); - do - { - #ifndef _LZMA_IN_CB - SizeT inProcessed; - #endif - SizeT outProcessed; - SizeT outAvail = kOutBufferSize; - if (!waitEOS && outSizeHigh == 0 && outAvail > outSize) - outAvail = (SizeT)outSize; - res = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &g_InBuffer.InCallback, - #else - inBuffer, inAvail, &inProcessed, - #endif - g_OutBuffer, outAvail, &outProcessed); - if (res != 0) - { - sprintf(rs + strlen(rs), "\nDecoding error = %d\n", res); - res = 1; - break; - } - #ifndef _LZMA_IN_CB - inAvail -= inProcessed; - inBuffer += inProcessed; - #endif - - if (outFile != 0) - if (!MyWriteFileAndCheck(outFile, g_OutBuffer, (size_t)outProcessed)) - { - PrintError(rs, kCantWriteMessage); - res = 1; - break; - } - - if (outSize < outProcessed) - outSizeHigh--; - outSize -= (UInt32)outProcessed; - outSize &= 0xFFFFFFFF; - - if (outProcessed == 0) - { - if (!waitEOS && (outSize != 0 || outSizeHigh != 0)) - res = 1; - break; - } - } - while ((outSize != 0 && outSizeHigh == 0) || outSizeHigh != 0 || waitEOS); - } - - #else - { - #ifndef _LZMA_IN_CB - SizeT inProcessed; - #endif - SizeT outProcessed; - res = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &g_InBuffer.InCallback, - #else - inStream, compressedSize, &inProcessed, - #endif - outStream, outSizeFull, &outProcessed); - if (res != 0) - { - sprintf(rs + strlen(rs), "\nDecoding error = %d\n", res); - res = 1; - } - else if (outFile != 0) - { - if (!MyWriteFileAndCheck(outFile, outStream, (size_t)outProcessed)) - { - PrintError(rs, kCantWriteMessage); - res = 1; - } - } - } - #endif - - free(state.Probs); - #ifdef _LZMA_OUT_READ - free(state.Dictionary); - #else - free(outStream); - #endif - #ifndef _LZMA_IN_CB - free(inStream); - #endif - return res; -} - -int main2(int numArgs, const char *args[], char *rs) -{ - FILE *inFile = 0; - FILE *outFile = 0; - int res; - - sprintf(rs + strlen(rs), "\nLZMA Decoder 4.26 Copyright (c) 1999-2005 Igor Pavlov 2005-08-05\n"); - if (numArgs < 2 || numArgs > 3) - { - sprintf(rs + strlen(rs), "\nUsage: lzmadec file.lzma [outFile]\n"); - return 1; - } - - inFile = fopen(args[1], "rb"); - if (inFile == 0) - return PrintError(rs, "Can not open input file"); - - if (numArgs > 2) - { - outFile = fopen(args[2], "wb+"); - if (outFile == 0) - return PrintError(rs, "Can not open output file"); - } - - res = main3(inFile, outFile, rs); - - if (outFile != 0) - fclose(outFile); - fclose(inFile); - return res; -} - -int main(int numArgs, const char *args[]) -{ - char rs[800] = { 0 }; - int res = main2(numArgs, args, rs); - printf(rs); - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTypes.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTypes.h deleted file mode 100644 index 9c272907..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Compress/Lzma/LzmaTypes.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -LzmaTypes.h - -Types for LZMA Decoder - -This file written and distributed to public domain by Igor Pavlov. -This file is part of LZMA SDK 4.40 (2006-05-01) -*/ - -#ifndef __LZMATYPES_H -#define __LZMATYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -typedef unsigned char Byte; -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -#ifdef _LZMA_UINT32_IS_ULONG -typedef unsigned long UInt32; -#else -typedef unsigned int UInt32; -#endif -#endif - -/* #define _LZMA_NO_SYSTEM_SIZE_T */ -/* You can use it, if you don't want */ - -#ifndef _7ZIP_SIZET_DEFINED -#define _7ZIP_SIZET_DEFINED -#ifdef _LZMA_NO_SYSTEM_SIZE_T -typedef UInt32 SizeT; -#else -#include -typedef size_t SizeT; -#endif -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/CpuArch.h b/love/src/jni/physfs-2.1.0/src/lzma/C/CpuArch.h deleted file mode 100644 index 26ce8b1d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/CpuArch.h +++ /dev/null @@ -1,18 +0,0 @@ -/* CpuArch.h */ - -#ifndef __CPUARCH_H -#define __CPUARCH_H - -/* -LITTLE_ENDIAN_UNALIGN means: - 1) CPU is LITTLE_ENDIAN - 2) it's allowed to make unaligned memory accesses -if LITTLE_ENDIAN_UNALIGN is not defined, it means that we don't know -about these properties of platform. -*/ - -#if defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || defined(__i386__) || defined(__x86_64__) -#define LITTLE_ENDIAN_UNALIGN -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/IStream.h b/love/src/jni/physfs-2.1.0/src/lzma/C/IStream.h deleted file mode 100644 index 58218487..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/IStream.h +++ /dev/null @@ -1,19 +0,0 @@ -/* IStream.h */ - -#ifndef __C_ISTREAM_H -#define __C_ISTREAM_H - -#include "Types.h" - -typedef struct _ISeqInStream -{ - HRes (*Read)(void *object, void *data, UInt32 size, UInt32 *processedSize); -} ISeqInStream; - -typedef struct _ISzAlloc -{ - void *(*Alloc)(size_t size); - void (*Free)(void *address); /* address can be 0 */ -} ISzAlloc; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.c deleted file mode 100644 index b30cd6ab..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Sort.c */ - -#include "Sort.h" - -#define HeapSortDown(p, k, size, temp) \ - { for (;;) { \ - UInt32 s = (k << 1); \ - if (s > size) break; \ - if (s < size && p[s + 1] > p[s]) s++; \ - if (temp >= p[s]) break; \ - p[k] = p[s]; k = s; \ - } p[k] = temp; } - -void HeapSort(UInt32 *p, UInt32 size) -{ - if (size <= 1) - return; - p--; - { - UInt32 i = size / 2; - do - { - UInt32 temp = p[i]; - UInt32 k = i; - HeapSortDown(p, k, size, temp) - } - while(--i != 0); - } - /* - do - { - UInt32 k = 1; - UInt32 temp = p[size]; - p[size--] = p[1]; - HeapSortDown(p, k, size, temp) - } - while (size > 1); - */ - while (size > 3) - { - UInt32 temp = p[size]; - UInt32 k = (p[3] > p[2]) ? 3 : 2; - p[size--] = p[1]; - p[1] = p[k]; - HeapSortDown(p, k, size, temp) - } - { - UInt32 temp = p[size]; - p[size] = p[1]; - if (size > 2 && p[2] < temp) - { - p[1] = p[2]; - p[2] = temp; - } - else - p[1] = temp; - } -} - -/* -#define HeapSortRefDown(p, vals, n, size, temp) \ - { UInt32 k = n; UInt32 val = vals[temp]; for (;;) { \ - UInt32 s = (k << 1); \ - if (s > size) break; \ - if (s < size && vals[p[s + 1]] > vals[p[s]]) s++; \ - if (val >= vals[p[s]]) break; \ - p[k] = p[s]; k = s; \ - } p[k] = temp; } - -void HeapSortRef(UInt32 *p, UInt32 *vals, UInt32 size) -{ - if (size <= 1) - return; - p--; - { - UInt32 i = size / 2; - do - { - UInt32 temp = p[i]; - HeapSortRefDown(p, vals, i, size, temp); - } - while(--i != 0); - } - do - { - UInt32 temp = p[size]; - p[size--] = p[1]; - HeapSortRefDown(p, vals, 1, size, temp); - } - while (size > 1); -} -*/ \ No newline at end of file diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.h deleted file mode 100644 index 896243c1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Sort.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Sort.h */ - -#ifndef __7Z_Sort_H -#define __7Z_Sort_H - -#include "Types.h" - -void HeapSort(UInt32 *p, UInt32 size); -/* void HeapSortRef(UInt32 *p, UInt32 *vals, UInt32 size); */ - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.c b/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.c deleted file mode 100644 index def48175..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Threads.c */ - -#include "Threads.h" -#include - -HRes GetError() -{ - DWORD res = GetLastError(); - return (res) ? (HRes)(res) : SZE_FAIL; -} - -HRes BoolToHRes(int v) { return v ? SZ_OK : GetError(); } -HRes BOOLToHRes(BOOL v) { return v ? SZ_OK : GetError(); } - -HRes MyCloseHandle(HANDLE *h) -{ - if (*h != NULL) - if (!CloseHandle(*h)) - return GetError(); - *h = NULL; - return SZ_OK; -} - -HRes Thread_Create(CThread *thread, THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter) -{ - unsigned threadId; /* Windows Me/98/95: threadId parameter may not be NULL in _beginthreadex/CreateThread functions */ - thread->handle = - /* CreateThread(0, 0, startAddress, parameter, 0, &threadId); */ - (HANDLE)_beginthreadex(NULL, 0, startAddress, parameter, 0, &threadId); - /* maybe we must use errno here, but probably GetLastError() is also OK. */ - return BoolToHRes(thread->handle != 0); -} - -HRes WaitObject(HANDLE h) -{ - return (HRes)WaitForSingleObject(h, INFINITE); -} - -HRes Thread_Wait(CThread *thread) -{ - if (thread->handle == NULL) - return 1; - return WaitObject(thread->handle); -} - -HRes Thread_Close(CThread *thread) -{ - return MyCloseHandle(&thread->handle); -} - -HRes Event_Create(CEvent *p, BOOL manualReset, int initialSignaled) -{ - p->handle = CreateEvent(NULL, manualReset, (initialSignaled ? TRUE : FALSE), NULL); - return BoolToHRes(p->handle != 0); -} - -HRes ManualResetEvent_Create(CManualResetEvent *p, int initialSignaled) - { return Event_Create(p, TRUE, initialSignaled); } -HRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p) - { return ManualResetEvent_Create(p, 0); } - -HRes AutoResetEvent_Create(CAutoResetEvent *p, int initialSignaled) - { return Event_Create(p, FALSE, initialSignaled); } -HRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p) - { return AutoResetEvent_Create(p, 0); } - -HRes Event_Set(CEvent *p) { return BOOLToHRes(SetEvent(p->handle)); } -HRes Event_Reset(CEvent *p) { return BOOLToHRes(ResetEvent(p->handle)); } -HRes Event_Wait(CEvent *p) { return WaitObject(p->handle); } -HRes Event_Close(CEvent *p) { return MyCloseHandle(&p->handle); } - - -HRes Semaphore_Create(CSemaphore *p, UInt32 initiallyCount, UInt32 maxCount) -{ - p->handle = CreateSemaphore(NULL, (LONG)initiallyCount, (LONG)maxCount, NULL); - return BoolToHRes(p->handle != 0); -} - -HRes Semaphore_Release(CSemaphore *p, LONG releaseCount, LONG *previousCount) -{ - return BOOLToHRes(ReleaseSemaphore(p->handle, releaseCount, previousCount)); -} -HRes Semaphore_ReleaseN(CSemaphore *p, UInt32 releaseCount) -{ - return Semaphore_Release(p, (LONG)releaseCount, NULL); -} -HRes Semaphore_Release1(CSemaphore *p) -{ - return Semaphore_ReleaseN(p, 1); -} - -HRes Semaphore_Wait(CSemaphore *p) { return WaitObject(p->handle); } -HRes Semaphore_Close(CSemaphore *p) { return MyCloseHandle(&p->handle); } - -HRes CriticalSection_Init(CCriticalSection *p) -{ - /* InitializeCriticalSection can raise only STATUS_NO_MEMORY exception */ - __try - { - InitializeCriticalSection(p); - /* InitializeCriticalSectionAndSpinCount(p, 0); */ - } - __except (EXCEPTION_EXECUTE_HANDLER) { return SZE_OUTOFMEMORY; } - return SZ_OK; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.h deleted file mode 100644 index c024dcc6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Threads.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Threads.h */ - -#ifndef __7Z_THRESDS_H -#define __7Z_THRESDS_H - -#include - -#include "Types.h" - -typedef struct _CThread -{ - HANDLE handle; -} CThread; - -#define Thread_Construct(thread) (thread)->handle = NULL -#define Thread_WasCreated(thread) ((thread)->handle != NULL) - -typedef unsigned THREAD_FUNC_RET_TYPE; -#define THREAD_FUNC_CALL_TYPE StdCall -#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE - -HRes Thread_Create(CThread *thread, THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter); -HRes Thread_Wait(CThread *thread); -HRes Thread_Close(CThread *thread); - -typedef struct _CEvent -{ - HANDLE handle; -} CEvent; - -typedef CEvent CAutoResetEvent; -typedef CEvent CManualResetEvent; - -#define Event_Construct(event) (event)->handle = NULL -#define Event_IsCreated(event) ((event)->handle != NULL) - -HRes ManualResetEvent_Create(CManualResetEvent *event, int initialSignaled); -HRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *event); -HRes AutoResetEvent_Create(CAutoResetEvent *event, int initialSignaled); -HRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *event); -HRes Event_Set(CEvent *event); -HRes Event_Reset(CEvent *event); -HRes Event_Wait(CEvent *event); -HRes Event_Close(CEvent *event); - - -typedef struct _CSemaphore -{ - HANDLE handle; -} CSemaphore; - -#define Semaphore_Construct(p) (p)->handle = NULL - -HRes Semaphore_Create(CSemaphore *p, UInt32 initiallyCount, UInt32 maxCount); -HRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num); -HRes Semaphore_Release1(CSemaphore *p); -HRes Semaphore_Wait(CSemaphore *p); -HRes Semaphore_Close(CSemaphore *p); - - -typedef CRITICAL_SECTION CCriticalSection; - -HRes CriticalSection_Init(CCriticalSection *p); -#define CriticalSection_Delete(p) DeleteCriticalSection(p) -#define CriticalSection_Enter(p) EnterCriticalSection(p) -#define CriticalSection_Leave(p) LeaveCriticalSection(p) - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/C/Types.h b/love/src/jni/physfs-2.1.0/src/lzma/C/Types.h deleted file mode 100644 index 368cc314..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/C/Types.h +++ /dev/null @@ -1,100 +0,0 @@ -/* 7zTypes.h */ - -#ifndef __C_TYPES_H -#define __C_TYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -typedef unsigned char Byte; -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -#ifdef _LZMA_UINT32_IS_ULONG -typedef unsigned long UInt32; -#else -typedef unsigned int UInt32; -#endif -#endif - -#ifndef _7ZIP_INT32_DEFINED -#define _7ZIP_INT32_DEFINED -#ifdef _LZMA_INT32_IS_ULONG -typedef long Int32; -#else -typedef int Int32; -#endif -#endif - -/* #define _SZ_NO_INT_64 */ -/* define it your compiler doesn't support long long int */ - -#ifndef _7ZIP_UINT64_DEFINED -#define _7ZIP_UINT64_DEFINED -#ifdef _SZ_NO_INT_64 -typedef unsigned long UInt64; -#else -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef unsigned __int64 UInt64; -#else -typedef unsigned long long int UInt64; -#endif -#endif -#endif - - -/* #define _SZ_FILE_SIZE_32 */ -/* You can define _SZ_FILE_SIZE_32, if you don't need support for files larger than 4 GB*/ - -#ifndef CFileSize -#ifdef _SZ_FILE_SIZE_32 -typedef UInt32 CFileSize; -#else -typedef UInt64 CFileSize; -#endif -#endif - -#define SZ_RESULT int - -typedef int HRes; -#define RES_OK (0) - -#define SZ_OK (0) -#define SZE_DATA_ERROR (1) -#define SZE_CRC_ERROR (3) -#define SZE_ARCHIVE_ERROR (6) - -#define SZE_OUTOFMEMORY (0x8007000EL) -#define SZE_NOTIMPL (0x80004001L) -#define SZE_FAIL (0x80004005L) -#define SZE_INVALIDARG (0x80070057L) - - -#ifndef RINOK -#define RINOK(x) { HRes __result_ = (x); if(__result_ != 0) return __result_; } -#endif - -typedef int Bool; -#define True 1 -#define False 0 - -#ifdef _MSC_VER -#define StdCall __stdcall -#else -#define StdCall -#endif - -#if _MSC_VER >= 1300 -#define MY_FAST_CALL __declspec(noinline) __fastcall -#elif defined( _MSC_VER) -#define MY_FAST_CALL __fastcall -#else -#define MY_FAST_CALL -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7z.ico b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7z.ico deleted file mode 100755 index 319753a1772db054fd0c04de24a105769a5a0da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4710 zcmeH~ziT5$6vv-)3K$_0yK&`0adqw%rZQ=aS<;!i#@D(V@*fyO2wS-h1PtR!MG}%C z5PW4CfgwdawcVWIz{Ld($hIOI5;>sI5-$3 zI5;>sI5;>sI2cVhI5;>sI5;>s7sI5;@Cgbf}J9!`0rWEH@|sGmTKH0*lG zaPcJfB=UfIxL6r*dL|w&9xhfEczAetczAetcvz|6;o;!n;NhU9^YHL+@NkIaO7vDj z^5hS?l~=0+D{=>-tkmQVa0(<1BnWT{2DNN`ASh;RUgMm!u6 z91)rtrEG6+%g)Y@?CtHz{{Frk zA0Nx%;h~(Kp32$TnVg@W%f-coTwPts_4Tz}{+i^A!GPa!MRoNzpaXcODXywXy8pGX zf!rhAV)tHIDbm3}Ke?-?W;&qX#XqQh8j~G5VTPz5yM?H?S)aYx-x#NG6o>^iz9E=J zK@^8hXXekbwcA3ov(BFv>yqrNA$0km#WzeWHJAoZtj|juBx3YSYu78heYDHT2x$Ec z0{i@wSp8by!ITrF^=H^lho@>Rll}~HpI@nEKfs1DYyDgM55~ZjU>1H#IfMGAWz63K z@ZWem)sM?WXWinLrg}OSxBT6xIpP;o{fkUh-?dZrKO6y8a^qG%82l!tQ) zXNiY%%8hdao9I#f{g>j~>0r0kC*E%6ABB z3s*-+if>*3I8AIqjEYvv0!q2BA{#v$rMQ?&zs8gMz0^>0xXqMEa16}bskLTiu_Q5 R(A?DK`tq{2um0t8*YEBV)$afR diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp deleted file mode 100644 index 6774fc48..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// CompressionMethod.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h deleted file mode 100644 index 5753606f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +++ /dev/null @@ -1,50 +0,0 @@ -// 7zCompressionMode.h - -#ifndef __7Z_COMPRESSION_MODE_H -#define __7Z_COMPRESSION_MODE_H - -#include "../../../Common/MyString.h" - -#include "../../../Windows/PropVariant.h" - -#include "../../Common/MethodProps.h" - -namespace NArchive { -namespace N7z { - -struct CMethodFull: public CMethod -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; - bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); } -}; - -struct CBind -{ - UInt32 InCoder; - UInt32 InStream; - UInt32 OutCoder; - UInt32 OutStream; -}; - -struct CCompressionMethodMode -{ - CObjectVector Methods; - CRecordVector Binds; - #ifdef COMPRESS_MT - UInt32 NumThreads; - #endif - bool PasswordIsDefined; - UString Password; - - bool IsEmpty() const { return (Methods.IsEmpty() && !PasswordIsDefined); } - CCompressionMethodMode(): PasswordIsDefined(false) - #ifdef COMPRESS_MT - , NumThreads(1) - #endif - {} -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.cpp deleted file mode 100644 index 0f81de40..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +++ /dev/null @@ -1,330 +0,0 @@ -// 7zDecode.cpp - -#include "StdAfx.h" - -#include "7zDecode.h" - -#include "../../IPassword.h" -#include "../../Common/LockedStream.h" -#include "../../Common/StreamObjects.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" -#include "../../Common/CreateCoder.h" -#include "../../Common/FilterCoder.h" - -namespace NArchive { -namespace N7z { - -static void ConvertFolderItemInfoToBindInfo(const CFolder &folder, - CBindInfoEx &bindInfo) -{ - bindInfo.Clear(); - int i; - for (i = 0; i < folder.BindPairs.Size(); i++) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = (UInt32)folder.BindPairs[i].InIndex; - bindPair.OutIndex = (UInt32)folder.BindPairs[i].OutIndex; - bindInfo.BindPairs.Add(bindPair); - } - UInt32 outStreamIndex = 0; - for (i = 0; i < folder.Coders.Size(); i++) - { - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - const CCoderInfo &coderInfo = folder.Coders[i]; - coderStreamsInfo.NumInStreams = (UInt32)coderInfo.NumInStreams; - coderStreamsInfo.NumOutStreams = (UInt32)coderInfo.NumOutStreams; - bindInfo.Coders.Add(coderStreamsInfo); - bindInfo.CoderMethodIDs.Add(coderInfo.MethodID); - for (UInt32 j = 0; j < coderStreamsInfo.NumOutStreams; j++, outStreamIndex++) - if (folder.FindBindPairForOutStream(outStreamIndex) < 0) - bindInfo.OutStreams.Add(outStreamIndex); - } - for (i = 0; i < folder.PackStreams.Size(); i++) - bindInfo.InStreams.Add((UInt32)folder.PackStreams[i]); -} - -static bool AreCodersEqual(const NCoderMixer::CCoderStreamsInfo &a1, - const NCoderMixer::CCoderStreamsInfo &a2) -{ - return (a1.NumInStreams == a2.NumInStreams) && - (a1.NumOutStreams == a2.NumOutStreams); -} - -static bool AreBindPairsEqual(const NCoderMixer::CBindPair &a1, const NCoderMixer::CBindPair &a2) -{ - return (a1.InIndex == a2.InIndex) && - (a1.OutIndex == a2.OutIndex); -} - -static bool AreBindInfoExEqual(const CBindInfoEx &a1, const CBindInfoEx &a2) -{ - if (a1.Coders.Size() != a2.Coders.Size()) - return false; - int i; - for (i = 0; i < a1.Coders.Size(); i++) - if (!AreCodersEqual(a1.Coders[i], a2.Coders[i])) - return false; - if (a1.BindPairs.Size() != a2.BindPairs.Size()) - return false; - for (i = 0; i < a1.BindPairs.Size(); i++) - if (!AreBindPairsEqual(a1.BindPairs[i], a2.BindPairs[i])) - return false; - for (i = 0; i < a1.CoderMethodIDs.Size(); i++) - if (a1.CoderMethodIDs[i] != a2.CoderMethodIDs[i]) - return false; - if (a1.InStreams.Size() != a2.InStreams.Size()) - return false; - if (a1.OutStreams.Size() != a2.OutStreams.Size()) - return false; - return true; -} - -CDecoder::CDecoder(bool multiThread) -{ - #ifndef _ST_MODE - multiThread = true; - #endif - _multiThread = multiThread; - _bindInfoExPrevIsDefined = false; -} - -HRESULT CDecoder::Decode( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - UInt64 startPos, - const UInt64 *packSizes, - const CFolder &folderInfo, - ISequentialOutStream *outStream, - ICompressProgressInfo *compressProgress - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - #ifdef COMPRESS_MT - , bool mtMode, UInt32 numThreads - #endif - ) -{ - CObjectVector< CMyComPtr > inStreams; - - CLockedInStream lockedInStream; - lockedInStream.Init(inStream); - - for (int j = 0; j < folderInfo.PackStreams.Size(); j++) - { - CLockedSequentialInStreamImp *lockedStreamImpSpec = new - CLockedSequentialInStreamImp; - CMyComPtr lockedStreamImp = lockedStreamImpSpec; - lockedStreamImpSpec->Init(&lockedInStream, startPos); - startPos += packSizes[j]; - - CLimitedSequentialInStream *streamSpec = new - CLimitedSequentialInStream; - CMyComPtr inStream = streamSpec; - streamSpec->SetStream(lockedStreamImp); - streamSpec->Init(packSizes[j]); - inStreams.Add(inStream); - } - - int numCoders = folderInfo.Coders.Size(); - - CBindInfoEx bindInfo; - ConvertFolderItemInfoToBindInfo(folderInfo, bindInfo); - bool createNewCoders; - if (!_bindInfoExPrevIsDefined) - createNewCoders = true; - else - createNewCoders = !AreBindInfoExEqual(bindInfo, _bindInfoExPrev); - if (createNewCoders) - { - int i; - _decoders.Clear(); - // _decoders2.Clear(); - - _mixerCoder.Release(); - - if (_multiThread) - { - _mixerCoderMTSpec = new NCoderMixer::CCoderMixer2MT; - _mixerCoder = _mixerCoderMTSpec; - _mixerCoderCommon = _mixerCoderMTSpec; - } - else - { - #ifdef _ST_MODE - _mixerCoderSTSpec = new NCoderMixer::CCoderMixer2ST; - _mixerCoder = _mixerCoderSTSpec; - _mixerCoderCommon = _mixerCoderSTSpec; - #endif - } - RINOK(_mixerCoderCommon->SetBindInfo(bindInfo)); - - for (i = 0; i < numCoders; i++) - { - const CCoderInfo &coderInfo = folderInfo.Coders[i]; - - - CMyComPtr decoder; - CMyComPtr decoder2; - RINOK(CreateCoder( - EXTERNAL_CODECS_LOC_VARS - coderInfo.MethodID, decoder, decoder2, false)); - CMyComPtr decoderUnknown; - if (coderInfo.IsSimpleCoder()) - { - if (decoder == 0) - return E_NOTIMPL; - - decoderUnknown = (IUnknown *)decoder; - - if (_multiThread) - _mixerCoderMTSpec->AddCoder(decoder); - #ifdef _ST_MODE - else - _mixerCoderSTSpec->AddCoder(decoder, false); - #endif - } - else - { - if (decoder2 == 0) - return E_NOTIMPL; - decoderUnknown = (IUnknown *)decoder2; - if (_multiThread) - _mixerCoderMTSpec->AddCoder2(decoder2); - #ifdef _ST_MODE - else - _mixerCoderSTSpec->AddCoder2(decoder2, false); - #endif - } - _decoders.Add(decoderUnknown); - #ifdef EXTERNAL_CODECS - CMyComPtr setCompressCodecsInfo; - decoderUnknown.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecsInfo)); - } - #endif - } - _bindInfoExPrev = bindInfo; - _bindInfoExPrevIsDefined = true; - } - int i; - _mixerCoderCommon->ReInit(); - - UInt32 packStreamIndex = 0, unPackStreamIndex = 0; - UInt32 coderIndex = 0; - // UInt32 coder2Index = 0; - - for (i = 0; i < numCoders; i++) - { - const CCoderInfo &coderInfo = folderInfo.Coders[i]; - CMyComPtr &decoder = _decoders[coderIndex]; - - { - CMyComPtr setDecoderProperties; - decoder.QueryInterface(IID_ICompressSetDecoderProperties2, &setDecoderProperties); - if (setDecoderProperties) - { - const CByteBuffer &properties = coderInfo.Properties; - size_t size = properties.GetCapacity(); - if (size > 0xFFFFFFFF) - return E_NOTIMPL; - if (size > 0) - { - RINOK(setDecoderProperties->SetDecoderProperties2((const Byte *)properties, (UInt32)size)); - } - } - } - - #ifdef COMPRESS_MT - if (mtMode) - { - CMyComPtr setCoderMt; - decoder.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt); - if (setCoderMt) - { - RINOK(setCoderMt->SetNumberOfThreads(numThreads)); - } - } - #endif - - #ifndef _NO_CRYPTO - { - CMyComPtr cryptoSetPassword; - decoder.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword); - if (cryptoSetPassword) - { - if (getTextPassword == 0) - return E_FAIL; - CMyComBSTR password; - RINOK(getTextPassword->CryptoGetTextPassword(&password)); - CByteBuffer buffer; - UString unicodePassword(password); - const UInt32 sizeInBytes = unicodePassword.Length() * 2; - buffer.SetCapacity(sizeInBytes); - for (int i = 0; i < unicodePassword.Length(); i++) - { - wchar_t c = unicodePassword[i]; - ((Byte *)buffer)[i * 2] = (Byte)c; - ((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8); - } - RINOK(cryptoSetPassword->CryptoSetPassword( - (const Byte *)buffer, sizeInBytes)); - } - } - #endif - - coderIndex++; - - UInt32 numInStreams = (UInt32)coderInfo.NumInStreams; - UInt32 numOutStreams = (UInt32)coderInfo.NumOutStreams; - CRecordVector packSizesPointers; - CRecordVector unPackSizesPointers; - packSizesPointers.Reserve(numInStreams); - unPackSizesPointers.Reserve(numOutStreams); - UInt32 j; - for (j = 0; j < numOutStreams; j++, unPackStreamIndex++) - unPackSizesPointers.Add(&folderInfo.UnPackSizes[unPackStreamIndex]); - - for (j = 0; j < numInStreams; j++, packStreamIndex++) - { - int bindPairIndex = folderInfo.FindBindPairForInStream(packStreamIndex); - if (bindPairIndex >= 0) - packSizesPointers.Add( - &folderInfo.UnPackSizes[(UInt32)folderInfo.BindPairs[bindPairIndex].OutIndex]); - else - { - int index = folderInfo.FindPackStreamArrayIndex(packStreamIndex); - if (index < 0) - return E_FAIL; - packSizesPointers.Add(&packSizes[index]); - } - } - - _mixerCoderCommon->SetCoderInfo(i, - &packSizesPointers.Front(), - &unPackSizesPointers.Front()); - } - UInt32 mainCoder, temp; - bindInfo.FindOutStream(bindInfo.OutStreams[0], mainCoder, temp); - - if (_multiThread) - _mixerCoderMTSpec->SetProgressCoderIndex(mainCoder); - /* - else - _mixerCoderSTSpec->SetProgressCoderIndex(mainCoder);; - */ - - if (numCoders == 0) - return 0; - CRecordVector inStreamPointers; - inStreamPointers.Reserve(inStreams.Size()); - for (i = 0; i < inStreams.Size(); i++) - inStreamPointers.Add(inStreams[i]); - ISequentialOutStream *outStreamPointer = outStream; - return _mixerCoder->Code(&inStreamPointers.Front(), NULL, - inStreams.Size(), &outStreamPointer, NULL, 1, compressProgress); -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.h deleted file mode 100644 index 7c10dfe2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zDecode.h +++ /dev/null @@ -1,68 +0,0 @@ -// 7zDecode.h - -#ifndef __7Z_DECODE_H -#define __7Z_DECODE_H - -#include "../../IStream.h" -#include "../../IPassword.h" - -#include "../Common/CoderMixer2.h" -#include "../Common/CoderMixer2MT.h" -#ifdef _ST_MODE -#include "../Common/CoderMixer2ST.h" -#endif - -#include "../../Common/CreateCoder.h" - -#include "7zItem.h" - -namespace NArchive { -namespace N7z { - -struct CBindInfoEx: public NCoderMixer::CBindInfo -{ - CRecordVector CoderMethodIDs; - void Clear() - { - CBindInfo::Clear(); - CoderMethodIDs.Clear(); - } -}; - -class CDecoder -{ - bool _bindInfoExPrevIsDefined; - CBindInfoEx _bindInfoExPrev; - - bool _multiThread; - #ifdef _ST_MODE - NCoderMixer::CCoderMixer2ST *_mixerCoderSTSpec; - #endif - NCoderMixer::CCoderMixer2MT *_mixerCoderMTSpec; - NCoderMixer::CCoderMixer2 *_mixerCoderCommon; - - CMyComPtr _mixerCoder; - CObjectVector > _decoders; - // CObjectVector > _decoders2; -public: - CDecoder(bool multiThread); - HRESULT Decode( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - UInt64 startPos, - const UInt64 *packSizes, - const CFolder &folder, - ISequentialOutStream *outStream, - ICompressProgressInfo *compressProgress - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPasswordSpec - #endif - #ifdef COMPRESS_MT - , bool mtMode, UInt32 numThreads - #endif - ); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.cpp deleted file mode 100644 index 3a5cfcd5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +++ /dev/null @@ -1,453 +0,0 @@ -// Encode.cpp - -#include "StdAfx.h" - -#include "7zEncode.h" -#include "7zSpecStream.h" - -#include "../../IPassword.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" -#include "../../Common/InOutTempBuffer.h" -#include "../../Common/StreamObjects.h" -#include "../../Common/CreateCoder.h" -#include "../../Common/FilterCoder.h" - -static const UInt64 k_AES = 0x06F10701; -static const UInt64 k_BCJ = 0x03030103; -static const UInt64 k_BCJ2 = 0x0303011B; - -namespace NArchive { -namespace N7z { - -static void ConvertBindInfoToFolderItemInfo(const NCoderMixer::CBindInfo &bindInfo, - const CRecordVector decompressionMethods, - CFolder &folder) -{ - folder.Coders.Clear(); - // bindInfo.CoderMethodIDs.Clear(); - // folder.OutStreams.Clear(); - folder.PackStreams.Clear(); - folder.BindPairs.Clear(); - int i; - for (i = 0; i < bindInfo.BindPairs.Size(); i++) - { - CBindPair bindPair; - bindPair.InIndex = bindInfo.BindPairs[i].InIndex; - bindPair.OutIndex = bindInfo.BindPairs[i].OutIndex; - folder.BindPairs.Add(bindPair); - } - for (i = 0; i < bindInfo.Coders.Size(); i++) - { - CCoderInfo coderInfo; - const NCoderMixer::CCoderStreamsInfo &coderStreamsInfo = bindInfo.Coders[i]; - coderInfo.NumInStreams = coderStreamsInfo.NumInStreams; - coderInfo.NumOutStreams = coderStreamsInfo.NumOutStreams; - coderInfo.MethodID = decompressionMethods[i]; - folder.Coders.Add(coderInfo); - } - for (i = 0; i < bindInfo.InStreams.Size(); i++) - folder.PackStreams.Add(bindInfo.InStreams[i]); -} - -HRESULT CEncoder::CreateMixerCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - const UInt64 *inSizeForReduce) -{ - _mixerCoderSpec = new NCoderMixer::CCoderMixer2MT; - _mixerCoder = _mixerCoderSpec; - RINOK(_mixerCoderSpec->SetBindInfo(_bindInfo)); - for (int i = 0; i < _options.Methods.Size(); i++) - { - const CMethodFull &methodFull = _options.Methods[i]; - _codersInfo.Add(CCoderInfo()); - CCoderInfo &encodingInfo = _codersInfo.Back(); - encodingInfo.MethodID = methodFull.Id; - CMyComPtr encoder; - CMyComPtr encoder2; - - - RINOK(CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodFull.Id, encoder, encoder2, true)); - - if (!encoder && !encoder2) - return E_FAIL; - - CMyComPtr encoderCommon = encoder ? (IUnknown *)encoder : (IUnknown *)encoder2; - - #ifdef COMPRESS_MT - { - CMyComPtr setCoderMt; - encoderCommon.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt); - if (setCoderMt) - { - RINOK(setCoderMt->SetNumberOfThreads(_options.NumThreads)); - } - } - #endif - - - RINOK(SetMethodProperties(methodFull, inSizeForReduce, encoderCommon)); - - /* - CMyComPtr resetSalt; - encoderCommon.QueryInterface(IID_ICryptoResetSalt, (void **)&resetSalt); - if (resetSalt != NULL) - { - resetSalt->ResetSalt(); - } - */ - - #ifdef EXTERNAL_CODECS - CMyComPtr setCompressCodecsInfo; - encoderCommon.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecsInfo)); - } - #endif - - CMyComPtr cryptoSetPassword; - encoderCommon.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword); - - if (cryptoSetPassword) - { - CByteBuffer buffer; - const UInt32 sizeInBytes = _options.Password.Length() * 2; - buffer.SetCapacity(sizeInBytes); - for (int i = 0; i < _options.Password.Length(); i++) - { - wchar_t c = _options.Password[i]; - ((Byte *)buffer)[i * 2] = (Byte)c; - ((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8); - } - RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, sizeInBytes)); - } - - if (encoder) - _mixerCoderSpec->AddCoder(encoder); - else - _mixerCoderSpec->AddCoder2(encoder2); - } - return S_OK; -} - -HRESULT CEncoder::Encode( - DECL_EXTERNAL_CODECS_LOC_VARS - ISequentialInStream *inStream, - const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, - CFolder &folderItem, - ISequentialOutStream *outStream, - CRecordVector &packSizes, - ICompressProgressInfo *compressProgress) -{ - RINOK(EncoderConstr()); - - if (_mixerCoderSpec == NULL) - { - RINOK(CreateMixerCoder(EXTERNAL_CODECS_LOC_VARS inSizeForReduce)); - } - _mixerCoderSpec->ReInit(); - // _mixerCoderSpec->SetCoderInfo(0, NULL, NULL, progress); - - CObjectVector inOutTempBuffers; - CObjectVector tempBufferSpecs; - CObjectVector > tempBuffers; - int numMethods = _bindInfo.Coders.Size(); - int i; - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - inOutTempBuffers.Add(CInOutTempBuffer()); - inOutTempBuffers.Back().Create(); - inOutTempBuffers.Back().InitWriting(); - } - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - CSequentialOutTempBufferImp *tempBufferSpec = - new CSequentialOutTempBufferImp; - CMyComPtr tempBuffer = tempBufferSpec; - tempBufferSpec->Init(&inOutTempBuffers[i - 1]); - tempBuffers.Add(tempBuffer); - tempBufferSpecs.Add(tempBufferSpec); - } - - for (i = 0; i < numMethods; i++) - _mixerCoderSpec->SetCoderInfo(i, NULL, NULL); - - if (_bindInfo.InStreams.IsEmpty()) - return E_FAIL; - UInt32 mainCoderIndex, mainStreamIndex; - _bindInfo.FindInStream(_bindInfo.InStreams[0], mainCoderIndex, mainStreamIndex); - - if (inStreamSize != NULL) - { - CRecordVector sizePointers; - for (UInt32 i = 0; i < _bindInfo.Coders[mainCoderIndex].NumInStreams; i++) - if (i == mainStreamIndex) - sizePointers.Add(inStreamSize); - else - sizePointers.Add(NULL); - _mixerCoderSpec->SetCoderInfo(mainCoderIndex, &sizePointers.Front(), NULL); - } - - - // UInt64 outStreamStartPos; - // RINOK(stream->Seek(0, STREAM_SEEK_CUR, &outStreamStartPos)); - - CSequentialInStreamSizeCount2 *inStreamSizeCountSpec = - new CSequentialInStreamSizeCount2; - CMyComPtr inStreamSizeCount = inStreamSizeCountSpec; - CSequentialOutStreamSizeCount *outStreamSizeCountSpec = - new CSequentialOutStreamSizeCount; - CMyComPtr outStreamSizeCount = outStreamSizeCountSpec; - - inStreamSizeCountSpec->Init(inStream); - outStreamSizeCountSpec->SetStream(outStream); - outStreamSizeCountSpec->Init(); - - CRecordVector inStreamPointers; - CRecordVector outStreamPointers; - inStreamPointers.Add(inStreamSizeCount); - outStreamPointers.Add(outStreamSizeCount); - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - outStreamPointers.Add(tempBuffers[i - 1]); - - for (i = 0; i < _codersInfo.Size(); i++) - { - CCoderInfo &encodingInfo = _codersInfo[i]; - - CMyComPtr resetInitVector; - _mixerCoderSpec->_coders[i].QueryInterface(IID_ICryptoResetInitVector, (void **)&resetInitVector); - if (resetInitVector != NULL) - { - resetInitVector->ResetInitVector(); - } - - CMyComPtr writeCoderProperties; - _mixerCoderSpec->_coders[i].QueryInterface(IID_ICompressWriteCoderProperties, (void **)&writeCoderProperties); - if (writeCoderProperties != NULL) - { - CSequentialOutStreamImp *outStreamSpec = new CSequentialOutStreamImp; - CMyComPtr outStream(outStreamSpec); - outStreamSpec->Init(); - writeCoderProperties->WriteCoderProperties(outStream); - size_t size = outStreamSpec->GetSize(); - encodingInfo.Properties.SetCapacity(size); - memmove(encodingInfo.Properties, outStreamSpec->GetBuffer(), size); - } - } - - UInt32 progressIndex = mainCoderIndex; - - for (i = 0; i < _codersInfo.Size(); i++) - { - const CCoderInfo &e = _codersInfo[i]; - if ((e.MethodID == k_BCJ || e.MethodID == k_BCJ2) && i + 1 < _codersInfo.Size()) - progressIndex = i + 1; - } - - _mixerCoderSpec->SetProgressCoderIndex(progressIndex); - - RINOK(_mixerCoder->Code(&inStreamPointers.Front(), NULL, 1, - &outStreamPointers.Front(), NULL, outStreamPointers.Size(), compressProgress)); - - ConvertBindInfoToFolderItemInfo(_decompressBindInfo, _decompressionMethods, - folderItem); - - packSizes.Add(outStreamSizeCountSpec->GetSize()); - - for (i = 1; i < _bindInfo.OutStreams.Size(); i++) - { - CInOutTempBuffer &inOutTempBuffer = inOutTempBuffers[i - 1]; - inOutTempBuffer.FlushWrite(); - inOutTempBuffer.InitReading(); - inOutTempBuffer.WriteToStream(outStream); - packSizes.Add(inOutTempBuffer.GetDataSize()); - } - - for (i = 0; i < (int)_bindReverseConverter->NumSrcInStreams; i++) - { - int binder = _bindInfo.FindBinderForInStream( - _bindReverseConverter->DestOutToSrcInMap[i]); - UInt64 streamSize; - if (binder < 0) - streamSize = inStreamSizeCountSpec->GetSize(); - else - streamSize = _mixerCoderSpec->GetWriteProcessedSize(binder); - folderItem.UnPackSizes.Add(streamSize); - } - for (i = numMethods - 1; i >= 0; i--) - folderItem.Coders[numMethods - 1 - i].Properties = _codersInfo[i].Properties; - return S_OK; -} - - -CEncoder::CEncoder(const CCompressionMethodMode &options): - _bindReverseConverter(0), - _constructed(false) -{ - if (options.IsEmpty()) - throw 1; - - _options = options; - _mixerCoderSpec = NULL; -} - -HRESULT CEncoder::EncoderConstr() -{ - if (_constructed) - return S_OK; - if (_options.Methods.IsEmpty()) - { - // it has only password method; - if (!_options.PasswordIsDefined) - throw 1; - if (!_options.Binds.IsEmpty()) - throw 1; - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - CMethodFull method; - - method.NumInStreams = 1; - method.NumOutStreams = 1; - coderStreamsInfo.NumInStreams = 1; - coderStreamsInfo.NumOutStreams = 1; - method.Id = k_AES; - - _options.Methods.Add(method); - _bindInfo.Coders.Add(coderStreamsInfo); - - _bindInfo.InStreams.Add(0); - _bindInfo.OutStreams.Add(0); - } - else - { - - UInt32 numInStreams = 0, numOutStreams = 0; - int i; - for (i = 0; i < _options.Methods.Size(); i++) - { - const CMethodFull &methodFull = _options.Methods[i]; - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - coderStreamsInfo.NumInStreams = methodFull.NumOutStreams; - coderStreamsInfo.NumOutStreams = methodFull.NumInStreams; - if (_options.Binds.IsEmpty()) - { - if (i < _options.Methods.Size() - 1) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = numInStreams + coderStreamsInfo.NumInStreams; - bindPair.OutIndex = numOutStreams; - _bindInfo.BindPairs.Add(bindPair); - } - else - _bindInfo.OutStreams.Insert(0, numOutStreams); - for (UInt32 j = 1; j < coderStreamsInfo.NumOutStreams; j++) - _bindInfo.OutStreams.Add(numOutStreams + j); - } - - numInStreams += coderStreamsInfo.NumInStreams; - numOutStreams += coderStreamsInfo.NumOutStreams; - - _bindInfo.Coders.Add(coderStreamsInfo); - } - - if (!_options.Binds.IsEmpty()) - { - for (i = 0; i < _options.Binds.Size(); i++) - { - NCoderMixer::CBindPair bindPair; - const CBind &bind = _options.Binds[i]; - bindPair.InIndex = _bindInfo.GetCoderInStreamIndex(bind.InCoder) + bind.InStream; - bindPair.OutIndex = _bindInfo.GetCoderOutStreamIndex(bind.OutCoder) + bind.OutStream; - _bindInfo.BindPairs.Add(bindPair); - } - for (i = 0; i < (int)numOutStreams; i++) - if (_bindInfo.FindBinderForOutStream(i) == -1) - _bindInfo.OutStreams.Add(i); - } - - for (i = 0; i < (int)numInStreams; i++) - if (_bindInfo.FindBinderForInStream(i) == -1) - _bindInfo.InStreams.Add(i); - - if (_bindInfo.InStreams.IsEmpty()) - throw 1; // this is error - - // Make main stream first in list - int inIndex = _bindInfo.InStreams[0]; - for (;;) - { - UInt32 coderIndex, coderStreamIndex; - _bindInfo.FindInStream(inIndex, coderIndex, coderStreamIndex); - UInt32 outIndex = _bindInfo.GetCoderOutStreamIndex(coderIndex); - int binder = _bindInfo.FindBinderForOutStream(outIndex); - if (binder >= 0) - { - inIndex = _bindInfo.BindPairs[binder].InIndex; - continue; - } - for (i = 0; i < _bindInfo.OutStreams.Size(); i++) - if (_bindInfo.OutStreams[i] == outIndex) - { - _bindInfo.OutStreams.Delete(i); - _bindInfo.OutStreams.Insert(0, outIndex); - break; - } - break; - } - - if (_options.PasswordIsDefined) - { - int numCryptoStreams = _bindInfo.OutStreams.Size(); - - for (i = 0; i < numCryptoStreams; i++) - { - NCoderMixer::CBindPair bindPair; - bindPair.InIndex = numInStreams + i; - bindPair.OutIndex = _bindInfo.OutStreams[i]; - _bindInfo.BindPairs.Add(bindPair); - } - _bindInfo.OutStreams.Clear(); - - /* - if (numCryptoStreams == 0) - numCryptoStreams = 1; - */ - - for (i = 0; i < numCryptoStreams; i++) - { - NCoderMixer::CCoderStreamsInfo coderStreamsInfo; - CMethodFull method; - method.NumInStreams = 1; - method.NumOutStreams = 1; - coderStreamsInfo.NumInStreams = method.NumOutStreams; - coderStreamsInfo.NumOutStreams = method.NumInStreams; - method.Id = k_AES; - - _options.Methods.Add(method); - _bindInfo.Coders.Add(coderStreamsInfo); - _bindInfo.OutStreams.Add(numOutStreams + i); - } - } - - } - - for (int i = _options.Methods.Size() - 1; i >= 0; i--) - { - const CMethodFull &methodFull = _options.Methods[i]; - _decompressionMethods.Add(methodFull.Id); - } - - _bindReverseConverter = new NCoderMixer::CBindReverseConverter(_bindInfo); - _bindReverseConverter->CreateReverseBindInfo(_decompressBindInfo); - _constructed = true; - return S_OK; -} - -CEncoder::~CEncoder() -{ - delete _bindReverseConverter; -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.h deleted file mode 100644 index 4909a6e8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zEncode.h +++ /dev/null @@ -1,55 +0,0 @@ -// 7zEncode.h - -#ifndef __7Z_ENCODE_H -#define __7Z_ENCODE_H - -// #include "../../Common/StreamObjects.h" - -#include "7zCompressionMode.h" - -#include "../Common/CoderMixer2.h" -#include "../Common/CoderMixer2MT.h" -#ifdef _ST_MODE -#include "../Common/CoderMixer2ST.h" -#endif -#include "7zItem.h" - -#include "../../Common/CreateCoder.h" - -namespace NArchive { -namespace N7z { - -class CEncoder -{ - NCoderMixer::CCoderMixer2MT *_mixerCoderSpec; - CMyComPtr _mixerCoder; - - CObjectVector _codersInfo; - - CCompressionMethodMode _options; - NCoderMixer::CBindInfo _bindInfo; - NCoderMixer::CBindInfo _decompressBindInfo; - NCoderMixer::CBindReverseConverter *_bindReverseConverter; - CRecordVector _decompressionMethods; - - HRESULT CreateMixerCoder(DECL_EXTERNAL_CODECS_LOC_VARS - const UInt64 *inSizeForReduce); - - bool _constructed; -public: - CEncoder(const CCompressionMethodMode &options); - ~CEncoder(); - HRESULT EncoderConstr(); - HRESULT Encode( - DECL_EXTERNAL_CODECS_LOC_VARS - ISequentialInStream *inStream, - const UInt64 *inStreamSize, const UInt64 *inSizeForReduce, - CFolder &folderItem, - ISequentialOutStream *outStream, - CRecordVector &packSizes, - ICompressProgressInfo *compressProgress); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zExtract.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zExtract.cpp deleted file mode 100644 index 42977097..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +++ /dev/null @@ -1,269 +0,0 @@ -// 7zExtract.cpp - -#include "StdAfx.h" - -#include "7zHandler.h" -#include "7zFolderOutStream.h" -#include "7zDecode.h" -// #include "7z1Decode.h" - -#include "../../../Common/ComTry.h" -#include "../../Common/StreamObjects.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" - -namespace NArchive { -namespace N7z { - -struct CExtractFolderInfo -{ - #ifdef _7Z_VOL - int VolumeIndex; - #endif - CNum FileIndex; - CNum FolderIndex; - CBoolVector ExtractStatuses; - UInt64 UnPackSize; - CExtractFolderInfo( - #ifdef _7Z_VOL - int volumeIndex, - #endif - CNum fileIndex, CNum folderIndex): - #ifdef _7Z_VOL - VolumeIndex(volumeIndex), - #endif - FileIndex(fileIndex), - FolderIndex(folderIndex), - UnPackSize(0) - { - if (fileIndex != kNumNoIndex) - { - ExtractStatuses.Reserve(1); - ExtractStatuses.Add(true); - } - }; -}; - -STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, - Int32 testModeSpec, IArchiveExtractCallback *extractCallbackSpec) -{ - COM_TRY_BEGIN - bool testMode = (testModeSpec != 0); - CMyComPtr extractCallback = extractCallbackSpec; - UInt64 importantTotalUnPacked = 0; - - bool allFilesMode = (numItems == UInt32(-1)); - if (allFilesMode) - numItems = - #ifdef _7Z_VOL - _refs.Size(); - #else - _database.Files.Size(); - #endif - - if(numItems == 0) - return S_OK; - - /* - if(_volumes.Size() != 1) - return E_FAIL; - const CVolume &volume = _volumes.Front(); - const CArchiveDatabaseEx &_database = volume.Database; - IInStream *_inStream = volume.Stream; - */ - - CObjectVector extractFolderInfoVector; - for(UInt32 ii = 0; ii < numItems; ii++) - { - // UInt32 fileIndex = allFilesMode ? indexIndex : indices[indexIndex]; - UInt32 ref2Index = allFilesMode ? ii : indices[ii]; - // const CRef2 &ref2 = _refs[ref2Index]; - - // for(UInt32 ri = 0; ri < ref2.Refs.Size(); ri++) - { - #ifdef _7Z_VOL - // const CRef &ref = ref2.Refs[ri]; - const CRef &ref = _refs[ref2Index]; - - int volumeIndex = ref.VolumeIndex; - const CVolume &volume = _volumes[volumeIndex]; - const CArchiveDatabaseEx &database = volume.Database; - UInt32 fileIndex = ref.ItemIndex; - #else - const CArchiveDatabaseEx &database = _database; - UInt32 fileIndex = ref2Index; - #endif - - CNum folderIndex = database.FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex == kNumNoIndex) - { - extractFolderInfoVector.Add(CExtractFolderInfo( - #ifdef _7Z_VOL - volumeIndex, - #endif - fileIndex, kNumNoIndex)); - continue; - } - if (extractFolderInfoVector.IsEmpty() || - folderIndex != extractFolderInfoVector.Back().FolderIndex - #ifdef _7Z_VOL - || volumeIndex != extractFolderInfoVector.Back().VolumeIndex - #endif - ) - { - extractFolderInfoVector.Add(CExtractFolderInfo( - #ifdef _7Z_VOL - volumeIndex, - #endif - kNumNoIndex, folderIndex)); - const CFolder &folderInfo = database.Folders[folderIndex]; - UInt64 unPackSize = folderInfo.GetUnPackSize(); - importantTotalUnPacked += unPackSize; - extractFolderInfoVector.Back().UnPackSize = unPackSize; - } - - CExtractFolderInfo &efi = extractFolderInfoVector.Back(); - - // const CFolderInfo &folderInfo = m_dam_Folders[folderIndex]; - CNum startIndex = database.FolderStartFileIndex[folderIndex]; - for (CNum index = efi.ExtractStatuses.Size(); - index <= fileIndex - startIndex; index++) - { - // UInt64 unPackSize = _database.Files[startIndex + index].UnPackSize; - // Count partial_folder_size - // efi.UnPackSize += unPackSize; - // importantTotalUnPacked += unPackSize; - efi.ExtractStatuses.Add(index == fileIndex - startIndex); - } - } - } - - extractCallback->SetTotal(importantTotalUnPacked); - - CDecoder decoder( - #ifdef _ST_MODE - false - #else - true - #endif - ); - // CDecoder1 decoder; - - UInt64 currentTotalPacked = 0; - UInt64 currentTotalUnPacked = 0; - UInt64 totalFolderUnPacked; - UInt64 totalFolderPacked; - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(extractCallback, false); - - for(int i = 0; i < extractFolderInfoVector.Size(); i++, - currentTotalUnPacked += totalFolderUnPacked, - currentTotalPacked += totalFolderPacked) - { - lps->OutSize = currentTotalUnPacked; - lps->InSize = currentTotalPacked; - RINOK(lps->SetCur()); - - const CExtractFolderInfo &efi = extractFolderInfoVector[i]; - totalFolderUnPacked = efi.UnPackSize; - - totalFolderPacked = 0; - - CFolderOutStream *folderOutStream = new CFolderOutStream; - CMyComPtr outStream(folderOutStream); - - #ifdef _7Z_VOL - const CVolume &volume = _volumes[efi.VolumeIndex]; - const CArchiveDatabaseEx &database = volume.Database; - #else - const CArchiveDatabaseEx &database = _database; - #endif - - CNum startIndex; - if (efi.FileIndex != kNumNoIndex) - startIndex = efi.FileIndex; - else - startIndex = database.FolderStartFileIndex[efi.FolderIndex]; - - - HRESULT result = folderOutStream->Init(&database, - #ifdef _7Z_VOL - volume.StartRef2Index, - #else - 0, - #endif - startIndex, - &efi.ExtractStatuses, extractCallback, testMode, _crcSize != 0); - - RINOK(result); - - if (efi.FileIndex != kNumNoIndex) - continue; - - CNum folderIndex = efi.FolderIndex; - const CFolder &folderInfo = database.Folders[folderIndex]; - - totalFolderPacked = _database.GetFolderFullPackSize(folderIndex); - - CNum packStreamIndex = database.FolderStartPackStreamIndex[folderIndex]; - UInt64 folderStartPackPos = database.GetFolderStreamPos(folderIndex, 0); - - #ifndef _NO_CRYPTO - CMyComPtr getTextPassword; - if (extractCallback) - extractCallback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword); - #endif - - try - { - HRESULT result = decoder.Decode( - EXTERNAL_CODECS_VARS - #ifdef _7Z_VOL - volume.Stream, - #else - _inStream, - #endif - folderStartPackPos, - &database.PackSizes[packStreamIndex], - folderInfo, - outStream, - progress - #ifndef _NO_CRYPTO - , getTextPassword - #endif - #ifdef COMPRESS_MT - , true, _numThreads - #endif - ); - - if (result == S_FALSE) - { - RINOK(folderOutStream->FlushCorrupted(NArchive::NExtract::NOperationResult::kDataError)); - continue; - } - if (result == E_NOTIMPL) - { - RINOK(folderOutStream->FlushCorrupted(NArchive::NExtract::NOperationResult::kUnSupportedMethod)); - continue; - } - if (result != S_OK) - return result; - if (folderOutStream->WasWritingFinished() != S_OK) - { - RINOK(folderOutStream->FlushCorrupted(NArchive::NExtract::NOperationResult::kDataError)); - continue; - } - } - catch(...) - { - RINOK(folderOutStream->FlushCorrupted(NArchive::NExtract::NOperationResult::kDataError)); - continue; - } - } - return S_OK; - COM_TRY_END -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp deleted file mode 100644 index f60a7177..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// 7zFolderInStream.cpp - -#include "StdAfx.h" - -#include "7zFolderInStream.h" - -namespace NArchive { -namespace N7z { - -CFolderInStream::CFolderInStream() -{ - _inStreamWithHashSpec = new CSequentialInStreamWithCRC; - _inStreamWithHash = _inStreamWithHashSpec; -} - -void CFolderInStream::Init(IArchiveUpdateCallback *updateCallback, - const UInt32 *fileIndices, UInt32 numFiles) -{ - _updateCallback = updateCallback; - _numFiles = numFiles; - _fileIndex = 0; - _fileIndices = fileIndices; - Processed.Clear(); - CRCs.Clear(); - Sizes.Clear(); - _fileIsOpen = false; - _currentSizeIsDefined = false; -} - -HRESULT CFolderInStream::OpenStream() -{ - _filePos = 0; - while (_fileIndex < _numFiles) - { - _currentSizeIsDefined = false; - CMyComPtr stream; - HRESULT result = _updateCallback->GetStream(_fileIndices[_fileIndex], &stream); - if (result != S_OK && result != S_FALSE) - return result; - _fileIndex++; - _inStreamWithHashSpec->SetStream(stream); - _inStreamWithHashSpec->Init(); - if (!stream) - { - RINOK(_updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK)); - Sizes.Add(0); - Processed.Add(result == S_OK); - AddDigest(); - continue; - } - CMyComPtr streamGetSize; - if (stream.QueryInterface(IID_IStreamGetSize, &streamGetSize) == S_OK) - { - if(streamGetSize) - { - _currentSizeIsDefined = true; - RINOK(streamGetSize->GetSize(&_currentSize)); - } - } - - _fileIsOpen = true; - return S_OK; - } - return S_OK; -} - -void CFolderInStream::AddDigest() -{ - CRCs.Add(_inStreamWithHashSpec->GetCRC()); -} - -HRESULT CFolderInStream::CloseStream() -{ - RINOK(_updateCallback->SetOperationResult(NArchive::NUpdate::NOperationResult::kOK)); - _inStreamWithHashSpec->ReleaseStream(); - _fileIsOpen = false; - Processed.Add(true); - Sizes.Add(_filePos); - AddDigest(); - return S_OK; -} - -STDMETHODIMP CFolderInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - while ((_fileIndex < _numFiles || _fileIsOpen) && size > 0) - { - if (_fileIsOpen) - { - UInt32 localProcessedSize; - RINOK(_inStreamWithHash->Read( - ((Byte *)data) + realProcessedSize, size, &localProcessedSize)); - if (localProcessedSize == 0) - { - RINOK(CloseStream()); - continue; - } - realProcessedSize += localProcessedSize; - _filePos += localProcessedSize; - size -= localProcessedSize; - break; - } - else - { - RINOK(OpenStream()); - } - } - if (processedSize != 0) - *processedSize = realProcessedSize; - return S_OK; -} - -STDMETHODIMP CFolderInStream::GetSubStreamSize(UInt64 subStream, UInt64 *value) -{ - *value = 0; - int subStreamIndex = (int)subStream; - if (subStreamIndex < 0 || subStream > Sizes.Size()) - return E_FAIL; - if (subStreamIndex < Sizes.Size()) - { - *value= Sizes[subStreamIndex]; - return S_OK; - } - if (!_currentSizeIsDefined) - return S_FALSE; - *value = _currentSize; - return S_OK; -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h deleted file mode 100644 index 9a720c8b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +++ /dev/null @@ -1,66 +0,0 @@ -// 7z/FolderInStream.h - -#ifndef __7Z_FOLDERINSTREAM_H -#define __7Z_FOLDERINSTREAM_H - -#include "7zItem.h" -#include "7zHeader.h" - -#include "../IArchive.h" -#include "../Common/InStreamWithCRC.h" -#include "../../IStream.h" -#include "../../ICoder.h" - -namespace NArchive { -namespace N7z { - -class CFolderInStream: - public ISequentialInStream, - public ICompressGetSubStreamSize, - public CMyUnknownImp -{ -public: - - MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) - - CFolderInStream(); - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); -private: - CSequentialInStreamWithCRC *_inStreamWithHashSpec; - CMyComPtr _inStreamWithHash; - CMyComPtr _updateCallback; - - bool _currentSizeIsDefined; - UInt64 _currentSize; - - bool _fileIsOpen; - UInt64 _filePos; - - const UInt32 *_fileIndices; - UInt32 _numFiles; - UInt32 _fileIndex; - - HRESULT OpenStream(); - HRESULT CloseStream(); - void AddDigest(); -public: - void Init(IArchiveUpdateCallback *updateCallback, - const UInt32 *fileIndices, UInt32 numFiles); - CRecordVector Processed; - CRecordVector CRCs; - CRecordVector Sizes; - UInt64 GetFullSize() const - { - UInt64 size = 0; - for (int i = 0; i < Sizes.Size(); i++) - size += Sizes[i]; - return size; - } -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.cpp deleted file mode 100644 index 6206ffec..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// 7zFolderOutStream.cpp - -#include "StdAfx.h" - -#include "7zFolderOutStream.h" - -namespace NArchive { -namespace N7z { - -CFolderOutStream::CFolderOutStream() -{ - _outStreamWithHashSpec = new COutStreamWithCRC; - _outStreamWithHash = _outStreamWithHashSpec; -} - -HRESULT CFolderOutStream::Init( - const CArchiveDatabaseEx *archiveDatabase, - UInt32 ref2Offset, - UInt32 startIndex, - const CBoolVector *extractStatuses, - IArchiveExtractCallback *extractCallback, - bool testMode, - bool checkCrc) -{ - _archiveDatabase = archiveDatabase; - _ref2Offset = ref2Offset; - _startIndex = startIndex; - - _extractStatuses = extractStatuses; - _extractCallback = extractCallback; - _testMode = testMode; - - _checkCrc = checkCrc; - - _currentIndex = 0; - _fileIsOpen = false; - return WriteEmptyFiles(); -} - -HRESULT CFolderOutStream::OpenFile() -{ - Int32 askMode; - if((*_extractStatuses)[_currentIndex]) - askMode = _testMode ? - NArchive::NExtract::NAskMode::kTest : - NArchive::NExtract::NAskMode::kExtract; - else - askMode = NArchive::NExtract::NAskMode::kSkip; - CMyComPtr realOutStream; - - UInt32 index = _startIndex + _currentIndex; - RINOK(_extractCallback->GetStream(_ref2Offset + index, &realOutStream, askMode)); - - _outStreamWithHashSpec->SetStream(realOutStream); - _outStreamWithHashSpec->Init(_checkCrc); - if (askMode == NArchive::NExtract::NAskMode::kExtract && - (!realOutStream)) - { - const CFileItem &fileInfo = _archiveDatabase->Files[index]; - if (!fileInfo.IsAnti && !fileInfo.IsDirectory) - askMode = NArchive::NExtract::NAskMode::kSkip; - } - return _extractCallback->PrepareOperation(askMode); -} - -HRESULT CFolderOutStream::WriteEmptyFiles() -{ - for(;_currentIndex < _extractStatuses->Size(); _currentIndex++) - { - UInt32 index = _startIndex + _currentIndex; - const CFileItem &fileInfo = _archiveDatabase->Files[index]; - if (!fileInfo.IsAnti && !fileInfo.IsDirectory && fileInfo.UnPackSize != 0) - return S_OK; - RINOK(OpenFile()); - RINOK(_extractCallback->SetOperationResult( - NArchive::NExtract::NOperationResult::kOK)); - _outStreamWithHashSpec->ReleaseStream(); - } - return S_OK; -} - -STDMETHODIMP CFolderOutStream::Write(const void *data, - UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - while(_currentIndex < _extractStatuses->Size()) - { - if (_fileIsOpen) - { - UInt32 index = _startIndex + _currentIndex; - const CFileItem &fileInfo = _archiveDatabase->Files[index]; - UInt64 fileSize = fileInfo.UnPackSize; - - UInt32 numBytesToWrite = (UInt32)MyMin(fileSize - _filePos, - UInt64(size - realProcessedSize)); - - UInt32 processedSizeLocal; - RINOK(_outStreamWithHash->Write((const Byte *)data + realProcessedSize, - numBytesToWrite, &processedSizeLocal)); - - _filePos += processedSizeLocal; - realProcessedSize += processedSizeLocal; - if (_filePos == fileSize) - { - bool digestsAreEqual; - if (fileInfo.IsFileCRCDefined && _checkCrc) - digestsAreEqual = fileInfo.FileCRC == _outStreamWithHashSpec->GetCRC(); - else - digestsAreEqual = true; - - RINOK(_extractCallback->SetOperationResult( - digestsAreEqual ? - NArchive::NExtract::NOperationResult::kOK : - NArchive::NExtract::NOperationResult::kCRCError)); - _outStreamWithHashSpec->ReleaseStream(); - _fileIsOpen = false; - _currentIndex++; - } - if (realProcessedSize == size) - { - if (processedSize != NULL) - *processedSize = realProcessedSize; - return WriteEmptyFiles(); - } - } - else - { - RINOK(OpenFile()); - _fileIsOpen = true; - _filePos = 0; - } - } - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} - -HRESULT CFolderOutStream::FlushCorrupted(Int32 resultEOperationResult) -{ - while(_currentIndex < _extractStatuses->Size()) - { - if (_fileIsOpen) - { - RINOK(_extractCallback->SetOperationResult(resultEOperationResult)); - _outStreamWithHashSpec->ReleaseStream(); - _fileIsOpen = false; - _currentIndex++; - } - else - { - RINOK(OpenFile()); - _fileIsOpen = true; - } - } - return S_OK; -} - -HRESULT CFolderOutStream::WasWritingFinished() -{ - if (_currentIndex == _extractStatuses->Size()) - return S_OK; - return E_FAIL; -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.h deleted file mode 100644 index 8ca91e64..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zFolderOutStream.h +++ /dev/null @@ -1,60 +0,0 @@ -// 7zFolderOutStream.h - -#ifndef __7Z_FOLDEROUTSTREAM_H -#define __7Z_FOLDEROUTSTREAM_H - -#include "7zIn.h" - -#include "../../IStream.h" -#include "../IArchive.h" -#include "../Common/OutStreamWithCRC.h" - -namespace NArchive { -namespace N7z { - -class CFolderOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - CFolderOutStream(); - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -private: - - COutStreamWithCRC *_outStreamWithHashSpec; - CMyComPtr _outStreamWithHash; - const CArchiveDatabaseEx *_archiveDatabase; - const CBoolVector *_extractStatuses; - UInt32 _startIndex; - UInt32 _ref2Offset; - int _currentIndex; - // UInt64 _currentDataPos; - CMyComPtr _extractCallback; - bool _testMode; - - bool _fileIsOpen; - - bool _checkCrc; - UInt64 _filePos; - - HRESULT OpenFile(); - HRESULT WriteEmptyFiles(); -public: - HRESULT Init( - const CArchiveDatabaseEx *archiveDatabase, - UInt32 ref2Offset, - UInt32 startIndex, - const CBoolVector *extractStatuses, - IArchiveExtractCallback *extractCallback, - bool testMode, - bool checkCrc); - HRESULT FlushCorrupted(Int32 resultEOperationResult); - HRESULT WasWritingFinished(); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.cpp deleted file mode 100644 index bbef1ea5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +++ /dev/null @@ -1,793 +0,0 @@ -// 7zHandler.cpp - -#include "StdAfx.h" - -#include "7zHandler.h" -#include "7zProperties.h" - -#include "../../../Common/IntToString.h" -#include "../../../Common/ComTry.h" -#include "../../../Windows/Defs.h" - -#include "../Common/ItemNameUtils.h" -#ifdef _7Z_VOL -#include "../Common/MultiStream.h" -#endif - -#ifdef __7Z_SET_PROPERTIES -#ifdef EXTRACT_ONLY -#include "../Common/ParseProperties.h" -#endif -#endif - -#ifdef COMPRESS_MT -#include "../../../Windows/System.h" -#endif - -using namespace NWindows; - -extern UString ConvertMethodIdToString(UInt64 id); - -namespace NArchive { -namespace N7z { - -CHandler::CHandler() -{ - _crcSize = 4; - - #ifdef EXTRACT_ONLY - #ifdef COMPRESS_MT - _numThreads = NWindows::NSystem::GetNumberOfProcessors(); - #endif - #else - Init(); - #endif -} - -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems) -{ - *numItems = - #ifdef _7Z_VOL - _refs.Size(); - #else - *numItems = _database.Files.Size(); - #endif - return S_OK; -} - -#ifdef _SFX - -IMP_IInArchive_ArcProps_NO - -STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 * /* numProperties */) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CHandler::GetPropertyInfo(UInt32 /* index */, - BSTR * /* name */, PROPID * /* propID */, VARTYPE * /* varType */) -{ - return E_NOTIMPL; -} - - -#else - -STATPROPSTG kArcProps[] = -{ - { NULL, kpidMethod, VT_BSTR}, - { NULL, kpidSolid, VT_BOOL}, - { NULL, kpidNumBlocks, VT_UI4} -}; - -STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case kpidMethod: - { - UString resString; - CRecordVector ids; - int i; - for (i = 0; i < _database.Folders.Size(); i++) - { - const CFolder &f = _database.Folders[i]; - for (int j = f.Coders.Size() - 1; j >= 0; j--) - ids.AddToUniqueSorted(f.Coders[j].MethodID); - } - - for (i = 0; i < ids.Size(); i++) - { - UInt64 id = ids[i]; - UString methodName; - /* bool methodIsKnown = */ FindMethod(EXTERNAL_CODECS_VARS id, methodName); - if (methodName.IsEmpty()) - methodName = ConvertMethodIdToString(id); - if (!resString.IsEmpty()) - resString += L' '; - resString += methodName; - } - prop = resString; - break; - } - case kpidSolid: prop = _database.IsSolid(); break; - case kpidNumBlocks: prop = (UInt32)_database.Folders.Size(); break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -IMP_IInArchive_ArcProps - -#endif - -static void MySetFileTime(bool timeDefined, FILETIME unixTime, NWindows::NCOM::CPropVariant &prop) -{ - if (timeDefined) - prop = unixTime; -} - -#ifndef _SFX - -static UString ConvertUInt32ToString(UInt32 value) -{ - wchar_t buffer[32]; - ConvertUInt64ToString(value, buffer); - return buffer; -} - -static UString GetStringForSizeValue(UInt32 value) -{ - for (int i = 31; i >= 0; i--) - if ((UInt32(1) << i) == value) - return ConvertUInt32ToString(i); - UString result; - if (value % (1 << 20) == 0) - { - result += ConvertUInt32ToString(value >> 20); - result += L"m"; - } - else if (value % (1 << 10) == 0) - { - result += ConvertUInt32ToString(value >> 10); - result += L"k"; - } - else - { - result += ConvertUInt32ToString(value); - result += L"b"; - } - return result; -} - -static const UInt64 k_Copy = 0x0; -static const UInt64 k_LZMA = 0x030101; -static const UInt64 k_PPMD = 0x030401; - -static wchar_t GetHex(Byte value) -{ - return (wchar_t)((value < 10) ? (L'0' + value) : (L'A' + (value - 10))); -} -static inline UString GetHex2(Byte value) -{ - UString result; - result += GetHex((Byte)(value >> 4)); - result += GetHex((Byte)(value & 0xF)); - return result; -} - -#endif - -static const UInt64 k_AES = 0x06F10701; - -#ifndef _SFX -static inline UInt32 GetUInt32FromMemLE(const Byte *p) -{ - return p[0] | (((UInt32)p[1]) << 8) | (((UInt32)p[2]) << 16) | (((UInt32)p[3]) << 24); -} -#endif - -bool CHandler::IsEncrypted(UInt32 index2) const -{ - CNum folderIndex = _database.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _database.Folders[folderIndex]; - for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--) - if (folderInfo.Coders[i].MethodID == k_AES) - return true; - } - return false; -} - -STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NWindows::NCOM::CPropVariant prop; - - /* - const CRef2 &ref2 = _refs[index]; - if (ref2.Refs.IsEmpty()) - return E_FAIL; - const CRef &ref = ref2.Refs.Front(); - */ - - #ifdef _7Z_VOL - const CRef &ref = _refs[index]; - const CVolume &volume = _volumes[ref.VolumeIndex]; - const CArchiveDatabaseEx &_database = volume.Database; - UInt32 index2 = ref.ItemIndex; - const CFileItem &item = _database.Files[index2]; - #else - const CFileItem &item = _database.Files[index]; - UInt32 index2 = index; - #endif - - switch(propID) - { - case kpidPath: - { - if (!item.Name.IsEmpty()) - prop = NItemName::GetOSName(item.Name); - break; - } - case kpidIsFolder: - prop = item.IsDirectory; - break; - case kpidSize: - { - prop = item.UnPackSize; - // prop = ref2.UnPackSize; - break; - } - case kpidPosition: - { - /* - if (ref2.Refs.Size() > 1) - prop = ref2.StartPos; - else - */ - if (item.IsStartPosDefined) - prop = item.StartPos; - break; - } - case kpidPackedSize: - { - // prop = ref2.PackSize; - { - CNum folderIndex = _database.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - if (_database.FolderStartFileIndex[folderIndex] == (CNum)index2) - prop = _database.GetFolderFullPackSize(folderIndex); - /* - else - prop = (UInt64)0; - */ - } - else - prop = (UInt64)0; - } - break; - } - case kpidLastAccessTime: - MySetFileTime(item.IsLastAccessTimeDefined, item.LastAccessTime, prop); - break; - case kpidCreationTime: - MySetFileTime(item.IsCreationTimeDefined, item.CreationTime, prop); - break; - case kpidLastWriteTime: - MySetFileTime(item.IsLastWriteTimeDefined, item.LastWriteTime, prop); - break; - case kpidAttributes: - if (item.AreAttributesDefined) - prop = item.Attributes; - break; - case kpidCRC: - if (item.IsFileCRCDefined) - prop = item.FileCRC; - break; - case kpidEncrypted: - { - prop = IsEncrypted(index2); - break; - } - #ifndef _SFX - case kpidMethod: - { - CNum folderIndex = _database.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _database.Folders[folderIndex]; - UString methodsString; - for (int i = folderInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderInfo &coderInfo = folderInfo.Coders[i]; - if (!methodsString.IsEmpty()) - methodsString += L' '; - - { - UString methodName; - bool methodIsKnown = FindMethod( - EXTERNAL_CODECS_VARS - coderInfo.MethodID, methodName); - - if (methodIsKnown) - { - methodsString += methodName; - if (coderInfo.MethodID == k_LZMA) - { - if (coderInfo.Properties.GetCapacity() >= 5) - { - methodsString += L":"; - UInt32 dicSize = GetUInt32FromMemLE( - ((const Byte *)coderInfo.Properties + 1)); - methodsString += GetStringForSizeValue(dicSize); - } - } - else if (coderInfo.MethodID == k_PPMD) - { - if (coderInfo.Properties.GetCapacity() >= 5) - { - Byte order = *(const Byte *)coderInfo.Properties; - methodsString += L":o"; - methodsString += ConvertUInt32ToString(order); - methodsString += L":mem"; - UInt32 dicSize = GetUInt32FromMemLE( - ((const Byte *)coderInfo.Properties + 1)); - methodsString += GetStringForSizeValue(dicSize); - } - } - else if (coderInfo.MethodID == k_AES) - { - if (coderInfo.Properties.GetCapacity() >= 1) - { - methodsString += L":"; - const Byte *data = (const Byte *)coderInfo.Properties; - Byte firstByte = *data++; - UInt32 numCyclesPower = firstByte & 0x3F; - methodsString += ConvertUInt32ToString(numCyclesPower); - /* - if ((firstByte & 0xC0) != 0) - { - methodsString += L":"; - return S_OK; - UInt32 saltSize = (firstByte >> 7) & 1; - UInt32 ivSize = (firstByte >> 6) & 1; - if (coderInfo.Properties.GetCapacity() >= 2) - { - Byte secondByte = *data++; - saltSize += (secondByte >> 4); - ivSize += (secondByte & 0x0F); - } - } - */ - } - } - else - { - if (coderInfo.Properties.GetCapacity() > 0) - { - methodsString += L":["; - for (size_t bi = 0; bi < coderInfo.Properties.GetCapacity(); bi++) - { - if (bi > 5 && bi + 1 < coderInfo.Properties.GetCapacity()) - { - methodsString += L".."; - break; - } - else - methodsString += GetHex2(coderInfo.Properties[bi]); - } - methodsString += L"]"; - } - } - } - else - { - methodsString += ConvertMethodIdToString(coderInfo.MethodID); - } - } - } - prop = methodsString; - } - } - break; - case kpidBlock: - { - CNum folderIndex = _database.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - prop = (UInt32)folderIndex; - } - break; - case kpidPackedSize0: - case kpidPackedSize1: - case kpidPackedSize2: - case kpidPackedSize3: - case kpidPackedSize4: - { - CNum folderIndex = _database.FileIndexToFolderIndexMap[index2]; - if (folderIndex != kNumNoIndex) - { - const CFolder &folderInfo = _database.Folders[folderIndex]; - if (_database.FolderStartFileIndex[folderIndex] == (CNum)index2 && - folderInfo.PackStreams.Size() > (int)(propID - kpidPackedSize0)) - { - prop = _database.GetFolderPackStreamSize(folderIndex, propID - kpidPackedSize0); - } - else - prop = (UInt64)0; - } - else - prop = (UInt64)0; - } - break; - #endif - case kpidIsAnti: - prop = item.IsAnti; - break; - } - prop.Detach(value); - return S_OK; - COM_TRY_END -} - -#ifdef _7Z_VOL - -static const wchar_t *kExt = L"7z"; -static const wchar_t *kAfterPart = L".7z"; - -class CVolumeName -{ - bool _first; - UString _unchangedPart; - UString _changedPart; - UString _afterPart; -public: - bool InitName(const UString &name) - { - _first = true; - int dotPos = name.ReverseFind('.'); - UString basePart = name; - if (dotPos >= 0) - { - UString ext = name.Mid(dotPos + 1); - if (ext.CompareNoCase(kExt)==0 || - ext.CompareNoCase(L"EXE") == 0) - { - _afterPart = kAfterPart; - basePart = name.Left(dotPos); - } - } - - int numLetters = 1; - bool splitStyle = false; - if (basePart.Right(numLetters) == L"1") - { - while (numLetters < basePart.Length()) - { - if (basePart[basePart.Length() - numLetters - 1] != '0') - break; - numLetters++; - } - } - else - return false; - _unchangedPart = basePart.Left(basePart.Length() - numLetters); - _changedPart = basePart.Right(numLetters); - return true; - } - - UString GetNextName() - { - UString newName; - // if (_newStyle || !_first) - { - int i; - int numLetters = _changedPart.Length(); - for (i = numLetters - 1; i >= 0; i--) - { - wchar_t c = _changedPart[i]; - if (c == L'9') - { - c = L'0'; - newName = c + newName; - if (i == 0) - newName = UString(L'1') + newName; - continue; - } - c++; - newName = UString(c) + newName; - i--; - for (; i >= 0; i--) - newName = _changedPart[i] + newName; - break; - } - _changedPart = newName; - } - _first = false; - return _unchangedPart + _changedPart + _afterPart; - } -}; - -#endif - -STDMETHODIMP CHandler::Open(IInStream *stream, - const UInt64 *maxCheckStartPosition, - IArchiveOpenCallback *openArchiveCallback) -{ - COM_TRY_BEGIN - Close(); - #ifndef _SFX - _fileInfoPopIDs.Clear(); - #endif - try - { - CMyComPtr openArchiveCallbackTemp = openArchiveCallback; - #ifdef _7Z_VOL - CVolumeName seqName; - - CMyComPtr openVolumeCallback; - #endif - - #ifndef _NO_CRYPTO - CMyComPtr getTextPassword; - if (openArchiveCallback) - { - openArchiveCallbackTemp.QueryInterface( - IID_ICryptoGetTextPassword, &getTextPassword); - } - #endif - #ifdef _7Z_VOL - if (openArchiveCallback) - { - openArchiveCallbackTemp.QueryInterface(IID_IArchiveOpenVolumeCallback, &openVolumeCallback); - } - for (;;) - { - CMyComPtr inStream; - if (!_volumes.IsEmpty()) - { - if (!openVolumeCallback) - break; - if(_volumes.Size() == 1) - { - UString baseName; - { - NCOM::CPropVariant prop; - RINOK(openVolumeCallback->GetProperty(kpidName, &prop)); - if (prop.vt != VT_BSTR) - break; - baseName = prop.bstrVal; - } - seqName.InitName(baseName); - } - - UString fullName = seqName.GetNextName(); - HRESULT result = openVolumeCallback->GetStream(fullName, &inStream); - if (result == S_FALSE) - break; - if (result != S_OK) - return result; - if (!stream) - break; - } - else - inStream = stream; - - CInArchive archive; - RINOK(archive.Open(inStream, maxCheckStartPosition)); - - _volumes.Add(CVolume()); - CVolume &volume = _volumes.Back(); - CArchiveDatabaseEx &database = volume.Database; - volume.Stream = inStream; - volume.StartRef2Index = _refs.Size(); - - HRESULT result = archive.ReadDatabase(database - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); - if (result != S_OK) - { - _volumes.Clear(); - return result; - } - database.Fill(); - for(int i = 0; i < database.Files.Size(); i++) - { - CRef refNew; - refNew.VolumeIndex = _volumes.Size() - 1; - refNew.ItemIndex = i; - _refs.Add(refNew); - /* - const CFileItem &file = database.Files[i]; - int j; - */ - /* - for (j = _refs.Size() - 1; j >= 0; j--) - { - CRef2 &ref2 = _refs[j]; - const CRef &ref = ref2.Refs.Back(); - const CVolume &volume2 = _volumes[ref.VolumeIndex]; - const CArchiveDatabaseEx &database2 = volume2.Database; - const CFileItem &file2 = database2.Files[ref.ItemIndex]; - if (file2.Name.CompareNoCase(file.Name) == 0) - { - if (!file.IsStartPosDefined) - continue; - if (file.StartPos != ref2.StartPos + ref2.UnPackSize) - continue; - ref2.Refs.Add(refNew); - break; - } - } - */ - /* - j = -1; - if (j < 0) - { - CRef2 ref2New; - ref2New.Refs.Add(refNew); - j = _refs.Add(ref2New); - } - CRef2 &ref2 = _refs[j]; - ref2.UnPackSize += file.UnPackSize; - ref2.PackSize += database.GetFilePackSize(i); - if (ref2.Refs.Size() == 1 && file.IsStartPosDefined) - ref2.StartPos = file.StartPos; - */ - } - if (database.Files.Size() != 1) - break; - const CFileItem &file = database.Files.Front(); - if (!file.IsStartPosDefined) - break; - } - #else - CInArchive archive; - RINOK(archive.Open(stream, maxCheckStartPosition)); - HRESULT result = archive.ReadDatabase( - EXTERNAL_CODECS_VARS - _database - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); - RINOK(result); - _database.Fill(); - _inStream = stream; - #endif - } - catch(...) - { - Close(); - return S_FALSE; - } - // _inStream = stream; - #ifndef _SFX - FillPopIDs(); - #endif - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CHandler::Close() -{ - COM_TRY_BEGIN - #ifdef _7Z_VOL - _volumes.Clear(); - _refs.Clear(); - #else - _inStream.Release(); - _database.Clear(); - #endif - return S_OK; - COM_TRY_END -} - -#ifdef _7Z_VOL -STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream) -{ - if (index != 0) - return E_INVALIDARG; - *stream = 0; - CMultiStream *streamSpec = new CMultiStream; - CMyComPtr streamTemp = streamSpec; - - UInt64 pos = 0; - const UString *fileName; - for (int i = 0; i < _refs.Size(); i++) - { - const CRef &ref = _refs[i]; - const CVolume &volume = _volumes[ref.VolumeIndex]; - const CArchiveDatabaseEx &database = volume.Database; - const CFileItem &file = database.Files[ref.ItemIndex]; - if (i == 0) - fileName = &file.Name; - else - if (fileName->Compare(file.Name) != 0) - return S_FALSE; - if (!file.IsStartPosDefined) - return S_FALSE; - if (file.StartPos != pos) - return S_FALSE; - CNum folderIndex = database.FileIndexToFolderIndexMap[ref.ItemIndex]; - if (folderIndex == kNumNoIndex) - { - if (file.UnPackSize != 0) - return E_FAIL; - continue; - } - if (database.NumUnPackStreamsVector[folderIndex] != 1) - return S_FALSE; - const CFolder &folder = database.Folders[folderIndex]; - if (folder.Coders.Size() != 1) - return S_FALSE; - const CCoderInfo &coder = folder.Coders.Front(); - if (coder.NumInStreams != 1 || coder.NumOutStreams != 1) - return S_FALSE; - if (coder.MethodID != k_Copy) - return S_FALSE; - - pos += file.UnPackSize; - CMultiStream::CSubStreamInfo subStreamInfo; - subStreamInfo.Stream = volume.Stream; - subStreamInfo.Pos = database.GetFolderStreamPos(folderIndex, 0); - subStreamInfo.Size = file.UnPackSize; - streamSpec->Streams.Add(subStreamInfo); - } - streamSpec->Init(); - *stream = streamTemp.Detach(); - return S_OK; -} -#endif - - -#ifdef __7Z_SET_PROPERTIES -#ifdef EXTRACT_ONLY - -STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) -{ - COM_TRY_BEGIN - #ifdef COMPRESS_MT - const UInt32 numProcessors = NSystem::GetNumberOfProcessors(); - _numThreads = numProcessors; - #endif - - for (int i = 0; i < numProperties; i++) - { - UString name = names[i]; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - const PROPVARIANT &value = values[i]; - UInt32 number; - int index = ParseStringToUInt32(name, number); - if (index == 0) - { - if(name.Left(2).CompareNoCase(L"MT") == 0) - { - #ifdef COMPRESS_MT - RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads)); - #endif - continue; - } - else - return E_INVALIDARG; - } - } - return S_OK; - COM_TRY_END -} - -#endif -#endif - -IMPL_ISetCompressCodecsInfo - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.h deleted file mode 100644 index ad4df41f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandler.h +++ /dev/null @@ -1,146 +0,0 @@ -// 7z/Handler.h - -#ifndef __7Z_HANDLER_H -#define __7Z_HANDLER_H - -#include "../../ICoder.h" -#include "../IArchive.h" -#include "7zIn.h" - -#include "7zCompressionMode.h" - -#include "../../Common/CreateCoder.h" - -#ifndef EXTRACT_ONLY -#include "../Common/HandlerOut.h" -#endif - -namespace NArchive { -namespace N7z { - -#ifdef _7Z_VOL -struct CRef -{ - int VolumeIndex; - int ItemIndex; -}; - -struct CVolume -{ - int StartRef2Index; - CMyComPtr Stream; - CArchiveDatabaseEx Database; -}; -#endif - -#ifndef __7Z_SET_PROPERTIES - -#ifdef EXTRACT_ONLY -#ifdef COMPRESS_MT -#define __7Z_SET_PROPERTIES -#endif -#else -#define __7Z_SET_PROPERTIES -#endif - -#endif - - -class CHandler: - #ifndef EXTRACT_ONLY - public NArchive::COutHandler, - #endif - public IInArchive, - #ifdef _7Z_VOL - public IInArchiveGetStream, - #endif - #ifdef __7Z_SET_PROPERTIES - public ISetProperties, - #endif - #ifndef EXTRACT_ONLY - public IOutArchive, - #endif - PUBLIC_ISetCompressCodecsInfo - public CMyUnknownImp -{ -public: - MY_QUERYINTERFACE_BEGIN2(IInArchive) - #ifdef _7Z_VOL - MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream) - #endif - #ifdef __7Z_SET_PROPERTIES - MY_QUERYINTERFACE_ENTRY(ISetProperties) - #endif - #ifndef EXTRACT_ONLY - MY_QUERYINTERFACE_ENTRY(IOutArchive) - #endif - QUERY_ENTRY_ISetCompressCodecsInfo - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - - INTERFACE_IInArchive(;) - - #ifdef _7Z_VOL - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream); - #endif - - #ifdef __7Z_SET_PROPERTIES - STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties); - #endif - - #ifndef EXTRACT_ONLY - INTERFACE_IOutArchive(;) - #endif - - DECL_ISetCompressCodecsInfo - - CHandler(); - -private: - #ifdef _7Z_VOL - CObjectVector _volumes; - CObjectVector _refs; - #else - CMyComPtr _inStream; - NArchive::N7z::CArchiveDatabaseEx _database; - #endif - - #ifdef EXTRACT_ONLY - - #ifdef COMPRESS_MT - UInt32 _numThreads; - #endif - - UInt32 _crcSize; - - #else - - CRecordVector _binds; - - HRESULT SetPassword(CCompressionMethodMode &methodMode, IArchiveUpdateCallback *updateCallback); - - HRESULT SetCompressionMethod(CCompressionMethodMode &method, - CObjectVector &methodsInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ); - - HRESULT SetCompressionMethod( - CCompressionMethodMode &method, - CCompressionMethodMode &headerMethod); - - #endif - - bool IsEncrypted(UInt32 index2) const; - #ifndef _SFX - - CRecordVector _fileInfoPopIDs; - void FillPopIDs(); - - #endif -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp deleted file mode 100644 index af4b9427..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +++ /dev/null @@ -1,464 +0,0 @@ -// 7zHandlerOut.cpp - -#include "StdAfx.h" - -#include "7zHandler.h" -#include "7zOut.h" -#include "7zUpdate.h" - -#include "../../../Windows/PropVariant.h" - -#include "../../../Common/ComTry.h" -#include "../../../Common/StringToInt.h" -#include "../../IPassword.h" -#include "../../ICoder.h" - -#include "../Common/ItemNameUtils.h" -#include "../Common/ParseProperties.h" - -using namespace NWindows; - -namespace NArchive { -namespace N7z { - -static const wchar_t *kLZMAMethodName = L"LZMA"; -static const wchar_t *kCopyMethod = L"Copy"; -static const wchar_t *kDefaultMethodName = kLZMAMethodName; - -static const UInt32 kLzmaAlgorithmX5 = 1; -static const wchar_t *kLzmaMatchFinderForHeaders = L"BT2"; -static const UInt32 kDictionaryForHeaders = 1 << 20; -static const UInt32 kNumFastBytesForHeaders = 273; -static const UInt32 kAlgorithmForHeaders = kLzmaAlgorithmX5; - -static inline bool IsCopyMethod(const UString &methodName) - { return (methodName.CompareNoCase(kCopyMethod) == 0); } - -STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type) -{ - *type = NFileTimeType::kWindows; - return S_OK; -} - -HRESULT CHandler::SetPassword(CCompressionMethodMode &methodMode, - IArchiveUpdateCallback *updateCallback) -{ - CMyComPtr getTextPassword; - if (!getTextPassword) - { - CMyComPtr udateCallback2(updateCallback); - udateCallback2.QueryInterface(IID_ICryptoGetTextPassword2, &getTextPassword); - } - - if (getTextPassword) - { - CMyComBSTR password; - Int32 passwordIsDefined; - RINOK(getTextPassword->CryptoGetTextPassword2( - &passwordIsDefined, &password)); - methodMode.PasswordIsDefined = IntToBool(passwordIsDefined); - if (methodMode.PasswordIsDefined) - methodMode.Password = password; - } - else - methodMode.PasswordIsDefined = false; - return S_OK; -} - -HRESULT CHandler::SetCompressionMethod( - CCompressionMethodMode &methodMode, - CCompressionMethodMode &headerMethod) -{ - HRESULT res = SetCompressionMethod(methodMode, _methods - #ifdef COMPRESS_MT - , _numThreads - #endif - ); - RINOK(res); - methodMode.Binds = _binds; - - if (_compressHeaders) - { - // headerMethod.Methods.Add(methodMode.Methods.Back()); - - CObjectVector headerMethodInfoVector; - COneMethodInfo oneMethodInfo; - oneMethodInfo.MethodName = kLZMAMethodName; - { - CProp property; - property.Id = NCoderPropID::kMatchFinder; - property.Value = kLzmaMatchFinderForHeaders; - oneMethodInfo.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kAlgorithm; - property.Value = kAlgorithmForHeaders; - oneMethodInfo.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kNumFastBytes; - property.Value = UInt32(kNumFastBytesForHeaders); - oneMethodInfo.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kDictionarySize; - property.Value = UInt32(kDictionaryForHeaders); - oneMethodInfo.Properties.Add(property); - } - headerMethodInfoVector.Add(oneMethodInfo); - HRESULT res = SetCompressionMethod(headerMethod, headerMethodInfoVector - #ifdef COMPRESS_MT - ,1 - #endif - ); - RINOK(res); - } - return S_OK; -} - -HRESULT CHandler::SetCompressionMethod( - CCompressionMethodMode &methodMode, - CObjectVector &methodsInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ) -{ - UInt32 level = _level; - - if (methodsInfo.IsEmpty()) - { - COneMethodInfo oneMethodInfo; - oneMethodInfo.MethodName = ((level == 0) ? kCopyMethod : kDefaultMethodName); - methodsInfo.Add(oneMethodInfo); - } - - bool needSolid = false; - for(int i = 0; i < methodsInfo.Size(); i++) - { - COneMethodInfo &oneMethodInfo = methodsInfo[i]; - SetCompressionMethod2(oneMethodInfo - #ifdef COMPRESS_MT - , numThreads - #endif - ); - - if (!IsCopyMethod(oneMethodInfo.MethodName)) - needSolid = true; - - CMethodFull methodFull; - - if (!FindMethod( - EXTERNAL_CODECS_VARS - oneMethodInfo.MethodName, methodFull.Id, methodFull.NumInStreams, methodFull.NumOutStreams)) - return E_INVALIDARG; - methodFull.Properties = oneMethodInfo.Properties; - methodMode.Methods.Add(methodFull); - - if (!_numSolidBytesDefined) - { - for (int j = 0; j < methodFull.Properties.Size(); j++) - { - const CProp &prop = methodFull.Properties[j]; - if ((prop.Id == NCoderPropID::kDictionarySize || - prop.Id == NCoderPropID::kUsedMemorySize) && prop.Value.vt == VT_UI4) - { - _numSolidBytes = ((UInt64)prop.Value.ulVal) << 7; - const UInt64 kMinSize = (1 << 24); - if (_numSolidBytes < kMinSize) - _numSolidBytes = kMinSize; - _numSolidBytesDefined = true; - break; - } - } - } - } - - if (!needSolid && !_numSolidBytesDefined) - { - _numSolidBytesDefined = true; - _numSolidBytes = 0; - } - return S_OK; -} - -static HRESULT GetTime(IArchiveUpdateCallback *updateCallback, int index, PROPID propID, CArchiveFileTime &filetime, bool &filetimeIsDefined) -{ - filetimeIsDefined = false; - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(index, propID, &propVariant)); - if (propVariant.vt == VT_FILETIME) - { - filetime = propVariant.filetime; - filetimeIsDefined = true; - } - else if (propVariant.vt != VT_EMPTY) - return E_INVALIDARG; - return S_OK; -} - -STDMETHODIMP CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numItems, - IArchiveUpdateCallback *updateCallback) -{ - COM_TRY_BEGIN - - const CArchiveDatabaseEx *database = 0; - #ifdef _7Z_VOL - if(_volumes.Size() > 1) - return E_FAIL; - const CVolume *volume = 0; - if (_volumes.Size() == 1) - { - volume = &_volumes.Front(); - database = &volume->Database; - } - #else - if (_inStream != 0) - database = &_database; - #endif - - // CRecordVector compressStatuses; - CObjectVector updateItems; - // CRecordVector copyIndices; - - // CMyComPtr updateCallback2; - // updateCallback->QueryInterface(&updateCallback2); - - for(UInt32 i = 0; i < numItems; i++) - { - Int32 newData; - Int32 newProperties; - UInt32 indexInArchive; - if (!updateCallback) - return E_FAIL; - RINOK(updateCallback->GetUpdateItemInfo(i, - &newData, &newProperties, &indexInArchive)); - CUpdateItem updateItem; - updateItem.NewProperties = IntToBool(newProperties); - updateItem.NewData = IntToBool(newData); - updateItem.IndexInArchive = indexInArchive; - updateItem.IndexInClient = i; - updateItem.IsAnti = false; - updateItem.Size = 0; - - if (updateItem.IndexInArchive != -1) - { - const CFileItem &fileItem = database->Files[updateItem.IndexInArchive]; - updateItem.Name = fileItem.Name; - updateItem.IsDirectory = fileItem.IsDirectory; - updateItem.Size = fileItem.UnPackSize; - updateItem.IsAnti = fileItem.IsAnti; - - updateItem.CreationTime = fileItem.CreationTime; - updateItem.IsCreationTimeDefined = fileItem.IsCreationTimeDefined; - updateItem.LastWriteTime = fileItem.LastWriteTime; - updateItem.IsLastWriteTimeDefined = fileItem.IsLastWriteTimeDefined; - updateItem.LastAccessTime = fileItem.LastAccessTime; - updateItem.IsLastAccessTimeDefined = fileItem.IsLastAccessTimeDefined; - } - - if (updateItem.NewProperties) - { - bool nameIsDefined; - bool folderStatusIsDefined; - { - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(i, kpidAttributes, &propVariant)); - if (propVariant.vt == VT_EMPTY) - updateItem.AttributesAreDefined = false; - else if (propVariant.vt != VT_UI4) - return E_INVALIDARG; - else - { - updateItem.Attributes = propVariant.ulVal; - updateItem.AttributesAreDefined = true; - } - } - - RINOK(GetTime(updateCallback, i, kpidCreationTime, updateItem.CreationTime, updateItem.IsCreationTimeDefined)); - RINOK(GetTime(updateCallback, i, kpidLastWriteTime, updateItem.LastWriteTime , updateItem.IsLastWriteTimeDefined)); - RINOK(GetTime(updateCallback, i, kpidLastAccessTime, updateItem.LastAccessTime, updateItem.IsLastAccessTimeDefined)); - - { - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(i, kpidPath, &propVariant)); - if (propVariant.vt == VT_EMPTY) - nameIsDefined = false; - else if (propVariant.vt != VT_BSTR) - return E_INVALIDARG; - else - { - updateItem.Name = NItemName::MakeLegalName(propVariant.bstrVal); - nameIsDefined = true; - } - } - { - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(i, kpidIsFolder, &propVariant)); - if (propVariant.vt == VT_EMPTY) - folderStatusIsDefined = false; - else if (propVariant.vt != VT_BOOL) - return E_INVALIDARG; - else - { - updateItem.IsDirectory = (propVariant.boolVal != VARIANT_FALSE); - folderStatusIsDefined = true; - } - } - - { - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(i, kpidIsAnti, &propVariant)); - if (propVariant.vt == VT_EMPTY) - updateItem.IsAnti = false; - else if (propVariant.vt != VT_BOOL) - return E_INVALIDARG; - else - updateItem.IsAnti = (propVariant.boolVal != VARIANT_FALSE); - } - - if (updateItem.IsAnti) - { - updateItem.AttributesAreDefined = false; - - updateItem.IsCreationTimeDefined = false; - updateItem.IsLastWriteTimeDefined = false; - updateItem.IsLastAccessTimeDefined = false; - - updateItem.Size = 0; - } - - if (!folderStatusIsDefined && updateItem.AttributesAreDefined) - updateItem.SetDirectoryStatusFromAttributes(); - } - - if (updateItem.NewData) - { - NCOM::CPropVariant propVariant; - RINOK(updateCallback->GetProperty(i, kpidSize, &propVariant)); - if (propVariant.vt != VT_UI8) - return E_INVALIDARG; - updateItem.Size = (UInt64)propVariant.uhVal.QuadPart; - if (updateItem.Size != 0 && updateItem.IsAnti) - return E_INVALIDARG; - } - updateItems.Add(updateItem); - } - - CCompressionMethodMode methodMode, headerMethod; - RINOK(SetCompressionMethod(methodMode, headerMethod)); - #ifdef COMPRESS_MT - methodMode.NumThreads = _numThreads; - headerMethod.NumThreads = 1; - #endif - - RINOK(SetPassword(methodMode, updateCallback)); - - bool compressMainHeader = _compressHeaders; // check it - - if (methodMode.PasswordIsDefined) - { - compressMainHeader = true; - if(_encryptHeaders) - RINOK(SetPassword(headerMethod, updateCallback)); - } - - if (numItems < 2) - compressMainHeader = false; - - CUpdateOptions options; - options.Method = &methodMode; - options.HeaderMethod = (_compressHeaders || - (methodMode.PasswordIsDefined && _encryptHeaders)) ? - &headerMethod : 0; - options.UseFilters = _level != 0 && _autoFilter; - options.MaxFilter = _level >= 8; - - options.HeaderOptions.CompressMainHeader = compressMainHeader; - options.HeaderOptions.WriteModified = WriteModified; - options.HeaderOptions.WriteCreated = WriteCreated; - options.HeaderOptions.WriteAccessed = WriteAccessed; - - options.NumSolidFiles = _numSolidFiles; - options.NumSolidBytes = _numSolidBytes; - options.SolidExtension = _solidExtension; - options.RemoveSfxBlock = _removeSfxBlock; - options.VolumeMode = _volumeMode; - return Update( - EXTERNAL_CODECS_VARS - #ifdef _7Z_VOL - volume ? volume->Stream: 0, - volume ? database: 0, - #else - _inStream, - database, - #endif - updateItems, outStream, updateCallback, options); - COM_TRY_END -} - -static HRESULT GetBindInfoPart(UString &srcString, UInt32 &coder, UInt32 &stream) -{ - stream = 0; - int index = ParseStringToUInt32(srcString, coder); - if (index == 0) - return E_INVALIDARG; - srcString.Delete(0, index); - if (srcString[0] == 'S') - { - srcString.Delete(0); - int index = ParseStringToUInt32(srcString, stream); - if (index == 0) - return E_INVALIDARG; - srcString.Delete(0, index); - } - return S_OK; -} - -static HRESULT GetBindInfo(UString &srcString, CBind &bind) -{ - RINOK(GetBindInfoPart(srcString, bind.OutCoder, bind.OutStream)); - if (srcString[0] != ':') - return E_INVALIDARG; - srcString.Delete(0); - RINOK(GetBindInfoPart(srcString, bind.InCoder, bind.InStream)); - if (!srcString.IsEmpty()) - return E_INVALIDARG; - return S_OK; -} - -STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) -{ - COM_TRY_BEGIN - _binds.Clear(); - BeforeSetProperty(); - - for (int i = 0; i < numProperties; i++) - { - UString name = names[i]; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - - const PROPVARIANT &value = values[i]; - - if (name[0] == 'B') - { - name.Delete(0); - CBind bind; - RINOK(GetBindInfo(name, bind)); - _binds.Add(bind); - continue; - } - - RINOK(SetProperty(name, value)); - } - - return S_OK; - COM_TRY_END -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.cpp deleted file mode 100644 index 425231fc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// 7z/Header.cpp - -#include "StdAfx.h" -#include "7zHeader.h" - -namespace NArchive { -namespace N7z { - -Byte kSignature[kSignatureSize] = {'7' + 1, 'z', 0xBC, 0xAF, 0x27, 0x1C}; -#ifdef _7Z_VOL -Byte kFinishSignature[kSignatureSize] = {'7' + 1, 'z', 0xBC, 0xAF, 0x27, 0x1C + 1}; -#endif - -class SignatureInitializer -{ -public: - SignatureInitializer() - { - kSignature[0]--; - #ifdef _7Z_VOL - kFinishSignature[0]--; - #endif - }; -} g_SignatureInitializer; - -}} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.h deleted file mode 100644 index e239ab23..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zHeader.h +++ /dev/null @@ -1,96 +0,0 @@ -// 7z/7zHeader.h - -#ifndef __7Z_HEADER_H -#define __7Z_HEADER_H - -#include "../../../Common/Types.h" - -namespace NArchive { -namespace N7z { - -const int kSignatureSize = 6; -extern Byte kSignature[kSignatureSize]; - -// #define _7Z_VOL -// 7z-MultiVolume is not finished yet. -// It can work already, but I still do not like some -// things of that new multivolume format. -// So please keep it commented. - -#ifdef _7Z_VOL -extern Byte kFinishSignature[kSignatureSize]; -#endif - -struct CArchiveVersion -{ - Byte Major; - Byte Minor; -}; - -const Byte kMajorVersion = 0; - -struct CStartHeader -{ - UInt64 NextHeaderOffset; - UInt64 NextHeaderSize; - UInt32 NextHeaderCRC; -}; - -const UInt32 kStartHeaderSize = 20; - -#ifdef _7Z_VOL -struct CFinishHeader: public CStartHeader -{ - UInt64 ArchiveStartOffset; // data offset from end if that struct - UInt64 AdditionalStartBlockSize; // start signature & start header size -}; - -const UInt32 kFinishHeaderSize = kStartHeaderSize + 16; -#endif - -namespace NID -{ - enum EEnum - { - kEnd, - - kHeader, - - kArchiveProperties, - - kAdditionalStreamsInfo, - kMainStreamsInfo, - kFilesInfo, - - kPackInfo, - kUnPackInfo, - kSubStreamsInfo, - - kSize, - kCRC, - - kFolder, - - kCodersUnPackSize, - kNumUnPackStream, - - kEmptyStream, - kEmptyFile, - kAnti, - - kName, - kCreationTime, - kLastAccessTime, - kLastWriteTime, - kWinAttributes, - kComment, - - kEncodedHeader, - - kStartPos - }; -} - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.cpp deleted file mode 100644 index a4292545..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.cpp +++ /dev/null @@ -1,1206 +0,0 @@ -// 7zIn.cpp - -#include "StdAfx.h" - -#include "7zIn.h" -#include "7zDecode.h" -#include "../../Common/StreamObjects.h" -#include "../../Common/StreamUtils.h" -extern "C" -{ -#include "../../../../C/7zCrc.h" -} - -// define FORMAT_7Z_RECOVERY if you want to recover multivolume archives with empty StartHeader -#ifndef _SFX -#define FORMAT_7Z_RECOVERY -#endif - -namespace NArchive { -namespace N7z { - -class CInArchiveException {}; - -static void ThrowException() { throw CInArchiveException(); } -static inline void ThrowEndOfData() { ThrowException(); } -static inline void ThrowUnsupported() { ThrowException(); } -static inline void ThrowIncorrect() { ThrowException(); } -static inline void ThrowUnsupportedVersion() { ThrowException(); } - -/* -class CInArchiveException -{ -public: - enum CCauseType - { - kUnsupportedVersion = 0, - kUnsupported, - kIncorrect, - kEndOfData, - } Cause; - CInArchiveException(CCauseType cause): Cause(cause) {}; -}; - -static void ThrowException(CInArchiveException::CCauseType c) { throw CInArchiveException(c); } -static void ThrowEndOfData() { ThrowException(CInArchiveException::kEndOfData); } -static void ThrowUnsupported() { ThrowException(CInArchiveException::kUnsupported); } -static void ThrowIncorrect() { ThrowException(CInArchiveException::kIncorrect); } -static void ThrowUnsupportedVersion() { ThrowException(CInArchiveException::kUnsupportedVersion); } -*/ - -class CStreamSwitch -{ - CInArchive *_archive; - bool _needRemove; -public: - CStreamSwitch(): _needRemove(false) {} - ~CStreamSwitch() { Remove(); } - void Remove(); - void Set(CInArchive *archive, const Byte *data, size_t size); - void Set(CInArchive *archive, const CByteBuffer &byteBuffer); - void Set(CInArchive *archive, const CObjectVector *dataVector); -}; - -void CStreamSwitch::Remove() -{ - if (_needRemove) - { - _archive->DeleteByteStream(); - _needRemove = false; - } -} - -void CStreamSwitch::Set(CInArchive *archive, const Byte *data, size_t size) -{ - Remove(); - _archive = archive; - _archive->AddByteStream(data, size); - _needRemove = true; -} - -void CStreamSwitch::Set(CInArchive *archive, const CByteBuffer &byteBuffer) -{ - Set(archive, byteBuffer, byteBuffer.GetCapacity()); -} - -void CStreamSwitch::Set(CInArchive *archive, const CObjectVector *dataVector) -{ - Remove(); - Byte external = archive->ReadByte(); - if (external != 0) - { - int dataIndex = (int)archive->ReadNum(); - if (dataIndex < 0 || dataIndex >= dataVector->Size()) - ThrowIncorrect(); - Set(archive, (*dataVector)[dataIndex]); - } -} - -#if defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || defined(__i386__) || defined(__x86_64__) -#define SZ_LITTLE_ENDIAN_UNALIGN -#endif - -#ifdef SZ_LITTLE_ENDIAN_UNALIGN -static inline UInt16 GetUInt16FromMem(const Byte *p) { return *(const UInt16 *)p; } -static inline UInt32 GetUInt32FromMem(const Byte *p) { return *(const UInt32 *)p; } -static inline UInt64 GetUInt64FromMem(const Byte *p) { return *(const UInt64 *)p; } -#else -static inline UInt16 GetUInt16FromMem(const Byte *p) { return p[0] | ((UInt16)p[1] << 8); } -static inline UInt32 GetUInt32FromMem(const Byte *p) { return p[0] | ((UInt32)p[1] << 8) | ((UInt32)p[2] << 16) | ((UInt32)p[3] << 24); } -static inline UInt64 GetUInt64FromMem(const Byte *p) { return GetUInt32FromMem(p) | ((UInt64)GetUInt32FromMem(p + 4) << 32); } -#endif - -Byte CInByte2::ReadByte() -{ - if (_pos >= _size) - ThrowEndOfData(); - return _buffer[_pos++]; -} - -void CInByte2::ReadBytes(Byte *data, size_t size) -{ - if (size > _size - _pos) - ThrowEndOfData(); - for (size_t i = 0; i < size; i++) - data[i] = _buffer[_pos++]; -} - -void CInByte2::SkeepData(UInt64 size) -{ - if (size > _size - _pos) - ThrowEndOfData(); -} - -void CInByte2::SkeepData() -{ - SkeepData(ReadNumber()); -} - -UInt64 CInByte2::ReadNumber() -{ - if (_pos >= _size) - ThrowEndOfData(); - Byte firstByte = _buffer[_pos++]; - Byte mask = 0x80; - UInt64 value = 0; - for (int i = 0; i < 8; i++) - { - if ((firstByte & mask) == 0) - { - UInt64 highPart = firstByte & (mask - 1); - value += (highPart << (i * 8)); - return value; - } - if (_pos >= _size) - ThrowEndOfData(); - value |= ((UInt64)_buffer[_pos++] << (8 * i)); - mask >>= 1; - } - return value; -} - -CNum CInByte2::ReadNum() -{ - UInt64 value = ReadNumber(); - if (value > kNumMax) - ThrowUnsupported(); - return (CNum)value; -} - -UInt32 CInByte2::ReadUInt32() -{ - if (_pos + 4 > _size) - ThrowEndOfData(); - UInt32 res = GetUInt32FromMem(_buffer + _pos); - _pos += 4; - return res; -} - -UInt64 CInByte2::ReadUInt64() -{ - if (_pos + 8 > _size) - ThrowEndOfData(); - UInt64 res = GetUInt64FromMem(_buffer + _pos); - _pos += 8; - return res; -} - -void CInByte2::ReadString(UString &s) -{ - const Byte *buf = _buffer + _pos; - size_t rem = (_size - _pos) / 2 * 2; - { - size_t i; - for (i = 0; i < rem; i += 2) - if (buf[i] == 0 && buf[i + 1] == 0) - break; - if (i == rem) - ThrowEndOfData(); - rem = i; - } - int len = (int)(rem / 2); - if (len < 0 || (size_t)len * 2 != rem) - ThrowUnsupported(); - wchar_t *p = s.GetBuffer(len); - int i; - for (i = 0; i < len; i++, buf += 2) - p[i] = (wchar_t)GetUInt16FromMem(buf); - p[i] = 0; - s.ReleaseBuffer(len); - _pos += rem + 2; -} - -static inline bool TestSignatureCandidate(const Byte *p) -{ - for (int i = 0; i < kSignatureSize; i++) - if (p[i] != kSignature[i]) - return false; - return (p[0x1A] == 0 && p[0x1B] == 0); -} - -HRESULT CInArchive::FindAndReadSignature(IInStream *stream, const UInt64 *searchHeaderSizeLimit) -{ - UInt32 processedSize; - RINOK(ReadStream(stream, _header, kHeaderSize, &processedSize)); - if (processedSize != kHeaderSize) - return S_FALSE; - if (TestSignatureCandidate(_header)) - return S_OK; - - CByteBuffer byteBuffer; - const UInt32 kBufferSize = (1 << 16); - byteBuffer.SetCapacity(kBufferSize); - Byte *buffer = byteBuffer; - UInt32 numPrevBytes = kHeaderSize - 1; - memcpy(buffer, _header + 1, numPrevBytes); - UInt64 curTestPos = _arhiveBeginStreamPosition + 1; - for (;;) - { - if (searchHeaderSizeLimit != NULL) - if (curTestPos - _arhiveBeginStreamPosition > *searchHeaderSizeLimit) - break; - UInt32 numReadBytes = kBufferSize - numPrevBytes; - RINOK(stream->Read(buffer + numPrevBytes, numReadBytes, &processedSize)); - UInt32 numBytesInBuffer = numPrevBytes + processedSize; - if (numBytesInBuffer < kHeaderSize) - break; - UInt32 numTests = numBytesInBuffer - kHeaderSize + 1; - for(UInt32 pos = 0; pos < numTests; pos++, curTestPos++) - { - if (TestSignatureCandidate(buffer + pos)) - { - memcpy(_header, buffer + pos, kHeaderSize); - _arhiveBeginStreamPosition = curTestPos; - return stream->Seek(curTestPos + kHeaderSize, STREAM_SEEK_SET, NULL); - } - } - numPrevBytes = numBytesInBuffer - numTests; - memmove(buffer, buffer + numTests, numPrevBytes); - } - return S_FALSE; -} - -// S_FALSE means that file is not archive -HRESULT CInArchive::Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit) -{ - Close(); - RINOK(stream->Seek(0, STREAM_SEEK_CUR, &_arhiveBeginStreamPosition)) - RINOK(FindAndReadSignature(stream, searchHeaderSizeLimit)); - _stream = stream; - return S_OK; -} - -void CInArchive::Close() -{ - _stream.Release(); -} - -void CInArchive::ReadArchiveProperties(CInArchiveInfo & /* archiveInfo */) -{ - for (;;) - { - if (ReadID() == NID::kEnd) - break; - SkeepData(); - } -} - -void CInArchive::GetNextFolderItem(CFolder &folder) -{ - CNum numCoders = ReadNum(); - - folder.Coders.Clear(); - folder.Coders.Reserve((int)numCoders); - CNum numInStreams = 0; - CNum numOutStreams = 0; - CNum i; - for (i = 0; i < numCoders; i++) - { - folder.Coders.Add(CCoderInfo()); - CCoderInfo &coder = folder.Coders.Back(); - - { - Byte mainByte = ReadByte(); - int idSize = (mainByte & 0xF); - Byte longID[15]; - ReadBytes(longID, idSize); - if (idSize > 8) - ThrowUnsupported(); - UInt64 id = 0; - for (int j = 0; j < idSize; j++) - id |= (UInt64)longID[idSize - 1 - j] << (8 * j); - coder.MethodID = id; - - if ((mainByte & 0x10) != 0) - { - coder.NumInStreams = ReadNum(); - coder.NumOutStreams = ReadNum(); - } - else - { - coder.NumInStreams = 1; - coder.NumOutStreams = 1; - } - if ((mainByte & 0x20) != 0) - { - CNum propertiesSize = ReadNum(); - coder.Properties.SetCapacity((size_t)propertiesSize); - ReadBytes((Byte *)coder.Properties, (size_t)propertiesSize); - } - if ((mainByte & 0x80) != 0) - ThrowUnsupported(); - } - numInStreams += coder.NumInStreams; - numOutStreams += coder.NumOutStreams; - } - - CNum numBindPairs; - numBindPairs = numOutStreams - 1; - folder.BindPairs.Clear(); - folder.BindPairs.Reserve(numBindPairs); - for (i = 0; i < numBindPairs; i++) - { - CBindPair bindPair; - bindPair.InIndex = ReadNum(); - bindPair.OutIndex = ReadNum(); - folder.BindPairs.Add(bindPair); - } - - CNum numPackedStreams = numInStreams - numBindPairs; - folder.PackStreams.Reserve(numPackedStreams); - if (numPackedStreams == 1) - { - for (CNum j = 0; j < numInStreams; j++) - if (folder.FindBindPairForInStream(j) < 0) - { - folder.PackStreams.Add(j); - break; - } - } - else - for(i = 0; i < numPackedStreams; i++) - folder.PackStreams.Add(ReadNum()); -} - -void CInArchive::WaitAttribute(UInt64 attribute) -{ - for (;;) - { - UInt64 type = ReadID(); - if (type == attribute) - return; - if (type == NID::kEnd) - ThrowIncorrect(); - SkeepData(); - } -} - -void CInArchive::ReadHashDigests(int numItems, - CRecordVector &digestsDefined, - CRecordVector &digests) -{ - ReadBoolVector2(numItems, digestsDefined); - digests.Clear(); - digests.Reserve(numItems); - for(int i = 0; i < numItems; i++) - { - UInt32 crc = 0; - if (digestsDefined[i]) - crc = ReadUInt32(); - digests.Add(crc); - } -} - -void CInArchive::ReadPackInfo( - UInt64 &dataOffset, - CRecordVector &packSizes, - CRecordVector &packCRCsDefined, - CRecordVector &packCRCs) -{ - dataOffset = ReadNumber(); - CNum numPackStreams = ReadNum(); - - WaitAttribute(NID::kSize); - packSizes.Clear(); - packSizes.Reserve(numPackStreams); - for (CNum i = 0; i < numPackStreams; i++) - packSizes.Add(ReadNumber()); - - UInt64 type; - for (;;) - { - type = ReadID(); - if (type == NID::kEnd) - break; - if (type == NID::kCRC) - { - ReadHashDigests(numPackStreams, packCRCsDefined, packCRCs); - continue; - } - SkeepData(); - } - if (packCRCsDefined.IsEmpty()) - { - packCRCsDefined.Reserve(numPackStreams); - packCRCsDefined.Clear(); - packCRCs.Reserve(numPackStreams); - packCRCs.Clear(); - for(CNum i = 0; i < numPackStreams; i++) - { - packCRCsDefined.Add(false); - packCRCs.Add(0); - } - } -} - -void CInArchive::ReadUnPackInfo( - const CObjectVector *dataVector, - CObjectVector &folders) -{ - WaitAttribute(NID::kFolder); - CNum numFolders = ReadNum(); - - { - CStreamSwitch streamSwitch; - streamSwitch.Set(this, dataVector); - folders.Clear(); - folders.Reserve(numFolders); - for(CNum i = 0; i < numFolders; i++) - { - folders.Add(CFolder()); - GetNextFolderItem(folders.Back()); - } - } - - WaitAttribute(NID::kCodersUnPackSize); - - CNum i; - for (i = 0; i < numFolders; i++) - { - CFolder &folder = folders[i]; - CNum numOutStreams = folder.GetNumOutStreams(); - folder.UnPackSizes.Reserve(numOutStreams); - for (CNum j = 0; j < numOutStreams; j++) - folder.UnPackSizes.Add(ReadNumber()); - } - - for (;;) - { - UInt64 type = ReadID(); - if (type == NID::kEnd) - return; - if (type == NID::kCRC) - { - CRecordVector crcsDefined; - CRecordVector crcs; - ReadHashDigests(numFolders, crcsDefined, crcs); - for(i = 0; i < numFolders; i++) - { - CFolder &folder = folders[i]; - folder.UnPackCRCDefined = crcsDefined[i]; - folder.UnPackCRC = crcs[i]; - } - continue; - } - SkeepData(); - } -} - -void CInArchive::ReadSubStreamsInfo( - const CObjectVector &folders, - CRecordVector &numUnPackStreamsInFolders, - CRecordVector &unPackSizes, - CRecordVector &digestsDefined, - CRecordVector &digests) -{ - numUnPackStreamsInFolders.Clear(); - numUnPackStreamsInFolders.Reserve(folders.Size()); - UInt64 type; - for (;;) - { - type = ReadID(); - if (type == NID::kNumUnPackStream) - { - for(int i = 0; i < folders.Size(); i++) - numUnPackStreamsInFolders.Add(ReadNum()); - continue; - } - if (type == NID::kCRC || type == NID::kSize) - break; - if (type == NID::kEnd) - break; - SkeepData(); - } - - if (numUnPackStreamsInFolders.IsEmpty()) - for(int i = 0; i < folders.Size(); i++) - numUnPackStreamsInFolders.Add(1); - - int i; - for(i = 0; i < numUnPackStreamsInFolders.Size(); i++) - { - // v3.13 incorrectly worked with empty folders - // v4.07: we check that folder is empty - CNum numSubstreams = numUnPackStreamsInFolders[i]; - if (numSubstreams == 0) - continue; - UInt64 sum = 0; - for (CNum j = 1; j < numSubstreams; j++) - if (type == NID::kSize) - { - UInt64 size = ReadNumber(); - unPackSizes.Add(size); - sum += size; - } - unPackSizes.Add(folders[i].GetUnPackSize() - sum); - } - if (type == NID::kSize) - type = ReadID(); - - int numDigests = 0; - int numDigestsTotal = 0; - for(i = 0; i < folders.Size(); i++) - { - CNum numSubstreams = numUnPackStreamsInFolders[i]; - if (numSubstreams != 1 || !folders[i].UnPackCRCDefined) - numDigests += numSubstreams; - numDigestsTotal += numSubstreams; - } - - for (;;) - { - if (type == NID::kCRC) - { - CRecordVector digestsDefined2; - CRecordVector digests2; - ReadHashDigests(numDigests, digestsDefined2, digests2); - int digestIndex = 0; - for (i = 0; i < folders.Size(); i++) - { - CNum numSubstreams = numUnPackStreamsInFolders[i]; - const CFolder &folder = folders[i]; - if (numSubstreams == 1 && folder.UnPackCRCDefined) - { - digestsDefined.Add(true); - digests.Add(folder.UnPackCRC); - } - else - for (CNum j = 0; j < numSubstreams; j++, digestIndex++) - { - digestsDefined.Add(digestsDefined2[digestIndex]); - digests.Add(digests2[digestIndex]); - } - } - } - else if (type == NID::kEnd) - { - if (digestsDefined.IsEmpty()) - { - digestsDefined.Clear(); - digests.Clear(); - for (int i = 0; i < numDigestsTotal; i++) - { - digestsDefined.Add(false); - digests.Add(0); - } - } - return; - } - else - SkeepData(); - type = ReadID(); - } -} - -void CInArchive::ReadStreamsInfo( - const CObjectVector *dataVector, - UInt64 &dataOffset, - CRecordVector &packSizes, - CRecordVector &packCRCsDefined, - CRecordVector &packCRCs, - CObjectVector &folders, - CRecordVector &numUnPackStreamsInFolders, - CRecordVector &unPackSizes, - CRecordVector &digestsDefined, - CRecordVector &digests) -{ - for (;;) - { - UInt64 type = ReadID(); - if (type > ((UInt32)1 << 30)) - ThrowIncorrect(); - switch((UInt32)type) - { - case NID::kEnd: - return; - case NID::kPackInfo: - { - ReadPackInfo(dataOffset, packSizes, packCRCsDefined, packCRCs); - break; - } - case NID::kUnPackInfo: - { - ReadUnPackInfo(dataVector, folders); - break; - } - case NID::kSubStreamsInfo: - { - ReadSubStreamsInfo(folders, numUnPackStreamsInFolders, - unPackSizes, digestsDefined, digests); - break; - } - default: - ThrowIncorrect(); - } - } -} - -void CInArchive::ReadBoolVector(int numItems, CBoolVector &v) -{ - v.Clear(); - v.Reserve(numItems); - Byte b = 0; - Byte mask = 0; - for(int i = 0; i < numItems; i++) - { - if (mask == 0) - { - b = ReadByte(); - mask = 0x80; - } - v.Add((b & mask) != 0); - mask >>= 1; - } -} - -void CInArchive::ReadBoolVector2(int numItems, CBoolVector &v) -{ - Byte allAreDefined = ReadByte(); - if (allAreDefined == 0) - { - ReadBoolVector(numItems, v); - return; - } - v.Clear(); - v.Reserve(numItems); - for (int i = 0; i < numItems; i++) - v.Add(true); -} - -void CInArchive::ReadTime(const CObjectVector &dataVector, - CObjectVector &files, UInt32 type) -{ - CBoolVector boolVector; - ReadBoolVector2(files.Size(), boolVector); - - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - - for(int i = 0; i < files.Size(); i++) - { - CFileItem &file = files[i]; - CArchiveFileTime fileTime; - fileTime.dwLowDateTime = 0; - fileTime.dwHighDateTime = 0; - bool defined = boolVector[i]; - if (defined) - { - fileTime.dwLowDateTime = ReadUInt32(); - fileTime.dwHighDateTime = ReadUInt32(); - } - switch(type) - { - case NID::kCreationTime: - file.IsCreationTimeDefined = defined; - if (defined) - file.CreationTime = fileTime; - break; - case NID::kLastWriteTime: - file.IsLastWriteTimeDefined = defined; - if (defined) - file.LastWriteTime = fileTime; - break; - case NID::kLastAccessTime: - file.IsLastAccessTimeDefined = defined; - if (defined) - file.LastAccessTime = fileTime; - break; - } - } -} - -HRESULT CInArchive::ReadAndDecodePackedStreams( - DECL_EXTERNAL_CODECS_LOC_VARS - UInt64 baseOffset, - UInt64 &dataOffset, CObjectVector &dataVector - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - ) -{ - CRecordVector packSizes; - CRecordVector packCRCsDefined; - CRecordVector packCRCs; - CObjectVector folders; - - CRecordVector numUnPackStreamsInFolders; - CRecordVector unPackSizes; - CRecordVector digestsDefined; - CRecordVector digests; - - ReadStreamsInfo(NULL, - dataOffset, - packSizes, - packCRCsDefined, - packCRCs, - folders, - numUnPackStreamsInFolders, - unPackSizes, - digestsDefined, - digests); - - // database.ArchiveInfo.DataStartPosition2 += database.ArchiveInfo.StartPositionAfterHeader; - - CNum packIndex = 0; - CDecoder decoder( - #ifdef _ST_MODE - false - #else - true - #endif - ); - UInt64 dataStartPos = baseOffset + dataOffset; - for(int i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - dataVector.Add(CByteBuffer()); - CByteBuffer &data = dataVector.Back(); - UInt64 unPackSize64 = folder.GetUnPackSize(); - size_t unPackSize = (size_t)unPackSize64; - if (unPackSize != unPackSize64) - ThrowUnsupported(); - data.SetCapacity(unPackSize); - - CSequentialOutStreamImp2 *outStreamSpec = new CSequentialOutStreamImp2; - CMyComPtr outStream = outStreamSpec; - outStreamSpec->Init(data, unPackSize); - - HRESULT result = decoder.Decode( - EXTERNAL_CODECS_LOC_VARS - _stream, dataStartPos, - &packSizes[packIndex], folder, outStream, NULL - #ifndef _NO_CRYPTO - , getTextPassword - #endif - #ifdef COMPRESS_MT - , false, 1 - #endif - ); - RINOK(result); - - if (folder.UnPackCRCDefined) - if (CrcCalc(data, unPackSize) != folder.UnPackCRC) - ThrowIncorrect(); - for (int j = 0; j < folder.PackStreams.Size(); j++) - dataStartPos += packSizes[packIndex++]; - } - return S_OK; -} - -HRESULT CInArchive::ReadHeader( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - ) -{ - UInt64 type = ReadID(); - - if (type == NID::kArchiveProperties) - { - ReadArchiveProperties(database.ArchiveInfo); - type = ReadID(); - } - - CObjectVector dataVector; - - if (type == NID::kAdditionalStreamsInfo) - { - HRESULT result = ReadAndDecodePackedStreams( - EXTERNAL_CODECS_LOC_VARS - database.ArchiveInfo.StartPositionAfterHeader, - database.ArchiveInfo.DataStartPosition2, - dataVector - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); - RINOK(result); - database.ArchiveInfo.DataStartPosition2 += database.ArchiveInfo.StartPositionAfterHeader; - type = ReadID(); - } - - CRecordVector unPackSizes; - CRecordVector digestsDefined; - CRecordVector digests; - - if (type == NID::kMainStreamsInfo) - { - ReadStreamsInfo(&dataVector, - database.ArchiveInfo.DataStartPosition, - database.PackSizes, - database.PackCRCsDefined, - database.PackCRCs, - database.Folders, - database.NumUnPackStreamsVector, - unPackSizes, - digestsDefined, - digests); - database.ArchiveInfo.DataStartPosition += database.ArchiveInfo.StartPositionAfterHeader; - type = ReadID(); - } - else - { - for(int i = 0; i < database.Folders.Size(); i++) - { - database.NumUnPackStreamsVector.Add(1); - CFolder &folder = database.Folders[i]; - unPackSizes.Add(folder.GetUnPackSize()); - digestsDefined.Add(folder.UnPackCRCDefined); - digests.Add(folder.UnPackCRC); - } - } - - database.Files.Clear(); - - if (type == NID::kEnd) - return S_OK; - if (type != NID::kFilesInfo) - ThrowIncorrect(); - - CNum numFiles = ReadNum(); - database.Files.Reserve(numFiles); - CNum i; - for(i = 0; i < numFiles; i++) - database.Files.Add(CFileItem()); - - database.ArchiveInfo.FileInfoPopIDs.Add(NID::kSize); - if (!database.PackSizes.IsEmpty()) - database.ArchiveInfo.FileInfoPopIDs.Add(NID::kPackInfo); - if (numFiles > 0 && !digests.IsEmpty()) - database.ArchiveInfo.FileInfoPopIDs.Add(NID::kCRC); - - CBoolVector emptyStreamVector; - emptyStreamVector.Reserve((int)numFiles); - for(i = 0; i < numFiles; i++) - emptyStreamVector.Add(false); - CBoolVector emptyFileVector; - CBoolVector antiFileVector; - CNum numEmptyStreams = 0; - - for (;;) - { - UInt64 type = ReadID(); - if (type == NID::kEnd) - break; - UInt64 size = ReadNumber(); - bool isKnownType = true; - if (type > ((UInt32)1 << 30)) - isKnownType = false; - else switch((UInt32)type) - { - case NID::kName: - { - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - for(int i = 0; i < database.Files.Size(); i++) - _inByteBack->ReadString(database.Files[i].Name); - break; - } - case NID::kWinAttributes: - { - CBoolVector boolVector; - ReadBoolVector2(database.Files.Size(), boolVector); - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - for(i = 0; i < numFiles; i++) - { - CFileItem &file = database.Files[i]; - file.AreAttributesDefined = boolVector[i]; - if (file.AreAttributesDefined) - file.Attributes = ReadUInt32(); - } - break; - } - case NID::kStartPos: - { - CBoolVector boolVector; - ReadBoolVector2(database.Files.Size(), boolVector); - CStreamSwitch streamSwitch; - streamSwitch.Set(this, &dataVector); - for(i = 0; i < numFiles; i++) - { - CFileItem &file = database.Files[i]; - file.IsStartPosDefined = boolVector[i]; - if (file.IsStartPosDefined) - file.StartPos = ReadUInt64(); - } - break; - } - case NID::kEmptyStream: - { - ReadBoolVector(numFiles, emptyStreamVector); - for (i = 0; i < (CNum)emptyStreamVector.Size(); i++) - if (emptyStreamVector[i]) - numEmptyStreams++; - emptyFileVector.Reserve(numEmptyStreams); - antiFileVector.Reserve(numEmptyStreams); - for (i = 0; i < numEmptyStreams; i++) - { - emptyFileVector.Add(false); - antiFileVector.Add(false); - } - break; - } - case NID::kEmptyFile: - { - ReadBoolVector(numEmptyStreams, emptyFileVector); - break; - } - case NID::kAnti: - { - ReadBoolVector(numEmptyStreams, antiFileVector); - break; - } - case NID::kCreationTime: - case NID::kLastWriteTime: - case NID::kLastAccessTime: - { - ReadTime(dataVector, database.Files, (UInt32)type); - break; - } - default: - isKnownType = false; - } - if (isKnownType) - database.ArchiveInfo.FileInfoPopIDs.Add(type); - else - SkeepData(size); - } - - CNum emptyFileIndex = 0; - CNum sizeIndex = 0; - for(i = 0; i < numFiles; i++) - { - CFileItem &file = database.Files[i]; - file.HasStream = !emptyStreamVector[i]; - if(file.HasStream) - { - file.IsDirectory = false; - file.IsAnti = false; - file.UnPackSize = unPackSizes[sizeIndex]; - file.FileCRC = digests[sizeIndex]; - file.IsFileCRCDefined = digestsDefined[sizeIndex]; - sizeIndex++; - } - else - { - file.IsDirectory = !emptyFileVector[emptyFileIndex]; - file.IsAnti = antiFileVector[emptyFileIndex]; - emptyFileIndex++; - file.UnPackSize = 0; - file.IsFileCRCDefined = false; - } - } - return S_OK; -} - - -void CArchiveDatabaseEx::FillFolderStartPackStream() -{ - FolderStartPackStreamIndex.Clear(); - FolderStartPackStreamIndex.Reserve(Folders.Size()); - CNum startPos = 0; - for(int i = 0; i < Folders.Size(); i++) - { - FolderStartPackStreamIndex.Add(startPos); - startPos += (CNum)Folders[i].PackStreams.Size(); - } -} - -void CArchiveDatabaseEx::FillStartPos() -{ - PackStreamStartPositions.Clear(); - PackStreamStartPositions.Reserve(PackSizes.Size()); - UInt64 startPos = 0; - for(int i = 0; i < PackSizes.Size(); i++) - { - PackStreamStartPositions.Add(startPos); - startPos += PackSizes[i]; - } -} - -void CArchiveDatabaseEx::FillFolderStartFileIndex() -{ - FolderStartFileIndex.Clear(); - FolderStartFileIndex.Reserve(Folders.Size()); - FileIndexToFolderIndexMap.Clear(); - FileIndexToFolderIndexMap.Reserve(Files.Size()); - - int folderIndex = 0; - CNum indexInFolder = 0; - for (int i = 0; i < Files.Size(); i++) - { - const CFileItem &file = Files[i]; - bool emptyStream = !file.HasStream; - if (emptyStream && indexInFolder == 0) - { - FileIndexToFolderIndexMap.Add(kNumNoIndex); - continue; - } - if (indexInFolder == 0) - { - // v3.13 incorrectly worked with empty folders - // v4.07: Loop for skipping empty folders - for (;;) - { - if (folderIndex >= Folders.Size()) - ThrowIncorrect(); - FolderStartFileIndex.Add(i); // check it - if (NumUnPackStreamsVector[folderIndex] != 0) - break; - folderIndex++; - } - } - FileIndexToFolderIndexMap.Add(folderIndex); - if (emptyStream) - continue; - indexInFolder++; - if (indexInFolder >= NumUnPackStreamsVector[folderIndex]) - { - folderIndex++; - indexInFolder = 0; - } - } -} - -HRESULT CInArchive::ReadDatabase2( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - ) -{ - database.Clear(); - database.ArchiveInfo.StartPosition = _arhiveBeginStreamPosition; - - database.ArchiveInfo.Version.Major = _header[6]; - database.ArchiveInfo.Version.Minor = _header[7]; - - if (database.ArchiveInfo.Version.Major != kMajorVersion) - ThrowUnsupportedVersion(); - - UInt32 crcFromArchive = GetUInt32FromMem(_header + 8); - UInt64 nextHeaderOffset = GetUInt64FromMem(_header + 0xC); - UInt64 nextHeaderSize = GetUInt64FromMem(_header + 0x14); - UInt32 nextHeaderCRC = GetUInt32FromMem(_header + 0x1C); - UInt32 crc = CrcCalc(_header + 0xC, 20); - - #ifdef FORMAT_7Z_RECOVERY - if (crcFromArchive == 0 && nextHeaderOffset == 0 && nextHeaderSize == 0 && nextHeaderCRC == 0) - { - UInt64 cur, cur2; - RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &cur)); - const int kCheckSize = 500; - Byte buf[kCheckSize]; - RINOK(_stream->Seek(0, STREAM_SEEK_END, &cur2)); - int checkSize = kCheckSize; - if (cur2 - cur < kCheckSize) - checkSize = (int)(cur2 - cur); - RINOK(_stream->Seek(-checkSize, STREAM_SEEK_END, &cur2)); - - UInt32 realProcessedSize; - RINOK(_stream->Read(buf, (UInt32)kCheckSize, &realProcessedSize)); - - int i; - for (i = (int)realProcessedSize - 2; i >= 0; i--) - if (buf[i] == 0x17 && buf[i + 1] == 0x6 || buf[i] == 0x01 && buf[i + 1] == 0x04) - break; - if (i < 0) - return S_FALSE; - nextHeaderSize = realProcessedSize - i; - nextHeaderOffset = cur2 - cur + i; - nextHeaderCRC = CrcCalc(buf + i, (size_t)nextHeaderSize); - RINOK(_stream->Seek(cur, STREAM_SEEK_SET, NULL)); - } - #endif - - #ifdef FORMAT_7Z_RECOVERY - crcFromArchive = crc; - #endif - - database.ArchiveInfo.StartPositionAfterHeader = _arhiveBeginStreamPosition + kHeaderSize; - - if (crc != crcFromArchive) - ThrowIncorrect(); - - if (nextHeaderSize == 0) - return S_OK; - - if (nextHeaderSize > (UInt64)0xFFFFFFFF) - return S_FALSE; - - RINOK(_stream->Seek(nextHeaderOffset, STREAM_SEEK_CUR, NULL)); - - CByteBuffer buffer2; - buffer2.SetCapacity((size_t)nextHeaderSize); - - UInt32 realProcessedSize; - RINOK(_stream->Read(buffer2, (UInt32)nextHeaderSize, &realProcessedSize)); - if (realProcessedSize != (UInt32)nextHeaderSize) - return S_FALSE; - if (CrcCalc(buffer2, (UInt32)nextHeaderSize) != nextHeaderCRC) - ThrowIncorrect(); - - CStreamSwitch streamSwitch; - streamSwitch.Set(this, buffer2); - - CObjectVector dataVector; - - for (;;) - { - UInt64 type = ReadID(); - if (type == NID::kHeader) - break; - if (type != NID::kEncodedHeader) - ThrowIncorrect(); - HRESULT result = ReadAndDecodePackedStreams( - EXTERNAL_CODECS_LOC_VARS - database.ArchiveInfo.StartPositionAfterHeader, - database.ArchiveInfo.DataStartPosition2, - dataVector - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); - RINOK(result); - if (dataVector.Size() == 0) - return S_OK; - if (dataVector.Size() > 1) - ThrowIncorrect(); - streamSwitch.Remove(); - streamSwitch.Set(this, dataVector.Front()); - } - - return ReadHeader( - EXTERNAL_CODECS_LOC_VARS - database - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); -} - -HRESULT CInArchive::ReadDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - ) -{ - try - { - return ReadDatabase2( - EXTERNAL_CODECS_LOC_VARS database - #ifndef _NO_CRYPTO - , getTextPassword - #endif - ); - } - catch(CInArchiveException &) { return S_FALSE; } -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.h deleted file mode 100644 index aae43506..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zIn.h +++ /dev/null @@ -1,235 +0,0 @@ -// 7zIn.h - -#ifndef __7Z_IN_H -#define __7Z_IN_H - -#include "../../../Common/MyCom.h" -#include "../../IStream.h" -#include "../../IPassword.h" -#include "../../Common/CreateCoder.h" -#include "../../Common/InBuffer.h" - -#include "7zItem.h" - -namespace NArchive { -namespace N7z { - -struct CInArchiveInfo -{ - CArchiveVersion Version; - UInt64 StartPosition; - UInt64 StartPositionAfterHeader; - UInt64 DataStartPosition; - UInt64 DataStartPosition2; - CRecordVector FileInfoPopIDs; - void Clear() - { - FileInfoPopIDs.Clear(); - } -}; - -struct CArchiveDatabaseEx: public CArchiveDatabase -{ - CInArchiveInfo ArchiveInfo; - CRecordVector PackStreamStartPositions; - CRecordVector FolderStartPackStreamIndex; - CRecordVector FolderStartFileIndex; - CRecordVector FileIndexToFolderIndexMap; - - void Clear() - { - CArchiveDatabase::Clear(); - ArchiveInfo.Clear(); - PackStreamStartPositions.Clear(); - FolderStartPackStreamIndex.Clear(); - FolderStartFileIndex.Clear(); - FileIndexToFolderIndexMap.Clear(); - } - - void FillFolderStartPackStream(); - void FillStartPos(); - void FillFolderStartFileIndex(); - - void Fill() - { - FillFolderStartPackStream(); - FillStartPos(); - FillFolderStartFileIndex(); - } - - UInt64 GetFolderStreamPos(int folderIndex, int indexInFolder) const - { - return ArchiveInfo.DataStartPosition + - PackStreamStartPositions[FolderStartPackStreamIndex[folderIndex] + indexInFolder]; - } - - UInt64 GetFolderFullPackSize(int folderIndex) const - { - CNum packStreamIndex = FolderStartPackStreamIndex[folderIndex]; - const CFolder &folder = Folders[folderIndex]; - UInt64 size = 0; - for (int i = 0; i < folder.PackStreams.Size(); i++) - size += PackSizes[packStreamIndex + i]; - return size; - } - - UInt64 GetFolderPackStreamSize(int folderIndex, int streamIndex) const - { - return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; - } - - UInt64 GetFilePackSize(CNum fileIndex) const - { - CNum folderIndex = FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex != kNumNoIndex) - if (FolderStartFileIndex[folderIndex] == fileIndex) - return GetFolderFullPackSize(folderIndex); - return 0; - } -}; - -class CInByte2 -{ - const Byte *_buffer; - size_t _size; - size_t _pos; -public: - void Init(const Byte *buffer, size_t size) - { - _buffer = buffer; - _size = size; - _pos = 0; - } - Byte ReadByte(); - void ReadBytes(Byte *data, size_t size); - void SkeepData(UInt64 size); - void SkeepData(); - UInt64 ReadNumber(); - CNum ReadNum(); - UInt32 ReadUInt32(); - UInt64 ReadUInt64(); - void ReadString(UString &s); -}; - -class CStreamSwitch; - -const UInt32 kHeaderSize = 32; - -class CInArchive -{ - friend class CStreamSwitch; - - CMyComPtr _stream; - - CObjectVector _inByteVector; - CInByte2 *_inByteBack; - - UInt64 _arhiveBeginStreamPosition; - - Byte _header[kHeaderSize]; - - void AddByteStream(const Byte *buffer, size_t size) - { - _inByteVector.Add(CInByte2()); - _inByteBack = &_inByteVector.Back(); - _inByteBack->Init(buffer, size); - } - - void DeleteByteStream() - { - _inByteVector.DeleteBack(); - if (!_inByteVector.IsEmpty()) - _inByteBack = &_inByteVector.Back(); - } - -private: - HRESULT FindAndReadSignature(IInStream *stream, const UInt64 *searchHeaderSizeLimit); - - void ReadBytes(Byte *data, size_t size) { _inByteBack->ReadBytes(data, size); } - Byte ReadByte() { return _inByteBack->ReadByte(); } - UInt64 ReadNumber() { return _inByteBack->ReadNumber(); } - CNum ReadNum() { return _inByteBack->ReadNum(); } - UInt64 ReadID() { return _inByteBack->ReadNumber(); } - UInt32 ReadUInt32() { return _inByteBack->ReadUInt32(); } - UInt64 ReadUInt64() { return _inByteBack->ReadUInt64(); } - void SkeepData(UInt64 size) { _inByteBack->SkeepData(size); } - void SkeepData() { _inByteBack->SkeepData(); } - void WaitAttribute(UInt64 attribute); - - void ReadArchiveProperties(CInArchiveInfo &archiveInfo); - void GetNextFolderItem(CFolder &itemInfo); - void ReadHashDigests(int numItems, - CRecordVector &digestsDefined, CRecordVector &digests); - - void ReadPackInfo( - UInt64 &dataOffset, - CRecordVector &packSizes, - CRecordVector &packCRCsDefined, - CRecordVector &packCRCs); - - void ReadUnPackInfo( - const CObjectVector *dataVector, - CObjectVector &folders); - - void ReadSubStreamsInfo( - const CObjectVector &folders, - CRecordVector &numUnPackStreamsInFolders, - CRecordVector &unPackSizes, - CRecordVector &digestsDefined, - CRecordVector &digests); - - void ReadStreamsInfo( - const CObjectVector *dataVector, - UInt64 &dataOffset, - CRecordVector &packSizes, - CRecordVector &packCRCsDefined, - CRecordVector &packCRCs, - CObjectVector &folders, - CRecordVector &numUnPackStreamsInFolders, - CRecordVector &unPackSizes, - CRecordVector &digestsDefined, - CRecordVector &digests); - - - void ReadBoolVector(int numItems, CBoolVector &v); - void ReadBoolVector2(int numItems, CBoolVector &v); - void ReadTime(const CObjectVector &dataVector, - CObjectVector &files, UInt32 type); - HRESULT ReadAndDecodePackedStreams( - DECL_EXTERNAL_CODECS_LOC_VARS - UInt64 baseOffset, UInt64 &dataOffset, - CObjectVector &dataVector - #ifndef _NO_CRYPTO - , ICryptoGetTextPassword *getTextPassword - #endif - ); - HRESULT ReadHeader( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword - #endif - ); - HRESULT ReadDatabase2( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword - #endif - ); -public: - HRESULT Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit); // S_FALSE means is not archive - void Close(); - - HRESULT ReadDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - CArchiveDatabaseEx &database - #ifndef _NO_CRYPTO - ,ICryptoGetTextPassword *getTextPassword - #endif - ); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zItem.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zItem.h deleted file mode 100644 index 31c5ce2d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zItem.h +++ /dev/null @@ -1,184 +0,0 @@ -// 7zItem.h - -#ifndef __7Z_ITEM_H -#define __7Z_ITEM_H - -#include "../../../Common/Buffer.h" -#include "../../../Common/MyString.h" -#include "../../Common/MethodId.h" -#include "7zHeader.h" - -namespace NArchive { -namespace N7z { - -typedef UInt32 CNum; -const CNum kNumMax = 0x7FFFFFFF; -const CNum kNumNoIndex = 0xFFFFFFFF; - -struct CCoderInfo -{ - CMethodId MethodID; - CByteBuffer Properties; - CNum NumInStreams; - CNum NumOutStreams; - bool IsSimpleCoder() const { return (NumInStreams == 1) && (NumOutStreams == 1); } -}; - -struct CBindPair -{ - CNum InIndex; - CNum OutIndex; -}; - -struct CFolder -{ - CObjectVector Coders; - CRecordVector BindPairs; - CRecordVector PackStreams; - CRecordVector UnPackSizes; - UInt32 UnPackCRC; - bool UnPackCRCDefined; - - CFolder(): UnPackCRCDefined(false) {} - - UInt64 GetUnPackSize() const // test it - { - if (UnPackSizes.IsEmpty()) - return 0; - for (int i = UnPackSizes.Size() - 1; i >= 0; i--) - if (FindBindPairForOutStream(i) < 0) - return UnPackSizes[i]; - throw 1; - } - - CNum GetNumOutStreams() const - { - CNum result = 0; - for (int i = 0; i < Coders.Size(); i++) - result += Coders[i].NumOutStreams; - return result; - } - - int FindBindPairForInStream(CNum inStreamIndex) const - { - for(int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].InIndex == inStreamIndex) - return i; - return -1; - } - int FindBindPairForOutStream(CNum outStreamIndex) const - { - for(int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].OutIndex == outStreamIndex) - return i; - return -1; - } - int FindPackStreamArrayIndex(CNum inStreamIndex) const - { - for(int i = 0; i < PackStreams.Size(); i++) - if (PackStreams[i] == inStreamIndex) - return i; - return -1; - } -}; - -typedef FILETIME CArchiveFileTime; - -class CFileItem -{ -public: - CArchiveFileTime CreationTime; - CArchiveFileTime LastWriteTime; - CArchiveFileTime LastAccessTime; - UInt64 UnPackSize; - UInt64 StartPos; - UInt32 Attributes; - UInt32 FileCRC; - UString Name; - - bool HasStream; // Test it !!! it means that there is - // stream in some folder. It can be empty stream - bool IsDirectory; - bool IsAnti; - bool IsFileCRCDefined; - bool AreAttributesDefined; - bool IsCreationTimeDefined; - bool IsLastWriteTimeDefined; - bool IsLastAccessTimeDefined; - bool IsStartPosDefined; - - /* - const bool HasStream() const { - return !IsDirectory && !IsAnti && UnPackSize != 0; } - */ - CFileItem(): - HasStream(true), - IsDirectory(false), - IsAnti(false), - IsFileCRCDefined(false), - AreAttributesDefined(false), - IsCreationTimeDefined(false), - IsLastWriteTimeDefined(false), - IsLastAccessTimeDefined(false), - IsStartPosDefined(false) - {} - void SetAttributes(UInt32 attributes) - { - AreAttributesDefined = true; - Attributes = attributes; - } - void SetCreationTime(const CArchiveFileTime &creationTime) - { - IsCreationTimeDefined = true; - CreationTime = creationTime; - } - void SetLastWriteTime(const CArchiveFileTime &lastWriteTime) - { - IsLastWriteTimeDefined = true; - LastWriteTime = lastWriteTime; - } - void SetLastAccessTime(const CArchiveFileTime &lastAccessTime) - { - IsLastAccessTimeDefined = true; - LastAccessTime = lastAccessTime; - } -}; - -struct CArchiveDatabase -{ - CRecordVector PackSizes; - CRecordVector PackCRCsDefined; - CRecordVector PackCRCs; - CObjectVector Folders; - CRecordVector NumUnPackStreamsVector; - CObjectVector Files; - void Clear() - { - PackSizes.Clear(); - PackCRCsDefined.Clear(); - PackCRCs.Clear(); - Folders.Clear(); - NumUnPackStreamsVector.Clear(); - Files.Clear(); - } - bool IsEmpty() const - { - return (PackSizes.IsEmpty() && - PackCRCsDefined.IsEmpty() && - PackCRCs.IsEmpty() && - Folders.IsEmpty() && - NumUnPackStreamsVector.IsEmpty() && - Files.IsEmpty()); - } - bool IsSolid() const - { - for (int i = 0; i < NumUnPackStreamsVector.Size(); i++) - if (NumUnPackStreamsVector[i] > 1) - return true; - return false; - } -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.cpp deleted file mode 100644 index a00cdf5c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.cpp +++ /dev/null @@ -1,1026 +0,0 @@ -// 7zOut.cpp - -#include "StdAfx.h" - -#include "../../../Common/AutoPtr.h" -#include "../../Common/StreamObjects.h" - -#include "7zOut.h" - -extern "C" -{ -#include "../../../../C/7zCrc.h" -} - -static HRESULT WriteBytes(ISequentialOutStream *stream, const void *data, size_t size) -{ - while (size > 0) - { - UInt32 curSize = (UInt32)MyMin(size, (size_t)0xFFFFFFFF); - UInt32 processedSize; - RINOK(stream->Write(data, curSize, &processedSize)); - if(processedSize == 0) - return E_FAIL; - data = (const void *)((const Byte *)data + processedSize); - size -= processedSize; - } - return S_OK; -} - -namespace NArchive { -namespace N7z { - -HRESULT COutArchive::WriteDirect(const void *data, UInt32 size) -{ - return ::WriteBytes(SeqStream, data, size); -} - -UInt32 CrcUpdateUInt32(UInt32 crc, UInt32 value) -{ - for (int i = 0; i < 4; i++, value >>= 8) - crc = CRC_UPDATE_BYTE(crc, (Byte)value); - return crc; -} - -UInt32 CrcUpdateUInt64(UInt32 crc, UInt64 value) -{ - for (int i = 0; i < 8; i++, value >>= 8) - crc = CRC_UPDATE_BYTE(crc, (Byte)value); - return crc; -} - -HRESULT COutArchive::WriteDirectUInt32(UInt32 value) -{ - for (int i = 0; i < 4; i++) - { - RINOK(WriteDirectByte((Byte)value)); - value >>= 8; - } - return S_OK; -} - -HRESULT COutArchive::WriteDirectUInt64(UInt64 value) -{ - for (int i = 0; i < 8; i++) - { - RINOK(WriteDirectByte((Byte)value)); - value >>= 8; - } - return S_OK; -} - -HRESULT COutArchive::WriteSignature() -{ - RINOK(WriteDirect(kSignature, kSignatureSize)); - RINOK(WriteDirectByte(kMajorVersion)); - return WriteDirectByte(2); -} - -#ifdef _7Z_VOL -HRESULT COutArchive::WriteFinishSignature() -{ - RINOK(WriteDirect(kFinishSignature, kSignatureSize)); - CArchiveVersion av; - av.Major = kMajorVersion; - av.Minor = 2; - RINOK(WriteDirectByte(av.Major)); - return WriteDirectByte(av.Minor); -} -#endif - -HRESULT COutArchive::WriteStartHeader(const CStartHeader &h) -{ - UInt32 crc = CRC_INIT_VAL; - crc = CrcUpdateUInt64(crc, h.NextHeaderOffset); - crc = CrcUpdateUInt64(crc, h.NextHeaderSize); - crc = CrcUpdateUInt32(crc, h.NextHeaderCRC); - RINOK(WriteDirectUInt32(CRC_GET_DIGEST(crc))); - RINOK(WriteDirectUInt64(h.NextHeaderOffset)); - RINOK(WriteDirectUInt64(h.NextHeaderSize)); - return WriteDirectUInt32(h.NextHeaderCRC); -} - -#ifdef _7Z_VOL -HRESULT COutArchive::WriteFinishHeader(const CFinishHeader &h) -{ - CCRC crc; - crc.UpdateUInt64(h.NextHeaderOffset); - crc.UpdateUInt64(h.NextHeaderSize); - crc.UpdateUInt32(h.NextHeaderCRC); - crc.UpdateUInt64(h.ArchiveStartOffset); - crc.UpdateUInt64(h.AdditionalStartBlockSize); - RINOK(WriteDirectUInt32(crc.GetDigest())); - RINOK(WriteDirectUInt64(h.NextHeaderOffset)); - RINOK(WriteDirectUInt64(h.NextHeaderSize)); - RINOK(WriteDirectUInt32(h.NextHeaderCRC)); - RINOK(WriteDirectUInt64(h.ArchiveStartOffset)); - return WriteDirectUInt64(h.AdditionalStartBlockSize); -} -#endif - -HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker) -{ - Close(); - #ifdef _7Z_VOL - // endMarker = false; - _endMarker = endMarker; - #endif - SeqStream = stream; - if (!endMarker) - { - SeqStream.QueryInterface(IID_IOutStream, &Stream); - if (!Stream) - { - return E_NOTIMPL; - // endMarker = true; - } - } - #ifdef _7Z_VOL - if (endMarker) - { - /* - CStartHeader sh; - sh.NextHeaderOffset = (UInt32)(Int32)-1; - sh.NextHeaderSize = (UInt32)(Int32)-1; - sh.NextHeaderCRC = 0; - WriteStartHeader(sh); - */ - } - else - #endif - { - if (!Stream) - return E_FAIL; - RINOK(WriteSignature()); - RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &_prefixHeaderPos)); - } - return S_OK; -} - -void COutArchive::Close() -{ - SeqStream.Release(); - Stream.Release(); -} - -HRESULT COutArchive::SkeepPrefixArchiveHeader() -{ - #ifdef _7Z_VOL - if (_endMarker) - return S_OK; - #endif - return Stream->Seek(24, STREAM_SEEK_CUR, NULL); -} - -HRESULT COutArchive::WriteBytes(const void *data, size_t size) -{ - if (_mainMode) - { - if (_dynamicMode) - _dynamicBuffer.Write(data, size); - else - _outByte.WriteBytes(data, size); - _crc = CrcUpdate(_crc, data, size); - } - else - { - if (_countMode) - _countSize += size; - else - RINOK(_outByte2.Write(data, size)); - } - return S_OK; -} - -HRESULT COutArchive::WriteBytes(const CByteBuffer &data) -{ - return WriteBytes(data, data.GetCapacity()); -} - -HRESULT COutArchive::WriteByte(Byte b) -{ - return WriteBytes(&b, 1); -} - -HRESULT COutArchive::WriteUInt32(UInt32 value) -{ - for (int i = 0; i < 4; i++) - { - RINOK(WriteByte((Byte)value)); - value >>= 8; - } - return S_OK; -} - -HRESULT COutArchive::WriteNumber(UInt64 value) -{ - Byte firstByte = 0; - Byte mask = 0x80; - int i; - for (i = 0; i < 8; i++) - { - if (value < ((UInt64(1) << ( 7 * (i + 1))))) - { - firstByte |= Byte(value >> (8 * i)); - break; - } - firstByte |= mask; - mask >>= 1; - } - RINOK(WriteByte(firstByte)); - for (;i > 0; i--) - { - RINOK(WriteByte((Byte)value)); - value >>= 8; - } - return S_OK; -} - -#ifdef _7Z_VOL -static UInt32 GetBigNumberSize(UInt64 value) -{ - int i; - for (i = 0; i < 8; i++) - if (value < ((UInt64(1) << ( 7 * (i + 1))))) - break; - return 1 + i; -} - -UInt32 COutArchive::GetVolHeadersSize(UInt64 dataSize, int nameLength, bool props) -{ - UInt32 result = GetBigNumberSize(dataSize) * 2 + 41; - if (nameLength != 0) - { - nameLength = (nameLength + 1) * 2; - result += nameLength + GetBigNumberSize(nameLength) + 2; - } - if (props) - { - result += 20; - } - if (result >= 128) - result++; - result += kSignatureSize + 2 + kFinishHeaderSize; - return result; -} - -UInt64 COutArchive::GetVolPureSize(UInt64 volSize, int nameLength, bool props) -{ - UInt32 headersSizeBase = COutArchive::GetVolHeadersSize(1, nameLength, props); - int testSize; - if (volSize > headersSizeBase) - testSize = volSize - headersSizeBase; - else - testSize = 1; - UInt32 headersSize = COutArchive::GetVolHeadersSize(testSize, nameLength, props); - UInt64 pureSize = 1; - if (volSize > headersSize) - pureSize = volSize - headersSize; - return pureSize; -} -#endif - -HRESULT COutArchive::WriteFolder(const CFolder &folder) -{ - RINOK(WriteNumber(folder.Coders.Size())); - int i; - for (i = 0; i < folder.Coders.Size(); i++) - { - const CCoderInfo &coder = folder.Coders[i]; - { - size_t propertiesSize = coder.Properties.GetCapacity(); - - UInt64 id = coder.MethodID; - int idSize; - for (idSize = 1; idSize < sizeof(id); idSize++) - if ((id >> (8 * idSize)) == 0) - break; - BYTE longID[15]; - for (int t = idSize - 1; t >= 0 ; t--, id >>= 8) - longID[t] = (Byte)(id & 0xFF); - Byte b; - b = (Byte)(idSize & 0xF); - bool isComplex = !coder.IsSimpleCoder(); - b |= (isComplex ? 0x10 : 0); - b |= ((propertiesSize != 0) ? 0x20 : 0 ); - RINOK(WriteByte(b)); - RINOK(WriteBytes(longID, idSize)); - if (isComplex) - { - RINOK(WriteNumber(coder.NumInStreams)); - RINOK(WriteNumber(coder.NumOutStreams)); - } - if (propertiesSize == 0) - continue; - RINOK(WriteNumber(propertiesSize)); - RINOK(WriteBytes(coder.Properties, propertiesSize)); - } - } - for (i = 0; i < folder.BindPairs.Size(); i++) - { - const CBindPair &bindPair = folder.BindPairs[i]; - RINOK(WriteNumber(bindPair.InIndex)); - RINOK(WriteNumber(bindPair.OutIndex)); - } - if (folder.PackStreams.Size() > 1) - for (i = 0; i < folder.PackStreams.Size(); i++) - { - RINOK(WriteNumber(folder.PackStreams[i])); - } - return S_OK; -} - -HRESULT COutArchive::WriteBoolVector(const CBoolVector &boolVector) -{ - Byte b = 0; - Byte mask = 0x80; - for(int i = 0; i < boolVector.Size(); i++) - { - if (boolVector[i]) - b |= mask; - mask >>= 1; - if (mask == 0) - { - RINOK(WriteByte(b)); - mask = 0x80; - b = 0; - } - } - if (mask != 0x80) - { - RINOK(WriteByte(b)); - } - return S_OK; -} - - -HRESULT COutArchive::WriteHashDigests( - const CRecordVector &digestsDefined, - const CRecordVector &digests) -{ - int numDefined = 0; - int i; - for(i = 0; i < digestsDefined.Size(); i++) - if (digestsDefined[i]) - numDefined++; - if (numDefined == 0) - return S_OK; - - RINOK(WriteByte(NID::kCRC)); - if (numDefined == digestsDefined.Size()) - { - RINOK(WriteByte(1)); - } - else - { - RINOK(WriteByte(0)); - RINOK(WriteBoolVector(digestsDefined)); - } - for(i = 0; i < digests.Size(); i++) - { - if(digestsDefined[i]) - RINOK(WriteUInt32(digests[i])); - } - return S_OK; -} - -HRESULT COutArchive::WritePackInfo( - UInt64 dataOffset, - const CRecordVector &packSizes, - const CRecordVector &packCRCsDefined, - const CRecordVector &packCRCs) -{ - if (packSizes.IsEmpty()) - return S_OK; - RINOK(WriteByte(NID::kPackInfo)); - RINOK(WriteNumber(dataOffset)); - RINOK(WriteNumber(packSizes.Size())); - RINOK(WriteByte(NID::kSize)); - for(int i = 0; i < packSizes.Size(); i++) - RINOK(WriteNumber(packSizes[i])); - - RINOK(WriteHashDigests(packCRCsDefined, packCRCs)); - - return WriteByte(NID::kEnd); -} - -HRESULT COutArchive::WriteUnPackInfo(const CObjectVector &folders) -{ - if (folders.IsEmpty()) - return S_OK; - - RINOK(WriteByte(NID::kUnPackInfo)); - - RINOK(WriteByte(NID::kFolder)); - RINOK(WriteNumber(folders.Size())); - { - RINOK(WriteByte(0)); - for(int i = 0; i < folders.Size(); i++) - RINOK(WriteFolder(folders[i])); - } - - RINOK(WriteByte(NID::kCodersUnPackSize)); - int i; - for(i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - for (int j = 0; j < folder.UnPackSizes.Size(); j++) - RINOK(WriteNumber(folder.UnPackSizes[j])); - } - - CRecordVector unPackCRCsDefined; - CRecordVector unPackCRCs; - for(i = 0; i < folders.Size(); i++) - { - const CFolder &folder = folders[i]; - unPackCRCsDefined.Add(folder.UnPackCRCDefined); - unPackCRCs.Add(folder.UnPackCRC); - } - RINOK(WriteHashDigests(unPackCRCsDefined, unPackCRCs)); - - return WriteByte(NID::kEnd); -} - -HRESULT COutArchive::WriteSubStreamsInfo( - const CObjectVector &folders, - const CRecordVector &numUnPackStreamsInFolders, - const CRecordVector &unPackSizes, - const CRecordVector &digestsDefined, - const CRecordVector &digests) -{ - RINOK(WriteByte(NID::kSubStreamsInfo)); - - int i; - for(i = 0; i < numUnPackStreamsInFolders.Size(); i++) - { - if (numUnPackStreamsInFolders[i] != 1) - { - RINOK(WriteByte(NID::kNumUnPackStream)); - for(i = 0; i < numUnPackStreamsInFolders.Size(); i++) - RINOK(WriteNumber(numUnPackStreamsInFolders[i])); - break; - } - } - - - bool needFlag = true; - CNum index = 0; - for(i = 0; i < numUnPackStreamsInFolders.Size(); i++) - for (CNum j = 0; j < numUnPackStreamsInFolders[i]; j++) - { - if (j + 1 != numUnPackStreamsInFolders[i]) - { - if (needFlag) - RINOK(WriteByte(NID::kSize)); - needFlag = false; - RINOK(WriteNumber(unPackSizes[index])); - } - index++; - } - - CRecordVector digestsDefined2; - CRecordVector digests2; - - int digestIndex = 0; - for (i = 0; i < folders.Size(); i++) - { - int numSubStreams = (int)numUnPackStreamsInFolders[i]; - if (numSubStreams == 1 && folders[i].UnPackCRCDefined) - digestIndex++; - else - for (int j = 0; j < numSubStreams; j++, digestIndex++) - { - digestsDefined2.Add(digestsDefined[digestIndex]); - digests2.Add(digests[digestIndex]); - } - } - RINOK(WriteHashDigests(digestsDefined2, digests2)); - return WriteByte(NID::kEnd); -} - -HRESULT COutArchive::WriteTime( - const CObjectVector &files, Byte type) -{ - ///////////////////////////////////////////////// - // CreationTime - CBoolVector boolVector; - boolVector.Reserve(files.Size()); - bool thereAreDefined = false; - bool allDefined = true; - int i; - for(i = 0; i < files.Size(); i++) - { - const CFileItem &item = files[i]; - bool defined; - switch(type) - { - case NID::kCreationTime: - defined = item.IsCreationTimeDefined; - break; - case NID::kLastWriteTime: - defined = item.IsLastWriteTimeDefined; - break; - case NID::kLastAccessTime: - defined = item.IsLastAccessTimeDefined; - break; - default: - throw 1; - } - boolVector.Add(defined); - thereAreDefined = (thereAreDefined || defined); - allDefined = (allDefined && defined); - } - if (!thereAreDefined) - return S_OK; - RINOK(WriteByte(type)); - size_t dataSize = 1 + 1; - dataSize += files.Size() * 8; - if (allDefined) - { - RINOK(WriteNumber(dataSize)); - WriteByte(1); - } - else - { - RINOK(WriteNumber(1 + (boolVector.Size() + 7) / 8 + dataSize)); - WriteByte(0); - RINOK(WriteBoolVector(boolVector)); - } - RINOK(WriteByte(0)); - for(i = 0; i < files.Size(); i++) - { - if (boolVector[i]) - { - const CFileItem &item = files[i]; - CArchiveFileTime timeValue; - timeValue.dwLowDateTime = 0; - timeValue.dwHighDateTime = 0; - switch(type) - { - case NID::kCreationTime: - timeValue = item.CreationTime; - break; - case NID::kLastWriteTime: - timeValue = item.LastWriteTime; - break; - case NID::kLastAccessTime: - timeValue = item.LastAccessTime; - break; - } - RINOK(WriteUInt32(timeValue.dwLowDateTime)); - RINOK(WriteUInt32(timeValue.dwHighDateTime)); - } - } - return S_OK; -} - -HRESULT COutArchive::EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const Byte *data, size_t dataSize, - CRecordVector &packSizes, CObjectVector &folders) -{ - CSequentialInStreamImp *streamSpec = new CSequentialInStreamImp; - CMyComPtr stream = streamSpec; - streamSpec->Init(data, dataSize); - CFolder folderItem; - folderItem.UnPackCRCDefined = true; - folderItem.UnPackCRC = CrcCalc(data, dataSize); - UInt64 dataSize64 = dataSize; - RINOK(encoder.Encode( - EXTERNAL_CODECS_LOC_VARS - stream, NULL, &dataSize64, folderItem, SeqStream, packSizes, NULL)) - folders.Add(folderItem); - return S_OK; -} - -HRESULT COutArchive::EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const CByteBuffer &data, - CRecordVector &packSizes, CObjectVector &folders) -{ - return EncodeStream( - EXTERNAL_CODECS_LOC_VARS - encoder, data, data.GetCapacity(), packSizes, folders); -} - -static void WriteUInt32ToBuffer(Byte *data, UInt32 value) -{ - for (int i = 0; i < 4; i++) - { - *data++ = (Byte)value; - value >>= 8; - } -} - -static void WriteUInt64ToBuffer(Byte *data, UInt64 value) -{ - for (int i = 0; i < 8; i++) - { - *data++ = (Byte)value; - value >>= 8; - } -} - - -HRESULT COutArchive::WriteHeader( - const CArchiveDatabase &database, - const CHeaderOptions &headerOptions, - UInt64 &headerOffset) -{ - int i; - - ///////////////////////////////// - // Names - - CNum numDefinedNames = 0; - size_t namesDataSize = 0; - for(i = 0; i < database.Files.Size(); i++) - { - const UString &name = database.Files[i].Name; - if (!name.IsEmpty()) - numDefinedNames++; - namesDataSize += (name.Length() + 1) * 2; - } - - CByteBuffer namesData; - if (numDefinedNames > 0) - { - namesData.SetCapacity((size_t)namesDataSize); - size_t pos = 0; - for(int i = 0; i < database.Files.Size(); i++) - { - const UString &name = database.Files[i].Name; - for (int t = 0; t < name.Length(); t++) - { - wchar_t c = name[t]; - namesData[pos++] = Byte(c); - namesData[pos++] = Byte(c >> 8); - } - namesData[pos++] = 0; - namesData[pos++] = 0; - } - } - - ///////////////////////////////// - // Write Attributes - CBoolVector attributesBoolVector; - attributesBoolVector.Reserve(database.Files.Size()); - int numDefinedAttributes = 0; - for(i = 0; i < database.Files.Size(); i++) - { - bool defined = database.Files[i].AreAttributesDefined; - attributesBoolVector.Add(defined); - if (defined) - numDefinedAttributes++; - } - - CByteBuffer attributesData; - if (numDefinedAttributes > 0) - { - attributesData.SetCapacity(numDefinedAttributes * 4); - size_t pos = 0; - for(i = 0; i < database.Files.Size(); i++) - { - const CFileItem &file = database.Files[i]; - if (file.AreAttributesDefined) - { - WriteUInt32ToBuffer(attributesData + pos, file.Attributes); - pos += 4; - } - } - } - - ///////////////////////////////// - // Write StartPos - CBoolVector startsBoolVector; - startsBoolVector.Reserve(database.Files.Size()); - int numDefinedStarts = 0; - for(i = 0; i < database.Files.Size(); i++) - { - bool defined = database.Files[i].IsStartPosDefined; - startsBoolVector.Add(defined); - if (defined) - numDefinedStarts++; - } - - CByteBuffer startsData; - if (numDefinedStarts > 0) - { - startsData.SetCapacity(numDefinedStarts * 8); - size_t pos = 0; - for(i = 0; i < database.Files.Size(); i++) - { - const CFileItem &file = database.Files[i]; - if (file.IsStartPosDefined) - { - WriteUInt64ToBuffer(startsData + pos, file.StartPos); - pos += 8; - } - } - } - - ///////////////////////////////// - // Write Last Write Time - // /* - CNum numDefinedLastWriteTimes = 0; - for(i = 0; i < database.Files.Size(); i++) - if (database.Files[i].IsLastWriteTimeDefined) - numDefinedLastWriteTimes++; - - if (numDefinedLastWriteTimes > 0) - { - CByteBuffer lastWriteTimeData; - lastWriteTimeData.SetCapacity(numDefinedLastWriteTimes * 8); - size_t pos = 0; - for(i = 0; i < database.Files.Size(); i++) - { - const CFileItem &file = database.Files[i]; - if (file.IsLastWriteTimeDefined) - { - WriteUInt32ToBuffer(lastWriteTimeData + pos, file.LastWriteTime.dwLowDateTime); - pos += 4; - WriteUInt32ToBuffer(lastWriteTimeData + pos, file.LastWriteTime.dwHighDateTime); - pos += 4; - } - } - } - // */ - - - UInt64 packedSize = 0; - for(i = 0; i < database.PackSizes.Size(); i++) - packedSize += database.PackSizes[i]; - - headerOffset = packedSize; - - _mainMode = true; - - _outByte.SetStream(SeqStream); - _outByte.Init(); - _crc = CRC_INIT_VAL; - - - RINOK(WriteByte(NID::kHeader)); - - // Archive Properties - - if (database.Folders.Size() > 0) - { - RINOK(WriteByte(NID::kMainStreamsInfo)); - RINOK(WritePackInfo(0, database.PackSizes, - database.PackCRCsDefined, - database.PackCRCs)); - - RINOK(WriteUnPackInfo(database.Folders)); - - CRecordVector unPackSizes; - CRecordVector digestsDefined; - CRecordVector digests; - for (i = 0; i < database.Files.Size(); i++) - { - const CFileItem &file = database.Files[i]; - if (!file.HasStream) - continue; - unPackSizes.Add(file.UnPackSize); - digestsDefined.Add(file.IsFileCRCDefined); - digests.Add(file.FileCRC); - } - - RINOK(WriteSubStreamsInfo( - database.Folders, - database.NumUnPackStreamsVector, - unPackSizes, - digestsDefined, - digests)); - RINOK(WriteByte(NID::kEnd)); - } - - if (database.Files.IsEmpty()) - { - RINOK(WriteByte(NID::kEnd)); - return _outByte.Flush(); - } - - RINOK(WriteByte(NID::kFilesInfo)); - RINOK(WriteNumber(database.Files.Size())); - - CBoolVector emptyStreamVector; - emptyStreamVector.Reserve(database.Files.Size()); - int numEmptyStreams = 0; - for(i = 0; i < database.Files.Size(); i++) - if (database.Files[i].HasStream) - emptyStreamVector.Add(false); - else - { - emptyStreamVector.Add(true); - numEmptyStreams++; - } - if (numEmptyStreams > 0) - { - RINOK(WriteByte(NID::kEmptyStream)); - RINOK(WriteNumber((emptyStreamVector.Size() + 7) / 8)); - RINOK(WriteBoolVector(emptyStreamVector)); - - CBoolVector emptyFileVector, antiVector; - emptyFileVector.Reserve(numEmptyStreams); - antiVector.Reserve(numEmptyStreams); - CNum numEmptyFiles = 0, numAntiItems = 0; - for(i = 0; i < database.Files.Size(); i++) - { - const CFileItem &file = database.Files[i]; - if (!file.HasStream) - { - emptyFileVector.Add(!file.IsDirectory); - if (!file.IsDirectory) - numEmptyFiles++; - antiVector.Add(file.IsAnti); - if (file.IsAnti) - numAntiItems++; - } - } - - if (numEmptyFiles > 0) - { - RINOK(WriteByte(NID::kEmptyFile)); - RINOK(WriteNumber((emptyFileVector.Size() + 7) / 8)); - RINOK(WriteBoolVector(emptyFileVector)); - } - - if (numAntiItems > 0) - { - RINOK(WriteByte(NID::kAnti)); - RINOK(WriteNumber((antiVector.Size() + 7) / 8)); - RINOK(WriteBoolVector(antiVector)); - } - } - - if (numDefinedNames > 0) - { - ///////////////////////////////////////////////// - RINOK(WriteByte(NID::kName)); - { - RINOK(WriteNumber(1 + namesData.GetCapacity())); - RINOK(WriteByte(0)); - RINOK(WriteBytes(namesData)); - } - - } - - if (headerOptions.WriteCreated) - { - RINOK(WriteTime(database.Files, NID::kCreationTime)); - } - if (headerOptions.WriteModified) - { - RINOK(WriteTime(database.Files, NID::kLastWriteTime)); - } - if (headerOptions.WriteAccessed) - { - RINOK(WriteTime(database.Files, NID::kLastAccessTime)); - } - - if (numDefinedAttributes > 0) - { - RINOK(WriteByte(NID::kWinAttributes)); - size_t size = 2; - if (numDefinedAttributes != database.Files.Size()) - size += (attributesBoolVector.Size() + 7) / 8 + 1; - size += attributesData.GetCapacity(); - - RINOK(WriteNumber(size)); - if (numDefinedAttributes == database.Files.Size()) - { - RINOK(WriteByte(1)); - } - else - { - RINOK(WriteByte(0)); - RINOK(WriteBoolVector(attributesBoolVector)); - } - - { - RINOK(WriteByte(0)); - RINOK(WriteBytes(attributesData)); - } - } - - if (numDefinedStarts > 0) - { - RINOK(WriteByte(NID::kStartPos)); - size_t size = 2; - if (numDefinedStarts != database.Files.Size()) - size += (startsBoolVector.Size() + 7) / 8 + 1; - size += startsData.GetCapacity(); - - RINOK(WriteNumber(size)); - if (numDefinedStarts == database.Files.Size()) - { - RINOK(WriteByte(1)); - } - else - { - RINOK(WriteByte(0)); - RINOK(WriteBoolVector(startsBoolVector)); - } - - { - RINOK(WriteByte(0)); - RINOK(WriteBytes(startsData)); - } - } - - RINOK(WriteByte(NID::kEnd)); // for files - RINOK(WriteByte(NID::kEnd)); // for headers - - return _outByte.Flush(); -} - -HRESULT COutArchive::WriteDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - const CArchiveDatabase &database, - const CCompressionMethodMode *options, - const CHeaderOptions &headerOptions) -{ - UInt64 headerOffset; - UInt32 headerCRC; - UInt64 headerSize; - if (database.IsEmpty()) - { - headerSize = 0; - headerOffset = 0; - headerCRC = CrcCalc(0, 0); - } - else - { - _dynamicBuffer.Init(); - _dynamicMode = false; - - if (options != 0) - if (options->IsEmpty()) - options = 0; - if (options != 0) - if (options->PasswordIsDefined || headerOptions.CompressMainHeader) - _dynamicMode = true; - RINOK(WriteHeader(database, headerOptions, headerOffset)); - - if (_dynamicMode) - { - CCompressionMethodMode encryptOptions; - encryptOptions.PasswordIsDefined = options->PasswordIsDefined; - encryptOptions.Password = options->Password; - CEncoder encoder(headerOptions.CompressMainHeader ? *options : encryptOptions); - CRecordVector packSizes; - CObjectVector folders; - RINOK(EncodeStream( - EXTERNAL_CODECS_LOC_VARS - encoder, _dynamicBuffer, - _dynamicBuffer.GetSize(), packSizes, folders)); - _dynamicMode = false; - _mainMode = true; - - _outByte.SetStream(SeqStream); - _outByte.Init(); - _crc = CRC_INIT_VAL; - - if (folders.Size() == 0) - throw 1; - - RINOK(WriteID(NID::kEncodedHeader)); - RINOK(WritePackInfo(headerOffset, packSizes, - CRecordVector(), CRecordVector())); - RINOK(WriteUnPackInfo(folders)); - RINOK(WriteByte(NID::kEnd)); - for (int i = 0; i < packSizes.Size(); i++) - headerOffset += packSizes[i]; - RINOK(_outByte.Flush()); - } - headerCRC = CRC_GET_DIGEST(_crc); - headerSize = _outByte.GetProcessedSize(); - } - #ifdef _7Z_VOL - if (_endMarker) - { - CFinishHeader h; - h.NextHeaderSize = headerSize; - h.NextHeaderCRC = headerCRC; - h.NextHeaderOffset = - UInt64(0) - (headerSize + - 4 + kFinishHeaderSize); - h.ArchiveStartOffset = h.NextHeaderOffset - headerOffset; - h.AdditionalStartBlockSize = 0; - RINOK(WriteFinishHeader(h)); - return WriteFinishSignature(); - } - else - #endif - { - CStartHeader h; - h.NextHeaderSize = headerSize; - h.NextHeaderCRC = headerCRC; - h.NextHeaderOffset = headerOffset; - RINOK(Stream->Seek(_prefixHeaderPos, STREAM_SEEK_SET, NULL)); - return WriteStartHeader(h); - } -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.h deleted file mode 100644 index fd798184..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zOut.h +++ /dev/null @@ -1,193 +0,0 @@ -// 7z/Out.h - -#ifndef __7Z_OUT_H -#define __7Z_OUT_H - -#include "7zHeader.h" -#include "7zItem.h" -#include "7zCompressionMode.h" -#include "7zEncode.h" - -#include "../../Common/OutBuffer.h" -#include "../../../Common/DynamicBuffer.h" - -namespace NArchive { -namespace N7z { - -class CWriteBufferLoc -{ - Byte *_data; - size_t _size; - size_t _pos; -public: - CWriteBufferLoc(): _size(0), _pos(0) {} - void Init(Byte *data, size_t size) - { - _pos = 0; - _data = data; - _size = size; - } - HRESULT Write(const void *data, size_t size) - { - if (_pos + size > _size) - return E_FAIL; - memmove(_data + _pos, data, size); - _pos += size; - return S_OK; - } -}; - -class CWriteDynamicBuffer -{ - CByteDynamicBuffer _buffer; - size_t _pos; -public: - CWriteDynamicBuffer(): _pos(0) {} - void Init() - { - _pos = 0; - } - void Write(const void *data, size_t size) - { - if (_pos + size > _buffer.GetCapacity()) - _buffer.EnsureCapacity(_pos + size); - memmove(((Byte *)_buffer) +_pos, data, size); - _pos += size; - } - operator Byte *() { return (Byte *)_buffer; }; - operator const Byte *() const { return (const Byte *)_buffer; }; - size_t GetSize() const { return _pos; } -}; - -struct CHeaderOptions -{ - // bool UseAdditionalHeaderStreams; - bool CompressMainHeader; - bool WriteModified; - bool WriteCreated; - bool WriteAccessed; - - CHeaderOptions(): - // UseAdditionalHeaderStreams(false), - CompressMainHeader(true), - WriteModified(true), - WriteCreated(false), - WriteAccessed(false) {} -}; - -class COutArchive -{ - UInt64 _prefixHeaderPos; - - HRESULT WriteDirect(const void *data, UInt32 size); - HRESULT WriteDirectByte(Byte b) { return WriteDirect(&b, 1); } - HRESULT WriteDirectUInt32(UInt32 value); - HRESULT WriteDirectUInt64(UInt64 value); - - HRESULT WriteBytes(const void *data, size_t size); - HRESULT WriteBytes(const CByteBuffer &data); - HRESULT WriteByte(Byte b); - HRESULT WriteUInt32(UInt32 value); - HRESULT WriteNumber(UInt64 value); - HRESULT WriteID(UInt64 value) { return WriteNumber(value); } - - HRESULT WriteFolder(const CFolder &folder); - HRESULT WriteFileHeader(const CFileItem &itemInfo); - HRESULT WriteBoolVector(const CBoolVector &boolVector); - HRESULT WriteHashDigests( - const CRecordVector &digestsDefined, - const CRecordVector &hashDigests); - - HRESULT WritePackInfo( - UInt64 dataOffset, - const CRecordVector &packSizes, - const CRecordVector &packCRCsDefined, - const CRecordVector &packCRCs); - - HRESULT WriteUnPackInfo(const CObjectVector &folders); - - HRESULT WriteSubStreamsInfo( - const CObjectVector &folders, - const CRecordVector &numUnPackStreamsInFolders, - const CRecordVector &unPackSizes, - const CRecordVector &digestsDefined, - const CRecordVector &hashDigests); - - /* - HRESULT WriteStreamsInfo( - UInt64 dataOffset, - const CRecordVector &packSizes, - const CRecordVector &packCRCsDefined, - const CRecordVector &packCRCs, - bool externalFolders, - UInt64 externalFoldersStreamIndex, - const CObjectVector &folders, - const CRecordVector &numUnPackStreamsInFolders, - const CRecordVector &unPackSizes, - const CRecordVector &digestsDefined, - const CRecordVector &hashDigests); - */ - - - HRESULT WriteTime(const CObjectVector &files, Byte type); - - HRESULT EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const Byte *data, size_t dataSize, - CRecordVector &packSizes, CObjectVector &folders); - HRESULT EncodeStream( - DECL_EXTERNAL_CODECS_LOC_VARS - CEncoder &encoder, const CByteBuffer &data, - CRecordVector &packSizes, CObjectVector &folders); - HRESULT WriteHeader( - const CArchiveDatabase &database, - const CHeaderOptions &headerOptions, - UInt64 &headerOffset); - - bool _mainMode; - - bool _dynamicMode; - - bool _countMode; - size_t _countSize; - COutBuffer _outByte; - CWriteBufferLoc _outByte2; - CWriteDynamicBuffer _dynamicBuffer; - UInt32 _crc; - - #ifdef _7Z_VOL - bool _endMarker; - #endif - - HRESULT WriteSignature(); - #ifdef _7Z_VOL - HRESULT WriteFinishSignature(); - #endif - HRESULT WriteStartHeader(const CStartHeader &h); - #ifdef _7Z_VOL - HRESULT WriteFinishHeader(const CFinishHeader &h); - #endif - CMyComPtr Stream; -public: - - COutArchive() { _outByte.Create(1 << 16); } - CMyComPtr SeqStream; - HRESULT Create(ISequentialOutStream *stream, bool endMarker); - void Close(); - HRESULT SkeepPrefixArchiveHeader(); - HRESULT WriteDatabase( - DECL_EXTERNAL_CODECS_LOC_VARS - const CArchiveDatabase &database, - const CCompressionMethodMode *options, - const CHeaderOptions &headerOptions); - - #ifdef _7Z_VOL - static UInt32 GetVolHeadersSize(UInt64 dataSize, int nameLength = 0, bool props = false); - static UInt64 GetVolPureSize(UInt64 volSize, int nameLength = 0, bool props = false); - #endif - -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.cpp deleted file mode 100644 index 3452a030..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +++ /dev/null @@ -1,162 +0,0 @@ -// 7zProperties.cpp - -#include "StdAfx.h" - -#include "7zProperties.h" -#include "7zHeader.h" -#include "7zHandler.h" - -// #define _MULTI_PACK - -namespace NArchive { -namespace N7z { - -struct CPropMap -{ - UInt64 FilePropID; - STATPROPSTG StatPROPSTG; -}; - -CPropMap kPropMap[] = -{ - { NID::kName, NULL, kpidPath, VT_BSTR}, - { NID::kSize, NULL, kpidSize, VT_UI8}, - { NID::kPackInfo, NULL, kpidPackedSize, VT_UI8}, - - #ifdef _MULTI_PACK - { 100, L"Pack0", kpidPackedSize0, VT_UI8}, - { 101, L"Pack1", kpidPackedSize1, VT_UI8}, - { 102, L"Pack2", kpidPackedSize2, VT_UI8}, - { 103, L"Pack3", kpidPackedSize3, VT_UI8}, - { 104, L"Pack4", kpidPackedSize4, VT_UI8}, - #endif - - { NID::kCreationTime, NULL, kpidCreationTime, VT_FILETIME}, - { NID::kLastWriteTime, NULL, kpidLastWriteTime, VT_FILETIME}, - { NID::kLastAccessTime, NULL, kpidLastAccessTime, VT_FILETIME}, - { NID::kWinAttributes, NULL, kpidAttributes, VT_UI4}, - { NID::kStartPos, NULL, kpidPosition, VT_UI4}, - - { NID::kCRC, NULL, kpidCRC, VT_UI4}, - - { NID::kAnti, NULL, kpidIsAnti, VT_BOOL}, - // { 97, NULL, kpidSolid, VT_BOOL}, - #ifndef _SFX - { 98, NULL, kpidMethod, VT_BSTR}, - { 99, NULL, kpidBlock, VT_UI4} - #endif -}; - -static const int kPropMapSize = sizeof(kPropMap) / sizeof(kPropMap[0]); - -static int FindPropInMap(UInt64 filePropID) -{ - for (int i = 0; i < kPropMapSize; i++) - if (kPropMap[i].FilePropID == filePropID) - return i; - return -1; -} - -static void CopyOneItem(CRecordVector &src, - CRecordVector &dest, UInt32 item) -{ - for (int i = 0; i < src.Size(); i++) - if (src[i] == item) - { - dest.Add(item); - src.Delete(i); - return; - } -} - -static void RemoveOneItem(CRecordVector &src, UInt32 item) -{ - for (int i = 0; i < src.Size(); i++) - if (src[i] == item) - { - src.Delete(i); - return; - } -} - -static void InsertToHead(CRecordVector &dest, UInt32 item) -{ - for (int i = 0; i < dest.Size(); i++) - if (dest[i] == item) - { - dest.Delete(i); - break; - } - dest.Insert(0, item); -} - -void CHandler::FillPopIDs() -{ - _fileInfoPopIDs.Clear(); - - #ifdef _7Z_VOL - if(_volumes.Size() < 1) - return; - const CVolume &volume = _volumes.Front(); - const CArchiveDatabaseEx &_database = volume.Database; - #endif - - CRecordVector fileInfoPopIDs = _database.ArchiveInfo.FileInfoPopIDs; - - RemoveOneItem(fileInfoPopIDs, NID::kEmptyStream); - RemoveOneItem(fileInfoPopIDs, NID::kEmptyFile); - - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kName); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kAnti); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kSize); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kPackInfo); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCreationTime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kLastWriteTime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kLastAccessTime); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kWinAttributes); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kCRC); - CopyOneItem(fileInfoPopIDs, _fileInfoPopIDs, NID::kComment); - _fileInfoPopIDs += fileInfoPopIDs; - - #ifndef _SFX - _fileInfoPopIDs.Add(98); - _fileInfoPopIDs.Add(99); - #endif - #ifdef _MULTI_PACK - _fileInfoPopIDs.Add(100); - _fileInfoPopIDs.Add(101); - _fileInfoPopIDs.Add(102); - _fileInfoPopIDs.Add(103); - _fileInfoPopIDs.Add(104); - #endif - - #ifndef _SFX - InsertToHead(_fileInfoPopIDs, NID::kLastWriteTime); - InsertToHead(_fileInfoPopIDs, NID::kPackInfo); - InsertToHead(_fileInfoPopIDs, NID::kSize); - InsertToHead(_fileInfoPopIDs, NID::kName); - #endif -} - -STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) -{ - *numProperties = _fileInfoPopIDs.Size(); - return S_OK; -} - -STDMETHODIMP CHandler::GetPropertyInfo(UInt32 index, - BSTR *name, PROPID *propID, VARTYPE *varType) -{ - if((int)index >= _fileInfoPopIDs.Size()) - return E_INVALIDARG; - int indexInMap = FindPropInMap(_fileInfoPopIDs[index]); - if (indexInMap == -1) - return E_INVALIDARG; - const STATPROPSTG &srcItem = kPropMap[indexInMap].StatPROPSTG; - *propID = srcItem.propid; - *varType = srcItem.vt; - *name = 0; - return S_OK; -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.h deleted file mode 100644 index 4da85f04..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zProperties.h +++ /dev/null @@ -1,22 +0,0 @@ -// 7zProperties.h - -#ifndef __7Z_PROPERTIES_H -#define __7Z_PROPERTIES_H - -#include "../../PropID.h" - -namespace NArchive { -namespace N7z { - -enum -{ - kpidPackedSize0 = kpidUserDefined, - kpidPackedSize1, - kpidPackedSize2, - kpidPackedSize3, - kpidPackedSize4 -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zRegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zRegister.cpp deleted file mode 100644 index e18c4d74..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// 7zRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterArc.h" - -#include "7zHandler.h" -static IInArchive *CreateArc() { return new NArchive::N7z::CHandler; } -#ifndef EXTRACT_ONLY -static IOutArchive *CreateArcOut() { return new NArchive::N7z::CHandler; } -#else -#define CreateArcOut 0 -#endif - -static CArcInfo g_ArcInfo = - { L"7z", L"7z", 0, 7, {'7' + 1 , 'z', 0xBC, 0xAF, 0x27, 0x1C}, 6, false, CreateArc, CreateArcOut }; - -REGISTER_ARC_DEC_SIG(7z) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp deleted file mode 100644 index 80d303a4..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// 7zSpecStream.cpp - -#include "StdAfx.h" - -#include "7zSpecStream.h" - -STDMETHODIMP CSequentialInStreamSizeCount2::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CSequentialInStreamSizeCount2::GetSubStreamSize( - UInt64 subStream, UInt64 *value) -{ - if (_getSubStreamSize == NULL) - return E_NOTIMPL; - return _getSubStreamSize->GetSubStreamSize(subStream, value); -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.h deleted file mode 100644 index 0253c421..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +++ /dev/null @@ -1,35 +0,0 @@ -// 7zSpecStream.h - -#ifndef __7Z_SPEC_STREAM_H -#define __7Z_SPEC_STREAM_H - -#include "../../IStream.h" -#include "../../ICoder.h" -#include "../../../Common/MyCom.h" - -class CSequentialInStreamSizeCount2: - public ISequentialInStream, - public ICompressGetSubStreamSize, - public CMyUnknownImp -{ - CMyComPtr _stream; - CMyComPtr _getSubStreamSize; - UInt64 _size; -public: - void Init(ISequentialInStream *stream) - { - _stream = stream; - _getSubStreamSize = 0; - _stream.QueryInterface(IID_ICompressGetSubStreamSize, &_getSubStreamSize); - _size = 0; - } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP1(ICompressGetSubStreamSize) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp deleted file mode 100644 index 68f4604d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +++ /dev/null @@ -1,1029 +0,0 @@ -// UpdateMain.cpp - -#include "StdAfx.h" - -#include "7zUpdate.h" -#include "7zFolderInStream.h" -#include "7zEncode.h" -#include "7zHandler.h" -#include "7zOut.h" - -#include "../../Compress/Copy/CopyCoder.h" -#include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" -#include "../../Common/LimitedStreams.h" -#include "../Common/ItemNameUtils.h" - -namespace NArchive { -namespace N7z { - -static const wchar_t *kMatchFinderForBCJ2_LZMA = L"BT2"; -static const UInt32 kDictionaryForBCJ2_LZMA = 1 << 20; -static const UInt32 kAlgorithmForBCJ2_LZMA = 1; -static const UInt32 kNumFastBytesForBCJ2_LZMA = 64; - -static HRESULT WriteRange(IInStream *inStream, ISequentialOutStream *outStream, - UInt64 position, UInt64 size, ICompressProgressInfo *progress) -{ - RINOK(inStream->Seek(position, STREAM_SEEK_SET, 0)); - CLimitedSequentialInStream *streamSpec = new CLimitedSequentialInStream; - CMyComPtr inStreamLimited(streamSpec); - streamSpec->SetStream(inStream); - streamSpec->Init(size); - - NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder; - CMyComPtr copyCoder = copyCoderSpec; - RINOK(copyCoder->Code(inStreamLimited, outStream, NULL, NULL, progress)); - return (copyCoderSpec->TotalSize == size ? S_OK : E_FAIL); -} - -static int GetReverseSlashPos(const UString &name) -{ - int slashPos = name.ReverseFind(L'/'); - #ifdef _WIN32 - int slash1Pos = name.ReverseFind(L'\\'); - slashPos = MyMax(slashPos, slash1Pos); - #endif - return slashPos; -} - -int CUpdateItem::GetExtensionPos() const -{ - int slashPos = GetReverseSlashPos(Name); - int dotPos = Name.ReverseFind(L'.'); - if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0)) - return Name.Length(); - return dotPos + 1; -} - -UString CUpdateItem::GetExtension() const -{ - return Name.Mid(GetExtensionPos()); -} - -#define RINOZ(x) { int __tt = (x); if (__tt != 0) return __tt; } - -static int CompareBuffers(const CByteBuffer &a1, const CByteBuffer &a2) -{ - size_t c1 = a1.GetCapacity(); - size_t c2 = a2.GetCapacity(); - RINOZ(MyCompare(c1, c2)); - for (size_t i = 0; i < c1; i++) - RINOZ(MyCompare(a1[i], a2[i])); - return 0; -} - -static int CompareCoders(const CCoderInfo &c1, const CCoderInfo &c2) -{ - RINOZ(MyCompare(c1.NumInStreams, c2.NumInStreams)); - RINOZ(MyCompare(c1.NumOutStreams, c2.NumOutStreams)); - RINOZ(MyCompare(c1.MethodID, c2.MethodID)); - return CompareBuffers(c1.Properties, c2.Properties); -} - -static int CompareBindPairs(const CBindPair &b1, const CBindPair &b2) -{ - RINOZ(MyCompare(b1.InIndex, b2.InIndex)); - return MyCompare(b1.OutIndex, b2.OutIndex); -} - -static int CompareFolders(const CFolder &f1, const CFolder &f2) -{ - int s1 = f1.Coders.Size(); - int s2 = f2.Coders.Size(); - RINOZ(MyCompare(s1, s2)); - int i; - for (i = 0; i < s1; i++) - RINOZ(CompareCoders(f1.Coders[i], f2.Coders[i])); - s1 = f1.BindPairs.Size(); - s2 = f2.BindPairs.Size(); - RINOZ(MyCompare(s1, s2)); - for (i = 0; i < s1; i++) - RINOZ(CompareBindPairs(f1.BindPairs[i], f2.BindPairs[i])); - return 0; -} - -static int CompareFiles(const CFileItem &f1, const CFileItem &f2) -{ - return MyStringCompareNoCase(f1.Name, f2.Name); -} - -static int CompareFolderRefs(const int *p1, const int *p2, void *param) -{ - int i1 = *p1; - int i2 = *p2; - const CArchiveDatabaseEx &db = *(const CArchiveDatabaseEx *)param; - RINOZ(CompareFolders( - db.Folders[i1], - db.Folders[i2])); - RINOZ(MyCompare( - db.NumUnPackStreamsVector[i1], - db.NumUnPackStreamsVector[i2])); - if (db.NumUnPackStreamsVector[i1] == 0) - return 0; - return CompareFiles( - db.Files[db.FolderStartFileIndex[i1]], - db.Files[db.FolderStartFileIndex[i2]]); -} - -//////////////////////////////////////////////////////////// - -static int CompareEmptyItems(const int *p1, const int *p2, void *param) -{ - const CObjectVector &updateItems = *(const CObjectVector *)param; - const CUpdateItem &u1 = updateItems[*p1]; - const CUpdateItem &u2 = updateItems[*p2]; - if (u1.IsDirectory != u2.IsDirectory) - return (u1.IsDirectory) ? 1 : -1; - if (u1.IsDirectory) - { - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - int n = MyStringCompareNoCase(u1.Name, u2.Name); - return -n; - } - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - return MyStringCompareNoCase(u1.Name, u2.Name); -} - -static const char *g_Exts = - " lzma 7z ace arc arj bz bz2 deb lzo lzx gz pak rpm sit tgz tbz tbz2 tgz cab ha lha lzh rar zoo" - " zip jar ear war msi" - " 3gp avi mov mpeg mpg mpe wmv" - " aac ape fla flac la mp3 m4a mp4 ofr ogg pac ra rm rka shn swa tta wv wma wav" - " swf " - " chm hxi hxs" - " gif jpeg jpg jp2 png tiff bmp ico psd psp" - " awg ps eps cgm dxf svg vrml wmf emf ai md" - " cad dwg pps key sxi" - " max 3ds" - " iso bin nrg mdf img pdi tar cpio xpi" - " vfd vhd vud vmc vsv" - " vmdk dsk nvram vmem vmsd vmsn vmss vmtm" - " inl inc idl acf asa h hpp hxx c cpp cxx rc java cs pas bas vb cls ctl frm dlg def" - " f77 f f90 f95" - " asm sql manifest dep " - " mak clw csproj vcproj sln dsp dsw " - " class " - " bat cmd" - " xml xsd xsl xslt hxk hxc htm html xhtml xht mht mhtml htw asp aspx css cgi jsp shtml" - " awk sed hta js php php3 php4 php5 phptml pl pm py pyo rb sh tcl vbs" - " text txt tex ans asc srt reg ini doc docx mcw dot rtf hlp xls xlr xlt xlw ppt pdf" - " sxc sxd sxi sxg sxw stc sti stw stm odt ott odg otg odp otp ods ots odf" - " abw afp cwk lwp wpd wps wpt wrf wri" - " abf afm bdf fon mgf otf pcf pfa snf ttf" - " dbf mdb nsf ntf wdb db fdb gdb" - " exe dll ocx vbx sfx sys tlb awx com obj lib out o so " - " pdb pch idb ncb opt"; - -int GetExtIndex(const char *ext) -{ - int extIndex = 1; - const char *p = g_Exts; - for (;;) - { - char c = *p++; - if (c == 0) - return extIndex; - if (c == ' ') - continue; - int pos = 0; - for (;;) - { - char c2 = ext[pos++]; - if (c2 == 0 && (c == 0 || c == ' ')) - return extIndex; - if (c != c2) - break; - c = *p++; - } - extIndex++; - for (;;) - { - if (c == 0) - return extIndex; - if (c == ' ') - break; - c = *p++; - } - } -} - -struct CRefItem -{ - UInt32 Index; - const CUpdateItem *UpdateItem; - UInt32 ExtensionPos; - UInt32 NamePos; - int ExtensionIndex; - CRefItem(UInt32 index, const CUpdateItem &updateItem, bool sortByType): - Index(index), - UpdateItem(&updateItem), - ExtensionPos(0), - NamePos(0), - ExtensionIndex(0) - { - if (sortByType) - { - int slashPos = GetReverseSlashPos(updateItem.Name); - NamePos = ((slashPos >= 0) ? (slashPos + 1) : 0); - int dotPos = updateItem.Name.ReverseFind(L'.'); - if (dotPos < 0 || (dotPos < slashPos && slashPos >= 0)) - ExtensionPos = updateItem.Name.Length(); - else - { - ExtensionPos = dotPos + 1; - UString us = updateItem.Name.Mid(ExtensionPos); - if (!us.IsEmpty()) - { - us.MakeLower(); - int i; - AString s; - for (i = 0; i < us.Length(); i++) - { - wchar_t c = us[i]; - if (c >= 0x80) - break; - s += (char)c; - } - if (i == us.Length()) - ExtensionIndex = GetExtIndex(s); - else - ExtensionIndex = 0; - } - } - } - } -}; - -static int CompareUpdateItems(const CRefItem *p1, const CRefItem *p2, void *param) -{ - const CRefItem &a1 = *p1; - const CRefItem &a2 = *p2; - const CUpdateItem &u1 = *a1.UpdateItem; - const CUpdateItem &u2 = *a2.UpdateItem; - int n; - if (u1.IsDirectory != u2.IsDirectory) - return (u1.IsDirectory) ? 1 : -1; - if (u1.IsDirectory) - { - if (u1.IsAnti != u2.IsAnti) - return (u1.IsAnti ? 1 : -1); - n = MyStringCompareNoCase(u1.Name, u2.Name); - return -n; - } - bool sortByType = *(bool *)param; - if (sortByType) - { - RINOZ(MyCompare(a1.ExtensionIndex, a2.ExtensionIndex)) - RINOZ(MyStringCompareNoCase(u1.Name + a1.ExtensionPos, u2.Name + a2.ExtensionPos)); - RINOZ(MyStringCompareNoCase(u1.Name + a1.NamePos, u2.Name + a2.NamePos)); - if (u1.IsLastWriteTimeDefined && u2.IsLastWriteTimeDefined) - RINOZ(CompareFileTime(&u1.LastWriteTime, &u2.LastWriteTime)); - RINOZ(MyCompare(u1.Size, u2.Size)) - } - return MyStringCompareNoCase(u1.Name, u2.Name); -} - -struct CSolidGroup -{ - CCompressionMethodMode Method; - CRecordVector Indices; -}; - -static wchar_t *g_ExeExts[] = -{ - L"dll", - L"exe", - L"ocx", - L"sfx", - L"sys" -}; - -static bool IsExeFile(const UString &ext) -{ - for (int i = 0; i < sizeof(g_ExeExts) / sizeof(g_ExeExts[0]); i++) - if (ext.CompareNoCase(g_ExeExts[i]) == 0) - return true; - return false; -} - -static const UInt64 k_LZMA = 0x030101; -static const UInt64 k_BCJ = 0x03030103; -static const UInt64 k_BCJ2 = 0x0303011B; - -static bool GetMethodFull(UInt64 methodID, - UInt32 numInStreams, CMethodFull &methodResult) -{ - methodResult.Id = methodID; - methodResult.NumInStreams = numInStreams; - methodResult.NumOutStreams = 1; - return true; -} - -static bool MakeExeMethod(const CCompressionMethodMode &method, - bool bcj2Filter, CCompressionMethodMode &exeMethod) -{ - exeMethod = method; - if (bcj2Filter) - { - CMethodFull methodFull; - if (!GetMethodFull(k_BCJ2, 4, methodFull)) - return false; - exeMethod.Methods.Insert(0, methodFull); - if (!GetMethodFull(k_LZMA, 1, methodFull)) - return false; - { - CProp property; - property.Id = NCoderPropID::kAlgorithm; - property.Value = kAlgorithmForBCJ2_LZMA; - methodFull.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kMatchFinder; - property.Value = kMatchFinderForBCJ2_LZMA; - methodFull.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kDictionarySize; - property.Value = kDictionaryForBCJ2_LZMA; - methodFull.Properties.Add(property); - } - { - CProp property; - property.Id = NCoderPropID::kNumFastBytes; - property.Value = kNumFastBytesForBCJ2_LZMA; - methodFull.Properties.Add(property); - } - - exeMethod.Methods.Add(methodFull); - exeMethod.Methods.Add(methodFull); - CBind bind; - - bind.OutCoder = 0; - bind.InStream = 0; - - bind.InCoder = 1; - bind.OutStream = 0; - exeMethod.Binds.Add(bind); - - bind.InCoder = 2; - bind.OutStream = 1; - exeMethod.Binds.Add(bind); - - bind.InCoder = 3; - bind.OutStream = 2; - exeMethod.Binds.Add(bind); - } - else - { - CMethodFull methodFull; - if (!GetMethodFull(k_BCJ, 1, methodFull)) - return false; - exeMethod.Methods.Insert(0, methodFull); - CBind bind; - bind.OutCoder = 0; - bind.InStream = 0; - bind.InCoder = 1; - bind.OutStream = 0; - exeMethod.Binds.Add(bind); - } - return true; -} - -static void SplitFilesToGroups( - const CCompressionMethodMode &method, - bool useFilters, bool maxFilter, - const CObjectVector &updateItems, - CObjectVector &groups) -{ - if (method.Methods.Size() != 1 || method.Binds.Size() != 0) - useFilters = false; - groups.Clear(); - groups.Add(CSolidGroup()); - groups.Add(CSolidGroup()); - CSolidGroup &generalGroup = groups[0]; - CSolidGroup &exeGroup = groups[1]; - generalGroup.Method = method; - int i; - for (i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &updateItem = updateItems[i]; - if (!updateItem.NewData) - continue; - if (!updateItem.HasStream()) - continue; - if (useFilters) - { - const UString name = updateItem.Name; - int dotPos = name.ReverseFind(L'.'); - if (dotPos >= 0) - { - UString ext = name.Mid(dotPos + 1); - if (IsExeFile(ext)) - { - exeGroup.Indices.Add(i); - continue; - } - } - } - generalGroup.Indices.Add(i); - } - if (exeGroup.Indices.Size() > 0) - if (!MakeExeMethod(method, maxFilter, exeGroup.Method)) - exeGroup.Method = method; - for (i = 0; i < groups.Size();) - if (groups[i].Indices.Size() == 0) - groups.Delete(i); - else - i++; -} - -static void FromUpdateItemToFileItem(const CUpdateItem &updateItem, - CFileItem &file) -{ - file.Name = NItemName::MakeLegalName(updateItem.Name); - if (updateItem.AttributesAreDefined) - file.SetAttributes(updateItem.Attributes); - - if (updateItem.IsCreationTimeDefined) - file.SetCreationTime(updateItem.CreationTime); - if (updateItem.IsLastWriteTimeDefined) - file.SetLastWriteTime(updateItem.LastWriteTime); - if (updateItem.IsLastAccessTimeDefined) - file.SetLastAccessTime(updateItem.LastAccessTime); - - file.UnPackSize = updateItem.Size; - file.IsDirectory = updateItem.IsDirectory; - file.IsAnti = updateItem.IsAnti; - file.HasStream = updateItem.HasStream(); -} - -static HRESULT Update2( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - const CArchiveDatabaseEx *database, - const CObjectVector &updateItems, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options) -{ - UInt64 numSolidFiles = options.NumSolidFiles; - if (numSolidFiles == 0) - numSolidFiles = 1; - /* - CMyComPtr outStream; - RINOK(seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStream)); - if (!outStream) - return E_NOTIMPL; - */ - - UInt64 startBlockSize = database != 0 ? database->ArchiveInfo.StartPosition: 0; - if (startBlockSize > 0 && !options.RemoveSfxBlock) - { - RINOK(WriteRange(inStream, seqOutStream, 0, startBlockSize, NULL)); - } - - CRecordVector fileIndexToUpdateIndexMap; - if (database != 0) - { - fileIndexToUpdateIndexMap.Reserve(database->Files.Size()); - for (int i = 0; i < database->Files.Size(); i++) - fileIndexToUpdateIndexMap.Add(-1); - } - int i; - for(i = 0; i < updateItems.Size(); i++) - { - int index = updateItems[i].IndexInArchive; - if (index != -1) - fileIndexToUpdateIndexMap[index] = i; - } - - CRecordVector folderRefs; - if (database != 0) - { - for(i = 0; i < database->Folders.Size(); i++) - { - CNum indexInFolder = 0; - CNum numCopyItems = 0; - CNum numUnPackStreams = database->NumUnPackStreamsVector[i]; - for (CNum fileIndex = database->FolderStartFileIndex[i]; - indexInFolder < numUnPackStreams; fileIndex++) - { - if (database->Files[fileIndex].HasStream) - { - indexInFolder++; - int updateIndex = fileIndexToUpdateIndexMap[fileIndex]; - if (updateIndex >= 0) - if (!updateItems[updateIndex].NewData) - numCopyItems++; - } - } - if (numCopyItems != numUnPackStreams && numCopyItems != 0) - return E_NOTIMPL; // It needs repacking !!! - if (numCopyItems > 0) - folderRefs.Add(i); - } - folderRefs.Sort(CompareFolderRefs, (void *)database); - } - - CArchiveDatabase newDatabase; - - //////////////////////////// - - COutArchive archive; - RINOK(archive.Create(seqOutStream, false)); - RINOK(archive.SkeepPrefixArchiveHeader()); - UInt64 complexity = 0; - for(i = 0; i < folderRefs.Size(); i++) - complexity += database->GetFolderFullPackSize(folderRefs[i]); - UInt64 inSizeForReduce = 0; - for(i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &updateItem = updateItems[i]; - if (updateItem.NewData) - { - complexity += updateItem.Size; - if (numSolidFiles == 1) - { - if (updateItem.Size > inSizeForReduce) - inSizeForReduce = updateItem.Size; - } - else - inSizeForReduce += updateItem.Size; - } - } - RINOK(updateCallback->SetTotal(complexity)); - complexity = 0; - RINOK(updateCallback->SetCompleted(&complexity)); - - - CLocalProgress *lps = new CLocalProgress; - CMyComPtr progress = lps; - lps->Init(updateCallback, true); - - ///////////////////////////////////////// - // Write Copy Items - - for(i = 0; i < folderRefs.Size(); i++) - { - int folderIndex = folderRefs[i]; - - lps->ProgressOffset = complexity; - UInt64 packSize = database->GetFolderFullPackSize(folderIndex); - RINOK(WriteRange(inStream, archive.SeqStream, - database->GetFolderStreamPos(folderIndex, 0), packSize, progress)); - complexity += packSize; - - const CFolder &folder = database->Folders[folderIndex]; - CNum startIndex = database->FolderStartPackStreamIndex[folderIndex]; - for (int j = 0; j < folder.PackStreams.Size(); j++) - { - newDatabase.PackSizes.Add(database->PackSizes[startIndex + j]); - // newDatabase.PackCRCsDefined.Add(database.PackCRCsDefined[startIndex + j]); - // newDatabase.PackCRCs.Add(database.PackCRCs[startIndex + j]); - } - newDatabase.Folders.Add(folder); - - CNum numUnPackStreams = database->NumUnPackStreamsVector[folderIndex]; - newDatabase.NumUnPackStreamsVector.Add(numUnPackStreams); - - CNum indexInFolder = 0; - for (CNum fi = database->FolderStartFileIndex[folderIndex]; - indexInFolder < numUnPackStreams; fi++) - { - CFileItem file = database->Files[fi]; - if (file.HasStream) - { - indexInFolder++; - int updateIndex = fileIndexToUpdateIndexMap[fi]; - if (updateIndex >= 0) - { - const CUpdateItem &updateItem = updateItems[updateIndex]; - if (updateItem.NewProperties) - { - CFileItem file2; - FromUpdateItemToFileItem(updateItem, file2); - file2.UnPackSize = file.UnPackSize; - file2.FileCRC = file.FileCRC; - file2.IsFileCRCDefined = file.IsFileCRCDefined; - file2.HasStream = file.HasStream; - file = file2; - } - } - newDatabase.Files.Add(file); - } - } - } - - ///////////////////////////////////////// - // Compress New Files - - CObjectVector groups; - SplitFilesToGroups(*options.Method, options.UseFilters, options.MaxFilter, - updateItems, groups); - - const UInt32 kMinReduceSize = (1 << 16); - if (inSizeForReduce < kMinReduceSize) - inSizeForReduce = kMinReduceSize; - - for (int groupIndex = 0; groupIndex < groups.Size(); groupIndex++) - { - const CSolidGroup &group = groups[groupIndex]; - int numFiles = group.Indices.Size(); - if (numFiles == 0) - continue; - CRecordVector refItems; - refItems.Reserve(numFiles); - bool sortByType = (numSolidFiles > 1); - for (i = 0; i < numFiles; i++) - refItems.Add(CRefItem(group.Indices[i], updateItems[group.Indices[i]], sortByType)); - refItems.Sort(CompareUpdateItems, (void *)&sortByType); - - CRecordVector indices; - indices.Reserve(numFiles); - - for (i = 0; i < numFiles; i++) - { - UInt32 index = refItems[i].Index; - indices.Add(index); - /* - const CUpdateItem &updateItem = updateItems[index]; - CFileItem file; - if (updateItem.NewProperties) - FromUpdateItemToFileItem(updateItem, file); - else - file = database.Files[updateItem.IndexInArchive]; - if (file.IsAnti || file.IsDirectory) - return E_FAIL; - newDatabase.Files.Add(file); - */ - } - - CEncoder encoder(group.Method); - - for (i = 0; i < numFiles;) - { - UInt64 totalSize = 0; - int numSubFiles; - UString prevExtension; - for (numSubFiles = 0; i + numSubFiles < numFiles && - numSubFiles < numSolidFiles; numSubFiles++) - { - const CUpdateItem &updateItem = updateItems[indices[i + numSubFiles]]; - totalSize += updateItem.Size; - if (totalSize > options.NumSolidBytes) - break; - if (options.SolidExtension) - { - UString ext = updateItem.GetExtension(); - if (numSubFiles == 0) - prevExtension = ext; - else - if (ext.CompareNoCase(prevExtension) != 0) - break; - } - } - if (numSubFiles < 1) - numSubFiles = 1; - - CFolderInStream *inStreamSpec = new CFolderInStream; - CMyComPtr solidInStream(inStreamSpec); - inStreamSpec->Init(updateCallback, &indices[i], numSubFiles); - - CFolder folderItem; - - int startPackIndex = newDatabase.PackSizes.Size(); - RINOK(encoder.Encode( - EXTERNAL_CODECS_LOC_VARS - solidInStream, NULL, &inSizeForReduce, folderItem, - archive.SeqStream, newDatabase.PackSizes, progress)); - - for (; startPackIndex < newDatabase.PackSizes.Size(); startPackIndex++) - lps->OutSize += newDatabase.PackSizes[startPackIndex]; - - lps->InSize += folderItem.GetUnPackSize(); - // for() - // newDatabase.PackCRCsDefined.Add(false); - // newDatabase.PackCRCs.Add(0); - - newDatabase.Folders.Add(folderItem); - - CNum numUnPackStreams = 0; - for (int subIndex = 0; subIndex < numSubFiles; subIndex++) - { - const CUpdateItem &updateItem = updateItems[indices[i + subIndex]]; - CFileItem file; - if (updateItem.NewProperties) - FromUpdateItemToFileItem(updateItem, file); - else - file = database->Files[updateItem.IndexInArchive]; - if (file.IsAnti || file.IsDirectory) - return E_FAIL; - - /* - CFileItem &file = newDatabase.Files[ - startFileIndexInDatabase + i + subIndex]; - */ - if (!inStreamSpec->Processed[subIndex]) - { - continue; - // file.Name += L".locked"; - } - - file.FileCRC = inStreamSpec->CRCs[subIndex]; - file.UnPackSize = inStreamSpec->Sizes[subIndex]; - if (file.UnPackSize != 0) - { - file.IsFileCRCDefined = true; - file.HasStream = true; - numUnPackStreams++; - } - else - { - file.IsFileCRCDefined = false; - file.HasStream = false; - } - newDatabase.Files.Add(file); - } - // numUnPackStreams = 0 is very bad case for locked files - // v3.13 doesn't understand it. - newDatabase.NumUnPackStreamsVector.Add(numUnPackStreams); - i += numSubFiles; - } - } - - { - ///////////////////////////////////////// - // Write Empty Files & Folders - - CRecordVector emptyRefs; - for(i = 0; i < updateItems.Size(); i++) - { - const CUpdateItem &updateItem = updateItems[i]; - if (updateItem.NewData) - { - if (updateItem.HasStream()) - continue; - } - else - if (updateItem.IndexInArchive != -1) - if (database->Files[updateItem.IndexInArchive].HasStream) - continue; - emptyRefs.Add(i); - } - emptyRefs.Sort(CompareEmptyItems, (void *)&updateItems); - for(i = 0; i < emptyRefs.Size(); i++) - { - const CUpdateItem &updateItem = updateItems[emptyRefs[i]]; - CFileItem file; - if (updateItem.NewProperties) - FromUpdateItemToFileItem(updateItem, file); - else - file = database->Files[updateItem.IndexInArchive]; - newDatabase.Files.Add(file); - } - } - - /* - if (newDatabase.Files.Size() != updateItems.Size()) - return E_FAIL; - */ - - return archive.WriteDatabase(EXTERNAL_CODECS_LOC_VARS - newDatabase, options.HeaderMethod, options.HeaderOptions); -} - -#ifdef _7Z_VOL - -static const UInt64 k_Copy = 0x0; - -static HRESULT WriteVolumeHeader(COutArchive &archive, CFileItem &file, const CUpdateOptions &options) -{ - CCoderInfo coder; - coder.NumInStreams = coder.NumOutStreams = 1; - coder.MethodID = k_Copy; - - CFolder folder; - folder.Coders.Add(coder); - folder.PackStreams.Add(0); - - CNum numUnPackStreams = 0; - if (file.UnPackSize != 0) - { - file.IsFileCRCDefined = true; - file.HasStream = true; - numUnPackStreams++; - } - else - { - throw 1; - file.IsFileCRCDefined = false; - file.HasStream = false; - } - folder.UnPackSizes.Add(file.UnPackSize); - - CArchiveDatabase newDatabase; - newDatabase.Files.Add(file); - newDatabase.Folders.Add(folder); - newDatabase.NumUnPackStreamsVector.Add(numUnPackStreams); - newDatabase.PackSizes.Add(file.UnPackSize); - newDatabase.PackCRCsDefined.Add(false); - newDatabase.PackCRCs.Add(file.FileCRC); - - return archive.WriteDatabase(newDatabase, - options.HeaderMethod, - false, - false); -} - -HRESULT UpdateVolume( - IInStream *inStream, - const CArchiveDatabaseEx *database, - CObjectVector &updateItems, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options) -{ - if (updateItems.Size() != 1) - return E_NOTIMPL; - - CMyComPtr volumeCallback; - RINOK(updateCallback->QueryInterface(IID_IArchiveUpdateCallback2, (void **)&volumeCallback)); - if (!volumeCallback) - return E_NOTIMPL; - - CMyComPtr fileStream; - HRESULT result = updateCallback->GetStream(0, &fileStream); - if (result != S_OK && result != S_FALSE) - return result; - if (result == S_FALSE) - return E_FAIL; - - CFileItem file; - - const CUpdateItem &updateItem = updateItems[0]; - if (updateItem.NewProperties) - FromUpdateItemToFileItem(updateItem, file); - else - file = database->Files[updateItem.IndexInArchive]; - if (file.IsAnti || file.IsDirectory) - return E_FAIL; - - UInt64 complexity = 0; - file.IsStartPosDefined = true; - file.StartPos = 0; - for (UInt64 volumeIndex = 0; true; volumeIndex++) - { - UInt64 volSize; - RINOK(volumeCallback->GetVolumeSize(volumeIndex, &volSize)); - UInt64 pureSize = COutArchive::GetVolPureSize(volSize, file.Name.Length(), true); - CMyComPtr volumeStream; - RINOK(volumeCallback->GetVolumeStream(volumeIndex, &volumeStream)); - - COutArchive archive; - RINOK(archive.Create(volumeStream, true)); - RINOK(archive.SkeepPrefixArchiveHeader()); - - CSequentialInStreamWithCRC *inCrcStreamSpec = new CSequentialInStreamWithCRC; - CMyComPtr inCrcStream = inCrcStreamSpec; - inCrcStreamSpec->Init(fileStream); - - RINOK(WriteRange(inCrcStream, volumeStream, pureSize, updateCallback, complexity)); - file.UnPackSize = inCrcStreamSpec->GetSize(); - if (file.UnPackSize == 0) - break; - file.FileCRC = inCrcStreamSpec->GetCRC(); - RINOK(WriteVolumeHeader(archive, file, options)); - file.StartPos += file.UnPackSize; - if (file.UnPackSize < pureSize) - break; - } - return S_OK; -} - -class COutVolumeStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - int _volIndex; - UInt64 _volSize; - UInt64 _curPos; - CMyComPtr _volumeStream; - COutArchive _archive; - CCRC _crc; - -public: - MY_UNKNOWN_IMP - - CFileItem _file; - CUpdateOptions _options; - CMyComPtr VolumeCallback; - void Init(IArchiveUpdateCallback2 *volumeCallback, - const UString &name) - { - _file.Name = name; - _file.IsStartPosDefined = true; - _file.StartPos = 0; - - VolumeCallback = volumeCallback; - _volIndex = 0; - _volSize = 0; - } - - HRESULT Flush(); - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -HRESULT COutVolumeStream::Flush() -{ - if (_volumeStream) - { - _file.UnPackSize = _curPos; - _file.FileCRC = _crc.GetDigest(); - RINOK(WriteVolumeHeader(_archive, _file, _options)); - _archive.Close(); - _volumeStream.Release(); - _file.StartPos += _file.UnPackSize; - } - return S_OK; -} - -STDMETHODIMP COutVolumeStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(size > 0) - { - if (!_volumeStream) - { - RINOK(VolumeCallback->GetVolumeSize(_volIndex, &_volSize)); - RINOK(VolumeCallback->GetVolumeStream(_volIndex, &_volumeStream)); - _volIndex++; - _curPos = 0; - RINOK(_archive.Create(_volumeStream, true)); - RINOK(_archive.SkeepPrefixArchiveHeader()); - _crc.Init(); - continue; - } - UInt64 pureSize = COutArchive::GetVolPureSize(_volSize, _file.Name.Length()); - UInt32 curSize = (UInt32)MyMin(UInt64(size), pureSize - _curPos); - - _crc.Update(data, curSize); - UInt32 realProcessed; - RINOK(_volumeStream->Write(data, curSize, &realProcessed)) - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - if(processedSize != NULL) - *processedSize += realProcessed; - _curPos += realProcessed; - if (realProcessed != curSize && realProcessed == 0) - return E_FAIL; - if (_curPos == pureSize) - { - RINOK(Flush()); - } - } - return S_OK; -} - -#endif - -HRESULT Update( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - const CArchiveDatabaseEx *database, - const CObjectVector &updateItems, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options) -{ - #ifdef _7Z_VOL - if (seqOutStream) - #endif - return Update2( - EXTERNAL_CODECS_LOC_VARS - inStream, database, updateItems, - seqOutStream, updateCallback, options); - #ifdef _7Z_VOL - if (options.VolumeMode) - return UpdateVolume(inStream, database, updateItems, - seqOutStream, updateCallback, options); - COutVolumeStream *volStreamSpec = new COutVolumeStream; - CMyComPtr volStream = volStreamSpec; - CMyComPtr volumeCallback; - RINOK(updateCallback->QueryInterface(IID_IArchiveUpdateCallback2, (void **)&volumeCallback)); - if (!volumeCallback) - return E_NOTIMPL; - volStreamSpec->Init(volumeCallback, L"a.7z"); - volStreamSpec->_options = options; - RINOK(Update2(inStream, database, updateItems, - volStream, updateCallback, options)); - return volStreamSpec->Flush(); - #endif -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.h deleted file mode 100644 index ac1b5b65..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/7zUpdate.h +++ /dev/null @@ -1,80 +0,0 @@ -// 7zUpdate.h - -#ifndef __7Z_UPDATE_H -#define __7Z_UPDATE_H - -#include "7zIn.h" -#include "7zOut.h" -#include "7zCompressionMode.h" - -#include "../IArchive.h" - -namespace NArchive { -namespace N7z { - -struct CUpdateItem -{ - bool NewData; - bool NewProperties; - int IndexInArchive; - int IndexInClient; - - UInt32 Attributes; - FILETIME CreationTime; - FILETIME LastWriteTime; - FILETIME LastAccessTime; - - UInt64 Size; - UString Name; - - bool IsAnti; - bool IsDirectory; - - bool IsCreationTimeDefined; - bool IsLastWriteTimeDefined; - bool IsLastAccessTimeDefined; - bool AttributesAreDefined; - - bool HasStream() const - { return !IsDirectory && !IsAnti && Size != 0; } - CUpdateItem(): - IsAnti(false), - AttributesAreDefined(false), - IsCreationTimeDefined(false), - IsLastWriteTimeDefined(false), - IsLastAccessTimeDefined(false) - {} - void SetDirectoryStatusFromAttributes() - { IsDirectory = ((Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0); }; - - int GetExtensionPos() const; - UString GetExtension() const; -}; - -struct CUpdateOptions -{ - const CCompressionMethodMode *Method; - const CCompressionMethodMode *HeaderMethod; - bool UseFilters; - bool MaxFilter; - - CHeaderOptions HeaderOptions; - - UInt64 NumSolidFiles; - UInt64 NumSolidBytes; - bool SolidExtension; - bool RemoveSfxBlock; - bool VolumeMode; -}; - -HRESULT Update( - DECL_EXTERNAL_CODECS_LOC_VARS - IInStream *inStream, - const CArchiveDatabaseEx *database, - const CObjectVector &updateItems, - ISequentialOutStream *seqOutStream, - IArchiveUpdateCallback *updateCallback, - const CUpdateOptions &options); -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.h deleted file mode 100644 index 2e4be10b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive.def b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive.def deleted file mode 100644 index 55b530b2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive.def +++ /dev/null @@ -1,6 +0,0 @@ -EXPORTS - CreateObject PRIVATE - GetHandlerProperty PRIVATE - GetNumberOfFormats PRIVATE - GetHandlerProperty2 PRIVATE - CreateObject PRIVATE diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive2.def b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive2.def deleted file mode 100644 index 885d39d1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Archive2.def +++ /dev/null @@ -1,9 +0,0 @@ -EXPORTS - CreateObject PRIVATE - GetHandlerProperty PRIVATE - GetNumberOfFormats PRIVATE - GetHandlerProperty2 PRIVATE - CreateObject PRIVATE - GetNumberOfMethods PRIVATE - GetMethodProperty PRIVATE - SetLargePageMode PRIVATE diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/ArchiveExports.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/ArchiveExports.cpp deleted file mode 100644 index a60303a5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/ArchiveExports.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// ArchiveExports.cpp - -#include "StdAfx.h" - -#include "../../Common/ComTry.h" -#include "../../Common/Types.h" -#include "../../Windows/PropVariant.h" -#include "../Common/RegisterArc.h" - -#include "IArchive.h" -#include "../ICoder.h" -#include "../IPassword.h" - -static const unsigned int kNumArcsMax = 32; -static unsigned int g_NumArcs = 0; -static const CArcInfo *g_Arcs[kNumArcsMax]; -void RegisterArc(const CArcInfo *arcInfo) -{ - if (g_NumArcs < kNumArcsMax) - g_Arcs[g_NumArcs++] = arcInfo; -} - -DEFINE_GUID(CLSID_CArchiveHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); - -#define CLS_ARC_ID_ITEM(cls) ((cls).Data4[5]) - -static inline HRESULT SetPropString(const char *s, unsigned int size, PROPVARIANT *value) -{ - if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0) - value->vt = VT_BSTR; - return S_OK; -} - -static inline HRESULT SetPropGUID(const GUID &guid, PROPVARIANT *value) -{ - return SetPropString((const char *)&guid, sizeof(GUID), value); -} - -int FindFormatCalssId(const GUID *clsID) -{ - GUID cls = *clsID; - CLS_ARC_ID_ITEM(cls) = 0; - if (cls != CLSID_CArchiveHandler) - return -1; - Byte id = CLS_ARC_ID_ITEM(*clsID); - for (UInt32 i = 0; i < g_NumArcs; i++) - if (g_Arcs[i]->ClassId == id) - return i; - return -1; -} - -STDAPI CreateArchiver(const GUID *clsid, const GUID *iid, void **outObject) -{ - COM_TRY_BEGIN - { - int needIn = (*iid == IID_IInArchive); - int needOut = (*iid == IID_IOutArchive); - if (!needIn && !needOut) - return E_NOINTERFACE; - int formatIndex = FindFormatCalssId(clsid); - if (formatIndex < 0) - return CLASS_E_CLASSNOTAVAILABLE; - - const CArcInfo &arc = *g_Arcs[formatIndex]; - if (needIn) - { - *outObject = arc.CreateInArchive(); - ((IInArchive *)*outObject)->AddRef(); - } - else - { - if (!arc.CreateOutArchive) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = arc.CreateOutArchive(); - ((IOutArchive *)*outObject)->AddRef(); - } - } - COM_TRY_END - return S_OK; -} - -STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value) -{ - if (formatIndex >= g_NumArcs) - return E_INVALIDARG; - const CArcInfo &arc = *g_Arcs[formatIndex]; - NWindows::NCOM::CPropVariant prop; - switch(propID) - { - case NArchive::kName: - prop = arc.Name; - break; - case NArchive::kClassID: - { - GUID clsId = CLSID_CArchiveHandler; - CLS_ARC_ID_ITEM(clsId) = arc.ClassId; - return SetPropGUID(clsId, value); - } - case NArchive::kExtension: - if (arc.Ext != 0) - prop = arc.Ext; - break; - case NArchive::kAddExtension: - if (arc.AddExt != 0) - prop = arc.AddExt; - break; - case NArchive::kUpdate: - prop = (bool)(arc.CreateOutArchive != 0); - break; - case NArchive::kKeepName: - prop = arc.KeepName; - break; - case NArchive::kStartSignature: - return SetPropString((const char *)arc.Signature, arc.SignatureSize, value); - } - prop.Detach(value); - return S_OK; -} - -STDAPI GetHandlerProperty(PROPID propID, PROPVARIANT *value) -{ - return GetHandlerProperty2(0, propID, value); -} - -STDAPI GetNumberOfFormats(UINT32 *numFormats) -{ - *numFormats = g_NumArcs; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp deleted file mode 100644 index d11e9e60..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// CoderMixer2.cpp - -#include "StdAfx.h" - -#include "CoderMixer2.h" - -namespace NCoderMixer { - -CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo): - _srcBindInfo(srcBindInfo) -{ - srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams); - - UInt32 j; - for (j = 0; j < NumSrcInStreams; j++) - { - _srcInToDestOutMap.Add(0); - DestOutToSrcInMap.Add(0); - } - for (j = 0; j < _numSrcOutStreams; j++) - { - _srcOutToDestInMap.Add(0); - _destInToSrcOutMap.Add(0); - } - - UInt32 destInOffset = 0; - UInt32 destOutOffset = 0; - UInt32 srcInOffset = NumSrcInStreams; - UInt32 srcOutOffset = _numSrcOutStreams; - - for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i]; - - srcInOffset -= srcCoderInfo.NumInStreams; - srcOutOffset -= srcCoderInfo.NumOutStreams; - - UInt32 j; - for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++) - { - UInt32 index = srcInOffset + j; - _srcInToDestOutMap[index] = destOutOffset; - DestOutToSrcInMap[destOutOffset] = index; - } - for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++) - { - UInt32 index = srcOutOffset + j; - _srcOutToDestInMap[index] = destInOffset; - _destInToSrcOutMap[destInOffset] = index; - } - } -} - -void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo) -{ - destBindInfo.Coders.Clear(); - destBindInfo.BindPairs.Clear(); - destBindInfo.InStreams.Clear(); - destBindInfo.OutStreams.Clear(); - - int i; - for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--) - { - const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i]; - CCoderStreamsInfo destCoderInfo; - destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams; - destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams; - destBindInfo.Coders.Add(destCoderInfo); - } - for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--) - { - const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i]; - CBindPair destBindPair; - destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex]; - destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex]; - destBindInfo.BindPairs.Add(destBindPair); - } - for (i = 0; i < _srcBindInfo.InStreams.Size(); i++) - destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]); - for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++) - destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]); -} - -CCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams): - NumInStreams(numInStreams), - NumOutStreams(numOutStreams) -{ - InSizes.Reserve(NumInStreams); - InSizePointers.Reserve(NumInStreams); - OutSizePointers.Reserve(NumOutStreams); - OutSizePointers.Reserve(NumOutStreams); -} - -static void SetSizes(const UInt64 **srcSizes, CRecordVector &sizes, - CRecordVector &sizePointers, UInt32 numItems) -{ - sizes.Clear(); - sizePointers.Clear(); - for(UInt32 i = 0; i < numItems; i++) - { - if (srcSizes == 0 || srcSizes[i] == NULL) - { - sizes.Add(0); - sizePointers.Add(NULL); - } - else - { - sizes.Add(*srcSizes[i]); - sizePointers.Add(&sizes.Back()); - } - } -} - -void CCoderInfo2::SetCoderInfo(const UInt64 **inSizes, - const UInt64 **outSizes) -{ - SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); - SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.h deleted file mode 100644 index be68c680..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +++ /dev/null @@ -1,174 +0,0 @@ -// CoderMixer2.h - -#ifndef __CODER_MIXER2_H -#define __CODER_MIXER2_H - -#include "../../../Common/MyVector.h" -#include "../../../Common/Types.h" -#include "../../../Common/MyCom.h" -#include "../../ICoder.h" - -namespace NCoderMixer { - -struct CBindPair -{ - UInt32 InIndex; - UInt32 OutIndex; -}; - -struct CCoderStreamsInfo -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; -}; - -struct CBindInfo -{ - CRecordVector Coders; - CRecordVector BindPairs; - CRecordVector InStreams; - CRecordVector OutStreams; - - void Clear() - { - Coders.Clear(); - BindPairs.Clear(); - InStreams.Clear(); - OutStreams.Clear(); - } - - /* - UInt32 GetCoderStartOutStream(UInt32 coderIndex) const - { - UInt32 numOutStreams = 0; - for (UInt32 i = 0; i < coderIndex; i++) - numOutStreams += Coders[i].NumOutStreams; - return numOutStreams; - } - */ - - - void GetNumStreams(UInt32 &numInStreams, UInt32 &numOutStreams) const - { - numInStreams = 0; - numOutStreams = 0; - for (int i = 0; i < Coders.Size(); i++) - { - const CCoderStreamsInfo &coderStreamsInfo = Coders[i]; - numInStreams += coderStreamsInfo.NumInStreams; - numOutStreams += coderStreamsInfo.NumOutStreams; - } - } - - int FindBinderForInStream(UInt32 inStream) const - { - for (int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].InIndex == inStream) - return i; - return -1; - } - int FindBinderForOutStream(UInt32 outStream) const - { - for (int i = 0; i < BindPairs.Size(); i++) - if (BindPairs[i].OutIndex == outStream) - return i; - return -1; - } - - UInt32 GetCoderInStreamIndex(UInt32 coderIndex) const - { - UInt32 streamIndex = 0; - for (UInt32 i = 0; i < coderIndex; i++) - streamIndex += Coders[i].NumInStreams; - return streamIndex; - } - - UInt32 GetCoderOutStreamIndex(UInt32 coderIndex) const - { - UInt32 streamIndex = 0; - for (UInt32 i = 0; i < coderIndex; i++) - streamIndex += Coders[i].NumOutStreams; - return streamIndex; - } - - - void FindInStream(UInt32 streamIndex, UInt32 &coderIndex, - UInt32 &coderStreamIndex) const - { - for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) - { - UInt32 curSize = Coders[coderIndex].NumInStreams; - if (streamIndex < curSize) - { - coderStreamIndex = streamIndex; - return; - } - streamIndex -= curSize; - } - throw 1; - } - void FindOutStream(UInt32 streamIndex, UInt32 &coderIndex, - UInt32 &coderStreamIndex) const - { - for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) - { - UInt32 curSize = Coders[coderIndex].NumOutStreams; - if (streamIndex < curSize) - { - coderStreamIndex = streamIndex; - return; - } - streamIndex -= curSize; - } - throw 1; - } -}; - -class CBindReverseConverter -{ - UInt32 _numSrcOutStreams; - NCoderMixer::CBindInfo _srcBindInfo; - CRecordVector _srcInToDestOutMap; - CRecordVector _srcOutToDestInMap; - CRecordVector _destInToSrcOutMap; -public: - UInt32 NumSrcInStreams; - CRecordVector DestOutToSrcInMap; - - CBindReverseConverter(const NCoderMixer::CBindInfo &srcBindInfo); - void CreateReverseBindInfo(NCoderMixer::CBindInfo &destBindInfo); -}; - -struct CCoderInfo2 -{ - CMyComPtr Coder; - CMyComPtr Coder2; - UInt32 NumInStreams; - UInt32 NumOutStreams; - - CRecordVector InSizes; - CRecordVector OutSizes; - CRecordVector InSizePointers; - CRecordVector OutSizePointers; - - CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams); - void SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes); - - HRESULT QueryInterface(REFGUID iid, void** pp) const - { - IUnknown *p = Coder ? (IUnknown *)Coder : (IUnknown *)Coder2; - return p->QueryInterface(iid, pp); - } -}; - -class CCoderMixer2 -{ -public: - virtual HRESULT SetBindInfo(const CBindInfo &bindInfo) = 0; - virtual void ReInit() = 0; - virtual void SetCoderInfo(UInt32 coderIndex, const UInt64 **inSizes, const UInt64 **outSizes) = 0; -}; - -} -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.cpp deleted file mode 100644 index 2ef1fa95..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.cpp +++ /dev/null @@ -1,228 +0,0 @@ -// CoderMixer2MT.cpp - -#include "StdAfx.h" - -#include "CoderMixer2MT.h" - -namespace NCoderMixer { - -CCoder2::CCoder2(UInt32 numInStreams, UInt32 numOutStreams): - CCoderInfo2(numInStreams, numOutStreams) -{ - InStreams.Reserve(NumInStreams); - InStreamPointers.Reserve(NumInStreams); - OutStreams.Reserve(NumOutStreams); - OutStreamPointers.Reserve(NumOutStreams); -} - -void CCoder2::Execute() { Code(NULL); } - -void CCoder2::Code(ICompressProgressInfo *progress) -{ - InStreamPointers.Clear(); - OutStreamPointers.Clear(); - UInt32 i; - for (i = 0; i < NumInStreams; i++) - { - if (InSizePointers[i] != NULL) - InSizePointers[i] = &InSizes[i]; - InStreamPointers.Add((ISequentialInStream *)InStreams[i]); - } - for (i = 0; i < NumOutStreams; i++) - { - if (OutSizePointers[i] != NULL) - OutSizePointers[i] = &OutSizes[i]; - OutStreamPointers.Add((ISequentialOutStream *)OutStreams[i]); - } - if (Coder) - Result = Coder->Code(InStreamPointers[0], OutStreamPointers[0], - InSizePointers[0], OutSizePointers[0], progress); - else - Result = Coder2->Code(&InStreamPointers.Front(), &InSizePointers.Front(), NumInStreams, - &OutStreamPointers.Front(), &OutSizePointers.Front(), NumOutStreams, progress); - { - int i; - for (i = 0; i < InStreams.Size(); i++) - InStreams[i].Release(); - for (i = 0; i < OutStreams.Size(); i++) - OutStreams[i].Release(); - } -} - -static void SetSizes(const UInt64 **srcSizes, CRecordVector &sizes, - CRecordVector &sizePointers, UInt32 numItems) -{ - sizes.Clear(); - sizePointers.Clear(); - for(UInt32 i = 0; i < numItems; i++) - { - if (srcSizes == 0 || srcSizes[i] == NULL) - { - sizes.Add(0); - sizePointers.Add(NULL); - } - else - { - sizes.Add(*srcSizes[i]); - sizePointers.Add(&sizes.Back()); - } - } -} - - -void CCoder2::SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes) -{ - SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); - SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); -} - -////////////////////////////////////// -// CCoderMixer2MT - -HRESULT CCoderMixer2MT::SetBindInfo(const CBindInfo &bindInfo) -{ - _bindInfo = bindInfo; - _streamBinders.Clear(); - for(int i = 0; i < _bindInfo.BindPairs.Size(); i++) - { - _streamBinders.Add(CStreamBinder()); - RINOK(_streamBinders.Back().CreateEvents()); - } - return S_OK; -} - -void CCoderMixer2MT::AddCoderCommon() -{ - const CCoderStreamsInfo &c = _bindInfo.Coders[_coders.Size()]; - CCoder2 threadCoderInfo(c.NumInStreams, c.NumOutStreams); - _coders.Add(threadCoderInfo); -} - -void CCoderMixer2MT::AddCoder(ICompressCoder *coder) -{ - AddCoderCommon(); - _coders.Back().Coder = coder; -} - -void CCoderMixer2MT::AddCoder2(ICompressCoder2 *coder) -{ - AddCoderCommon(); - _coders.Back().Coder2 = coder; -} - - -void CCoderMixer2MT::ReInit() -{ - for(int i = 0; i < _streamBinders.Size(); i++) - _streamBinders[i].ReInit(); -} - - -HRESULT CCoderMixer2MT::Init(ISequentialInStream **inStreams, ISequentialOutStream **outStreams) -{ - /* - if (_coders.Size() != _bindInfo.Coders.Size()) - throw 0; - */ - int i; - for(i = 0; i < _coders.Size(); i++) - { - CCoder2 &coderInfo = _coders[i]; - const CCoderStreamsInfo &coderStreamsInfo = _bindInfo.Coders[i]; - coderInfo.InStreams.Clear(); - UInt32 j; - for(j = 0; j < coderStreamsInfo.NumInStreams; j++) - coderInfo.InStreams.Add(NULL); - coderInfo.OutStreams.Clear(); - for(j = 0; j < coderStreamsInfo.NumOutStreams; j++) - coderInfo.OutStreams.Add(NULL); - } - - for(i = 0; i < _bindInfo.BindPairs.Size(); i++) - { - const CBindPair &bindPair = _bindInfo.BindPairs[i]; - UInt32 inCoderIndex, inCoderStreamIndex; - UInt32 outCoderIndex, outCoderStreamIndex; - _bindInfo.FindInStream(bindPair.InIndex, inCoderIndex, inCoderStreamIndex); - _bindInfo.FindOutStream(bindPair.OutIndex, outCoderIndex, outCoderStreamIndex); - - _streamBinders[i].CreateStreams( - &_coders[inCoderIndex].InStreams[inCoderStreamIndex], - &_coders[outCoderIndex].OutStreams[outCoderStreamIndex]); - } - - for(i = 0; i < _bindInfo.InStreams.Size(); i++) - { - UInt32 inCoderIndex, inCoderStreamIndex; - _bindInfo.FindInStream(_bindInfo.InStreams[i], inCoderIndex, inCoderStreamIndex); - _coders[inCoderIndex].InStreams[inCoderStreamIndex] = inStreams[i]; - } - - for(i = 0; i < _bindInfo.OutStreams.Size(); i++) - { - UInt32 outCoderIndex, outCoderStreamIndex; - _bindInfo.FindOutStream(_bindInfo.OutStreams[i], outCoderIndex, outCoderStreamIndex); - _coders[outCoderIndex].OutStreams[outCoderStreamIndex] = outStreams[i]; - } - return S_OK; -} - -HRESULT CCoderMixer2MT::ReturnIfError(HRESULT code) -{ - for (int i = 0; i < _coders.Size(); i++) - if (_coders[i].Result == code) - return code; - return S_OK; -} - -STDMETHODIMP CCoderMixer2MT::Code(ISequentialInStream **inStreams, - const UInt64 ** /* inSizes */, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != (UInt32)_bindInfo.InStreams.Size() || - numOutStreams != (UInt32)_bindInfo.OutStreams.Size()) - return E_INVALIDARG; - - Init(inStreams, outStreams); - - int i; - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - { - RINOK(_coders[i].Create()); - } - - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - _coders[i].Start(); - - _coders[_progressCoderIndex].Code(progress); - - for (i = 0; i < _coders.Size(); i++) - if (i != _progressCoderIndex) - _coders[i].WaitFinish(); - - RINOK(ReturnIfError(E_ABORT)); - RINOK(ReturnIfError(E_OUTOFMEMORY)); - RINOK(ReturnIfError(S_FALSE)); - - for (i = 0; i < _coders.Size(); i++) - { - HRESULT result = _coders[i].Result; - if (result != S_OK && result != E_FAIL) - return result; - } - for (i = 0; i < _coders.Size(); i++) - { - HRESULT result = _coders[i].Result; - if (result != S_OK) - return result; - } - return S_OK; -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.h deleted file mode 100644 index 505f1a88..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CoderMixer2MT.h +++ /dev/null @@ -1,80 +0,0 @@ -// CoderMixer2MT.h - -#ifndef __CODER_MIXER2_MT_H -#define __CODER_MIXER2_MT_H - -#include "CoderMixer2.h" -#include "../../../Common/MyCom.h" -#include "../../Common/StreamBinder.h" -#include "../../Common/VirtThread.h" - -namespace NCoderMixer { - -struct CCoder2: public CCoderInfo2, public CVirtThread -{ - HRESULT Result; - CObjectVector< CMyComPtr > InStreams; - CObjectVector< CMyComPtr > OutStreams; - CRecordVector InStreamPointers; - CRecordVector OutStreamPointers; - - CCoder2(UInt32 numInStreams, UInt32 numOutStreams); - void SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes); - virtual void Execute(); - void Code(ICompressProgressInfo *progress); -}; - - -/* - SetBindInfo() - for each coder - AddCoder[2]() - SetProgressIndex(UInt32 coderIndex); - - for each file - { - ReInit() - for each coder - SetCoderInfo - Code - } -*/ - -class CCoderMixer2MT: - public ICompressCoder2, - public CCoderMixer2, - public CMyUnknownImp -{ - CBindInfo _bindInfo; - CObjectVector _streamBinders; - int _progressCoderIndex; - - void AddCoderCommon(); - HRESULT Init(ISequentialInStream **inStreams, ISequentialOutStream **outStreams); - HRESULT ReturnIfError(HRESULT code); -public: - CObjectVector _coders; - MY_UNKNOWN_IMP - - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - - HRESULT SetBindInfo(const CBindInfo &bindInfo); - void AddCoder(ICompressCoder *coder); - void AddCoder2(ICompressCoder2 *coder); - void SetProgressCoderIndex(int coderIndex) { _progressCoderIndex = coderIndex; } - - void ReInit(); - void SetCoderInfo(UInt32 coderIndex, const UInt64 **inSizes, const UInt64 **outSizes) - { _coders[coderIndex].SetCoderInfo(inSizes, outSizes); } - UInt64 GetWriteProcessedSize(UInt32 binderIndex) const - { return _streamBinders[binderIndex].ProcessedSize; } -}; - -} -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.cpp deleted file mode 100644 index a974b54c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// CrossThreadProgress.cpp - -#include "StdAfx.h" - -#include "CrossThreadProgress.h" - -STDMETHODIMP CCrossThreadProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - InSize = inSize; - OutSize = outSize; - ProgressEvent.Set(); - WaitEvent.Lock(); - return Result; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.h deleted file mode 100644 index b5422a31..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/CrossThreadProgress.h +++ /dev/null @@ -1,37 +0,0 @@ -// CrossThreadProgress.h - -#ifndef __CROSSTHREADPROGRESS_H -#define __CROSSTHREADPROGRESS_H - -#include "../../ICoder.h" -#include "../../../Windows/Synchronization.h" -#include "../../../Common/MyCom.h" - -class CCrossThreadProgress: - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - const UInt64 *InSize; - const UInt64 *OutSize; - HRESULT Result; - NWindows::NSynchronization::CAutoResetEvent ProgressEvent; - NWindows::NSynchronization::CAutoResetEvent WaitEvent; - - HRes Create() - { - RINOK(ProgressEvent.CreateIfNotCreated()); - return WaitEvent.CreateIfNotCreated(); - } - void Init() - { - ProgressEvent.Reset(); - WaitEvent.Reset(); - } - - MY_UNKNOWN_IMP - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp deleted file mode 100644 index 54bcfec1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// DummyOutStream.cpp - -#include "StdAfx.h" - -#include "DummyOutStream.h" - -STDMETHODIMP CDummyOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result; - if(!_stream) - { - realProcessedSize = size; - result = S_OK; - } - else - result = _stream->Write(data, size, &realProcessedSize); - _size += realProcessedSize; - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.h deleted file mode 100644 index d19b3111..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +++ /dev/null @@ -1,23 +0,0 @@ -// DummyOutStream.h - -#ifndef __DUMMYOUTSTREAM_H -#define __DUMMYOUTSTREAM_H - -#include "../../IStream.h" -#include "Common/MyCom.h" - -class CDummyOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void SetStream(ISequentialOutStream *outStream) { _stream = outStream; } - void Init() { _size = 0; } - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - UInt64 GetSize() const { return _size; } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp deleted file mode 100644 index 0dcf449e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +++ /dev/null @@ -1,618 +0,0 @@ -// HandlerOutCommon.cpp - -#include "StdAfx.h" - -#include "HandlerOut.h" -#include "../../../Windows/PropVariant.h" -#include "../../../Common/StringToInt.h" -#include "../../ICoder.h" -#include "../Common/ParseProperties.h" - -#ifdef COMPRESS_MT -#include "../../../Windows/System.h" -#endif - -using namespace NWindows; - -namespace NArchive { - -static const wchar_t *kCopyMethod = L"Copy"; -static const wchar_t *kLZMAMethodName = L"LZMA"; -static const wchar_t *kLZMA2MethodName = L"LZMA2"; -static const wchar_t *kBZip2MethodName = L"BZip2"; -static const wchar_t *kPpmdMethodName = L"PPMd"; -static const wchar_t *kDeflateMethodName = L"Deflate"; -static const wchar_t *kDeflate64MethodName = L"Deflate64"; - -static const wchar_t *kLzmaMatchFinderX1 = L"HC4"; -static const wchar_t *kLzmaMatchFinderX5 = L"BT4"; - -static const UInt32 kLzmaAlgoX1 = 0; -static const UInt32 kLzmaAlgoX5 = 1; - -static const UInt32 kLzmaDicSizeX1 = 1 << 16; -static const UInt32 kLzmaDicSizeX3 = 1 << 20; -static const UInt32 kLzmaDicSizeX5 = 1 << 24; -static const UInt32 kLzmaDicSizeX7 = 1 << 25; -static const UInt32 kLzmaDicSizeX9 = 1 << 26; - -static const UInt32 kLzmaFastBytesX1 = 32; -static const UInt32 kLzmaFastBytesX7 = 64; - -static const UInt32 kPpmdMemSizeX1 = (1 << 22); -static const UInt32 kPpmdMemSizeX5 = (1 << 24); -static const UInt32 kPpmdMemSizeX7 = (1 << 26); -static const UInt32 kPpmdMemSizeX9 = (192 << 20); - -static const UInt32 kPpmdOrderX1 = 4; -static const UInt32 kPpmdOrderX5 = 6; -static const UInt32 kPpmdOrderX7 = 16; -static const UInt32 kPpmdOrderX9 = 32; - -static const UInt32 kDeflateAlgoX1 = 0; -static const UInt32 kDeflateAlgoX5 = 1; - -static const UInt32 kDeflateFastBytesX1 = 32; -static const UInt32 kDeflateFastBytesX7 = 64; -static const UInt32 kDeflateFastBytesX9 = 128; - -static const UInt32 kDeflatePassesX1 = 1; -static const UInt32 kDeflatePassesX7 = 3; -static const UInt32 kDeflatePassesX9 = 10; - -static const UInt32 kBZip2NumPassesX1 = 1; -static const UInt32 kBZip2NumPassesX7 = 2; -static const UInt32 kBZip2NumPassesX9 = 7; - -static const UInt32 kBZip2DicSizeX1 = 100000; -static const UInt32 kBZip2DicSizeX3 = 500000; -static const UInt32 kBZip2DicSizeX5 = 900000; - -static const wchar_t *kDefaultMethodName = kLZMAMethodName; - -static const wchar_t *kLzmaMatchFinderForHeaders = L"BT2"; -static const UInt32 kDictionaryForHeaders = 1 << 20; -static const UInt32 kNumFastBytesForHeaders = 273; -static const UInt32 kAlgorithmForHeaders = kLzmaAlgoX5; - -static bool AreEqual(const UString &methodName, const wchar_t *s) - { return (methodName.CompareNoCase(s) == 0); } - -static inline bool IsLZMAMethod(const UString &methodName) -{ - return - AreEqual(methodName, kLZMAMethodName) || - AreEqual(methodName, kLZMA2MethodName); -} - -static inline bool IsBZip2Method(const UString &methodName) - { return AreEqual(methodName, kBZip2MethodName); } - -static inline bool IsPpmdMethod(const UString &methodName) - { return AreEqual(methodName, kPpmdMethodName); } - -static inline bool IsDeflateMethod(const UString &methodName) -{ - return - AreEqual(methodName, kDeflateMethodName) || - AreEqual(methodName, kDeflate64MethodName); -} - -struct CNameToPropID -{ - PROPID PropID; - VARTYPE VarType; - const wchar_t *Name; -}; - -CNameToPropID g_NameToPropID[] = -{ - { NCoderPropID::kOrder, VT_UI4, L"O" }, - { NCoderPropID::kPosStateBits, VT_UI4, L"PB" }, - { NCoderPropID::kLitContextBits, VT_UI4, L"LC" }, - { NCoderPropID::kLitPosBits, VT_UI4, L"LP" }, - { NCoderPropID::kEndMarker, VT_BOOL, L"eos" }, - - { NCoderPropID::kNumPasses, VT_UI4, L"Pass" }, - { NCoderPropID::kNumFastBytes, VT_UI4, L"fb" }, - { NCoderPropID::kMatchFinderCycles, VT_UI4, L"mc" }, - { NCoderPropID::kAlgorithm, VT_UI4, L"a" }, - { NCoderPropID::kMatchFinder, VT_BSTR, L"mf" }, - { NCoderPropID::kNumThreads, VT_UI4, L"mt" } -}; - -static bool ConvertProperty(PROPVARIANT srcProp, VARTYPE varType, NCOM::CPropVariant &destProp) -{ - if (varType == srcProp.vt) - { - destProp = srcProp; - return true; - } - if (varType == VT_UI1) - { - if (srcProp.vt == VT_UI4) - { - UInt32 value = srcProp.ulVal; - if (value > 0xFF) - return false; - destProp = (Byte)value; - return true; - } - } - else if (varType == VT_BOOL) - { - bool res; - if (SetBoolProperty(res, srcProp) != S_OK) - return false; - destProp = res; - return true; - } - return false; -} - -static int FindPropIdFromStringName(const UString &name) -{ - for (int i = 0; i < sizeof(g_NameToPropID) / sizeof(g_NameToPropID[0]); i++) - if (name.CompareNoCase(g_NameToPropID[i].Name) == 0) - return i; - return -1; -} - -static void SetOneMethodProp(COneMethodInfo &oneMethodInfo, PROPID propID, - const NWindows::NCOM::CPropVariant &value) -{ - for (int j = 0; j < oneMethodInfo.Properties.Size(); j++) - if (oneMethodInfo.Properties[j].Id == propID) - return; - CProp property; - property.Id = propID; - property.Value = value; - oneMethodInfo.Properties.Add(property); -} - -void COutHandler::SetCompressionMethod2(COneMethodInfo &oneMethodInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ) -{ - UInt32 level = _level; - if (oneMethodInfo.MethodName.IsEmpty()) - oneMethodInfo.MethodName = kDefaultMethodName; - - if (IsLZMAMethod(oneMethodInfo.MethodName)) - { - UInt32 dicSize = - (level >= 9 ? kLzmaDicSizeX9 : - (level >= 7 ? kLzmaDicSizeX7 : - (level >= 5 ? kLzmaDicSizeX5 : - (level >= 3 ? kLzmaDicSizeX3 : - kLzmaDicSizeX1)))); - - UInt32 algo = - (level >= 5 ? kLzmaAlgoX5 : - kLzmaAlgoX1); - - UInt32 fastBytes = - (level >= 7 ? kLzmaFastBytesX7 : - kLzmaFastBytesX1); - - const wchar_t *matchFinder = - (level >= 5 ? kLzmaMatchFinderX5 : - kLzmaMatchFinderX1); - - SetOneMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kMatchFinder, matchFinder); - #ifdef COMPRESS_MT - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads); - #endif - } - else if (IsDeflateMethod(oneMethodInfo.MethodName)) - { - UInt32 fastBytes = - (level >= 9 ? kDeflateFastBytesX9 : - (level >= 7 ? kDeflateFastBytesX7 : - kDeflateFastBytesX1)); - - UInt32 numPasses = - (level >= 9 ? kDeflatePassesX9 : - (level >= 7 ? kDeflatePassesX7 : - kDeflatePassesX1)); - - UInt32 algo = - (level >= 5 ? kDeflateAlgoX5 : - kDeflateAlgoX1); - - SetOneMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, algo); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, fastBytes); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses); - } - else if (IsBZip2Method(oneMethodInfo.MethodName)) - { - UInt32 numPasses = - (level >= 9 ? kBZip2NumPassesX9 : - (level >= 7 ? kBZip2NumPassesX7 : - kBZip2NumPassesX1)); - - UInt32 dicSize = - (level >= 5 ? kBZip2DicSizeX5 : - (level >= 3 ? kBZip2DicSizeX3 : - kBZip2DicSizeX1)); - - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, numPasses); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, dicSize); - #ifdef COMPRESS_MT - SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumThreads, numThreads); - #endif - } - else if (IsPpmdMethod(oneMethodInfo.MethodName)) - { - UInt32 useMemSize = - (level >= 9 ? kPpmdMemSizeX9 : - (level >= 7 ? kPpmdMemSizeX7 : - (level >= 5 ? kPpmdMemSizeX5 : - kPpmdMemSizeX1))); - - UInt32 order = - (level >= 9 ? kPpmdOrderX9 : - (level >= 7 ? kPpmdOrderX7 : - (level >= 5 ? kPpmdOrderX5 : - kPpmdOrderX1))); - - SetOneMethodProp(oneMethodInfo, NCoderPropID::kUsedMemorySize, useMemSize); - SetOneMethodProp(oneMethodInfo, NCoderPropID::kOrder, order); - } -} - -static void SplitParams(const UString &srcString, UStringVector &subStrings) -{ - subStrings.Clear(); - UString name; - int len = srcString.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = srcString[i]; - if (c == L':') - { - subStrings.Add(name); - name.Empty(); - } - else - name += c; - } - subStrings.Add(name); -} - -static void SplitParam(const UString ¶m, UString &name, UString &value) -{ - int eqPos = param.Find(L'='); - if (eqPos >= 0) - { - name = param.Left(eqPos); - value = param.Mid(eqPos + 1); - return; - } - for(int i = 0; i < param.Length(); i++) - { - wchar_t c = param[i]; - if (c >= L'0' && c <= L'9') - { - name = param.Left(i); - value = param.Mid(i); - return; - } - } - name = param; -} - -HRESULT COutHandler::SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value) -{ - CProp property; - if ( - name.CompareNoCase(L"D") == 0 || - name.CompareNoCase(L"MEM") == 0) - { - UInt32 dicSize; - RINOK(ParsePropDictionaryValue(value, dicSize)); - if (name.CompareNoCase(L"D") == 0) - property.Id = NCoderPropID::kDictionarySize; - else - property.Id = NCoderPropID::kUsedMemorySize; - property.Value = dicSize; - oneMethodInfo.Properties.Add(property); - } - else - { - int index = FindPropIdFromStringName(name); - if (index < 0) - return E_INVALIDARG; - - const CNameToPropID &nameToPropID = g_NameToPropID[index]; - property.Id = nameToPropID.PropID; - - NCOM::CPropVariant propValue; - - if (nameToPropID.VarType == VT_BSTR) - propValue = value; - else if (nameToPropID.VarType == VT_BOOL) - { - bool res; - if (!StringToBool(value, res)) - return E_INVALIDARG; - propValue = res; - } - else - { - UInt32 number; - if (ParseStringToUInt32(value, number) == value.Length()) - propValue = number; - else - propValue = value; - } - - if (!ConvertProperty(propValue, nameToPropID.VarType, property.Value)) - return E_INVALIDARG; - - oneMethodInfo.Properties.Add(property); - } - return S_OK; -} - -HRESULT COutHandler::SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString) -{ - UStringVector params; - SplitParams(srcString, params); - if (params.Size() > 0) - oneMethodInfo.MethodName = params[0]; - for (int i = 1; i < params.Size(); i++) - { - const UString ¶m = params[i]; - UString name, value; - SplitParam(param, name, value); - RINOK(SetParam(oneMethodInfo, name, value)); - } - return S_OK; -} - -HRESULT COutHandler::SetSolidSettings(const UString &s) -{ - bool res; - if (StringToBool(s, res)) - { - if (res) - InitSolid(); - else - _numSolidFiles = 1; - return S_OK; - } - UString s2 = s; - s2.MakeUpper(); - for (int i = 0; i < s2.Length();) - { - const wchar_t *start = ((const wchar_t *)s2) + i; - const wchar_t *end; - UInt64 v = ConvertStringToUInt64(start, &end); - if (start == end) - { - if (s2[i++] != 'E') - return E_INVALIDARG; - _solidExtension = true; - continue; - } - i += (int)(end - start); - if (i == s2.Length()) - return E_INVALIDARG; - wchar_t c = s2[i++]; - switch(c) - { - case 'F': - if (v < 1) - v = 1; - _numSolidFiles = v; - break; - case 'B': - _numSolidBytes = v; - _numSolidBytesDefined = true; - break; - case 'K': - _numSolidBytes = (v << 10); - _numSolidBytesDefined = true; - break; - case 'M': - _numSolidBytes = (v << 20); - _numSolidBytesDefined = true; - break; - case 'G': - _numSolidBytes = (v << 30); - _numSolidBytesDefined = true; - break; - default: - return E_INVALIDARG; - } - } - return S_OK; -} - -HRESULT COutHandler::SetSolidSettings(const PROPVARIANT &value) -{ - switch(value.vt) - { - case VT_EMPTY: - InitSolid(); - return S_OK; - case VT_BSTR: - return SetSolidSettings(value.bstrVal); - default: - return E_INVALIDARG; - } -} - -void COutHandler::Init() -{ - _removeSfxBlock = false; - _compressHeaders = true; - _encryptHeaders = false; - - WriteModified = true; - WriteCreated = false; - WriteAccessed = false; - - #ifdef COMPRESS_MT - _numThreads = NWindows::NSystem::GetNumberOfProcessors(); - #endif - - _level = 5; - _autoFilter = true; - _volumeMode = false; - _crcSize = 4; - InitSolid(); -} - -void COutHandler::BeforeSetProperty() -{ - Init(); - #ifdef COMPRESS_MT - numProcessors = NSystem::GetNumberOfProcessors(); - #endif - - mainDicSize = 0xFFFFFFFF; - mainDicMethodIndex = 0xFFFFFFFF; - minNumber = 0; - _crcSize = 4; -} - -HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &value) -{ - UString name = nameSpec; - name.MakeUpper(); - if (name.IsEmpty()) - return E_INVALIDARG; - - if (name[0] == 'X') - { - name.Delete(0); - _level = 9; - return ParsePropValue(name, value, _level); - } - - if (name[0] == L'S') - { - name.Delete(0); - if (name.IsEmpty()) - return SetSolidSettings(value); - if (value.vt != VT_EMPTY) - return E_INVALIDARG; - return SetSolidSettings(name); - } - - if (name == L"CRC") - { - _crcSize = 4; - name.Delete(0, 3); - return ParsePropValue(name, value, _crcSize); - } - - UInt32 number; - int index = ParseStringToUInt32(name, number); - UString realName = name.Mid(index); - if (index == 0) - { - if(name.Left(2).CompareNoCase(L"MT") == 0) - { - #ifdef COMPRESS_MT - RINOK(ParseMtProp(name.Mid(2), value, numProcessors, _numThreads)); - #endif - return S_OK; - } - if (name.CompareNoCase(L"RSFX") == 0) - return SetBoolProperty(_removeSfxBlock, value); - if (name.CompareNoCase(L"F") == 0) - return SetBoolProperty(_autoFilter, value); - if (name.CompareNoCase(L"HC") == 0) - return SetBoolProperty(_compressHeaders, value); - if (name.CompareNoCase(L"HCF") == 0) - { - bool compressHeadersFull = true; - RINOK(SetBoolProperty(compressHeadersFull, value)); - if (!compressHeadersFull) - return E_INVALIDARG; - return S_OK; - } - if (name.CompareNoCase(L"HE") == 0) - return SetBoolProperty(_encryptHeaders, value); - if (name.CompareNoCase(L"TM") == 0) - return SetBoolProperty(WriteModified, value); - if (name.CompareNoCase(L"TC") == 0) - return SetBoolProperty(WriteCreated, value); - if (name.CompareNoCase(L"TA") == 0) - return SetBoolProperty(WriteAccessed, value); - if (name.CompareNoCase(L"V") == 0) - return SetBoolProperty(_volumeMode, value); - number = 0; - } - if (number > 10000) - return E_FAIL; - if (number < minNumber) - return E_INVALIDARG; - number -= minNumber; - for(int j = _methods.Size(); j <= (int)number; j++) - { - COneMethodInfo oneMethodInfo; - _methods.Add(oneMethodInfo); - } - - COneMethodInfo &oneMethodInfo = _methods[number]; - - if (realName.Length() == 0) - { - if (value.vt != VT_BSTR) - return E_INVALIDARG; - - RINOK(SetParams(oneMethodInfo, value.bstrVal)); - } - else - { - CProp property; - if (realName.Left(1).CompareNoCase(L"D") == 0) - { - UInt32 dicSize; - RINOK(ParsePropDictionaryValue(realName.Mid(1), value, dicSize)); - property.Id = NCoderPropID::kDictionarySize; - property.Value = dicSize; - oneMethodInfo.Properties.Add(property); - if (number <= mainDicMethodIndex) - mainDicSize = dicSize; - } - else if (realName.Left(3).CompareNoCase(L"MEM") == 0) - { - UInt32 dicSize; - RINOK(ParsePropDictionaryValue(realName.Mid(3), value, dicSize)); - property.Id = NCoderPropID::kUsedMemorySize; - property.Value = dicSize; - oneMethodInfo.Properties.Add(property); - if (number <= mainDicMethodIndex) - mainDicSize = dicSize; - } - else - { - int index = FindPropIdFromStringName(realName); - if (index < 0) - return E_INVALIDARG; - - const CNameToPropID &nameToPropID = g_NameToPropID[index]; - property.Id = nameToPropID.PropID; - - if (!ConvertProperty(value, nameToPropID.VarType, property.Value)) - return E_INVALIDARG; - - oneMethodInfo.Properties.Add(property); - } - } - return S_OK; -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.h deleted file mode 100644 index ab925cc3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/HandlerOut.h +++ /dev/null @@ -1,86 +0,0 @@ -// HandlerOut.h - -#ifndef __HANDLER_OUT_H -#define __HANDLER_OUT_H - -#include "../../Common/MethodProps.h" -#include "../../Common/CreateCoder.h" - -namespace NArchive { - -struct COneMethodInfo -{ - CObjectVector Properties; - UString MethodName; -}; - -class COutHandler -{ -public: - HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); - - HRESULT SetSolidSettings(const UString &s); - HRESULT SetSolidSettings(const PROPVARIANT &value); - - #ifdef COMPRESS_MT - UInt32 _numThreads; - #endif - - UInt32 _crcSize; - - CObjectVector _methods; - bool _removeSfxBlock; - - UInt64 _numSolidFiles; - UInt64 _numSolidBytes; - bool _numSolidBytesDefined; - bool _solidExtension; - - bool _compressHeaders; - bool _encryptHeaders; - - bool WriteModified; - bool WriteCreated; - bool WriteAccessed; - - bool _autoFilter; - UInt32 _level; - - bool _volumeMode; - - HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value); - HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString); - - void SetCompressionMethod2(COneMethodInfo &oneMethodInfo - #ifdef COMPRESS_MT - , UInt32 numThreads - #endif - ); - - void InitSolidFiles() { _numSolidFiles = (UInt64)(Int64)(-1); } - void InitSolidSize() { _numSolidBytes = (UInt64)(Int64)(-1); } - void InitSolid() - { - InitSolidFiles(); - InitSolidSize(); - _solidExtension = false; - _numSolidBytesDefined = false; - } - - void Init(); - - COutHandler() { Init(); } - - void BeforeSetProperty(); - - UInt32 minNumber; - UInt32 numProcessors; - UInt32 mainDicSize; - UInt32 mainDicMethodIndex; - - DECL_EXTERNAL_CODECS_VARS -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp deleted file mode 100644 index 1d9e5556..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// InStreamWithCRC.cpp - -#include "StdAfx.h" - -#include "InStreamWithCRC.h" - -STDMETHODIMP CSequentialInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (size > 0 && realProcessedSize == 0) - _wasFinished = true; - _crc = CrcUpdate(_crc, data, realProcessedSize); - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CInStreamWithCRC::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - if (size > 0 && realProcessedSize == 0) - _wasFinished = true; - _size += realProcessedSize; - _crc = CrcUpdate(_crc, data, realProcessedSize); - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CInStreamWithCRC::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if (seekOrigin != STREAM_SEEK_SET || offset != 0) - return E_FAIL; - _size = 0; - _crc = CRC_INIT_VAL; - return _stream->Seek(offset, seekOrigin, newPosition); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h deleted file mode 100644 index 96bea9b2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +++ /dev/null @@ -1,69 +0,0 @@ -// InStreamWithCRC.h - -#ifndef __INSTREAMWITHCRC_H -#define __INSTREAMWITHCRC_H - -#include "../../../Common/MyCom.h" -#include "../../IStream.h" - -extern "C" -{ -#include "../../../../C/7zCrc.h" -} - -class CSequentialInStreamWithCRC: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -private: - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _wasFinished; -public: - void SetStream(ISequentialInStream *stream) { _stream = stream; } - void Init() - { - _size = 0; - _wasFinished = false; - _crc = CRC_INIT_VAL; - } - void ReleaseStream() { _stream.Release(); } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } - UInt64 GetSize() const { return _size; } - bool WasFinished() const { return _wasFinished; } -}; - -class CInStreamWithCRC: - public IInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -private: - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _wasFinished; -public: - void SetStream(IInStream *stream) { _stream = stream; } - void Init() - { - _size = 0; - _wasFinished = false; - _crc = CRC_INIT_VAL; - } - void ReleaseStream() { _stream.Release(); } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } - UInt64 GetSize() const { return _size; } - bool WasFinished() const { return _wasFinished; } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp deleted file mode 100644 index f7c3fcd9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// Archive/Common/ItemNameUtils.cpp - -#include "StdAfx.h" - -#include "ItemNameUtils.h" - -namespace NArchive { -namespace NItemName { - -static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR; -static const wchar_t kDirDelimiter = L'/'; - -UString MakeLegalName(const UString &name) -{ - UString zipName = name; - zipName.Replace(kOSDirDelimiter, kDirDelimiter); - return zipName; -} - -UString GetOSName(const UString &name) -{ - UString newName = name; - newName.Replace(kDirDelimiter, kOSDirDelimiter); - return newName; -} - -UString GetOSName2(const UString &name) -{ - if (name.IsEmpty()) - return UString(); - UString newName = GetOSName(name); - if (newName[newName.Length() - 1] == kOSDirDelimiter) - newName.Delete(newName.Length() - 1); - return newName; -} - -bool HasTailSlash(const AString &name, UINT codePage) -{ - if (name.IsEmpty()) - return false; - LPCSTR prev = - #ifdef _WIN32 - CharPrevExA((WORD)codePage, name, &name[name.Length()], 0); - #else - (LPCSTR)(name) + (name.Length() - 1); - #endif - return (*prev == '/'); -} - -#ifndef _WIN32 -UString WinNameToOSName(const UString &name) -{ - UString newName = name; - newName.Replace(L'\\', kOSDirDelimiter); - return newName; -} -#endif - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h deleted file mode 100644 index 5eafacb1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +++ /dev/null @@ -1,24 +0,0 @@ -// Archive/Common/ItemNameUtils.h - -#ifndef __ARCHIVE_ITEMNAMEUTILS_H -#define __ARCHIVE_ITEMNAMEUTILS_H - -#include "../../../Common/MyString.h" - -namespace NArchive { -namespace NItemName { - - UString MakeLegalName(const UString &name); - UString GetOSName(const UString &name); - UString GetOSName2(const UString &name); - bool HasTailSlash(const AString &name, UINT codePage); - - #ifdef _WIN32 - inline UString WinNameToOSName(const UString &name) { return name; } - #else - UString WinNameToOSName(const UString &name); - #endif - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.cpp deleted file mode 100644 index a8cb333e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// MultiStream.cpp - -#include "StdAfx.h" - -#include "MultiStream.h" - -STDMETHODIMP CMultiStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(_streamIndex < Streams.Size() && size > 0) - { - CSubStreamInfo &s = Streams[_streamIndex]; - if (_pos == s.Size) - { - _streamIndex++; - _pos = 0; - continue; - } - RINOK(s.Stream->Seek(s.Pos + _pos, STREAM_SEEK_SET, 0)); - UInt32 sizeToRead = UInt32(MyMin((UInt64)size, s.Size - _pos)); - UInt32 realProcessed; - HRESULT result = s.Stream->Read(data, sizeToRead, &realProcessed); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - if(processedSize != NULL) - *processedSize += realProcessed; - _pos += realProcessed; - _seekPos += realProcessed; - RINOK(result); - break; - } - return S_OK; -} - -STDMETHODIMP CMultiStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - UInt64 newPos; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - newPos = offset; - break; - case STREAM_SEEK_CUR: - newPos = _seekPos + offset; - break; - case STREAM_SEEK_END: - newPos = _totalLength + offset; - break; - default: - return STG_E_INVALIDFUNCTION; - } - _seekPos = 0; - for (_streamIndex = 0; _streamIndex < Streams.Size(); _streamIndex++) - { - UInt64 size = Streams[_streamIndex].Size; - if (newPos < _seekPos + size) - { - _pos = newPos - _seekPos; - _seekPos += _pos; - if (newPosition != 0) - *newPosition = newPos; - return S_OK; - } - _seekPos += size; - } - if (newPos == _seekPos) - { - if (newPosition != 0) - *newPosition = newPos; - return S_OK; - } - return E_FAIL; -} - - -/* -class COutVolumeStream: - public ISequentialOutStream, - public CMyUnknownImp -{ - int _volIndex; - UInt64 _volSize; - UInt64 _curPos; - CMyComPtr _volumeStream; - COutArchive _archive; - CCRC _crc; - -public: - MY_UNKNOWN_IMP - - CFileItem _file; - CUpdateOptions _options; - CMyComPtr VolumeCallback; - void Init(IArchiveUpdateCallback2 *volumeCallback, - const UString &name) - { - _file.Name = name; - _file.IsStartPosDefined = true; - _file.StartPos = 0; - - VolumeCallback = volumeCallback; - _volIndex = 0; - _volSize = 0; - } - - HRESULT Flush(); - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -HRESULT COutVolumeStream::Flush() -{ - if (_volumeStream) - { - _file.UnPackSize = _curPos; - _file.FileCRC = _crc.GetDigest(); - RINOK(WriteVolumeHeader(_archive, _file, _options)); - _archive.Close(); - _volumeStream.Release(); - _file.StartPos += _file.UnPackSize; - } - return S_OK; -} -*/ - -/* -STDMETHODIMP COutMultiStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(size > 0) - { - if (_streamIndex >= Streams.Size()) - { - CSubStreamInfo subStream; - RINOK(VolumeCallback->GetVolumeSize(Streams.Size(), &subStream.Size)); - RINOK(VolumeCallback->GetVolumeStream(Streams.Size(), &subStream.Stream)); - subStream.Pos = 0; - Streams.Add(subStream); - continue; - } - CSubStreamInfo &subStream = Streams[_streamIndex]; - if (_offsetPos >= subStream.Size) - { - _offsetPos -= subStream.Size; - _streamIndex++; - continue; - } - if (_offsetPos != subStream.Pos) - { - CMyComPtr outStream; - RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream)); - RINOK(outStream->Seek(_offsetPos, STREAM_SEEK_SET, NULL)); - subStream.Pos = _offsetPos; - } - - UInt32 curSize = (UInt32)MyMin((UInt64)size, subStream.Size - subStream.Pos); - UInt32 realProcessed; - RINOK(subStream.Stream->Write(data, curSize, &realProcessed)); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - subStream.Pos += realProcessed; - _offsetPos += realProcessed; - _absPos += realProcessed; - if (_absPos > _length) - _length = _absPos; - if(processedSize != NULL) - *processedSize += realProcessed; - if (subStream.Pos == subStream.Size) - { - _streamIndex++; - _offsetPos = 0; - } - if (realProcessed != curSize && realProcessed == 0) - return E_FAIL; - } - return S_OK; -} - -STDMETHODIMP COutMultiStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if(seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - _absPos = offset; - break; - case STREAM_SEEK_CUR: - _absPos += offset; - break; - case STREAM_SEEK_END: - _absPos = _length + offset; - break; - } - _offsetPos = _absPos; - _streamIndex = 0; - return S_OK; -} -*/ diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.h deleted file mode 100644 index b0fe41d6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/MultiStream.h +++ /dev/null @@ -1,76 +0,0 @@ -// MultiStream.h - -#ifndef __MULTISTREAM_H -#define __MULTISTREAM_H - -#include "../../../Common/MyCom.h" -#include "../../../Common/MyVector.h" -#include "../../Archive/IArchive.h" - -class CMultiStream: - public IInStream, - public CMyUnknownImp -{ - int _streamIndex; - UInt64 _pos; - UInt64 _seekPos; - UInt64 _totalLength; -public: - struct CSubStreamInfo - { - CMyComPtr Stream; - UInt64 Pos; - UInt64 Size; - }; - CObjectVector Streams; - void Init() - { - _streamIndex = 0; - _pos = 0; - _seekPos = 0; - _totalLength = 0; - for (int i = 0; i < Streams.Size(); i++) - _totalLength += Streams[i].Size; - } - - MY_UNKNOWN_IMP1(IInStream) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; - -/* -class COutMultiStream: - public IOutStream, - public CMyUnknownImp -{ - int _streamIndex; // required stream - UInt64 _offsetPos; // offset from start of _streamIndex index - UInt64 _absPos; - UInt64 _length; - - struct CSubStreamInfo - { - CMyComPtr Stream; - UInt64 Size; - UInt64 Pos; - }; - CObjectVector Streams; -public: - CMyComPtr VolumeCallback; - void Init() - { - _streamIndex = 0; - _offsetPos = 0; - _absPos = 0; - _length = 0; - } - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); -}; -*/ - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp deleted file mode 100644 index 2ab2da66..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// OutStreamWithCRC.cpp - -#include "StdAfx.h" - -#include "OutStreamWithCRC.h" - -STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result; - if(!_stream) - { - realProcessedSize = size; - result = S_OK; - } - else - result = _stream->Write(data, size, &realProcessedSize); - if (_calculate) - _crc = CrcUpdate(_crc, data, realProcessedSize); - _size += realProcessedSize; - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h deleted file mode 100644 index eaeecde7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +++ /dev/null @@ -1,38 +0,0 @@ -// OutStreamWithCRC.h - -#ifndef __OUTSTREAMWITHCRC_H -#define __OUTSTREAMWITHCRC_H - -#include "../../../Common/MyCom.h" -#include "../../IStream.h" - -extern "C" -{ -#include "../../../../C/7zCrc.h" -} - -class COutStreamWithCRC: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; - UInt32 _crc; - bool _calculate; -public: - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void ReleaseStream() { _stream.Release(); } - void Init(bool calculate = true) - { - _size = 0; - _calculate = calculate; - _crc = CRC_INIT_VAL; - } - void InitCRC() { _crc = CRC_INIT_VAL; } - UInt64 GetSize() const { return _size; } - UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp deleted file mode 100644 index f0d4e29c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// ParseProperties.cpp - -#include "StdAfx.h" - -#include "ParseProperties.h" - -#include "Common/StringToInt.h" -#include "Common/MyCom.h" - -HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue) -{ - if (prop.vt == VT_UI4) - { - if (!name.IsEmpty()) - return E_INVALIDARG; - resValue = prop.ulVal; - } - else if (prop.vt == VT_EMPTY) - { - if(!name.IsEmpty()) - { - const wchar_t *start = name; - const wchar_t *end; - UInt64 v = ConvertStringToUInt64(start, &end); - if (end - start != name.Length()) - return E_INVALIDARG; - resValue = (UInt32)v; - } - } - else - return E_INVALIDARG; - return S_OK; -} - -static const int kLogarithmicSizeLimit = 32; -static const wchar_t kByteSymbol = L'B'; -static const wchar_t kKiloByteSymbol = L'K'; -static const wchar_t kMegaByteSymbol = L'M'; - -HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize) -{ - UString srcString = srcStringSpec; - srcString.MakeUpper(); - - const wchar_t *start = srcString; - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(start, &end); - int numDigits = (int)(end - start); - if (numDigits == 0 || srcString.Length() > numDigits + 1) - return E_INVALIDARG; - if (srcString.Length() == numDigits) - { - if (number >= kLogarithmicSizeLimit) - return E_INVALIDARG; - dicSize = (UInt32)1 << (int)number; - return S_OK; - } - switch (srcString[numDigits]) - { - case kByteSymbol: - if (number >= ((UInt64)1 << kLogarithmicSizeLimit)) - return E_INVALIDARG; - dicSize = (UInt32)number; - break; - case kKiloByteSymbol: - if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 10))) - return E_INVALIDARG; - dicSize = (UInt32)(number << 10); - break; - case kMegaByteSymbol: - if (number >= ((UInt64)1 << (kLogarithmicSizeLimit - 20))) - return E_INVALIDARG; - dicSize = (UInt32)(number << 20); - break; - default: - return E_INVALIDARG; - } - return S_OK; -} - -HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue) -{ - if (name.IsEmpty()) - { - if (prop.vt == VT_UI4) - { - UInt32 logDicSize = prop.ulVal; - if (logDicSize >= 32) - return E_INVALIDARG; - resValue = (UInt32)1 << logDicSize; - return S_OK; - } - if (prop.vt == VT_BSTR) - return ParsePropDictionaryValue(prop.bstrVal, resValue); - return E_INVALIDARG; - } - return ParsePropDictionaryValue(name, resValue); -} - -bool StringToBool(const UString &s, bool &res) -{ - if (s.IsEmpty() || s.CompareNoCase(L"ON") == 0) - { - res = true; - return true; - } - if (s.CompareNoCase(L"OFF") == 0) - { - res = false; - return true; - } - return false; -} - -HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value) -{ - switch(value.vt) - { - case VT_EMPTY: - dest = true; - return S_OK; - /* - case VT_UI4: - dest = (value.ulVal != 0); - break; - */ - case VT_BSTR: - return StringToBool(value.bstrVal, dest) ? S_OK : E_INVALIDARG; - } - return E_INVALIDARG; -} - -int ParseStringToUInt32(const UString &srcString, UInt32 &number) -{ - const wchar_t *start = srcString; - const wchar_t *end; - UInt64 number64 = ConvertStringToUInt64(start, &end); - if (number64 > 0xFFFFFFFF) - { - number = 0; - return 0; - } - number = (UInt32)number64; - return (int)(end - start); -} - -HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads) -{ - if (name.IsEmpty()) - { - switch(prop.vt) - { - case VT_UI4: - numThreads = prop.ulVal; - break; - default: - { - bool val; - RINOK(SetBoolProperty(val, prop)); - numThreads = (val ? defaultNumThreads : 1); - break; - } - } - } - else - { - UInt32 number; - int index = ParseStringToUInt32(name, number); - if (index != name.Length()) - return E_INVALIDARG; - numThreads = number; - } - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.h deleted file mode 100644 index 6f80f634..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/Common/ParseProperties.h +++ /dev/null @@ -1,18 +0,0 @@ -// ParseProperties.h - -#ifndef __PARSEPROPERTIES_H -#define __PARSEPROPERTIES_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -HRESULT ParsePropValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue); -HRESULT ParsePropDictionaryValue(const UString &srcStringSpec, UInt32 &dicSize); -HRESULT ParsePropDictionaryValue(const UString &name, const PROPVARIANT &prop, UInt32 &resValue); - -bool StringToBool(const UString &s, bool &res); -HRESULT SetBoolProperty(bool &dest, const PROPVARIANT &value); -int ParseStringToUInt32(const UString &srcString, UInt32 &number); -HRESULT ParseMtProp(const UString &name, const PROPVARIANT &prop, UInt32 defaultNumThreads, UInt32 &numThreads); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/DllExports2.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/DllExports2.cpp deleted file mode 100644 index d3b15f06..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/DllExports2.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// DLLExports.cpp - -#include "StdAfx.h" - -#include "../../Common/MyInitGuid.h" -#include "../../Common/ComTry.h" -#include "../../Common/Types.h" -#include "../../Windows/PropVariant.h" -#if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) -extern "C" -{ -#include "../../../C/Alloc.h" -} -#endif - -#include "IArchive.h" -#include "../ICoder.h" -#include "../IPassword.h" - -HINSTANCE g_hInstance; -#ifndef _UNICODE -#ifdef _WIN32 -bool g_IsNT = false; -static bool IsItWindowsNT() -{ - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if (!::GetVersionEx(&versionInfo)) - return false; - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif -#endif - -extern "C" -BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) -{ - if (dwReason == DLL_PROCESS_ATTACH) - { - g_hInstance = hInstance; - #ifndef _UNICODE - #ifdef _WIN32 - g_IsNT = IsItWindowsNT(); - #endif - #endif - } - return TRUE; -} - -DEFINE_GUID(CLSID_CArchiveHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); - -static const UInt16 kDecodeId = 0x2790; - -DEFINE_GUID(CLSID_CCodec, -0x23170F69, 0x40C1, kDecodeId, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject); -STDAPI CreateArchiver(const GUID *classID, const GUID *iid, void **outObject); - -STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject) -{ - // COM_TRY_BEGIN - *outObject = 0; - if (*iid == IID_ICompressCoder || *iid == IID_ICompressCoder2 || *iid == IID_ICompressFilter) - { - return CreateCoder(clsid, iid, outObject); - } - else - { - return CreateArchiver(clsid, iid, outObject); - } - // COM_TRY_END -} - -STDAPI SetLargePageMode() -{ - #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) - SetLargePageSize(); - #endif - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/IArchive.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/IArchive.h deleted file mode 100644 index e0ae7aa1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Archive/IArchive.h +++ /dev/null @@ -1,207 +0,0 @@ -// IArchive.h - -#ifndef __IARCHIVE_H -#define __IARCHIVE_H - -#include "../IStream.h" -#include "../IProgress.h" -#include "../PropID.h" - -#define ARCHIVE_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 6, x) -#define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x) - -namespace NFileTimeType -{ - enum EEnum - { - kWindows, - kUnix, - kDOS - }; -} - -namespace NArchive -{ - enum - { - kName = 0, - kClassID, - kExtension, - kAddExtension, - kUpdate, - kKeepName, - kStartSignature, - kFinishSignature, - kAssociate - }; - - namespace NExtract - { - namespace NAskMode - { - enum - { - kExtract = 0, - kTest, - kSkip - }; - } - namespace NOperationResult - { - enum - { - kOK = 0, - kUnSupportedMethod, - kDataError, - kCRCError - }; - } - } - namespace NUpdate - { - namespace NOperationResult - { - enum - { - kOK = 0, - kError - }; - } - } -} - -ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10) -{ - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) PURE; - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) PURE; -}; - - -ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20) -{ - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, - Int32 askExtractMode) PURE; - // GetStream OUT: S_OK - OK, S_FALSE - skeep this file - STDMETHOD(PrepareOperation)(Int32 askExtractMode) PURE; - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) PURE; -}; - - -ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30) -{ - STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) PURE; - STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) PURE; -}; - - -ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40) -{ - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE; -}; - - -ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50) -{ - STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE; -}; - - -/* -IInArchive::Extract: - indices must be sorted - numItems = 0xFFFFFFFF means "all files" - testMode != 0 means "test files without writing to outStream" -*/ - -#define INTERFACE_IInArchive(x) \ - STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \ - STDMETHOD(Close)() x; \ - STDMETHOD(GetNumberOfItems)(UInt32 *numItems) x; \ - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback) x; \ - STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) x; \ - STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) x; \ - STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; \ - STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) x; \ - STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; - -ARCHIVE_INTERFACE(IInArchive, 0x60) -{ - INTERFACE_IInArchive(PURE) -}; - - -ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80) -{ - STDMETHOD(GetUpdateItemInfo)(UInt32 index, - Int32 *newData, // 1 - new data, 0 - old data - Int32 *newProperties, // 1 - new properties, 0 - old properties - UInt32 *indexInArchive // -1 if there is no in archive, or if doesn't matter - ) PURE; - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) PURE; - STDMETHOD(SetOperationResult)(Int32 operationResult) PURE; -}; - - -ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82) -{ - STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) PURE; - STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) PURE; -}; - - -#define INTERFACE_IOutArchive(x) \ - STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \ - STDMETHOD(GetFileTimeType)(UInt32 *type) x; - -ARCHIVE_INTERFACE(IOutArchive, 0xA0) -{ - INTERFACE_IOutArchive(PURE) -}; - - -ARCHIVE_INTERFACE(ISetProperties, 0x03) -{ - STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE; -}; - - -#define IMP_IInArchive_GetProp(k) \ - (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ - { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ - const STATPROPSTG &srcItem = k[index]; \ - *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \ - -#define IMP_IInArchive_GetProp_WITH_NAME(k) \ - (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ - { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ - const STATPROPSTG &srcItem = k[index]; \ - *propID = srcItem.propid; *varType = srcItem.vt; \ - if (srcItem.lpwstrName == 0) *name = 0; else *name = ::SysAllocString(srcItem.lpwstrName); return S_OK; } \ - -#define IMP_IInArchive_Props \ - STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps) - -#define IMP_IInArchive_Props_WITH_NAME \ - STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps) - - -#define IMP_IInArchive_ArcProps \ - STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ - { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \ - STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps) - -#define IMP_IInArchive_ArcProps_NO \ - STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ - { *numProperties = 0; return S_OK; } \ - STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *) \ - { return E_NOTIMPL; } \ - STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \ - { value->vt = VT_EMPTY; return S_OK; } - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp deleted file mode 100644 index b9f389bb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +++ /dev/null @@ -1,1453 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Alone" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=Alone - Win32 DebugU -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Alone.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Alone.mak" CFG="Alone - Win32 DebugU" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Alone - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 ReleaseU" (based on "Win32 (x86) Console Application") -!MESSAGE "Alone - Win32 DebugU" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Alone - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /Gz /MT /W3 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7zr.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /Gz /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7zr.exe" /pdbtype:sept - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseU" -# PROP BASE Intermediate_Dir "ReleaseU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseU" -# PROP Intermediate_Dir "ReleaseU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /Yu"StdAfx.h" /FD /c -# ADD CPP /nologo /Gz /MD /W3 /GX /O1 /I "..\..\..\\" /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7za.exe" /opt:NOWIN98 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7zr.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugU" -# PROP BASE Intermediate_Dir "DebugU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugU" -# PROP Intermediate_Dir "DebugU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c -# ADD CPP /nologo /Gz /W4 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "COMPRESS_MT" /D "_NO_CRYPTO" /D "BREAK_HANDLER" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7za.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7zr.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "Alone - Win32 Release" -# Name "Alone - Win32 Debug" -# Name "Alone - Win32 ReleaseU" -# Name "Alone - Win32 DebugU" -# Begin Group "Console" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\UI\Console\ArError.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\CompressionMode.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ConsoleClose.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ConsoleClose.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ExtractCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\ExtractCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\List.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\List.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\Main.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\MainAr.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\OpenCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\OpenCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\PercentPrinter.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\PercentPrinter.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UpdateCallbackConsole.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UpdateCallbackConsole.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UserInputUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Console\UserInputUtils.h -# End Source File -# End Group -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\resource.rc -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"StdAfx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\AutoPtr.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Buffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ComTry.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\DynamicBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ListFileUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\ListFileUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyCom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyException.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyGuidDef.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyInitGuid.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyUnknown.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyWindows.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyWindows.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Random.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Random.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdInStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdInStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StdOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Types.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\UTFConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\UTFConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.h -# End Source File -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Device.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Error.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Error.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Handle.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\MemoryLock.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\MemoryLock.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Thread.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Time.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\CreateCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\CreateCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CrossThreadProgress.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CrossThreadProgress.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilePathAutoRename.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilePathAutoRename.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilterCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FilterCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InOutTempBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InOutTempBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LimitedStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LimitedStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LockedStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LockedStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LSBFDecoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LSBFDecoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LSBFEncoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\LSBFEncoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodId.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodId.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodProps.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MethodProps.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MSBFDecoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\MSBFEncoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OffsetStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OffsetStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressMt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\ProgressUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\RegisterArc.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\RegisterCodec.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamBinder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamBinder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamObjects.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamObjects.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\VirtThread.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\VirtThread.h -# End Source File -# End Group -# Begin Group "Compress" - -# PROP Default_Filter "" -# Begin Group "Branch" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\BranchCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\Coder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\x86.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\x86.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\x86_2.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Branch\x86_2.h -# End Source File -# End Group -# Begin Group "Copy" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\Copy\CopyCoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Copy\CopyCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\Copy\CopyRegister.cpp -# End Source File -# End Group -# Begin Group "LZ" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\LZ\LZOutWindow.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O1 - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O1 - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZ\LZOutWindow.h -# End Source File -# End Group -# Begin Group "LZMA" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMA.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMADecoder.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMADecoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMAEncoder.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O2 -# SUBTRACT CPP /YX /Yc /Yu - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMAEncoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA\LZMARegister.cpp -# End Source File -# End Group -# Begin Group "RangeCoder" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder\RangeCoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder\RangeCoderBit.cpp - -!IF "$(CFG)" == "Alone - Win32 Release" - -# ADD CPP /O1 - -!ELSEIF "$(CFG)" == "Alone - Win32 Debug" - -!ELSEIF "$(CFG)" == "Alone - Win32 ReleaseU" - -# ADD CPP /O1 - -!ELSEIF "$(CFG)" == "Alone - Win32 DebugU" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder\RangeCoderBit.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder\RangeCoderBitTree.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\RangeCoder\RangeCoderOpt.h -# End Source File -# End Group -# Begin Group "LZMA_Alone" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBench.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBench.h -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBenchCon.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Compress\LZMA_Alone\LzmaBenchCon.h -# End Source File -# End Group -# End Group -# Begin Group "Archive" - -# PROP Default_Filter "" -# Begin Group "7z" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Archive\7z\7zCompressionMode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zCompressionMode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zDecode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zDecode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zEncode.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zEncode.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zExtract.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderInStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderInStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zFolderOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHandlerOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHeader.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zHeader.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zIn.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zIn.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zItem.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zOut.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zProperties.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zRegister.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zSpecStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zSpecStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zUpdate.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\7z\7zUpdate.h -# End Source File -# End Group -# Begin Group "Archive Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2MT.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\CoderMixer2MT.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\DummyOutStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\DummyOutStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\HandlerOut.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\HandlerOut.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\InStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\InStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ItemNameUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ItemNameUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\MultiStream.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\MultiStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\OutStreamWithCRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\OutStreamWithCRC.h -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ParseProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Common\ParseProperties.h -# End Source File -# End Group -# Begin Group "split" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Archive\Split\SplitHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Archive\Split\SplitHandler.h -# End Source File -# End Group -# End Group -# Begin Group "UI Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveCommandLine.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveCommandLine.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveExtractCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveExtractCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveOpenCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ArchiveOpenCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\DefaultName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\DefaultName.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\EnumDirItems.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\EnumDirItems.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Extract.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Extract.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ExtractingFilePath.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\ExtractingFilePath.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\LoadCodecs.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\LoadCodecs.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\OpenArchive.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\OpenArchive.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Property.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\PropIDUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\PropIDUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SetProperties.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SetProperties.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SortUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\SortUtils.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\TempFiles.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\TempFiles.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Update.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\Update.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateAction.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateAction.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateCallback.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateCallback.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdatePair.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdatePair.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateProduce.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\UpdateProduce.h -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\WorkDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\UI\Common\WorkDir.h -# End Source File -# End Group -# Begin Group "7-zip" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\ICoder.h -# End Source File -# Begin Source File - -SOURCE=..\..\IMyUnknown.h -# End Source File -# Begin Source File - -SOURCE=..\..\IPassword.h -# End Source File -# Begin Source File - -SOURCE=..\..\IProgress.h -# End Source File -# Begin Source File - -SOURCE=..\..\IStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\PropID.h -# End Source File -# End Group -# Begin Group "C" - -# PROP Default_Filter "" -# Begin Group "C Branch" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchARM.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchARM.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchARMThumb.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchARMThumb.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchIA64.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchIA64.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchPPC.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchPPC.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchSPARC.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchSPARC.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchTypes.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchX86.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchX86.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\IStream.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\LzHash.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinder.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinder.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinderMt.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinderMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Types.h -# End Source File -# End Group -# End Target -# End Project diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw deleted file mode 100644 index 65eca43f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "Alone"=.\Alone.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h deleted file mode 100644 index 2e4be10b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/makefile b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/makefile deleted file mode 100644 index 1feb1fbd..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/makefile +++ /dev/null @@ -1,236 +0,0 @@ -PROG = 7za.exe -LIBS = $(LIBS) user32.lib oleaut32.lib Advapi32.lib - -CFLAGS = $(CFLAGS) -I ../../../ \ - -D_NO_CRYPTO \ - -DWIN_LONG_PATH \ - -DCOMPRESS_MT \ - -DCOMPRESS_MF_MT \ - -D_NO_CRYPTO \ - -DBREAK_HANDLER \ - -DBENCH_MT \ - - -CONSOLE_OBJS = \ - $O\ConsoleClose.obj \ - $O\ExtractCallbackConsole.obj \ - $O\List.obj \ - $O\Main.obj \ - $O\MainAr.obj \ - $O\OpenCallbackConsole.obj \ - $O\PercentPrinter.obj \ - $O\UpdateCallbackConsole.obj \ - $O\UserInputUtils.obj \ - -COMMON_OBJS = \ - $O\CommandLineParser.obj \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\ListFileUtils.obj \ - $O\NewHandler.obj \ - $O\StdInStream.obj \ - $O\StdOutStream.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\UTFConvert.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\Error.obj \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\FileName.obj \ - $O\MemoryLock.obj \ - $O\PropVariant.obj \ - $O\PropVariantConversions.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\FilePathAutoRename.obj \ - $O\FileStreams.obj \ - $O\InBuffer.obj \ - $O\InOutTempBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OffsetStream.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -UI_COMMON_OBJS = \ - $O\ArchiveCommandLine.obj \ - $O\ArchiveExtractCallback.obj \ - $O\ArchiveOpenCallback.obj \ - $O\DefaultName.obj \ - $O\EnumDirItems.obj \ - $O\Extract.obj \ - $O\ExtractingFilePath.obj \ - $O\LoadCodecs.obj \ - $O\OpenArchive.obj \ - $O\PropIDUtils.obj \ - $O\SetProperties.obj \ - $O\SortUtils.obj \ - $O\TempFiles.obj \ - $O\Update.obj \ - $O\UpdateAction.obj \ - $O\UpdateCallback.obj \ - $O\UpdatePair.obj \ - $O\UpdateProduce.obj \ - $O\WorkDir.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\DummyOutStream.obj \ - $O\HandlerOut.obj \ - $O\InStreamWithCRC.obj \ - $O\ItemNameUtils.obj \ - $O\MultiStream.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zEncode.obj \ - $O\7zExtract.obj \ - $O\7zFolderInStream.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHandlerOut.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zOut.obj \ - $O\7zProperties.obj \ - $O\7zRegister.obj \ - $O\7zSpecStream.obj \ - $O\7zUpdate.obj \ - - -BRANCH_OPT_OBJS = \ - $O\BranchCoder.obj \ - $O\x86.obj \ - $O\x86_2.obj \ - $O\ARM.obj \ - $O\ARMThumb.obj \ - $O\IA64.obj \ - $O\PPC.obj \ - $O\SPARC.obj \ - $O\BranchRegister.obj \ - $O\BCJRegister.obj \ - $O\BCJ2Register.obj \ - -SWAP_OPT_OBJS = \ - $O\ByteSwap.obj \ - $O\ByteSwapRegister.obj \ - -COPY_OBJS = \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - -LZ_OBJS = \ - $O\LZOutWindow.obj \ - -LZMA_OPT_OBJS = \ - $O\LZMADecoder.obj \ - $O\LZMAEncoder.obj \ - $O\LZMARegister.obj \ - -LZMA_BENCH_OBJS = \ - $O\LzmaBench.obj \ - $O\LzmaBenchCon.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\7zCrc.obj \ - $O\Sort.obj \ - $O\Threads.obj \ - -C_LZ_OBJS = \ - $O\MatchFinder.obj \ - $O\MatchFinderMt.obj \ - -C_BRANCH_OBJS = \ - $O\BranchARM.obj \ - $O\BranchARMThumb.obj \ - $O\BranchIA64.obj \ - $O\BranchPPC.obj \ - $O\BranchSPARC.obj \ - $O\BranchX86.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(UI_COMMON_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(BRANCH_OPT_OBJS) \ - $(SWAP_OPT_OBJS) \ - $(COPY_OBJS) \ - $(LZ_OBJS) \ - $(LZMA_OPT_OBJS) \ - $(LZMA_BENCH_OBJS) \ - $(C_OBJS) \ - $(C_LZ_OBJS) \ - $(C_BRANCH_OBJS) \ - $O\RangeCoderBit.obj \ - $(CRC_OBJS) \ - $O\resource.res - - -!include "../../../Build.mak" - -$(CONSOLE_OBJS): ../../UI/Console/$(*B).cpp - $(COMPL) - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(UI_COMMON_OBJS): ../../UI/Common/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) -$(BRANCH_OPT_OBJS): ../../Compress/Branch/$(*B).cpp - $(COMPL_O2) -$(SWAP_OPT_OBJS): ../../Compress/ByteSwap/$(*B).cpp - $(COMPL_O2) -$(COPY_OBJS): ../../Compress/Copy/$(*B).cpp - $(COMPL) -$(LZ_OBJS): ../../Compress/LZ/$(*B).cpp - $(COMPL) -$(LZMA_OPT_OBJS): ../../Compress/LZMA/$(*B).cpp - $(COMPL_O2) -$(LZMA_BENCH_OBJS): ../../Compress/LZMA_Alone/$(*B).cpp - $(COMPL) -$O\RangeCoderBit.obj: ../../Compress/RangeCoder/$(*B).cpp - $(COMPL) - -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -$(C_LZ_OBJS): ../../../../C/Compress/Lz/$(*B).c - $(COMPL_O2) -$(C_BRANCH_OBJS): ../../../../C/Compress/Branch/$(*B).c - $(COMPL_O2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/resource.rc b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/resource.rc deleted file mode 100644 index fc9063c1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +++ /dev/null @@ -1,3 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_APP("7-Zip Standalone Console", "7za") diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h deleted file mode 100644 index 2e4be10b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile deleted file mode 100644 index 0632e718..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +++ /dev/null @@ -1,165 +0,0 @@ -PROG = 7zxr.dll -DEF_FILE = ../../Archive/Archive2.def -LIBS = $(LIBS) user32.lib oleaut32.lib -CFLAGS = $(CFLAGS) -I ../../../ \ - -DEXTRACT_ONLY \ - -DCOMPRESS_MT \ - -D_NO_CRYPTO - -COMMON_OBJS = \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\PropVariant.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\InBuffer.obj \ - $O\InOutTempBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -AR_OBJS = \ - $O\ArchiveExports.obj \ - $O\DllExports2.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\HandlerOut.obj \ - $O\ItemNameUtils.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zExtract.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zProperties.obj \ - $O\7zRegister.obj \ - - -COMPRESS_OBJS = \ - $O\CodecExports.obj \ - -SWAP_OPT_OBJS = \ - $O\ByteSwap.obj \ - $O\ByteSwapRegister.obj \ - -BRANCH_OPT_OBJS = \ - $O\BranchCoder.obj \ - $O\x86.obj \ - $O\x86_2.obj \ - $O\ARM.obj \ - $O\ARMThumb.obj \ - $O\IA64.obj \ - $O\PPC.obj \ - $O\SPARC.obj \ - $O\BranchRegister.obj \ - $O\BCJRegister.obj \ - $O\BCJ2Register.obj \ - -COPY_OBJS = \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - -LZ_OBJS = \ - $O\LZOutWindow.obj \ - -LZMA_OPT_OBJS = \ - $O\LZMADecoder.obj \ - $O\LZMARegister.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\7zCrc.obj \ - $O\Threads.obj \ - -C_BRANCH_OBJS = \ - $O\BranchARM.obj \ - $O\BranchARMThumb.obj \ - $O\BranchIA64.obj \ - $O\BranchPPC.obj \ - $O\BranchSPARC.obj \ - $O\BranchX86.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(AR_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(COMPRESS_OBJS) \ - $(BRANCH_OPT_OBJS) \ - $(SWAP_OPT_OBJS) \ - $(COPY_OBJS) \ - $(LZ_OBJS) \ - $(LZMA_OPT_OBJS) \ - $(C_OBJS) \ - $(C_BRANCH_OBJS) \ - $O\resource.res - - -!include "../../../Build.mak" - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(AR_OBJS): ../../Archive/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) - -$(COMPRESS_OBJS): ../../Compress/$(*B).cpp - $(COMPL) -$(BRANCH_OPT_OBJS): ../../Compress/Branch/$(*B).cpp - $(COMPL_O2) -$(SWAP_OPT_OBJS): ../../Compress/ByteSwap/$(*B).cpp - $(COMPL_O2) -$(COPY_OBJS): ../../Compress/Copy/$(*B).cpp - $(COMPL) -$(LZ_OBJS): ../../Compress/LZ/$(*B).cpp - $(COMPL) -$(LZMA_OPT_OBJS): ../../Compress/LZMA/$(*B).cpp - $(COMPL_O2) - -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -$(C_BRANCH_OBJS): ../../../../C/Compress/Branch/$(*B).c - $(COMPL_O2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc deleted file mode 100644 index 09708cff..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("7z Standalone Extracting Plugin", "7zxr") - -101 ICON "../../Archive/7z/7z.ico" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h deleted file mode 100644 index 2e4be10b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/makefile b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/makefile deleted file mode 100644 index 6e96a8a2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/makefile +++ /dev/null @@ -1,188 +0,0 @@ -PROG = 7zra.dll -DEF_FILE = ../../Archive/Archive2.def -LIBS = $(LIBS) user32.lib oleaut32.lib -CFLAGS = $(CFLAGS) -I ../../../ \ - -DCOMPRESS_MT \ - -DCOMPRESS_MF_MT \ - -D_NO_CRYPTO - -COMMON_OBJS = \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\PropVariant.obj \ - $O\Synchronization.obj \ - $O\System.obj \ - -7ZIP_COMMON_OBJS = \ - $O\CreateCoder.obj \ - $O\InBuffer.obj \ - $O\InOutTempBuffer.obj \ - $O\FilterCoder.obj \ - $O\LimitedStreams.obj \ - $O\LockedStream.obj \ - $O\MethodId.obj \ - $O\MethodProps.obj \ - $O\OutBuffer.obj \ - $O\ProgressUtils.obj \ - $O\StreamBinder.obj \ - $O\StreamObjects.obj \ - $O\StreamUtils.obj \ - $O\VirtThread.obj \ - -AR_OBJS = \ - $O\ArchiveExports.obj \ - $O\DllExports2.obj \ - -AR_COMMON_OBJS = \ - $O\CoderMixer2.obj \ - $O\CoderMixer2MT.obj \ - $O\CrossThreadProgress.obj \ - $O\HandlerOut.obj \ - $O\InStreamWithCRC.obj \ - $O\ItemNameUtils.obj \ - $O\OutStreamWithCRC.obj \ - $O\ParseProperties.obj \ - - -7Z_OBJS = \ - $O\7zCompressionMode.obj \ - $O\7zDecode.obj \ - $O\7zEncode.obj \ - $O\7zExtract.obj \ - $O\7zFolderInStream.obj \ - $O\7zFolderOutStream.obj \ - $O\7zHandler.obj \ - $O\7zHandlerOut.obj \ - $O\7zHeader.obj \ - $O\7zIn.obj \ - $O\7zOut.obj \ - $O\7zProperties.obj \ - $O\7zSpecStream.obj \ - $O\7zUpdate.obj \ - $O\7zRegister.obj \ - - -COMPRESS_OBJS = \ - $O\CodecExports.obj \ - -BRANCH_OPT_OBJS = \ - $O\BranchCoder.obj \ - $O\x86.obj \ - $O\x86_2.obj \ - $O\ARM.obj \ - $O\ARMThumb.obj \ - $O\IA64.obj \ - $O\PPC.obj \ - $O\SPARC.obj \ - $O\BranchRegister.obj \ - $O\BCJRegister.obj \ - $O\BCJ2Register.obj \ - -SWAP_OPT_OBJS = \ - $O\ByteSwap.obj \ - $O\ByteSwapRegister.obj \ - -COPY_OBJS = \ - $O\CopyCoder.obj \ - $O\CopyRegister.obj \ - -LZ_OBJS = \ - $O\LZOutWindow.obj \ - -LZMA_OPT_OBJS = \ - $O\LZMADecoder.obj \ - $O\LZMAEncoder.obj \ - $O\LZMARegister.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\7zCrc.obj \ - $O\Sort.obj \ - $O\Threads.obj \ - -C_LZ_OBJS = \ - $O\MatchFinder.obj \ - $O\MatchFinderMt.obj \ - -C_BRANCH_OBJS = \ - $O\BranchARM.obj \ - $O\BranchARMThumb.obj \ - $O\BranchIA64.obj \ - $O\BranchPPC.obj \ - $O\BranchSPARC.obj \ - $O\BranchX86.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(AR_OBJS) \ - $(AR_COMMON_OBJS) \ - $(7Z_OBJS) \ - $(BZIP2_OBJS) \ - $(BZIP2_OPT_OBJS) \ - $(COMPRESS_OBJS) \ - $(BRANCH_OPT_OBJS) \ - $(SWAP_OPT_OBJS) \ - $(COPY_OBJS) \ - $(DEFLATE_OPT_OBJS) \ - $(LZ_OBJS) \ - $(LZMA_OPT_OBJS) \ - $(PPMD_OPT_OBJS) \ - $(C_OBJS) \ - $(C_LZ_OBJS) \ - $(C_BRANCH_OBJS) \ - $O\RangeCoderBit.obj \ - $O\resource.res - - -!include "../../../Build.mak" - -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(AR_OBJS): ../../Archive/$(*B).cpp - $(COMPL) -$(AR_COMMON_OBJS): ../../Archive/Common/$(*B).cpp - $(COMPL) - -$(7Z_OBJS): ../../Archive/7z/$(*B).cpp - $(COMPL) - -$(COMPRESS_OBJS): ../../Compress/$(*B).cpp - $(COMPL) -$(BRANCH_OPT_OBJS): ../../Compress/Branch/$(*B).cpp - $(COMPL_O2) -$(SWAP_OPT_OBJS): ../../Compress/ByteSwap/$(*B).cpp - $(COMPL_O2) -$(COPY_OBJS): ../../Compress/Copy/$(*B).cpp - $(COMPL) -$(LZ_OBJS): ../../Compress/LZ/$(*B).cpp - $(COMPL) -$(LZMA_OPT_OBJS): ../../Compress/LZMA/$(*B).cpp - $(COMPL_O2) -$O\RangeCoderBit.obj: ../../Compress/RangeCoder/$(*B).cpp - $(COMPL) - -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -$(C_LZ_OBJS): ../../../../C/Compress/Lz/$(*B).c - $(COMPL_O2) -$(C_BRANCH_OBJS): ../../../../C/Compress/Branch/$(*B).c - $(COMPL_O2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/resource.rc b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/resource.rc deleted file mode 100644 index 60a17fe8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../MyVersionInfo.rc" - -MY_VERSION_INFO_DLL("7z Standalone Plugin", "7zr") - -101 ICON "../../Archive/7z/7z.ico" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.cpp deleted file mode 100644 index ae0f98fd..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.cpp +++ /dev/null @@ -1,292 +0,0 @@ -// CreateCoder.cpp - -#include "StdAfx.h" - -#include "CreateCoder.h" - -#include "../../Windows/PropVariant.h" -#include "../../Windows/Defs.h" -#include "FilterCoder.h" -#include "RegisterCodec.h" - -static const unsigned int kNumCodecsMax = 64; -unsigned int g_NumCodecs = 0; -const CCodecInfo *g_Codecs[kNumCodecsMax]; -void RegisterCodec(const CCodecInfo *codecInfo) -{ - if (g_NumCodecs < kNumCodecsMax) - g_Codecs[g_NumCodecs++] = codecInfo; -} - -#ifdef EXTERNAL_CODECS -static HRESULT ReadNumberOfStreams(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, UInt32 &res) -{ - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(index, propID, &prop)); - if (prop.vt == VT_EMPTY) - res = 1; - else if (prop.vt == VT_UI4) - res = prop.ulVal; - else - return E_INVALIDARG; - return S_OK; -} - -static HRESULT ReadIsAssignedProp(ICompressCodecsInfo *codecsInfo, UInt32 index, PROPID propID, bool &res) -{ - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(index, propID, &prop)); - if (prop.vt == VT_EMPTY) - res = true; - else if (prop.vt == VT_BOOL) - res = VARIANT_BOOLToBool(prop.boolVal); - else - return E_INVALIDARG; - return S_OK; -} - -HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector &externalCodecs) -{ - UInt32 num; - RINOK(codecsInfo->GetNumberOfMethods(&num)); - for (UInt32 i = 0; i < num; i++) - { - CCodecInfoEx info; - NWindows::NCOM::CPropVariant prop; - RINOK(codecsInfo->GetProperty(i, NMethodPropID::kID, &prop)); - // if (prop.vt != VT_BSTR) - // info.Id.IDSize = (Byte)SysStringByteLen(prop.bstrVal); - // memmove(info.Id.ID, prop.bstrVal, info.Id.IDSize); - if (prop.vt != VT_UI8) - { - continue; // old Interface - // return E_INVALIDARG; - } - info.Id = prop.uhVal.QuadPart; - prop.Clear(); - - RINOK(codecsInfo->GetProperty(i, NMethodPropID::kName, &prop)); - if (prop.vt == VT_BSTR) - info.Name = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - return E_INVALIDARG;; - - RINOK(ReadNumberOfStreams(codecsInfo, i, NMethodPropID::kInStreams, info.NumInStreams)); - RINOK(ReadNumberOfStreams(codecsInfo, i, NMethodPropID::kOutStreams, info.NumOutStreams)); - RINOK(ReadIsAssignedProp(codecsInfo, i, NMethodPropID::kEncoderIsAssigned, info.EncoderIsAssigned)); - RINOK(ReadIsAssignedProp(codecsInfo, i, NMethodPropID::kDecoderIsAssigned, info.DecoderIsAssigned)); - - externalCodecs.Add(info); - } - return S_OK; -} - -#endif - -bool FindMethod( - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo * /* codecsInfo */, const CObjectVector *externalCodecs, - #endif - const UString &name, - CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams) -{ - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (name.CompareNoCase(codec.Name) == 0) - { - methodId = codec.Id; - numInStreams = codec.NumInStreams; - numOutStreams = 1; - return true; - } - } - #ifdef EXTERNAL_CODECS - if (externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (codec.Name.CompareNoCase(name) == 0) - { - methodId = codec.Id; - numInStreams = codec.NumInStreams; - numOutStreams = codec.NumOutStreams; - return true; - } - } - #endif - return false; -} - -bool FindMethod( - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo * /* codecsInfo */, const CObjectVector *externalCodecs, - #endif - CMethodId methodId, UString &name) -{ - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (methodId == codec.Id) - { - name = codec.Name; - return true; - } - } - #ifdef EXTERNAL_CODECS - if (externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (methodId == codec.Id) - { - name = codec.Name; - return true; - } - } - #endif - return false; -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode, bool onlyCoder) -{ - bool created = false; - UInt32 i; - for (i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (codec.Id == methodId) - { - if (encode) - { - if (codec.CreateEncoder) - { - void *p = codec.CreateEncoder(); - if (codec.IsFilter) filter = (ICompressFilter *)p; - else if (codec.NumInStreams == 1) coder = (ICompressCoder *)p; - else coder2 = (ICompressCoder2 *)p; - created = (p != 0); - break; - } - } - else - if (codec.CreateDecoder) - { - void *p = codec.CreateDecoder(); - if (codec.IsFilter) filter = (ICompressFilter *)p; - else if (codec.NumInStreams == 1) coder = (ICompressCoder *)p; - else coder2 = (ICompressCoder2 *)p; - created = (p != 0); - break; - } - } - } - - #ifdef EXTERNAL_CODECS - if (!created && externalCodecs) - for (i = 0; i < (UInt32)externalCodecs->Size(); i++) - { - const CCodecInfoEx &codec = (*externalCodecs)[i]; - if (codec.Id == methodId) - { - if (encode) - { - if (codec.EncoderIsAssigned) - { - if (codec.IsSimpleCodec()) - { - HRESULT result = codecsInfo->CreateEncoder(i, &IID_ICompressCoder, (void **)&coder); - if (result != S_OK && result != E_NOINTERFACE && result != CLASS_E_CLASSNOTAVAILABLE) - return result; - if (!coder) - { - RINOK(codecsInfo->CreateEncoder(i, &IID_ICompressFilter, (void **)&filter)); - } - } - else - { - RINOK(codecsInfo->CreateEncoder(i, &IID_ICompressCoder2, (void **)&coder2)); - } - break; - } - } - else - if (codec.DecoderIsAssigned) - { - if (codec.IsSimpleCodec()) - { - HRESULT result = codecsInfo->CreateDecoder(i, &IID_ICompressCoder, (void **)&coder); - if (result != S_OK && result != E_NOINTERFACE && result != CLASS_E_CLASSNOTAVAILABLE) - return result; - if (!coder) - { - RINOK(codecsInfo->CreateDecoder(i, &IID_ICompressFilter, (void **)&filter)); - } - } - else - { - RINOK(codecsInfo->CreateDecoder(i, &IID_ICompressCoder2, (void **)&coder2)); - } - break; - } - } - } - #endif - - if (onlyCoder && filter) - { - CFilterCoder *coderSpec = new CFilterCoder; - coder = coderSpec; - coderSpec->Filter = filter; - } - return S_OK; -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode) -{ - CMyComPtr filter; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - filter, coder, coder2, encode, true); -} - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, bool encode) -{ - CMyComPtr filter; - CMyComPtr coder2; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - coder, coder2, encode); -} - -HRESULT CreateFilter( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - bool encode) -{ - CMyComPtr coder; - CMyComPtr coder2; - return CreateCoder( - EXTERNAL_CODECS_LOC_VARS - methodId, - filter, coder, coder2, encode, false); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.h deleted file mode 100644 index 4d86ae70..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/CreateCoder.h +++ /dev/null @@ -1,98 +0,0 @@ -// CreateCoder.h - -#ifndef __CREATECODER_H -#define __CREATECODER_H - -#include "Common/MyCom.h" -#include "Common/MyString.h" -#include "../ICoder.h" - -#include "MethodId.h" - -#ifdef EXTERNAL_CODECS - -struct CCodecInfoEx -{ - UString Name; - CMethodId Id; - UInt32 NumInStreams; - UInt32 NumOutStreams; - bool EncoderIsAssigned; - bool DecoderIsAssigned; - bool IsSimpleCodec() const { return NumOutStreams == 1 && NumInStreams == 1; } - CCodecInfoEx(): EncoderIsAssigned(false), DecoderIsAssigned(false) {} -}; - -HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector &externalCodecs); - -#define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo, -#define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo) -#define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo); -#define IMPL_ISetCompressCodecsInfo2(x) \ -STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \ - COM_TRY_BEGIN _codecsInfo = compressCodecsInfo; return LoadExternalCodecs(_codecsInfo, _externalCodecs); COM_TRY_END } -#define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler) - -#define EXTERNAL_CODECS_VARS2 _codecsInfo, &_externalCodecs - -#define DECL_EXTERNAL_CODECS_VARS CMyComPtr _codecsInfo; CObjectVector _externalCodecs; -#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2, - -#define DECL_EXTERNAL_CODECS_LOC_VARS2 ICompressCodecsInfo *codecsInfo, const CObjectVector *externalCodecs -#define EXTERNAL_CODECS_LOC_VARS2 codecsInfo, externalCodecs - -#define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2, -#define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2, - -#else - -#define PUBLIC_ISetCompressCodecsInfo -#define QUERY_ENTRY_ISetCompressCodecsInfo -#define DECL_ISetCompressCodecsInfo -#define IMPL_ISetCompressCodecsInfo -#define EXTERNAL_CODECS_VARS2 -#define DECL_EXTERNAL_CODECS_VARS -#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2 -#define DECL_EXTERNAL_CODECS_LOC_VARS2 -#define EXTERNAL_CODECS_LOC_VARS2 -#define DECL_EXTERNAL_CODECS_LOC_VARS -#define EXTERNAL_CODECS_LOC_VARS - -#endif - -bool FindMethod( - DECL_EXTERNAL_CODECS_LOC_VARS - const UString &name, CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams); - -bool FindMethod( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, UString &name); - - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode, bool onlyCoder); - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, - CMyComPtr &coder2, - bool encode); - -HRESULT CreateCoder( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &coder, bool encode); - -HRESULT CreateFilter( - DECL_EXTERNAL_CODECS_LOC_VARS - CMethodId methodId, - CMyComPtr &filter, - bool encode); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.cpp deleted file mode 100644 index 3c5b910f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// FilePathAutoRename.cpp - -#include "StdAfx.h" -#include "FilePathAutoRename.h" - -#include "Common/Defs.h" -#include "Common/IntToString.h" - -#include "Windows/FileName.h" -#include "Windows/FileFind.h" - -using namespace NWindows; - -static bool MakeAutoName(const UString &name, - const UString &extension, int value, UString &path) -{ - wchar_t number[32]; - ConvertUInt64ToString(value, number); - path = name; - path += number; - path += extension; - return NFile::NFind::DoesFileExist(path); -} - -bool AutoRenamePath(UString &fullProcessedPath) -{ - UString path; - int dotPos = fullProcessedPath.ReverseFind(L'.'); - - int slashPos = fullProcessedPath.ReverseFind(L'/'); - #ifdef _WIN32 - int slash1Pos = fullProcessedPath.ReverseFind(L'\\'); - slashPos = MyMax(slashPos, slash1Pos); - #endif - - UString name, extension; - if (dotPos > slashPos && dotPos > 0) - { - name = fullProcessedPath.Left(dotPos); - extension = fullProcessedPath.Mid(dotPos); - } - else - name = fullProcessedPath; - name += L'_'; - int indexLeft = 1, indexRight = (1 << 30); - while (indexLeft != indexRight) - { - int indexMid = (indexLeft + indexRight) / 2; - if (MakeAutoName(name, extension, indexMid, path)) - indexLeft = indexMid + 1; - else - indexRight = indexMid; - } - if (MakeAutoName(name, extension, indexRight, fullProcessedPath)) - return false; - return true; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.h deleted file mode 100644 index 3ef87f48..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilePathAutoRename.h +++ /dev/null @@ -1,10 +0,0 @@ -// Util/FilePathAutoRename.h - -#ifndef __FILEPATHAUTORENAME_H -#define __FILEPATHAUTORENAME_H - -#include "Common/MyString.h" - -bool AutoRenamePath(UString &fullProcessedPath); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.cpp deleted file mode 100644 index bebcf14c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.cpp +++ /dev/null @@ -1,261 +0,0 @@ -// FileStreams.cpp - -#include "StdAfx.h" - -#ifndef _WIN32 -#include -#include -#include -#endif - -#include "FileStreams.h" - -static inline HRESULT ConvertBoolToHRESULT(bool result) -{ - #ifdef _WIN32 - if (result) - return S_OK; - DWORD lastError = ::GetLastError(); - if (lastError == 0) - return E_FAIL; - return lastError; - #else - return result ? S_OK: E_FAIL; - #endif -} - -bool CInFileStream::Open(LPCTSTR fileName) -{ - return File.Open(fileName); -} - -#ifdef USE_WIN_FILE -#ifndef _UNICODE -bool CInFileStream::Open(LPCWSTR fileName) -{ - return File.Open(fileName); -} -#endif -#endif - -bool CInFileStream::OpenShared(LPCTSTR fileName, bool shareForWrite) -{ - return File.OpenShared(fileName, shareForWrite); -} - -#ifdef USE_WIN_FILE -#ifndef _UNICODE -bool CInFileStream::OpenShared(LPCWSTR fileName, bool shareForWrite) -{ - return File.OpenShared(fileName, shareForWrite); -} -#endif -#endif - -STDMETHODIMP CInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef USE_WIN_FILE - - UInt32 realProcessedSize; - bool result = File.ReadPart(data, size, realProcessedSize); - if(processedSize != NULL) - *processedSize = realProcessedSize; - return ConvertBoolToHRESULT(result); - - #else - - if(processedSize != NULL) - *processedSize = 0; - ssize_t res = File.Read(data, (size_t)size); - if (res == -1) - return E_FAIL; - if(processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - #endif -} - -#ifndef _WIN32_WCE -STDMETHODIMP CStdInFileStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef _WIN32 - UInt32 realProcessedSize; - BOOL res = ::ReadFile(GetStdHandle(STD_INPUT_HANDLE), - data, size, (DWORD *)&realProcessedSize, NULL); - if(processedSize != NULL) - *processedSize = realProcessedSize; - if (res == FALSE && GetLastError() == ERROR_BROKEN_PIPE) - return S_OK; - return ConvertBoolToHRESULT(res != FALSE); - - #else - - if(processedSize != NULL) - *processedSize = 0; - ssize_t res; - do - { - res = read(0, data, (size_t)size); - } - while (res < 0 && (errno == EINTR)); - if (res == -1) - return E_FAIL; - if(processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - #endif -} - -#endif - -STDMETHODIMP CInFileStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - if(seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - - #ifdef USE_WIN_FILE - - UInt64 realNewPosition; - bool result = File.Seek(offset, seekOrigin, realNewPosition); - if(newPosition != NULL) - *newPosition = realNewPosition; - return ConvertBoolToHRESULT(result); - - #else - - off_t res = File.Seek(offset, seekOrigin); - if (res == -1) - return E_FAIL; - if(newPosition != NULL) - *newPosition = (UInt64)res; - return S_OK; - - #endif -} - -STDMETHODIMP CInFileStream::GetSize(UInt64 *size) -{ - return ConvertBoolToHRESULT(File.GetLength(*size)); -} - - -////////////////////////// -// COutFileStream - -HRESULT COutFileStream::Close() -{ - return ConvertBoolToHRESULT(File.Close()); -} - -STDMETHODIMP COutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - #ifdef USE_WIN_FILE - - UInt32 realProcessedSize; - bool result = File.WritePart(data, size, realProcessedSize); - ProcessedSize += realProcessedSize; - if(processedSize != NULL) - *processedSize = realProcessedSize; - return ConvertBoolToHRESULT(result); - - #else - - if(processedSize != NULL) - *processedSize = 0; - ssize_t res = File.Write(data, (size_t)size); - if (res == -1) - return E_FAIL; - if(processedSize != NULL) - *processedSize = (UInt32)res; - ProcessedSize += res; - return S_OK; - - #endif -} - -STDMETHODIMP COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if(seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - #ifdef USE_WIN_FILE - - UInt64 realNewPosition; - bool result = File.Seek(offset, seekOrigin, realNewPosition); - if(newPosition != NULL) - *newPosition = realNewPosition; - return ConvertBoolToHRESULT(result); - - #else - - off_t res = File.Seek(offset, seekOrigin); - if (res == -1) - return E_FAIL; - if(newPosition != NULL) - *newPosition = (UInt64)res; - return S_OK; - - #endif -} - -STDMETHODIMP COutFileStream::SetSize(Int64 newSize) -{ - #ifdef USE_WIN_FILE - UInt64 currentPos; - if(!File.Seek(0, FILE_CURRENT, currentPos)) - return E_FAIL; - bool result = File.SetLength(newSize); - UInt64 currentPos2; - result = result && File.Seek(currentPos, currentPos2); - return result ? S_OK : E_FAIL; - #else - return E_FAIL; - #endif -} - -#ifndef _WIN32_WCE -STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - - #ifdef _WIN32 - UInt32 realProcessedSize; - BOOL res = TRUE; - if (size > 0) - { - // Seems that Windows doesn't like big amounts writing to stdout. - // So we limit portions by 32KB. - UInt32 sizeTemp = (1 << 15); - if (sizeTemp > size) - sizeTemp = size; - res = ::WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), - data, sizeTemp, (DWORD *)&realProcessedSize, NULL); - size -= realProcessedSize; - data = (const void *)((const Byte *)data + realProcessedSize); - if(processedSize != NULL) - *processedSize += realProcessedSize; - } - return ConvertBoolToHRESULT(res != FALSE); - - #else - - ssize_t res; - do - { - res = write(1, data, (size_t)size); - } - while (res < 0 && (errno == EINTR)); - if (res == -1) - return E_FAIL; - if(processedSize != NULL) - *processedSize = (UInt32)res; - return S_OK; - - return S_OK; - #endif -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.h deleted file mode 100644 index 715801d8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FileStreams.h +++ /dev/null @@ -1,143 +0,0 @@ -// FileStreams.h - -#ifndef __FILESTREAMS_H -#define __FILESTREAMS_H - -#ifdef _WIN32 -#define USE_WIN_FILE -#endif - -#ifdef USE_WIN_FILE -#include "../../Windows/FileIO.h" -#else -#include "../../Common/C_FileIO.h" -#endif - -#include "../IStream.h" -#include "../../Common/MyCom.h" - -class CInFileStream: - public IInStream, - public IStreamGetSize, - public CMyUnknownImp -{ -public: - #ifdef USE_WIN_FILE - NWindows::NFile::NIO::CInFile File; - #else - NC::NFile::NIO::CInFile File; - #endif - CInFileStream() {} - virtual ~CInFileStream() {} - - bool Open(LPCTSTR fileName); - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool Open(LPCWSTR fileName); - #endif - #endif - - bool OpenShared(LPCTSTR fileName, bool shareForWrite); - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool OpenShared(LPCWSTR fileName, bool shareForWrite); - #endif - #endif - - MY_UNKNOWN_IMP2(IInStream, IStreamGetSize) - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - - STDMETHOD(GetSize)(UInt64 *size); -}; - -#ifndef _WIN32_WCE -class CStdInFileStream: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - // HANDLE File; - // CStdInFileStream() File(INVALID_HANDLE_VALUE): {} - // void Open() { File = GetStdHandle(STD_INPUT_HANDLE); }; - MY_UNKNOWN_IMP - - virtual ~CStdInFileStream() {} - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; -#endif - -class COutFileStream: - public IOutStream, - public CMyUnknownImp -{ - #ifdef USE_WIN_FILE - NWindows::NFile::NIO::COutFile File; - #else - NC::NFile::NIO::COutFile File; - #endif -public: - virtual ~COutFileStream() {} - bool Create(LPCTSTR fileName, bool createAlways) - { - ProcessedSize = 0; - return File.Create(fileName, createAlways); - } - bool Open(LPCTSTR fileName, DWORD creationDisposition) - { - ProcessedSize = 0; - return File.Open(fileName, creationDisposition); - } - #ifdef USE_WIN_FILE - #ifndef _UNICODE - bool Create(LPCWSTR fileName, bool createAlways) - { - ProcessedSize = 0; - return File.Create(fileName, createAlways); - } - bool Open(LPCWSTR fileName, DWORD creationDisposition) - { - ProcessedSize = 0; - return File.Open(fileName, creationDisposition); - } - #endif - #endif - - HRESULT Close(); - - UInt64 ProcessedSize; - - #ifdef USE_WIN_FILE - bool SetTime(const FILETIME *creationTime, const FILETIME *lastAccessTime, const FILETIME *lastWriteTime) - { - return File.SetTime(creationTime, lastAccessTime, lastWriteTime); - } - bool SetLastWriteTime(const FILETIME *lastWriteTime) - { - return File.SetLastWriteTime(lastWriteTime); - } - #endif - - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -#ifndef _WIN32_WCE -class CStdOutFileStream: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - virtual ~CStdOutFileStream() {} - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.cpp deleted file mode 100644 index fd89d0e1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.cpp +++ /dev/null @@ -1,264 +0,0 @@ -// FilterCoder.cpp - -#include "StdAfx.h" - -#include "FilterCoder.h" -extern "C" -{ -#include "../../../C/Alloc.h" -} -#include "../../Common/Defs.h" -#include "StreamUtils.h" - -static const UInt32 kBufferSize = 1 << 17; - -CFilterCoder::CFilterCoder() -{ - _buffer = (Byte *)::MidAlloc(kBufferSize); -} - -CFilterCoder::~CFilterCoder() -{ - ::MidFree(_buffer); -} - -HRESULT CFilterCoder::WriteWithLimit(ISequentialOutStream *outStream, UInt32 size) -{ - if (_outSizeIsDefined) - { - UInt64 remSize = _outSize - _nowPos64; - if (size > remSize) - size = (UInt32)remSize; - } - UInt32 processedSize = 0; - RINOK(WriteStream(outStream, _buffer, size, &processedSize)); - if (size != processedSize) - return E_FAIL; - _nowPos64 += processedSize; - return S_OK; -} - - -STDMETHODIMP CFilterCoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 * /* inSize */, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - RINOK(Init()); - UInt32 bufferPos = 0; - _outSizeIsDefined = (outSize != 0); - if (_outSizeIsDefined) - _outSize = *outSize; - - while(NeedMore()) - { - UInt32 processedSize; - - // Change it: It can be optimized using ReadPart - RINOK(ReadStream(inStream, _buffer + bufferPos, kBufferSize - bufferPos, &processedSize)); - - UInt32 endPos = bufferPos + processedSize; - - bufferPos = Filter->Filter(_buffer, endPos); - if (bufferPos > endPos) - { - for (; endPos< bufferPos; endPos++) - _buffer[endPos] = 0; - bufferPos = Filter->Filter(_buffer, endPos); - } - - if (bufferPos == 0) - { - if (endPos > 0) - return WriteWithLimit(outStream, endPos); - return S_OK; - } - RINOK(WriteWithLimit(outStream, bufferPos)); - if (progress != NULL) - { - RINOK(progress->SetRatioInfo(&_nowPos64, &_nowPos64)); - } - UInt32 i = 0; - while(bufferPos < endPos) - _buffer[i++] = _buffer[bufferPos++]; - bufferPos = i; - } - return S_OK; -} - -// #ifdef _ST_MODE -STDMETHODIMP CFilterCoder::SetOutStream(ISequentialOutStream *outStream) -{ - _bufferPos = 0; - _outStream = outStream; - return Init(); -} - -STDMETHODIMP CFilterCoder::ReleaseOutStream() -{ - _outStream.Release(); - return S_OK; -}; - - -STDMETHODIMP CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 processedSizeTotal = 0; - while(size > 0) - { - UInt32 sizeMax = kBufferSize - _bufferPos; - UInt32 sizeTemp = size; - if (sizeTemp > sizeMax) - sizeTemp = sizeMax; - memmove(_buffer + _bufferPos, data, sizeTemp); - size -= sizeTemp; - processedSizeTotal += sizeTemp; - data = (const Byte *)data + sizeTemp; - UInt32 endPos = _bufferPos + sizeTemp; - _bufferPos = Filter->Filter(_buffer, endPos); - if (_bufferPos == 0) - { - _bufferPos = endPos; - break; - } - if (_bufferPos > endPos) - { - if (size != 0) - return E_FAIL; - break; - } - RINOK(WriteWithLimit(_outStream, _bufferPos)); - UInt32 i = 0; - while(_bufferPos < endPos) - _buffer[i++] = _buffer[_bufferPos++]; - _bufferPos = i; - } - if (processedSize != NULL) - *processedSize = processedSizeTotal; - return S_OK; -} - -STDMETHODIMP CFilterCoder::Flush() -{ - if (_bufferPos != 0) - { - UInt32 endPos = Filter->Filter(_buffer, _bufferPos); - if (endPos > _bufferPos) - { - for (; _bufferPos < endPos; _bufferPos++) - _buffer[_bufferPos] = 0; - if (Filter->Filter(_buffer, endPos) != endPos) - return E_FAIL; - } - UInt32 processedSize; - RINOK(WriteStream(_outStream, _buffer, _bufferPos, &processedSize)); - if (_bufferPos != processedSize) - return E_FAIL; - _bufferPos = 0; - } - CMyComPtr flush; - _outStream.QueryInterface(IID_IOutStreamFlush, &flush); - if (flush) - return flush->Flush(); - return S_OK; -} - - -STDMETHODIMP CFilterCoder::SetInStream(ISequentialInStream *inStream) -{ - _convertedPosBegin = _convertedPosEnd = _bufferPos = 0; - _inStream = inStream; - return Init(); -} - -STDMETHODIMP CFilterCoder::ReleaseInStream() -{ - _inStream.Release(); - return S_OK; -}; - -STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 processedSizeTotal = 0; - while(size > 0) - { - if (_convertedPosBegin != _convertedPosEnd) - { - UInt32 sizeTemp = MyMin(size, _convertedPosEnd - _convertedPosBegin); - memmove(data, _buffer + _convertedPosBegin, sizeTemp); - _convertedPosBegin += sizeTemp; - data = (void *)((Byte *)data + sizeTemp); - size -= sizeTemp; - processedSizeTotal += sizeTemp; - break; - } - int i; - for (i = 0; _convertedPosEnd + i < _bufferPos; i++) - _buffer[i] = _buffer[i + _convertedPosEnd]; - _bufferPos = i; - _convertedPosBegin = _convertedPosEnd = 0; - UInt32 processedSizeTemp; - UInt32 size0 = kBufferSize - _bufferPos; - // Optimize it: - RINOK(ReadStream(_inStream, _buffer + _bufferPos, size0, &processedSizeTemp)); - _bufferPos = _bufferPos + processedSizeTemp; - _convertedPosEnd = Filter->Filter(_buffer, _bufferPos); - if (_convertedPosEnd == 0) - { - if (_bufferPos == 0) - break; - else - { - _convertedPosEnd = _bufferPos; // check it - continue; - } - } - if (_convertedPosEnd > _bufferPos) - { - for (; _bufferPos < _convertedPosEnd; _bufferPos++) - _buffer[_bufferPos] = 0; - _convertedPosEnd = Filter->Filter(_buffer, _bufferPos); - } - } - if (processedSize != NULL) - *processedSize = processedSizeTotal; - return S_OK; -} - -// #endif // _ST_MODE - -#ifndef _NO_CRYPTO -STDMETHODIMP CFilterCoder::CryptoSetPassword(const Byte *data, UInt32 size) -{ - return _setPassword->CryptoSetPassword(data, size); -} -#endif - -#ifndef EXTRACT_ONLY -STDMETHODIMP CFilterCoder::SetCoderProperties(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties) -{ - return _SetCoderProperties->SetCoderProperties(propIDs, properties, numProperties); -} - -STDMETHODIMP CFilterCoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - return _writeCoderProperties->WriteCoderProperties(outStream); -} - -/* -STDMETHODIMP CFilterCoder::ResetSalt() -{ - return _CryptoResetSalt->ResetSalt(); -} -*/ - -STDMETHODIMP CFilterCoder::ResetInitVector() -{ - return _CryptoResetInitVector->ResetInitVector(); -} -#endif - -STDMETHODIMP CFilterCoder::SetDecoderProperties2(const Byte *data, UInt32 size) -{ - return _setDecoderProperties->SetDecoderProperties2(data, size); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.h deleted file mode 100644 index f654ae3f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/FilterCoder.h +++ /dev/null @@ -1,143 +0,0 @@ -// FilterCoder.h - -#ifndef __FILTERCODER_H -#define __FILTERCODER_H - -#include "../../Common/MyCom.h" -#include "../ICoder.h" -#include "../IPassword.h" - -#define MY_QUERYINTERFACE_ENTRY_AG(i, sub0, sub) if (iid == IID_ ## i) \ -{ if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \ -*outObject = (void *)(i *)this; AddRef(); return S_OK; } - -class CFilterCoder: - public ICompressCoder, - // #ifdef _ST_MODE - public ICompressSetInStream, - public ISequentialInStream, - public ICompressSetOutStream, - public ISequentialOutStream, - public IOutStreamFlush, - // #endif - - #ifndef _NO_CRYPTO - public ICryptoSetPassword, - #endif - #ifndef EXTRACT_ONLY - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - // public ICryptoResetSalt, - public ICryptoResetInitVector, - #endif - public ICompressSetDecoderProperties2, - public CMyUnknownImp -{ -protected: - Byte *_buffer; - // #ifdef _ST_MODE - CMyComPtr _inStream; - CMyComPtr _outStream; - UInt32 _bufferPos; - UInt32 _convertedPosBegin; - UInt32 _convertedPosEnd; - // #endif - bool _outSizeIsDefined; - UInt64 _outSize; - UInt64 _nowPos64; - - HRESULT Init() - { - _nowPos64 = 0; - _outSizeIsDefined = false; - return Filter->Init(); - } - - CMyComPtr _setPassword; - #ifndef EXTRACT_ONLY - CMyComPtr _SetCoderProperties; - CMyComPtr _writeCoderProperties; - // CMyComPtr _CryptoResetSalt; - CMyComPtr _CryptoResetInitVector; - #endif - CMyComPtr _setDecoderProperties; -public: - CMyComPtr Filter; - - CFilterCoder(); - ~CFilterCoder(); - HRESULT WriteWithLimit(ISequentialOutStream *outStream, UInt32 size); - bool NeedMore() const - { return (!_outSizeIsDefined || (_nowPos64 < _outSize)); } - -public: - MY_QUERYINTERFACE_BEGIN - MY_QUERYINTERFACE_ENTRY(ICompressCoder) - // #ifdef _ST_MODE - MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) - MY_QUERYINTERFACE_ENTRY(ISequentialInStream) - - MY_QUERYINTERFACE_ENTRY(ICompressSetOutStream) - MY_QUERYINTERFACE_ENTRY(ISequentialOutStream) - MY_QUERYINTERFACE_ENTRY(IOutStreamFlush) - // #endif - - #ifndef _NO_CRYPTO - MY_QUERYINTERFACE_ENTRY_AG(ICryptoSetPassword, Filter, _setPassword) - #endif - - #ifndef EXTRACT_ONLY - MY_QUERYINTERFACE_ENTRY_AG(ICompressSetCoderProperties, Filter, _SetCoderProperties) - MY_QUERYINTERFACE_ENTRY_AG(ICompressWriteCoderProperties, Filter, _writeCoderProperties) - // MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetSalt, Filter, _CryptoResetSalt) - MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetInitVector, Filter, _CryptoResetInitVector) - #endif - - MY_QUERYINTERFACE_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _setDecoderProperties) - MY_QUERYINTERFACE_END - MY_ADDREF_RELEASE - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - // #ifdef _ST_MODE - STDMETHOD(ReleaseInStream)(); - STDMETHOD(SetInStream)(ISequentialInStream *inStream); - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); \ - STDMETHOD(SetOutStream)(ISequentialOutStream *outStream); - STDMETHOD(ReleaseOutStream)(); - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Flush)(); - // #endif - - #ifndef _NO_CRYPTO - STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size); - #endif - #ifndef EXTRACT_ONLY - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties); - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); - // STDMETHOD(ResetSalt)(); - STDMETHOD(ResetInitVector)(); - #endif - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); -}; - -// #ifdef _ST_MODE -class CInStreamReleaser -{ -public: - CFilterCoder *FilterCoder; - CInStreamReleaser(): FilterCoder(0) {} - ~CInStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseInStream(); } -}; - -class COutStreamReleaser -{ -public: - CFilterCoder *FilterCoder; - COutStreamReleaser(): FilterCoder(0) {} - ~COutStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseOutStream(); } -}; -// #endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.cpp deleted file mode 100644 index 5c4361a3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// InBuffer.cpp - -#include "StdAfx.h" - -#include "InBuffer.h" - -extern "C" -{ - #include "../../../C/Alloc.h" -} - -CInBuffer::CInBuffer(): - _buffer(0), - _bufferLimit(0), - _bufferBase(0), - _stream(0), - _bufferSize(0) -{} - -bool CInBuffer::Create(UInt32 bufferSize) -{ - const UInt32 kMinBlockSize = 1; - if (bufferSize < kMinBlockSize) - bufferSize = kMinBlockSize; - if (_bufferBase != 0 && _bufferSize == bufferSize) - return true; - Free(); - _bufferSize = bufferSize; - _bufferBase = (Byte *)::MidAlloc(bufferSize); - return (_bufferBase != 0); -} - -void CInBuffer::Free() -{ - ::MidFree(_bufferBase); - _bufferBase = 0; -} - -void CInBuffer::SetStream(ISequentialInStream *stream) -{ - _stream = stream; -} - -void CInBuffer::Init() -{ - _processedSize = 0; - _buffer = _bufferBase; - _bufferLimit = _buffer; - _wasFinished = false; - #ifdef _NO_EXCEPTIONS - ErrorCode = S_OK; - #endif -} - -bool CInBuffer::ReadBlock() -{ - #ifdef _NO_EXCEPTIONS - if (ErrorCode != S_OK) - return false; - #endif - if (_wasFinished) - return false; - _processedSize += (_buffer - _bufferBase); - UInt32 numProcessedBytes; - HRESULT result = _stream->Read(_bufferBase, _bufferSize, &numProcessedBytes); - #ifdef _NO_EXCEPTIONS - ErrorCode = result; - #else - if (result != S_OK) - throw CInBufferException(result); - #endif - _buffer = _bufferBase; - _bufferLimit = _buffer + numProcessedBytes; - _wasFinished = (numProcessedBytes == 0); - return (!_wasFinished); -} - -Byte CInBuffer::ReadBlock2() -{ - if(!ReadBlock()) - return 0xFF; - return *_buffer++; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.h deleted file mode 100644 index 05fc77e5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InBuffer.h +++ /dev/null @@ -1,75 +0,0 @@ -// InBuffer.h - -#ifndef __INBUFFER_H -#define __INBUFFER_H - -#include "../IStream.h" -#include "../../Common/MyCom.h" -#include "../../Common/MyException.h" - -#ifndef _NO_EXCEPTIONS -struct CInBufferException: public CSystemException -{ - CInBufferException(HRESULT errorCode): CSystemException(errorCode) {} -}; -#endif - -class CInBuffer -{ - Byte *_buffer; - Byte *_bufferLimit; - Byte *_bufferBase; - CMyComPtr _stream; - UInt64 _processedSize; - UInt32 _bufferSize; - bool _wasFinished; - - bool ReadBlock(); - Byte ReadBlock2(); - -public: - #ifdef _NO_EXCEPTIONS - HRESULT ErrorCode; - #endif - - CInBuffer(); - ~CInBuffer() { Free(); } - - bool Create(UInt32 bufferSize); - void Free(); - - void SetStream(ISequentialInStream *stream); - void Init(); - void ReleaseStream() { _stream.Release(); } - - bool ReadByte(Byte &b) - { - if(_buffer >= _bufferLimit) - if(!ReadBlock()) - return false; - b = *_buffer++; - return true; - } - Byte ReadByte() - { - if(_buffer >= _bufferLimit) - return ReadBlock2(); - return *_buffer++; - } - void ReadBytes(void *data, UInt32 size, UInt32 &processedSize) - { - for(processedSize = 0; processedSize < size; processedSize++) - if (!ReadByte(((Byte *)data)[processedSize])) - return; - } - bool ReadBytes(void *data, UInt32 size) - { - UInt32 processedSize; - ReadBytes(data, size, processedSize); - return (processedSize == size); - } - UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); } - bool WasFinished() const { return _wasFinished; } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.cpp deleted file mode 100644 index ffaed32c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// InOutTempBuffer.cpp - -#include "StdAfx.h" - -#include "InOutTempBuffer.h" -#include "../../Common/Defs.h" -// #include "Windows/Defs.h" - -#include "StreamUtils.h" - -using namespace NWindows; -using namespace NFile; -using namespace NDirectory; - -static UInt32 kTmpBufferMemorySize = (1 << 20); - -static LPCTSTR kTempFilePrefixString = TEXT("iot"); - -CInOutTempBuffer::CInOutTempBuffer(): - _buffer(NULL) -{ -} - -void CInOutTempBuffer::Create() -{ - _buffer = new Byte[kTmpBufferMemorySize]; -} - -CInOutTempBuffer::~CInOutTempBuffer() -{ - delete []_buffer; -} -void CInOutTempBuffer::InitWriting() -{ - _bufferPosition = 0; - _tmpFileCreated = false; - _fileSize = 0; -} - -bool CInOutTempBuffer::WriteToFile(const void *data, UInt32 size) -{ - if (size == 0) - return true; - if(!_tmpFileCreated) - { - CSysString tempDirPath; - if(!MyGetTempPath(tempDirPath)) - return false; - if (_tempFile.Create(tempDirPath, kTempFilePrefixString, _tmpFileName) == 0) - return false; - // _outFile.SetOpenCreationDispositionCreateAlways(); - if(!_outFile.Create(_tmpFileName, true)) - return false; - _tmpFileCreated = true; - } - UInt32 processedSize; - if(!_outFile.Write(data, size, processedSize)) - return false; - _fileSize += processedSize; - return (processedSize == size); -} - -bool CInOutTempBuffer::FlushWrite() -{ - return _outFile.Close(); -} - -bool CInOutTempBuffer::Write(const void *data, UInt32 size) -{ - if(_bufferPosition < kTmpBufferMemorySize) - { - UInt32 curSize = MyMin(kTmpBufferMemorySize - _bufferPosition, size); - memmove(_buffer + _bufferPosition, (const Byte *)data, curSize); - _bufferPosition += curSize; - size -= curSize; - data = ((const Byte *)data) + curSize; - _fileSize += curSize; - } - return WriteToFile(data, size); -} - -bool CInOutTempBuffer::InitReading() -{ - _currentPositionInBuffer = 0; - if(_tmpFileCreated) - return _inFile.Open(_tmpFileName); - return true; -} - -HRESULT CInOutTempBuffer::WriteToStream(ISequentialOutStream *stream) -{ - if (_currentPositionInBuffer < _bufferPosition) - { - UInt32 sizeToWrite = _bufferPosition - _currentPositionInBuffer; - RINOK(WriteStream(stream, _buffer + _currentPositionInBuffer, sizeToWrite, NULL)); - _currentPositionInBuffer += sizeToWrite; - } - if (!_tmpFileCreated) - return true; - for (;;) - { - UInt32 localProcessedSize; - if (!_inFile.ReadPart(_buffer, kTmpBufferMemorySize, localProcessedSize)) - return E_FAIL; - if (localProcessedSize == 0) - return S_OK; - RINOK(WriteStream(stream, _buffer, localProcessedSize, NULL)); - } -} - -STDMETHODIMP CSequentialOutTempBufferImp::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (!_buffer->Write(data, size)) - { - if (processedSize != NULL) - *processedSize = 0; - return E_FAIL; - } - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.h deleted file mode 100644 index 3abe76ec..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/InOutTempBuffer.h +++ /dev/null @@ -1,55 +0,0 @@ -// Util/InOutTempBuffer.h - -#ifndef __IN_OUT_TEMP_BUFFER_H -#define __IN_OUT_TEMP_BUFFER_H - -#include "../../Windows/FileIO.h" -#include "../../Windows/FileDir.h" -#include "../../Common/MyCom.h" - -#include "../IStream.h" - -class CInOutTempBuffer -{ - NWindows::NFile::NDirectory::CTempFile _tempFile; - NWindows::NFile::NIO::COutFile _outFile; - NWindows::NFile::NIO::CInFile _inFile; - Byte *_buffer; - UInt32 _bufferPosition; - UInt32 _currentPositionInBuffer; - CSysString _tmpFileName; - bool _tmpFileCreated; - - UInt64 _fileSize; - - bool WriteToFile(const void *data, UInt32 size); -public: - CInOutTempBuffer(); - ~CInOutTempBuffer(); - void Create(); - - void InitWriting(); - bool Write(const void *data, UInt32 size); - UInt64 GetDataSize() const { return _fileSize; } - bool FlushWrite(); - bool InitReading(); - HRESULT WriteToStream(ISequentialOutStream *stream); -}; - -class CSequentialOutTempBufferImp: - public ISequentialOutStream, - public CMyUnknownImp -{ - CInOutTempBuffer *_buffer; -public: - // CSequentialOutStreamImp(): _size(0) {} - // UInt32 _size; - void Init(CInOutTempBuffer *buffer) { _buffer = buffer; } - // UInt32 GetSize() const { return _size; } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.cpp deleted file mode 100644 index af721146..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// LimitedStreams.cpp - -#include "StdAfx.h" - -#include "LimitedStreams.h" -#include "../../Common/Defs.h" - -STDMETHODIMP CLimitedSequentialInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - UInt32 sizeToRead = (UInt32)MyMin((_size - _pos), (UInt64)size); - HRESULT result = S_OK; - if (sizeToRead > 0) - { - result = _stream->Read(data, sizeToRead, &realProcessedSize); - _pos += realProcessedSize; - if (realProcessedSize == 0) - _wasFinished = true; - } - if(processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.h deleted file mode 100644 index ec4a3a70..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LimitedStreams.h +++ /dev/null @@ -1,33 +0,0 @@ -// LimitedStreams.h - -#ifndef __LIMITEDSTREAMS_H -#define __LIMITEDSTREAMS_H - -#include "../../Common/MyCom.h" -#include "../IStream.h" - -class CLimitedSequentialInStream: - public ISequentialInStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; - UInt64 _pos; - bool _wasFinished; -public: - void SetStream(ISequentialInStream *stream) { _stream = stream; } - void Init(UInt64 streamSize) - { - _size = streamSize; - _pos = 0; - _wasFinished = false; - } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - UInt64 GetSize() const { return _pos; } - bool WasFinished() const { return _wasFinished; } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.cpp deleted file mode 100644 index 36be1ceb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// LockedStream.cpp - -#include "StdAfx.h" - -#include "LockedStream.h" - -HRESULT CLockedInStream::Read(UInt64 startPos, void *data, UInt32 size, - UInt32 *processedSize) -{ - NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); - RINOK(_stream->Seek(startPos, STREAM_SEEK_SET, NULL)); - return _stream->Read(data, size, processedSize); -} - -STDMETHODIMP CLockedSequentialInStreamImp::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize = 0; - HRESULT result = _lockedInStream->Read(_pos, data, size, &realProcessedSize); - _pos += realProcessedSize; - if (processedSize != NULL) - *processedSize = realProcessedSize; - return result; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.h deleted file mode 100644 index 1c1e1793..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/LockedStream.h +++ /dev/null @@ -1,38 +0,0 @@ -// LockedStream.h - -#ifndef __LOCKEDSTREAM_H -#define __LOCKEDSTREAM_H - -#include "../../Windows/Synchronization.h" -#include "../../Common/MyCom.h" -#include "../IStream.h" - -class CLockedInStream -{ - CMyComPtr _stream; - NWindows::NSynchronization::CCriticalSection _criticalSection; -public: - void Init(IInStream *stream) - { _stream = stream; } - HRESULT Read(UInt64 startPos, void *data, UInt32 size, UInt32 *processedSize); -}; - -class CLockedSequentialInStreamImp: - public ISequentialInStream, - public CMyUnknownImp -{ - CLockedInStream *_lockedInStream; - UInt64 _pos; -public: - void Init(CLockedInStream *lockedInStream, UInt64 startPos) - { - _lockedInStream = lockedInStream; - _pos = startPos; - } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.cpp deleted file mode 100644 index b797b685..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// MethodId.cpp - -#include "StdAfx.h" - -#include "MethodId.h" -#include "../../Common/MyString.h" - -static inline wchar_t GetHex(Byte value) -{ - return (wchar_t)((value < 10) ? ('0' + value) : ('A' + (value - 10))); -} - -UString ConvertMethodIdToString(UInt64 id) -{ - wchar_t s[32]; - int len = 32; - s[--len] = 0; - do - { - s[--len] = GetHex((Byte)id & 0xF); - id >>= 4; - s[--len] = GetHex((Byte)id & 0xF); - id >>= 4; - } - while (id != 0); - return s + len; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.h deleted file mode 100644 index 54ebc9f7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodId.h +++ /dev/null @@ -1,10 +0,0 @@ -// MethodId.h - -#ifndef __7Z_METHOD_ID_H -#define __7Z_METHOD_ID_H - -#include "../../Common/Types.h" - -typedef UInt64 CMethodId; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.cpp deleted file mode 100644 index 52f5511f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// MethodProps.cpp - -#include "StdAfx.h" - -#include "MethodProps.h" -#include "../../Common/MyCom.h" - -static UInt64 k_LZMA = 0x030101; -// static UInt64 k_LZMA2 = 0x030102; - -HRESULT SetMethodProperties(const CMethod &method, const UInt64 *inSizeForReduce, IUnknown *coder) -{ - bool tryReduce = false; - UInt32 reducedDictionarySize = 1 << 10; - if (inSizeForReduce != 0 && (method.Id == k_LZMA /* || methodFull.MethodID == k_LZMA2 */)) - { - for (;;) - { - const UInt32 step = (reducedDictionarySize >> 1); - if (reducedDictionarySize >= *inSizeForReduce) - { - tryReduce = true; - break; - } - reducedDictionarySize += step; - if (reducedDictionarySize >= *inSizeForReduce) - { - tryReduce = true; - break; - } - if (reducedDictionarySize >= ((UInt32)3 << 30)) - break; - reducedDictionarySize += step; - } - } - - { - int numProperties = method.Properties.Size(); - CMyComPtr setCoderProperties; - coder->QueryInterface(IID_ICompressSetCoderProperties, (void **)&setCoderProperties); - if (setCoderProperties == NULL) - { - if (numProperties != 0) - return E_INVALIDARG; - } - else - { - CRecordVector propIDs; - NWindows::NCOM::CPropVariant *values = new NWindows::NCOM::CPropVariant[numProperties]; - HRESULT res = S_OK; - try - { - for (int i = 0; i < numProperties; i++) - { - const CProp &prop = method.Properties[i]; - propIDs.Add(prop.Id); - NWindows::NCOM::CPropVariant &value = values[i]; - value = prop.Value; - // if (tryReduce && prop.Id == NCoderPropID::kDictionarySize && value.vt == VT_UI4 && reducedDictionarySize < value.ulVal) - if (tryReduce) - if (prop.Id == NCoderPropID::kDictionarySize) - if (value.vt == VT_UI4) - if (reducedDictionarySize < value.ulVal) - value.ulVal = reducedDictionarySize; - } - CMyComPtr setCoderProperties; - coder->QueryInterface(IID_ICompressSetCoderProperties, (void **)&setCoderProperties); - res = setCoderProperties->SetCoderProperties(&propIDs.Front(), values, numProperties); - } - catch(...) - { - delete []values; - throw; - } - delete []values; - RINOK(res); - } - } - - /* - CMyComPtr writeCoderProperties; - coder->QueryInterface(IID_ICompressWriteCoderProperties, (void **)&writeCoderProperties); - if (writeCoderProperties != NULL) - { - CSequentialOutStreamImp *outStreamSpec = new CSequentialOutStreamImp; - CMyComPtr outStream(outStreamSpec); - outStreamSpec->Init(); - RINOK(writeCoderProperties->WriteCoderProperties(outStream)); - size_t size = outStreamSpec->GetSize(); - filterProps.SetCapacity(size); - memmove(filterProps, outStreamSpec->GetBuffer(), size); - } - */ - return S_OK; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.h deleted file mode 100644 index 7ffa8e4a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/MethodProps.h +++ /dev/null @@ -1,41 +0,0 @@ -// MethodProps.h - -#ifndef __7Z_METHOD_PROPS_H -#define __7Z_METHOD_PROPS_H - -#include "MethodId.h" - -#include "../../Windows/PropVariant.h" -#include "../../Common/MyVector.h" -#include "../ICoder.h" - -struct CProp -{ - PROPID Id; - NWindows::NCOM::CPropVariant Value; -}; - -struct CMethod -{ - CMethodId Id; - CObjectVector Properties; -}; - -struct CMethodsMode -{ - CObjectVector Methods; - #ifdef COMPRESS_MT - UInt32 NumThreads; - #endif - - CMethodsMode() - #ifdef COMPRESS_MT - : NumThreads(1) - #endif - {} - bool IsEmpty() const { return Methods.IsEmpty() ; } -}; - -HRESULT SetMethodProperties(const CMethod &method, const UInt64 *inSizeForReduce, IUnknown *coder); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.cpp deleted file mode 100644 index 997ccae2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// OffsetStream.cpp - -#include "StdAfx.h" - -#include "Common/Defs.h" -#include "OffsetStream.h" - -HRESULT COffsetOutStream::Init(IOutStream *stream, UInt64 offset) -{ - _offset = offset; - _stream = stream; - return _stream->Seek(offset, STREAM_SEEK_SET, NULL); -} - -STDMETHODIMP COffsetOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - return _stream->Write(data, size, processedSize); -} - -STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, - UInt64 *newPosition) -{ - UInt64 absoluteNewPosition; - if (seekOrigin == STREAM_SEEK_SET) - offset += _offset; - HRESULT result = _stream->Seek(offset, seekOrigin, &absoluteNewPosition); - if (newPosition != NULL) - *newPosition = absoluteNewPosition - _offset; - return result; -} - -STDMETHODIMP COffsetOutStream::SetSize(Int64 newSize) -{ - return _stream->SetSize(_offset + newSize); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.h deleted file mode 100644 index 57a055cc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OffsetStream.h +++ /dev/null @@ -1,25 +0,0 @@ -// OffsetStream.h - -#ifndef __OFFSETSTREAM_H -#define __OFFSETSTREAM_H - -#include "Common/MyCom.h" -#include "../IStream.h" - -class COffsetOutStream: - public IOutStream, - public CMyUnknownImp -{ - UInt64 _offset; - CMyComPtr _stream; -public: - HRESULT Init(IOutStream *stream, UInt64 offset); - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.cpp deleted file mode 100644 index 31d17c5a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// OutByte.cpp - -#include "StdAfx.h" - -#include "OutBuffer.h" - -extern "C" -{ - #include "../../../C/Alloc.h" -} - -bool COutBuffer::Create(UInt32 bufferSize) -{ - const UInt32 kMinBlockSize = 1; - if (bufferSize < kMinBlockSize) - bufferSize = kMinBlockSize; - if (_buffer != 0 && _bufferSize == bufferSize) - return true; - Free(); - _bufferSize = bufferSize; - _buffer = (Byte *)::MidAlloc(bufferSize); - return (_buffer != 0); -} - -void COutBuffer::Free() -{ - ::MidFree(_buffer); - _buffer = 0; -} - -void COutBuffer::SetStream(ISequentialOutStream *stream) -{ - _stream = stream; -} - -void COutBuffer::Init() -{ - _streamPos = 0; - _limitPos = _bufferSize; - _pos = 0; - _processedSize = 0; - _overDict = false; - #ifdef _NO_EXCEPTIONS - ErrorCode = S_OK; - #endif -} - -UInt64 COutBuffer::GetProcessedSize() const -{ - UInt64 res = _processedSize + _pos - _streamPos; - if (_streamPos > _pos) - res += _bufferSize; - return res; -} - - -HRESULT COutBuffer::FlushPart() -{ - // _streamPos < _bufferSize - UInt32 size = (_streamPos >= _pos) ? (_bufferSize - _streamPos) : (_pos - _streamPos); - HRESULT result = S_OK; - #ifdef _NO_EXCEPTIONS - result = ErrorCode; - #endif - if (_buffer2 != 0) - { - memmove(_buffer2, _buffer + _streamPos, size); - _buffer2 += size; - } - - if (_stream != 0 - #ifdef _NO_EXCEPTIONS - && (ErrorCode == S_OK) - #endif - ) - { - UInt32 processedSize = 0; - result = _stream->Write(_buffer + _streamPos, size, &processedSize); - size = processedSize; - } - _streamPos += size; - if (_streamPos == _bufferSize) - _streamPos = 0; - if (_pos == _bufferSize) - { - _overDict = true; - _pos = 0; - } - _limitPos = (_streamPos > _pos) ? _streamPos : _bufferSize; - _processedSize += size; - return result; -} - -HRESULT COutBuffer::Flush() -{ - #ifdef _NO_EXCEPTIONS - if (ErrorCode != S_OK) - return ErrorCode; - #endif - - while(_streamPos != _pos) - { - HRESULT result = FlushPart(); - if (result != S_OK) - return result; - } - return S_OK; -} - -void COutBuffer::FlushWithCheck() -{ - HRESULT result = Flush(); - #ifdef _NO_EXCEPTIONS - ErrorCode = result; - #else - if (result != S_OK) - throw COutBufferException(result); - #endif -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.h deleted file mode 100644 index e99dbf2a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/OutBuffer.h +++ /dev/null @@ -1,64 +0,0 @@ -// OutBuffer.h - -#ifndef __OUTBUFFER_H -#define __OUTBUFFER_H - -#include "../IStream.h" -#include "../../Common/MyCom.h" -#include "../../Common/MyException.h" - -#ifndef _NO_EXCEPTIONS -struct COutBufferException: public CSystemException -{ - COutBufferException(HRESULT errorCode): CSystemException(errorCode) {} -}; -#endif - -class COutBuffer -{ -protected: - Byte *_buffer; - UInt32 _pos; - UInt32 _limitPos; - UInt32 _streamPos; - UInt32 _bufferSize; - CMyComPtr _stream; - UInt64 _processedSize; - Byte *_buffer2; - bool _overDict; - - HRESULT FlushPart(); -public: - #ifdef _NO_EXCEPTIONS - HRESULT ErrorCode; - #endif - - COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {} - ~COutBuffer() { Free(); } - - bool Create(UInt32 bufferSize); - void Free(); - - void SetMemStream(Byte *buffer) { _buffer2 = buffer; } - void SetStream(ISequentialOutStream *stream); - void Init(); - HRESULT Flush(); - void FlushWithCheck(); - void ReleaseStream() { _stream.Release(); } - - void WriteByte(Byte b) - { - _buffer[_pos++] = b; - if(_pos == _limitPos) - FlushWithCheck(); - } - void WriteBytes(const void *data, size_t size) - { - for (size_t i = 0; i < size; i++) - WriteByte(((const Byte *)data)[i]); - } - - UInt64 GetProcessedSize() const; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.cpp deleted file mode 100644 index f24ff6b6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// ProgressUtils.h - -#include "StdAfx.h" - -#include "ProgressUtils.h" - -CLocalProgress::CLocalProgress() -{ - ProgressOffset = InSize = OutSize = 0; - SendRatio = SendProgress = true; -} - -void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain) -{ - _ratioProgress.Release(); - _progress = progress; - _progress.QueryInterface(IID_ICompressProgressInfo, &_ratioProgress); - _inSizeIsMain = inSizeIsMain; -} - -STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - UInt64 inSizeNew = InSize, outSizeNew = OutSize; - if (inSize) - inSizeNew += (*inSize); - if (outSize) - outSizeNew += (*outSize); - if (SendRatio && _ratioProgress) - { - RINOK(_ratioProgress->SetRatioInfo(&inSizeNew, &outSizeNew)); - } - inSizeNew += ProgressOffset; - outSizeNew += ProgressOffset; - if (SendProgress) - return _progress->SetCompleted(_inSizeIsMain ? &inSizeNew : &outSizeNew); - return S_OK; -} - -HRESULT CLocalProgress::SetCur() -{ - return SetRatioInfo(NULL, NULL); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.h deleted file mode 100644 index 831c7366..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/ProgressUtils.h +++ /dev/null @@ -1,34 +0,0 @@ -// ProgressUtils.h - -#ifndef __PROGRESSUTILS_H -#define __PROGRESSUTILS_H - -#include "../../Common/MyCom.h" - -#include "../ICoder.h" -#include "../IProgress.h" - -class CLocalProgress: - public ICompressProgressInfo, - public CMyUnknownImp -{ - CMyComPtr _progress; - CMyComPtr _ratioProgress; - bool _inSizeIsMain; -public: - UInt64 ProgressOffset; - UInt64 InSize; - UInt64 OutSize; - bool SendRatio; - bool SendProgress; - - CLocalProgress(); - void Init(IProgress *progress, bool inSizeIsMain); - HRESULT SetCur(); - - MY_UNKNOWN_IMP - - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterArc.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterArc.h deleted file mode 100644 index 57730214..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterArc.h +++ /dev/null @@ -1,36 +0,0 @@ -// RegisterArc.h - -#ifndef __REGISTERARC_H -#define __REGISTERARC_H - -#include "../Archive/IArchive.h" - -typedef IInArchive * (*CreateInArchiveP)(); -typedef IOutArchive * (*CreateOutArchiveP)(); - -struct CArcInfo -{ - const wchar_t *Name; - const wchar_t *Ext; - const wchar_t *AddExt; - Byte ClassId; - Byte Signature[16]; - int SignatureSize; - bool KeepName; - CreateInArchiveP CreateInArchive; - CreateOutArchiveP CreateOutArchive; -}; - -void RegisterArc(const CArcInfo *arcInfo); - -#define REGISTER_ARC_NAME(x) CRegister ## x - -#define REGISTER_ARC_DEC_SIG(x) struct REGISTER_ARC_NAME(x) { \ - REGISTER_ARC_NAME(x)() { g_ArcInfo.Signature[0]--; RegisterArc(&g_ArcInfo); }}; \ - static REGISTER_ARC_NAME(x) g_RegisterArc; - -#define REGISTER_ARC(x) struct REGISTER_ARC_NAME(x) { \ - REGISTER_ARC_NAME(x)() { RegisterArc(&g_ArcInfo); }}; \ - static REGISTER_ARC_NAME(x) g_RegisterArc; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterCodec.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterCodec.h deleted file mode 100644 index 1f1cd4df..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/RegisterCodec.h +++ /dev/null @@ -1,33 +0,0 @@ -// RegisterCodec.h - -#ifndef __REGISTERCODEC_H -#define __REGISTERCODEC_H - -#include "../Common/MethodId.h" - -typedef void * (*CreateCodecP)(); -struct CCodecInfo -{ - CreateCodecP CreateDecoder; - CreateCodecP CreateEncoder; - CMethodId Id; - const wchar_t *Name; - UInt32 NumInStreams; - bool IsFilter; -}; - -void RegisterCodec(const CCodecInfo *codecInfo); - -#define REGISTER_CODEC_NAME(x) CRegisterCodec ## x - -#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \ - REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \ - static REGISTER_CODEC_NAME(x) g_RegisterCodec; - -#define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x -#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ - REGISTER_CODECS_NAME(x)() { for (int i = 0; i < sizeof(g_CodecsInfo) / sizeof(g_CodecsInfo[0]); i++) \ - RegisterCodec(&g_CodecsInfo[i]); }}; \ - static REGISTER_CODECS_NAME(x) g_RegisterCodecs; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StdAfx.h deleted file mode 100644 index 27a77b10..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../Common/MyWindows.h" -#include "../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.cpp deleted file mode 100644 index 5db9d01f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// StreamBinder.cpp - -#include "StdAfx.h" - -#include "StreamBinder.h" -#include "../../Common/Defs.h" -#include "../../Common/MyCom.h" - -using namespace NWindows; -using namespace NSynchronization; - -class CSequentialInStreamForBinder: - public ISequentialInStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -private: - CStreamBinder *m_StreamBinder; -public: - ~CSequentialInStreamForBinder() { m_StreamBinder->CloseRead(); } - void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } -}; - -STDMETHODIMP CSequentialInStreamForBinder::Read(void *data, UInt32 size, UInt32 *processedSize) - { return m_StreamBinder->Read(data, size, processedSize); } - -class CSequentialOutStreamForBinder: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - -private: - CStreamBinder *m_StreamBinder; -public: - ~CSequentialOutStreamForBinder() { m_StreamBinder->CloseWrite(); } - void SetBinder(CStreamBinder *streamBinder) { m_StreamBinder = streamBinder; } -}; - -STDMETHODIMP CSequentialOutStreamForBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) - { return m_StreamBinder->Write(data, size, processedSize); } - - -////////////////////////// -// CStreamBinder -// (_thereAreBytesToReadEvent && _bufferSize == 0) means that stream is finished. - -HRes CStreamBinder::CreateEvents() -{ - RINOK(_allBytesAreWritenEvent.Create(true)); - RINOK(_thereAreBytesToReadEvent.Create()); - return _readStreamIsClosedEvent.Create(); -} - -void CStreamBinder::ReInit() -{ - _thereAreBytesToReadEvent.Reset(); - _readStreamIsClosedEvent.Reset(); - ProcessedSize = 0; -} - - - -void CStreamBinder::CreateStreams(ISequentialInStream **inStream, - ISequentialOutStream **outStream) -{ - CSequentialInStreamForBinder *inStreamSpec = new - CSequentialInStreamForBinder; - CMyComPtr inStreamLoc(inStreamSpec); - inStreamSpec->SetBinder(this); - *inStream = inStreamLoc.Detach(); - - CSequentialOutStreamForBinder *outStreamSpec = new - CSequentialOutStreamForBinder; - CMyComPtr outStreamLoc(outStreamSpec); - outStreamSpec->SetBinder(this); - *outStream = outStreamLoc.Detach(); - - _buffer = NULL; - _bufferSize= 0; - ProcessedSize = 0; -} - -HRESULT CStreamBinder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 sizeToRead = size; - if (size > 0) - { - RINOK(_thereAreBytesToReadEvent.Lock()); - sizeToRead = MyMin(_bufferSize, size); - if (_bufferSize > 0) - { - MoveMemory(data, _buffer, sizeToRead); - _buffer = ((const Byte *)_buffer) + sizeToRead; - _bufferSize -= sizeToRead; - if (_bufferSize == 0) - { - _thereAreBytesToReadEvent.Reset(); - _allBytesAreWritenEvent.Set(); - } - } - } - if (processedSize != NULL) - *processedSize = sizeToRead; - ProcessedSize += sizeToRead; - return S_OK; -} - -void CStreamBinder::CloseRead() -{ - _readStreamIsClosedEvent.Set(); -} - -HRESULT CStreamBinder::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if (size > 0) - { - _buffer = data; - _bufferSize = size; - _allBytesAreWritenEvent.Reset(); - _thereAreBytesToReadEvent.Set(); - - HANDLE events[2]; - events[0] = _allBytesAreWritenEvent; - events[1] = _readStreamIsClosedEvent; - DWORD waitResult = ::WaitForMultipleObjects(2, events, FALSE, INFINITE); - if (waitResult != WAIT_OBJECT_0 + 0) - { - // ReadingWasClosed = true; - return S_FALSE; - } - // if(!_allBytesAreWritenEvent.Lock()) - // return E_FAIL; - } - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} - -void CStreamBinder::CloseWrite() -{ - // _bufferSize must be = 0 - _thereAreBytesToReadEvent.Set(); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.h deleted file mode 100644 index 1de2372a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamBinder.h +++ /dev/null @@ -1,32 +0,0 @@ -// StreamBinder.h - -#ifndef __STREAMBINDER_H -#define __STREAMBINDER_H - -#include "../IStream.h" -#include "../../Windows/Synchronization.h" - -class CStreamBinder -{ - NWindows::NSynchronization::CManualResetEvent _allBytesAreWritenEvent; - NWindows::NSynchronization::CManualResetEvent _thereAreBytesToReadEvent; - NWindows::NSynchronization::CManualResetEvent _readStreamIsClosedEvent; - UInt32 _bufferSize; - const void *_buffer; -public: - // bool ReadingWasClosed; - UInt64 ProcessedSize; - CStreamBinder() {} - HRes CreateEvents(); - - void CreateStreams(ISequentialInStream **inStream, - ISequentialOutStream **outStream); - HRESULT Read(void *data, UInt32 size, UInt32 *processedSize); - void CloseRead(); - - HRESULT Write(const void *data, UInt32 size, UInt32 *processedSize); - void CloseWrite(); - void ReInit(); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.cpp deleted file mode 100644 index 32f8f306..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// StreamObjects.cpp - -#include "StdAfx.h" - -#include "StreamObjects.h" -#include "../../Common/Defs.h" - - -STDMETHODIMP CSequentialInStreamImp::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 numBytesToRead = (UInt32)(MyMin(_pos + size, _size) - _pos); - memmove(data, _dataPointer + _pos, numBytesToRead); - _pos += numBytesToRead; - if(processedSize != NULL) - *processedSize = numBytesToRead; - return S_OK; -} - - -void CWriteBuffer::Write(const void *data, size_t size) -{ - size_t newCapacity = _size + size; - _buffer.EnsureCapacity(newCapacity); - memmove(_buffer + _size, data, size); - _size += size; -} - -STDMETHODIMP CSequentialOutStreamImp::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - _writeBuffer.Write(data, size); - if(processedSize != NULL) - *processedSize = size; - return S_OK; -} - -STDMETHODIMP CSequentialOutStreamImp2::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 newSize = size; - if (_pos + size > _size) - newSize = (UInt32)(_size - _pos); - memmove(_buffer + _pos, data, newSize); - if(processedSize != NULL) - *processedSize = newSize; - _pos += newSize; - if (newSize != size) - return E_FAIL; - return S_OK; -} - -STDMETHODIMP CSequentialInStreamSizeCount::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Read(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} - -STDMETHODIMP CSequentialOutStreamSizeCount::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 realProcessedSize; - HRESULT result = _stream->Write(data, size, &realProcessedSize); - _size += realProcessedSize; - if (processedSize != 0) - *processedSize = realProcessedSize; - return result; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.h deleted file mode 100644 index 6f670f59..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamObjects.h +++ /dev/null @@ -1,117 +0,0 @@ -// StreamObjects.h - -#ifndef __STREAMOBJECTS_H -#define __STREAMOBJECTS_H - -#include "../../Common/DynamicBuffer.h" -#include "../../Common/MyCom.h" -#include "../IStream.h" - -class CSequentialInStreamImp: - public ISequentialInStream, - public CMyUnknownImp -{ - const Byte *_dataPointer; - size_t _size; - size_t _pos; - -public: - void Init(const Byte *dataPointer, size_t size) - { - _dataPointer = dataPointer; - _size = size; - _pos = 0; - } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - - -class CWriteBuffer -{ - CByteDynamicBuffer _buffer; - size_t _size; -public: - CWriteBuffer(): _size(0) {} - void Init() { _size = 0; } - void Write(const void *data, size_t size); - size_t GetSize() const { return _size; } - const CByteDynamicBuffer& GetBuffer() const { return _buffer; } -}; - -class CSequentialOutStreamImp: - public ISequentialOutStream, - public CMyUnknownImp -{ - CWriteBuffer _writeBuffer; -public: - void Init() { _writeBuffer.Init(); } - size_t GetSize() const { return _writeBuffer.GetSize(); } - const CByteDynamicBuffer& GetBuffer() const { return _writeBuffer.GetBuffer(); } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialOutStreamImp2: - public ISequentialOutStream, - public CMyUnknownImp -{ - Byte *_buffer; - size_t _size; - size_t _pos; -public: - - void Init(Byte *buffer, size_t size) - { - _buffer = buffer; - _pos = 0; - _size = size; - } - - size_t GetPos() const { return _pos; } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialInStreamSizeCount: - public ISequentialInStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void Init(ISequentialInStream *stream) - { - _stream = stream; - _size = 0; - } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP - - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -class CSequentialOutStreamSizeCount: - public ISequentialOutStream, - public CMyUnknownImp -{ - CMyComPtr _stream; - UInt64 _size; -public: - void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void Init() { _size = 0; } - UInt64 GetSize() const { return _size; } - - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.cpp deleted file mode 100644 index 1d951271..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// StreamUtils.cpp - -#include "StdAfx.h" - -#include "../../Common/MyCom.h" -#include "StreamUtils.h" - -HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != 0) - *processedSize = 0; - while(size != 0) - { - UInt32 processedSizeLoc; - HRESULT res = stream->Read(data, size, &processedSizeLoc); - if (processedSize != 0) - *processedSize += processedSizeLoc; - data = (Byte *)((Byte *)data + processedSizeLoc); - size -= processedSizeLoc; - RINOK(res); - if (processedSizeLoc == 0) - return S_OK; - } - return S_OK; -} - -HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize) -{ - if (processedSize != 0) - *processedSize = 0; - while(size != 0) - { - UInt32 processedSizeLoc; - HRESULT res = stream->Write(data, size, &processedSizeLoc); - if (processedSize != 0) - *processedSize += processedSizeLoc; - data = (const void *)((const Byte *)data + processedSizeLoc); - size -= processedSizeLoc; - RINOK(res); - if (processedSizeLoc == 0) - return E_FAIL; - } - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.h deleted file mode 100644 index 59f88733..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/StreamUtils.h +++ /dev/null @@ -1,11 +0,0 @@ -// StreamUtils.h - -#ifndef __STREAMUTILS_H -#define __STREAMUTILS_H - -#include "../IStream.h" - -HRESULT ReadStream(ISequentialInStream *stream, void *data, UInt32 size, UInt32 *processedSize); -HRESULT WriteStream(ISequentialOutStream *stream, const void *data, UInt32 size, UInt32 *processedSize); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.cpp deleted file mode 100644 index 3567f98e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// VirtThread.cpp - -#include "StdAfx.h" - -#include "VirtThread.h" - -static THREAD_FUNC_DECL CoderThread(void *p) -{ - for (;;) - { - CVirtThread *t = (CVirtThread *)p; - t->StartEvent.Lock(); - if (t->ExitEvent) - return 0; - t->Execute(); - t->FinishedEvent.Set(); - } -} - -HRes CVirtThread::Create() -{ - RINOK(StartEvent.CreateIfNotCreated()); - RINOK(FinishedEvent.CreateIfNotCreated()); - StartEvent.Reset(); - FinishedEvent.Reset(); - ExitEvent = false; - if (Thread.IsCreated()) - return S_OK; - return Thread.Create(CoderThread, this); -} - -void CVirtThread::Start() -{ - ExitEvent = false; - StartEvent.Set(); -} - -CVirtThread::~CVirtThread() -{ - ExitEvent = true; - if (StartEvent.IsCreated()) - StartEvent.Set(); - Thread.Wait(); -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.h deleted file mode 100644 index 62c055b6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Common/VirtThread.h +++ /dev/null @@ -1,23 +0,0 @@ -// VirtThread.h - -#ifndef __VIRTTHREAD_H -#define __VIRTTHREAD_H - -#include "../../Windows/Synchronization.h" -#include "../../Windows/Thread.h" - -struct CVirtThread -{ - NWindows::NSynchronization::CAutoResetEvent StartEvent; - NWindows::NSynchronization::CAutoResetEvent FinishedEvent; - NWindows::CThread Thread; - bool ExitEvent; - - ~CVirtThread(); - HRes Create(); - void Start(); - void WaitFinish() { FinishedEvent.Lock(); } - virtual void Execute() = 0; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.cpp deleted file mode 100644 index 5870bc03..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// ARM.cpp - -#include "StdAfx.h" -#include "ARM.h" - -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchARM.h" -} - -UInt32 CBC_ARM_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return ::ARM_Convert(data, size, _bufferPos, 1); -} - -UInt32 CBC_ARM_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return ::ARM_Convert(data, size, _bufferPos, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.h deleted file mode 100644 index 5561299b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARM.h +++ /dev/null @@ -1,10 +0,0 @@ -// ARM.h - -#ifndef __ARM_H -#define __ARM_H - -#include "BranchCoder.h" - -MyClassA(BC_ARM, 0x05, 1) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.cpp deleted file mode 100644 index 7df641ac..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// ARMThumb.cpp - -#include "StdAfx.h" - -#include "ARMThumb.h" - -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchARMThumb.h" -} - -UInt32 CBC_ARMThumb_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return ::ARMThumb_Convert(data, size, _bufferPos, 1); -} - -UInt32 CBC_ARMThumb_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return ::ARMThumb_Convert(data, size, _bufferPos, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.h deleted file mode 100644 index 601e40bf..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/ARMThumb.h +++ /dev/null @@ -1,10 +0,0 @@ -// ARMThumb.h - -#ifndef __ARMTHUMB_H -#define __ARMTHUMB_H - -#include "BranchCoder.h" - -MyClassA(BC_ARMThumb, 0x07, 1) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJ2Register.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJ2Register.cpp deleted file mode 100644 index 88ebbac6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJ2Register.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// BranchRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "x86_2.h" -static void *CreateCodec() { return (void *)(ICompressCoder2 *)(new NCompress::NBcj2::CDecoder()); } -#ifndef EXTRACT_ONLY -static void *CreateCodecOut() { return (void *)(ICompressCoder2 *)(new NCompress::NBcj2::CEncoder()); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x0303011B, L"BCJ2", 4, false }; - -REGISTER_CODEC(BCJ2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJRegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJRegister.cpp deleted file mode 100644 index a62d964d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BCJRegister.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// BranchRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "x86.h" -static void *CreateCodec() { return (void *)(ICompressFilter *)(new CBCJ_x86_Decoder()); } -#ifndef EXTRACT_ONLY -static void *CreateCodecOut() { return (void *)(ICompressFilter *)(new CBCJ_x86_Encoder()); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x03030103, L"BCJ", 1, true }; - -REGISTER_CODEC(BCJ) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.cpp deleted file mode 100644 index 8d25f0d5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// BranchCoder.cpp - -#include "StdAfx.h" -#include "BranchCoder.h" - -STDMETHODIMP CBranchConverter::Init() -{ - _bufferPos = 0; - SubInit(); - return S_OK; -} - -STDMETHODIMP_(UInt32) CBranchConverter::Filter(Byte *data, UInt32 size) -{ - UInt32 processedSize = SubFilter(data, size); - _bufferPos += processedSize; - return processedSize; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.h deleted file mode 100644 index 102f0dab..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchCoder.h +++ /dev/null @@ -1,45 +0,0 @@ -// BranchCoder.h - -#ifndef __BRANCH_CODER_H -#define __BRANCH_CODER_H - -#include "Common/MyCom.h" -#include "Common/Types.h" - -#include "../../ICoder.h" - -class CBranchConverter: - public ICompressFilter, - public CMyUnknownImp -{ -protected: - UInt32 _bufferPos; - virtual void SubInit() {} - virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0; -public: - MY_UNKNOWN_IMP; - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -#define MyClassEncoderA(Name) class C ## Name: public CBranchConverter \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); }; - -#define MyClassDecoderA(Name) class C ## Name: public CBranchConverter \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); }; - -#define MyClassEncoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; - -#define MyClassDecoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ - { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; - -#define MyClassA(Name, id, subId) \ -MyClassEncoderA(Name ## _Encoder) \ -MyClassDecoderA(Name ## _Decoder) - -#define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT) \ -MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \ -MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchRegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchRegister.cpp deleted file mode 100644 index 2ccdcc64..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/BranchRegister.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// BranchRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "PPC.h" -#include "IA64.h" -#include "ARM.h" -#include "ARMThumb.h" -#include "SPARC.h" - -#define CREATE_CODEC(x) \ - static void *CreateCodec ## x() { return (void *)(ICompressFilter *)(new C ## x ## _Decoder); } \ - static void *CreateCodec ## x ## Out() { return (void *)(ICompressFilter *)(new C ## x ## _Encoder); } - -CREATE_CODEC(BC_PPC_B) -CREATE_CODEC(BC_IA64) -CREATE_CODEC(BC_ARM) -CREATE_CODEC(BC_ARMThumb) -CREATE_CODEC(BC_SPARC) - -#define METHOD_ITEM(x, id1, id2, name) { CreateCodec ## x, CreateCodec ## x ## Out, 0x03030000 + (id1 * 256) + id2, name, 1, true } - -static CCodecInfo g_CodecsInfo[] = -{ - METHOD_ITEM(BC_PPC_B, 0x02, 0x05, L"BC_PPC_B"), - METHOD_ITEM(BC_IA64, 0x04, 1, L"BC_IA64"), - METHOD_ITEM(BC_ARM, 0x05, 1, L"BC_ARM"), - METHOD_ITEM(BC_ARMThumb,0x07, 1, L"BC_ARMThumb"), - METHOD_ITEM(BC_SPARC, 0x08, 0x05, L"BC_SPARC") -}; - -REGISTER_CODECS(Branch) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.cpp deleted file mode 100644 index ae4766a3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// IA64.cpp - -#include "StdAfx.h" -#include "IA64.h" - -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchIA64.h" -} - -UInt32 CBC_IA64_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return ::IA64_Convert(data, size, _bufferPos, 1); -} - -UInt32 CBC_IA64_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return ::IA64_Convert(data, size, _bufferPos, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.h deleted file mode 100644 index 7fe715ed..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/IA64.h +++ /dev/null @@ -1,10 +0,0 @@ -// IA64.h - -#ifndef __IA64_H -#define __IA64_H - -#include "BranchCoder.h" - -MyClassA(BC_IA64, 0x04, 1) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.cpp deleted file mode 100644 index ecd4b3d8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// PPC.cpp - -#include "StdAfx.h" -#include "PPC.h" - -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchPPC.h" -} - -UInt32 CBC_PPC_B_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return ::PPC_B_Convert(data, size, _bufferPos, 1); -} - -UInt32 CBC_PPC_B_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return ::PPC_B_Convert(data, size, _bufferPos, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.h deleted file mode 100644 index a0e33444..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/PPC.h +++ /dev/null @@ -1,10 +0,0 @@ -// PPC.h - -#ifndef __PPC_H -#define __PPC_H - -#include "BranchCoder.h" - -MyClassA(BC_PPC_B, 0x02, 5) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.cpp deleted file mode 100644 index 5678eb31..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// SPARC.cpp - -#include "StdAfx.h" -#include "SPARC.h" - -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchSPARC.h" -} - -UInt32 CBC_SPARC_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return ::SPARC_Convert(data, size, _bufferPos, 1); -} - -UInt32 CBC_SPARC_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return ::SPARC_Convert(data, size, _bufferPos, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.h deleted file mode 100644 index e0a682ef..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/SPARC.h +++ /dev/null @@ -1,10 +0,0 @@ -// SPARC.h - -#ifndef __SPARC_H -#define __SPARC_H - -#include "BranchCoder.h" - -MyClassA(BC_SPARC, 0x08, 5) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.h deleted file mode 100644 index e7fb6986..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.cpp deleted file mode 100644 index 79d49657..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// x86.cpp - -#include "StdAfx.h" -#include "x86.h" - -UInt32 CBCJ_x86_Encoder::SubFilter(Byte *data, UInt32 size) -{ - return (UInt32)::x86_Convert(data, size, _bufferPos, &_prevMask, 1); -} - -UInt32 CBCJ_x86_Decoder::SubFilter(Byte *data, UInt32 size) -{ - return (UInt32)::x86_Convert(data, size, _bufferPos, &_prevMask, 0); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.h deleted file mode 100644 index 58176600..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86.h +++ /dev/null @@ -1,21 +0,0 @@ -// x86.h - -#ifndef __X86_H -#define __X86_H - -#include "BranchCoder.h" -extern "C" -{ -#include "../../../../C/Compress/Branch/BranchX86.h" -} - -struct CBranch86 -{ - UInt32 _prevMask; - void x86Init() { x86_Convert_Init(_prevMask); } -}; - -MyClassB(BCJ_x86, 0x01, 3, CBranch86 , - virtual void SubInit() { x86Init(); }) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.cpp deleted file mode 100644 index 51176c98..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.cpp +++ /dev/null @@ -1,392 +0,0 @@ -// x86_2.cpp - -#include "StdAfx.h" -#include "x86_2.h" - -extern "C" -{ -#include "../../../../C/Alloc.h" -} - -namespace NCompress { -namespace NBcj2 { - -inline bool IsJcc(Byte b0, Byte b1) { return (b0 == 0x0F && (b1 & 0xF0) == 0x80); } -inline bool IsJ(Byte b0, Byte b1) { return ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)); } -inline unsigned GetIndex(Byte b0, Byte b1) { return ((b1 == 0xE8) ? b0 : ((b1 == 0xE9) ? 256 : 257)); } - -#ifndef EXTRACT_ONLY - -static const int kBufferSize = 1 << 17; - -static bool inline Test86MSByte(Byte b) -{ - return (b == 0 || b == 0xFF); -} - -bool CEncoder::Create() -{ - if (!_mainStream.Create(1 << 16)) - return false; - if (!_callStream.Create(1 << 20)) - return false; - if (!_jumpStream.Create(1 << 20)) - return false; - if (!_rangeEncoder.Create(1 << 20)) - return false; - if (_buffer == 0) - { - _buffer = (Byte *)MidAlloc(kBufferSize); - if (_buffer == 0) - return false; - } - return true; -} - -CEncoder::~CEncoder() -{ - ::MidFree(_buffer); -} - -HRESULT CEncoder::Flush() -{ - RINOK(_mainStream.Flush()); - RINOK(_callStream.Flush()); - RINOK(_jumpStream.Flush()); - _rangeEncoder.FlushData(); - return _rangeEncoder.FlushStream(); -} - -const UInt32 kDefaultLimit = (1 << 24); - -HRESULT CEncoder::CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != 1 || numOutStreams != 4) - return E_INVALIDARG; - - if (!Create()) - return E_OUTOFMEMORY; - - bool sizeIsDefined = false; - UInt64 inSize = 0; - if (inSizes != NULL) - if (inSizes[0] != NULL) - { - inSize = *inSizes[0]; - if (inSize <= kDefaultLimit) - sizeIsDefined = true; - } - - ISequentialInStream *inStream = inStreams[0]; - - _mainStream.SetStream(outStreams[0]); - _mainStream.Init(); - _callStream.SetStream(outStreams[1]); - _callStream.Init(); - _jumpStream.SetStream(outStreams[2]); - _jumpStream.Init(); - _rangeEncoder.SetStream(outStreams[3]); - _rangeEncoder.Init(); - for (int i = 0; i < 256 + 2; i++) - _statusEncoder[i].Init(); - CCoderReleaser releaser(this); - - CMyComPtr getSubStreamSize; - { - inStream->QueryInterface(IID_ICompressGetSubStreamSize, (void **)&getSubStreamSize); - } - - UInt32 nowPos = 0; - UInt64 nowPos64 = 0; - UInt32 bufferPos = 0; - - Byte prevByte = 0; - - UInt64 subStreamIndex = 0; - UInt64 subStreamStartPos = 0; - UInt64 subStreamEndPos = 0; - - for (;;) - { - UInt32 processedSize = 0; - for (;;) - { - UInt32 size = kBufferSize - (bufferPos + processedSize); - UInt32 processedSizeLoc; - if (size == 0) - break; - RINOK(inStream->Read(_buffer + bufferPos + processedSize, size, &processedSizeLoc)); - if (processedSizeLoc == 0) - break; - processedSize += processedSizeLoc; - } - UInt32 endPos = bufferPos + processedSize; - - if (endPos < 5) - { - // change it - for (bufferPos = 0; bufferPos < endPos; bufferPos++) - { - Byte b = _buffer[bufferPos]; - _mainStream.WriteByte(b); - UInt32 index; - if (b == 0xE8) - index = prevByte; - else if (b == 0xE9) - index = 256; - else if (IsJcc(prevByte, b)) - index = 257; - else - { - prevByte = b; - continue; - } - _statusEncoder[index].Encode(&_rangeEncoder, 0); - prevByte = b; - } - return Flush(); - } - - bufferPos = 0; - - UInt32 limit = endPos - 5; - while(bufferPos <= limit) - { - Byte b = _buffer[bufferPos]; - _mainStream.WriteByte(b); - if (!IsJ(prevByte, b)) - { - bufferPos++; - prevByte = b; - continue; - } - Byte nextByte = _buffer[bufferPos + 4]; - UInt32 src = - (UInt32(nextByte) << 24) | - (UInt32(_buffer[bufferPos + 3]) << 16) | - (UInt32(_buffer[bufferPos + 2]) << 8) | - (_buffer[bufferPos + 1]); - UInt32 dest = (nowPos + bufferPos + 5) + src; - // if (Test86MSByte(nextByte)) - bool convert; - if (getSubStreamSize != NULL) - { - UInt64 currentPos = (nowPos64 + bufferPos); - while (subStreamEndPos < currentPos) - { - UInt64 subStreamSize; - HRESULT result = getSubStreamSize->GetSubStreamSize(subStreamIndex, &subStreamSize); - if (result == S_OK) - { - subStreamStartPos = subStreamEndPos; - subStreamEndPos += subStreamSize; - subStreamIndex++; - } - else if (result == S_FALSE || result == E_NOTIMPL) - { - getSubStreamSize.Release(); - subStreamStartPos = 0; - subStreamEndPos = subStreamStartPos - 1; - } - else - return result; - } - if (getSubStreamSize == NULL) - { - if (sizeIsDefined) - convert = (dest < inSize); - else - convert = Test86MSByte(nextByte); - } - else if (subStreamEndPos - subStreamStartPos > kDefaultLimit) - convert = Test86MSByte(nextByte); - else - { - UInt64 dest64 = (currentPos + 5) + Int64(Int32(src)); - convert = (dest64 >= subStreamStartPos && dest64 < subStreamEndPos); - } - } - else if (sizeIsDefined) - convert = (dest < inSize); - else - convert = Test86MSByte(nextByte); - unsigned index = GetIndex(prevByte, b); - if (convert) - { - _statusEncoder[index].Encode(&_rangeEncoder, 1); - bufferPos += 5; - COutBuffer &s = (b == 0xE8) ? _callStream : _jumpStream; - for (int i = 24; i >= 0; i -= 8) - s.WriteByte((Byte)(dest >> i)); - prevByte = nextByte; - } - else - { - _statusEncoder[index].Encode(&_rangeEncoder, 0); - bufferPos++; - prevByte = b; - } - } - nowPos += bufferPos; - nowPos64 += bufferPos; - - if (progress != NULL) - { - /* - const UInt64 compressedSize = - _mainStream.GetProcessedSize() + - _callStream.GetProcessedSize() + - _jumpStream.GetProcessedSize() + - _rangeEncoder.GetProcessedSize(); - */ - RINOK(progress->SetRatioInfo(&nowPos64, NULL)); - } - - UInt32 i = 0; - while(bufferPos < endPos) - _buffer[i++] = _buffer[bufferPos++]; - bufferPos = i; - } -} - -STDMETHODIMP CEncoder::Code(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - try - { - return CodeReal(inStreams, inSizes, numInStreams, - outStreams, outSizes,numOutStreams, progress); - } - catch(const COutBufferException &e) { return e.ErrorCode; } - catch(...) { return S_FALSE; } -} - -#endif - -HRESULT CDecoder::CodeReal(ISequentialInStream **inStreams, - const UInt64 ** /* inSizes */, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 ** /* outSizes */, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - if (numInStreams != 4 || numOutStreams != 1) - return E_INVALIDARG; - - if (!_mainInStream.Create(1 << 16)) - return E_OUTOFMEMORY; - if (!_callStream.Create(1 << 20)) - return E_OUTOFMEMORY; - if (!_jumpStream.Create(1 << 16)) - return E_OUTOFMEMORY; - if (!_rangeDecoder.Create(1 << 20)) - return E_OUTOFMEMORY; - if (!_outStream.Create(1 << 16)) - return E_OUTOFMEMORY; - - _mainInStream.SetStream(inStreams[0]); - _callStream.SetStream(inStreams[1]); - _jumpStream.SetStream(inStreams[2]); - _rangeDecoder.SetStream(inStreams[3]); - _outStream.SetStream(outStreams[0]); - - _mainInStream.Init(); - _callStream.Init(); - _jumpStream.Init(); - _rangeDecoder.Init(); - _outStream.Init(); - - for (int i = 0; i < 256 + 2; i++) - _statusDecoder[i].Init(); - - CCoderReleaser releaser(this); - - Byte prevByte = 0; - UInt32 processedBytes = 0; - for (;;) - { - if (processedBytes >= (1 << 20) && progress != NULL) - { - /* - const UInt64 compressedSize = - _mainInStream.GetProcessedSize() + - _callStream.GetProcessedSize() + - _jumpStream.GetProcessedSize() + - _rangeDecoder.GetProcessedSize(); - */ - const UInt64 nowPos64 = _outStream.GetProcessedSize(); - RINOK(progress->SetRatioInfo(NULL, &nowPos64)); - processedBytes = 0; - } - UInt32 i; - Byte b = 0; - const UInt32 kBurstSize = (1 << 18); - for (i = 0; i < kBurstSize; i++) - { - if (!_mainInStream.ReadByte(b)) - return Flush(); - _outStream.WriteByte(b); - if (IsJ(prevByte, b)) - break; - prevByte = b; - } - processedBytes += i; - if (i == kBurstSize) - continue; - unsigned index = GetIndex(prevByte, b); - if (_statusDecoder[index].Decode(&_rangeDecoder) == 1) - { - UInt32 src = 0; - CInBuffer &s = (b == 0xE8) ? _callStream : _jumpStream; - for (int i = 0; i < 4; i++) - { - Byte b0; - if(!s.ReadByte(b0)) - return S_FALSE; - src <<= 8; - src |= ((UInt32)b0); - } - UInt32 dest = src - (UInt32(_outStream.GetProcessedSize()) + 4) ; - _outStream.WriteByte((Byte)(dest)); - _outStream.WriteByte((Byte)(dest >> 8)); - _outStream.WriteByte((Byte)(dest >> 16)); - _outStream.WriteByte((Byte)(dest >> 24)); - prevByte = (Byte)(dest >> 24); - processedBytes += 4; - } - else - prevByte = b; - } -} - -STDMETHODIMP CDecoder::Code(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress) -{ - try - { - return CodeReal(inStreams, inSizes, numInStreams, - outStreams, outSizes,numOutStreams, progress); - } - catch(const CInBufferException &e) { return e.ErrorCode; } - catch(const COutBufferException &e) { return e.ErrorCode; } - catch(...) { return S_FALSE; } -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.h deleted file mode 100644 index 2e4a5267..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Branch/x86_2.h +++ /dev/null @@ -1,123 +0,0 @@ -// x86_2.h - -#ifndef __BRANCH_X86_2_H -#define __BRANCH_X86_2_H - -#include "../../../Common/MyCom.h" -#include "../RangeCoder/RangeCoderBit.h" -#include "../../ICoder.h" - -namespace NCompress { -namespace NBcj2 { - -const int kNumMoveBits = 5; - -#ifndef EXTRACT_ONLY - -class CEncoder: - public ICompressCoder2, - public CMyUnknownImp -{ - Byte *_buffer; -public: - CEncoder(): _buffer(0) {}; - ~CEncoder(); - bool Create(); - - COutBuffer _mainStream; - COutBuffer _callStream; - COutBuffer _jumpStream; - NCompress::NRangeCoder::CEncoder _rangeEncoder; - NCompress::NRangeCoder::CBitEncoder _statusEncoder[256 + 2]; - - HRESULT Flush(); - void ReleaseStreams() - { - _mainStream.ReleaseStream(); - _callStream.ReleaseStream(); - _jumpStream.ReleaseStream(); - _rangeEncoder.ReleaseStream(); - } - - class CCoderReleaser - { - CEncoder *_coder; - public: - CCoderReleaser(CEncoder *coder): _coder(coder) {} - ~CCoderReleaser() { _coder->ReleaseStreams(); } - }; - -public: - - MY_UNKNOWN_IMP - - HRESULT CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); -}; - -#endif - -class CDecoder: - public ICompressCoder2, - public CMyUnknownImp -{ -public: - CInBuffer _mainInStream; - CInBuffer _callStream; - CInBuffer _jumpStream; - NCompress::NRangeCoder::CDecoder _rangeDecoder; - NCompress::NRangeCoder::CBitDecoder _statusDecoder[256 + 2]; - - COutBuffer _outStream; - - void ReleaseStreams() - { - _mainInStream.ReleaseStream(); - _callStream.ReleaseStream(); - _jumpStream.ReleaseStream(); - _rangeDecoder.ReleaseStream(); - _outStream.ReleaseStream(); - } - - HRESULT Flush() { return _outStream.Flush(); } - class CCoderReleaser - { - CDecoder *_coder; - public: - CCoderReleaser(CDecoder *coder): _coder(coder) {} - ~CCoderReleaser() { _coder->ReleaseStreams(); } - }; - -public: - MY_UNKNOWN_IMP - HRESULT CodeReal(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.cpp deleted file mode 100644 index 3f252f2c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// ByteSwap.cpp - -#include "StdAfx.h" - -#include "ByteSwap.h" - -STDMETHODIMP CByteSwap2::Init() { return S_OK; } - -STDMETHODIMP_(UInt32) CByteSwap2::Filter(Byte *data, UInt32 size) -{ - const UInt32 kStep = 2; - UInt32 i; - for (i = 0; i + kStep <= size; i += kStep) - { - Byte b = data[i]; - data[i] = data[i + 1]; - data[i + 1] = b; - } - return i; -} - -STDMETHODIMP CByteSwap4::Init() { return S_OK; } - -STDMETHODIMP_(UInt32) CByteSwap4::Filter(Byte *data, UInt32 size) -{ - const UInt32 kStep = 4; - UInt32 i; - for (i = 0; i + kStep <= size; i += kStep) - { - Byte b0 = data[i]; - Byte b1 = data[i + 1]; - data[i] = data[i + 3]; - data[i + 1] = data[i + 2]; - data[i + 2] = b1; - data[i + 3] = b0; - } - return i; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.h deleted file mode 100644 index 00303063..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwap.h +++ /dev/null @@ -1,37 +0,0 @@ -// ByteSwap.h - -#ifndef __BYTESWAP_H -#define __BYTESWAP_H - -#include "../../ICoder.h" -#include "Common/MyCom.h" - -// {23170F69-40C1-278B-0203-020000000000} -DEFINE_GUID(CLSID_CCompressConvertByteSwap2, -0x23170F69, 0x40C1, 0x278B, 0x02, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00); - -// {23170F69-40C1-278B-0203-040000000000} -DEFINE_GUID(CLSID_CCompressConvertByteSwap4, -0x23170F69, 0x40C1, 0x278B, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00); - -class CByteSwap2: - public ICompressFilter, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -class CByteSwap4: - public ICompressFilter, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP - STDMETHOD(Init)(); - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwapRegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwapRegister.cpp deleted file mode 100644 index b1cf8fa6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/ByteSwapRegister.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// ByteSwapRegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "ByteSwap.h" -static void *CreateCodec2() { return (void *)(ICompressFilter *)(new CByteSwap2); } -static void *CreateCodec4() { return (void *)(ICompressFilter *)(new CByteSwap4); } - -static CCodecInfo g_CodecsInfo[] = -{ - { CreateCodec2, CreateCodec4, 0x020302, L"Swap2", 1, true }, - { CreateCodec4, CreateCodec4, 0x020304, L"Swap4", 1, true } -}; - -REGISTER_CODECS(ByteSwap) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.h deleted file mode 100644 index e7fb6986..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/ByteSwap/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/CodecExports.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/CodecExports.cpp deleted file mode 100644 index a4a85b64..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/CodecExports.cpp +++ /dev/null @@ -1,157 +0,0 @@ -// CodecExports.cpp - -#include "StdAfx.h" - -#include "../../Common/ComTry.h" -#include "../../Windows/PropVariant.h" -#include "../Common/RegisterCodec.h" -#include "../ICoder.h" - -extern unsigned int g_NumCodecs; -extern const CCodecInfo *g_Codecs[]; - -static const UInt16 kDecodeId = 0x2790; - -DEFINE_GUID(CLSID_CCodec, -0x23170F69, 0x40C1, kDecodeId, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -static inline HRESULT SetPropString(const char *s, unsigned int size, PROPVARIANT *value) -{ - if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0) - value->vt = VT_BSTR; - return S_OK; -} - -static inline HRESULT SetPropGUID(const GUID &guid, PROPVARIANT *value) -{ - return SetPropString((const char *)&guid, sizeof(GUID), value); -} - -static HRESULT SetClassID(CMethodId id, bool encode, PROPVARIANT *value) -{ - GUID clsId = CLSID_CCodec; - for (int i = 0; i < sizeof(id); i++, id >>= 8) - clsId.Data4[i] = (Byte)(id & 0xFF); - if (encode) - clsId.Data3++; - return SetPropGUID(clsId, value); -} - -static HRESULT FindCodecClassId(const GUID *clsID, UInt32 isCoder2, bool isFilter, bool &encode, int &index) -{ - index = -1; - if (clsID->Data1 != CLSID_CCodec.Data1 || - clsID->Data2 != CLSID_CCodec.Data2 || - (clsID->Data3 & ~1) != kDecodeId) - return S_OK; - encode = (clsID->Data3 != kDecodeId); - UInt64 id = 0; - for (int j = 0; j < 8; j++) - id |= ((UInt64)clsID->Data4[j]) << (8 * j); - for (UInt32 i = 0; i < g_NumCodecs; i++) - { - const CCodecInfo &codec = *g_Codecs[i]; - if (id != codec.Id || encode && !codec.CreateEncoder || !encode && !codec.CreateDecoder) - continue; - if (!isFilter && codec.IsFilter || isFilter && !codec.IsFilter || - codec.NumInStreams != 1 && !isCoder2 || codec.NumInStreams == 1 && isCoder2) - return E_NOINTERFACE; - index = i; - return S_OK; - } - return S_OK; -} - -STDAPI CreateCoder2(bool encode, UInt32 index, const GUID *iid, void **outObject) -{ - COM_TRY_BEGIN - *outObject = 0; - bool isCoder = (*iid == IID_ICompressCoder) != 0; - bool isCoder2 = (*iid == IID_ICompressCoder2) != 0; - bool isFilter = (*iid == IID_ICompressFilter) != 0; - const CCodecInfo &codec = *g_Codecs[index]; - if (!isFilter && codec.IsFilter || isFilter && !codec.IsFilter || - codec.NumInStreams != 1 && !isCoder2 || codec.NumInStreams == 1 && isCoder2) - return E_NOINTERFACE; - if (encode) - { - if (!codec.CreateEncoder) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = codec.CreateEncoder(); - } - else - { - if (!codec.CreateDecoder) - return CLASS_E_CLASSNOTAVAILABLE; - *outObject = codec.CreateDecoder(); - } - if (isCoder) - ((ICompressCoder *)*outObject)->AddRef(); - else if (isCoder2) - ((ICompressCoder2 *)*outObject)->AddRef(); - else - ((ICompressFilter *)*outObject)->AddRef(); - return S_OK; - COM_TRY_END -} - -STDAPI CreateCoder(const GUID *clsid, const GUID *iid, void **outObject) -{ - *outObject = 0; - bool isCoder = (*iid == IID_ICompressCoder) != 0; - bool isCoder2 = (*iid == IID_ICompressCoder2) != 0; - bool isFilter = (*iid == IID_ICompressFilter) != 0; - if (!isCoder && !isCoder2 && !isFilter) - return E_NOINTERFACE; - bool encode; - int codecIndex; - HRESULT res = FindCodecClassId(clsid, isCoder2, isFilter, encode, codecIndex); - if (res != S_OK) - return res; - if (codecIndex < 0) - return CLASS_E_CLASSNOTAVAILABLE; - return CreateCoder2(encode, codecIndex, iid, outObject); -} - -STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value) -{ - ::VariantClear((VARIANTARG *)value); - const CCodecInfo &codec = *g_Codecs[codecIndex]; - switch(propID) - { - case NMethodPropID::kID: - { - value->uhVal.QuadPart = (UInt64)codec.Id; - value->vt = VT_UI8; - break; - } - case NMethodPropID::kName: - if ((value->bstrVal = ::SysAllocString(codec.Name)) != 0) - value->vt = VT_BSTR; - break; - case NMethodPropID::kDecoder: - if (codec.CreateDecoder) - return SetClassID(codec.Id, false, value); - break; - case NMethodPropID::kEncoder: - if (codec.CreateEncoder) - return SetClassID(codec.Id, true, value); - break; - case NMethodPropID::kInStreams: - { - if (codec.NumInStreams != 1) - { - value->vt = VT_UI4; - value->ulVal = codec.NumInStreams; - } - break; - } - } - return S_OK; -} - -STDAPI GetNumberOfMethods(UINT32 *numCodecs) -{ - *numCodecs = g_NumCodecs; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.cpp deleted file mode 100644 index 8e18db2b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Compress/CopyCoder.cpp - -#include "StdAfx.h" - -extern "C" -{ -#include "../../../../C/Alloc.h" -} - -#include "CopyCoder.h" -#include "../../Common/StreamUtils.h" - -namespace NCompress { - -static const UInt32 kBufferSize = 1 << 17; - -CCopyCoder::~CCopyCoder() -{ - ::MidFree(_buffer); -} - -STDMETHODIMP CCopyCoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - if (_buffer == 0) - { - _buffer = (Byte *)::MidAlloc(kBufferSize); - if (_buffer == 0) - return E_OUTOFMEMORY; - } - - TotalSize = 0; - for (;;) - { - UInt32 realProcessedSize; - UInt32 size = kBufferSize; - if (outSize != 0) - if (size > *outSize - TotalSize) - size = (UInt32)(*outSize - TotalSize); - RINOK(inStream->Read(_buffer, size, &realProcessedSize)); - if (realProcessedSize == 0) - break; - RINOK(WriteStream(outStream, _buffer, realProcessedSize, NULL)); - TotalSize += realProcessedSize; - if (progress != NULL) - { - RINOK(progress->SetRatioInfo(&TotalSize, &TotalSize)); - } - } - return S_OK; -} - -STDMETHODIMP CCopyCoder::GetInStreamProcessedSize(UInt64 *value) -{ - *value = TotalSize; - return S_OK; -} - -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.h deleted file mode 100644 index d4530697..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyCoder.h +++ /dev/null @@ -1,33 +0,0 @@ -// Compress/CopyCoder.h - -#ifndef __COMPRESS_COPYCODER_H -#define __COMPRESS_COPYCODER_H - -#include "../../ICoder.h" -#include "../../../Common/MyCom.h" - -namespace NCompress { - -class CCopyCoder: - public ICompressCoder, - public ICompressGetInStreamProcessedSize, - public CMyUnknownImp -{ - Byte *_buffer; -public: - UInt64 TotalSize; - CCopyCoder(): TotalSize(0) , _buffer(0) {}; - ~CCopyCoder(); - - MY_UNKNOWN_IMP1(ICompressGetInStreamProcessedSize) - - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyRegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyRegister.cpp deleted file mode 100644 index 1e688b7c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/CopyRegister.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// LZMARegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "CopyCoder.h" -static void *CreateCodec() { return (void *)(ICompressCoder *)(new NCompress::CCopyCoder); } - -static CCodecInfo g_CodecInfo = -{ CreateCodec, CreateCodec, 0x00, L"Copy", 1, false }; - -REGISTER_CODEC(Copy) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.h deleted file mode 100644 index 92239aeb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/Copy/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp deleted file mode 100644 index 9de2d06f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// LZOutWindow.cpp - -#include "StdAfx.h" - -#include "LZOutWindow.h" - -void CLZOutWindow::Init(bool solid) -{ - if(!solid) - COutBuffer::Init(); - #ifdef _NO_EXCEPTIONS - ErrorCode = S_OK; - #endif -} - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.h deleted file mode 100644 index 60b1b8af..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/LZOutWindow.h +++ /dev/null @@ -1,65 +0,0 @@ -// LZOutWindow.h - -#ifndef __LZ_OUT_WINDOW_H -#define __LZ_OUT_WINDOW_H - -#include "../../IStream.h" -#include "../../Common/OutBuffer.h" - -#ifndef _NO_EXCEPTIONS -typedef COutBufferException CLZOutWindowException; -#endif - -class CLZOutWindow: public COutBuffer -{ -public: - void Init(bool solid = false); - - // distance >= 0, len > 0, - bool CopyBlock(UInt32 distance, UInt32 len) - { - UInt32 pos = _pos - distance - 1; - if (distance >= _pos) - { - if (!_overDict || distance >= _bufferSize) - return false; - pos += _bufferSize; - } - if (_limitPos - _pos > len && _bufferSize - pos > len) - { - const Byte *src = _buffer + pos; - Byte *dest = _buffer + _pos; - _pos += len; - do - *dest++ = *src++; - while(--len != 0); - } - else do - { - if (pos == _bufferSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos == _limitPos) - FlushWithCheck(); - } - while(--len != 0); - return true; - } - - void PutByte(Byte b) - { - _buffer[_pos++] = b; - if (_pos == _limitPos) - FlushWithCheck(); - } - - Byte GetByte(UInt32 distance) const - { - UInt32 pos = _pos - distance - 1; - if (pos >= _bufferSize) - pos += _bufferSize; - return _buffer[pos]; - } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/StdAfx.h deleted file mode 100644 index 3ff6d8a2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZ/StdAfx.h +++ /dev/null @@ -1,6 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMA.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMA.h deleted file mode 100644 index 7bc4c438..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMA.h +++ /dev/null @@ -1,82 +0,0 @@ -// LZMA.h - -#ifndef __LZMA_H -#define __LZMA_H - -namespace NCompress { -namespace NLZMA { - -const UInt32 kNumRepDistances = 4; - -const int kNumStates = 12; - -const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; -const Byte kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; -const Byte kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; -const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; - -class CState -{ -public: - Byte Index; - void Init() { Index = 0; } - void UpdateChar() { Index = kLiteralNextStates[Index]; } - void UpdateMatch() { Index = kMatchNextStates[Index]; } - void UpdateRep() { Index = kRepNextStates[Index]; } - void UpdateShortRep() { Index = kShortRepNextStates[Index]; } - bool IsCharState() const { return Index < 7; } -}; - -const int kNumPosSlotBits = 6; -const int kDicLogSizeMin = 0; -const int kDicLogSizeMax = 32; -const int kDistTableSizeMax = kDicLogSizeMax * 2; - -const UInt32 kNumLenToPosStates = 4; - -inline UInt32 GetLenToPosState(UInt32 len) -{ - len -= 2; - if (len < kNumLenToPosStates) - return len; - return kNumLenToPosStates - 1; -} - -namespace NLength { - -const int kNumPosStatesBitsMax = 4; -const UInt32 kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - -const int kNumPosStatesBitsEncodingMax = 4; -const UInt32 kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - -const int kNumLowBits = 3; -const int kNumMidBits = 3; -const int kNumHighBits = 8; -const UInt32 kNumLowSymbols = 1 << kNumLowBits; -const UInt32 kNumMidSymbols = 1 << kNumMidBits; -const UInt32 kNumSymbolsTotal = kNumLowSymbols + kNumMidSymbols + (1 << kNumHighBits); - -} - -const UInt32 kMatchMinLen = 2; -const UInt32 kMatchMaxLen = kMatchMinLen + NLength::kNumSymbolsTotal - 1; - -const int kNumAlignBits = 4; -const UInt32 kAlignTableSize = 1 << kNumAlignBits; -const UInt32 kAlignMask = (kAlignTableSize - 1); - -const UInt32 kStartPosModelIndex = 4; -const UInt32 kEndPosModelIndex = 14; -const UInt32 kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - -const UInt32 kNumFullDistances = 1 << (kEndPosModelIndex / 2); - -const int kNumLitPosStatesBitsEncodingMax = 4; -const int kNumLitContextBitsMax = 8; - -const int kNumMoveBits = 5; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp deleted file mode 100644 index 1b73855c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.cpp +++ /dev/null @@ -1,338 +0,0 @@ -// LZMADecoder.cpp - -#include "StdAfx.h" - -#include "LZMADecoder.h" -#include "../../../Common/Defs.h" - -namespace NCompress { -namespace NLZMA { - -const int kLenIdFinished = -1; -const int kLenIdNeedInit = -2; - -void CDecoder::Init() -{ - { - for(int i = 0; i < kNumStates; i++) - { - for (UInt32 j = 0; j <= _posStateMask; j++) - { - _isMatch[i][j].Init(); - _isRep0Long[i][j].Init(); - } - _isRep[i].Init(); - _isRepG0[i].Init(); - _isRepG1[i].Init(); - _isRepG2[i].Init(); - } - } - { - for (UInt32 i = 0; i < kNumLenToPosStates; i++) - _posSlotDecoder[i].Init(); - } - { - for(UInt32 i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) - _posDecoders[i].Init(); - } - _posAlignDecoder.Init(); - _lenDecoder.Init(_posStateMask + 1); - _repMatchLenDecoder.Init(_posStateMask + 1); - _literalDecoder.Init(); - - _state.Init(); - _reps[0] = _reps[1] = _reps[2] = _reps[3] = 0; -} - -HRESULT CDecoder::CodeSpec(UInt32 curSize) -{ - if (_outSizeDefined) - { - const UInt64 rem = _outSize - _outWindowStream.GetProcessedSize(); - if (curSize > rem) - curSize = (UInt32)rem; - } - - if (_remainLen == kLenIdFinished) - return S_OK; - if (_remainLen == kLenIdNeedInit) - { - _rangeDecoder.Init(); - Init(); - _remainLen = 0; - } - if (curSize == 0) - return S_OK; - - UInt32 rep0 = _reps[0]; - UInt32 rep1 = _reps[1]; - UInt32 rep2 = _reps[2]; - UInt32 rep3 = _reps[3]; - CState state = _state; - Byte previousByte; - - while(_remainLen > 0 && curSize > 0) - { - previousByte = _outWindowStream.GetByte(rep0); - _outWindowStream.PutByte(previousByte); - _remainLen--; - curSize--; - } - UInt64 nowPos64 = _outWindowStream.GetProcessedSize(); - if (nowPos64 == 0) - previousByte = 0; - else - previousByte = _outWindowStream.GetByte(0); - - while(curSize > 0) - { - { - #ifdef _NO_EXCEPTIONS - if (_rangeDecoder.Stream.ErrorCode != S_OK) - return _rangeDecoder.Stream.ErrorCode; - #endif - if (_rangeDecoder.Stream.WasFinished()) - return S_FALSE; - UInt32 posState = UInt32(nowPos64) & _posStateMask; - if (_isMatch[state.Index][posState].Decode(&_rangeDecoder) == 0) - { - if(!state.IsCharState()) - previousByte = _literalDecoder.DecodeWithMatchByte(&_rangeDecoder, - (UInt32)nowPos64, previousByte, _outWindowStream.GetByte(rep0)); - else - previousByte = _literalDecoder.DecodeNormal(&_rangeDecoder, - (UInt32)nowPos64, previousByte); - _outWindowStream.PutByte(previousByte); - state.UpdateChar(); - curSize--; - nowPos64++; - } - else - { - UInt32 len; - if(_isRep[state.Index].Decode(&_rangeDecoder) == 1) - { - len = 0; - if(_isRepG0[state.Index].Decode(&_rangeDecoder) == 0) - { - if(_isRep0Long[state.Index][posState].Decode(&_rangeDecoder) == 0) - { - state.UpdateShortRep(); - len = 1; - } - } - else - { - UInt32 distance; - if(_isRepG1[state.Index].Decode(&_rangeDecoder) == 0) - distance = rep1; - else - { - if (_isRepG2[state.Index].Decode(&_rangeDecoder) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - if (len == 0) - { - len = _repMatchLenDecoder.Decode(&_rangeDecoder, posState) + kMatchMinLen; - state.UpdateRep(); - } - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = kMatchMinLen + _lenDecoder.Decode(&_rangeDecoder, posState); - state.UpdateMatch(); - UInt32 posSlot = _posSlotDecoder[GetLenToPosState(len)].Decode(&_rangeDecoder); - if (posSlot >= kStartPosModelIndex) - { - UInt32 numDirectBits = (posSlot >> 1) - 1; - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - - if (posSlot < kEndPosModelIndex) - rep0 += NRangeCoder::ReverseBitTreeDecode(_posDecoders + - rep0 - posSlot - 1, &_rangeDecoder, numDirectBits); - else - { - rep0 += (_rangeDecoder.DecodeDirectBits( - numDirectBits - kNumAlignBits) << kNumAlignBits); - rep0 += _posAlignDecoder.ReverseDecode(&_rangeDecoder); - if (rep0 == 0xFFFFFFFF) - { - _remainLen = kLenIdFinished; - return S_OK; - } - } - } - else - rep0 = posSlot; - } - UInt32 locLen = len; - if (len > curSize) - locLen = (UInt32)curSize; - if (!_outWindowStream.CopyBlock(rep0, locLen)) - return S_FALSE; - previousByte = _outWindowStream.GetByte(0); - curSize -= locLen; - nowPos64 += locLen; - len -= locLen; - if (len != 0) - { - _remainLen = (Int32)len; - break; - } - - #ifdef _NO_EXCEPTIONS - if (_outWindowStream.ErrorCode != S_OK) - return _outWindowStream.ErrorCode; - #endif - } - } - } - if (_rangeDecoder.Stream.WasFinished()) - return S_FALSE; - _reps[0] = rep0; - _reps[1] = rep1; - _reps[2] = rep2; - _reps[3] = rep3; - _state = state; - - return S_OK; -} - -STDMETHODIMP CDecoder::CodeReal(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - SetInStream(inStream); - _outWindowStream.SetStream(outStream); - SetOutStreamSize(outSize); - CDecoderFlusher flusher(this); - - for (;;) - { - UInt32 curSize = 1 << 18; - RINOK(CodeSpec(curSize)); - if (_remainLen == kLenIdFinished) - break; - if (progress != NULL) - { - UInt64 inSize = _rangeDecoder.GetProcessedSize(); - UInt64 nowPos64 = _outWindowStream.GetProcessedSize(); - RINOK(progress->SetRatioInfo(&inSize, &nowPos64)); - } - if (_outSizeDefined) - if (_outWindowStream.GetProcessedSize() >= _outSize) - break; - } - flusher.NeedFlush = false; - return Flush(); -} - - -#ifdef _NO_EXCEPTIONS - -#define LZMA_TRY_BEGIN -#define LZMA_TRY_END - -#else - -#define LZMA_TRY_BEGIN try { -#define LZMA_TRY_END } \ - catch(const CInBufferException &e) { return e.ErrorCode; } \ - catch(const CLZOutWindowException &e) { return e.ErrorCode; } \ - catch(...) { return S_FALSE; } - -#endif - - -STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - LZMA_TRY_BEGIN - return CodeReal(inStream, outStream, inSize, outSize, progress); - LZMA_TRY_END -} - -STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *properties, UInt32 size) -{ - if (size < 5) - return E_INVALIDARG; - int lc = properties[0] % 9; - Byte remainder = (Byte)(properties[0] / 9); - int lp = remainder % 5; - int pb = remainder / 5; - if (pb > NLength::kNumPosStatesBitsMax) - return E_INVALIDARG; - _posStateMask = (1 << pb) - 1; - UInt32 dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((UInt32)(properties[1 + i])) << (i * 8); - if (!_outWindowStream.Create(dictionarySize)) - return E_OUTOFMEMORY; - if (!_literalDecoder.Create(lp, lc)) - return E_OUTOFMEMORY; - if (!_rangeDecoder.Create(1 << 20)) - return E_OUTOFMEMORY; - return S_OK; -} - -STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value) -{ - *value = _rangeDecoder.GetProcessedSize(); - return S_OK; -} - -STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream) -{ - _rangeDecoder.SetStream(inStream); - return S_OK; -} - -STDMETHODIMP CDecoder::ReleaseInStream() -{ - _rangeDecoder.ReleaseStream(); - return S_OK; -} - -STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize) -{ - _outSizeDefined = (outSize != NULL); - if (_outSizeDefined) - _outSize = *outSize; - _remainLen = kLenIdNeedInit; - _outWindowStream.Init(); - return S_OK; -} - -#ifndef NO_READ_FROM_CODER - -STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - LZMA_TRY_BEGIN - if (processedSize) - *processedSize = 0; - const UInt64 startPos = _outWindowStream.GetProcessedSize(); - _outWindowStream.SetMemStream((Byte *)data); - RINOK(CodeSpec(size)); - if (processedSize) - *processedSize = (UInt32)(_outWindowStream.GetProcessedSize() - startPos); - return Flush(); - LZMA_TRY_END -} - -#endif - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.h deleted file mode 100644 index bc44a5a9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMADecoder.h +++ /dev/null @@ -1,255 +0,0 @@ -// LZMA/Decoder.h - -#ifndef __LZMA_DECODER_H -#define __LZMA_DECODER_H - -#include "../../../Common/MyCom.h" -#include "../../ICoder.h" -#include "../LZ/LZOutWindow.h" -#include "../RangeCoder/RangeCoderBitTree.h" - -extern "C" -{ - #include "../../../../C/Alloc.h" -} - -#include "LZMA.h" - -namespace NCompress { -namespace NLZMA { - -typedef NRangeCoder::CBitDecoder CMyBitDecoder; - -class CLiteralDecoder2 -{ - CMyBitDecoder _decoders[0x300]; -public: - void Init() - { - for (int i = 0; i < 0x300; i++) - _decoders[i].Init(); - } - Byte DecodeNormal(NRangeCoder::CDecoder *rangeDecoder) - { - UInt32 symbol = 1; - RC_INIT_VAR - do - { - // symbol = (symbol << 1) | _decoders[0][symbol].Decode(rangeDecoder); - RC_GETBIT(kNumMoveBits, _decoders[symbol].Prob, symbol) - } - while (symbol < 0x100); - RC_FLUSH_VAR - return (Byte)symbol; - } - Byte DecodeWithMatchByte(NRangeCoder::CDecoder *rangeDecoder, Byte matchByte) - { - UInt32 symbol = 1; - RC_INIT_VAR - do - { - UInt32 matchBit = (matchByte >> 7) & 1; - matchByte <<= 1; - // UInt32 bit = _decoders[1 + matchBit][symbol].Decode(rangeDecoder); - // symbol = (symbol << 1) | bit; - UInt32 bit; - RC_GETBIT2(kNumMoveBits, _decoders[0x100 + (matchBit << 8) + symbol].Prob, symbol, - bit = 0, bit = 1) - if (matchBit != bit) - { - while (symbol < 0x100) - { - // symbol = (symbol << 1) | _decoders[0][symbol].Decode(rangeDecoder); - RC_GETBIT(kNumMoveBits, _decoders[symbol].Prob, symbol) - } - break; - } - } - while (symbol < 0x100); - RC_FLUSH_VAR - return (Byte)symbol; - } -}; - -class CLiteralDecoder -{ - CLiteralDecoder2 *_coders; - int _numPrevBits; - int _numPosBits; - UInt32 _posMask; -public: - CLiteralDecoder(): _coders(0) {} - ~CLiteralDecoder() { Free(); } - void Free() - { - MyFree(_coders); - _coders = 0; - } - bool Create(int numPosBits, int numPrevBits) - { - if (_coders == 0 || (numPosBits + numPrevBits) != - (_numPrevBits + _numPosBits) ) - { - Free(); - UInt32 numStates = 1 << (numPosBits + numPrevBits); - _coders = (CLiteralDecoder2 *)MyAlloc(numStates * sizeof(CLiteralDecoder2)); - } - _numPosBits = numPosBits; - _posMask = (1 << numPosBits) - 1; - _numPrevBits = numPrevBits; - return (_coders != 0); - } - void Init() - { - UInt32 numStates = 1 << (_numPrevBits + _numPosBits); - for (UInt32 i = 0; i < numStates; i++) - _coders[i].Init(); - } - UInt32 GetState(UInt32 pos, Byte prevByte) const - { return ((pos & _posMask) << _numPrevBits) + (prevByte >> (8 - _numPrevBits)); } - Byte DecodeNormal(NRangeCoder::CDecoder *rangeDecoder, UInt32 pos, Byte prevByte) - { return _coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); } - Byte DecodeWithMatchByte(NRangeCoder::CDecoder *rangeDecoder, UInt32 pos, Byte prevByte, Byte matchByte) - { return _coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); } -}; - -namespace NLength { - -class CDecoder -{ - CMyBitDecoder _choice; - CMyBitDecoder _choice2; - NRangeCoder::CBitTreeDecoder _lowCoder[kNumPosStatesMax]; - NRangeCoder::CBitTreeDecoder _midCoder[kNumPosStatesMax]; - NRangeCoder::CBitTreeDecoder _highCoder; -public: - void Init(UInt32 numPosStates) - { - _choice.Init(); - _choice2.Init(); - for (UInt32 posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - UInt32 Decode(NRangeCoder::CDecoder *rangeDecoder, UInt32 posState) - { - if(_choice.Decode(rangeDecoder) == 0) - return _lowCoder[posState].Decode(rangeDecoder); - if(_choice2.Decode(rangeDecoder) == 0) - return kNumLowSymbols + _midCoder[posState].Decode(rangeDecoder); - return kNumLowSymbols + kNumMidSymbols + _highCoder.Decode(rangeDecoder); - } -}; - -} - -class CDecoder: - public ICompressCoder, - public ICompressSetDecoderProperties2, - public ICompressGetInStreamProcessedSize, - #ifndef NO_READ_FROM_CODER - public ICompressSetInStream, - public ICompressSetOutStreamSize, - public ISequentialInStream, - #endif - public CMyUnknownImp -{ - CLZOutWindow _outWindowStream; - NRangeCoder::CDecoder _rangeDecoder; - - CMyBitDecoder _isMatch[kNumStates][NLength::kNumPosStatesMax]; - CMyBitDecoder _isRep[kNumStates]; - CMyBitDecoder _isRepG0[kNumStates]; - CMyBitDecoder _isRepG1[kNumStates]; - CMyBitDecoder _isRepG2[kNumStates]; - CMyBitDecoder _isRep0Long[kNumStates][NLength::kNumPosStatesMax]; - - NRangeCoder::CBitTreeDecoder _posSlotDecoder[kNumLenToPosStates]; - - CMyBitDecoder _posDecoders[kNumFullDistances - kEndPosModelIndex]; - NRangeCoder::CBitTreeDecoder _posAlignDecoder; - - NLength::CDecoder _lenDecoder; - NLength::CDecoder _repMatchLenDecoder; - - CLiteralDecoder _literalDecoder; - - UInt32 _posStateMask; - - /////////////////// - // State - UInt32 _reps[4]; - CState _state; - Int32 _remainLen; // -1 means end of stream. // -2 means need Init - UInt64 _outSize; - bool _outSizeDefined; - - void Init(); - HRESULT CodeSpec(UInt32 size); -public: - - #ifndef NO_READ_FROM_CODER - MY_UNKNOWN_IMP5( - ICompressSetDecoderProperties2, - ICompressGetInStreamProcessedSize, - ICompressSetInStream, - ICompressSetOutStreamSize, - ISequentialInStream) - #else - MY_UNKNOWN_IMP2( - ICompressSetDecoderProperties2, - ICompressGetInStreamProcessedSize) - #endif - - void ReleaseStreams() - { - _outWindowStream.ReleaseStream(); - ReleaseInStream(); - } - - class CDecoderFlusher - { - CDecoder *_decoder; - public: - bool NeedFlush; - CDecoderFlusher(CDecoder *decoder): _decoder(decoder), NeedFlush(true) {} - ~CDecoderFlusher() - { - if (NeedFlush) - _decoder->Flush(); - _decoder->ReleaseStreams(); - } - }; - - HRESULT Flush() { return _outWindowStream.Flush(); } - - STDMETHOD(CodeReal)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); - - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); - - STDMETHOD(SetInStream)(ISequentialInStream *inStream); - STDMETHOD(ReleaseInStream)(); - STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); - - #ifndef NO_READ_FROM_CODER - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); - #endif - - CDecoder(): _outSizeDefined(false) {} - virtual ~CDecoder() {} -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp deleted file mode 100644 index 021099d8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.cpp +++ /dev/null @@ -1,1547 +0,0 @@ -// LZMA/Encoder.cpp - -#include "StdAfx.h" - -#include - -#ifdef _WIN32 -#define USE_ALLOCA -#endif - -#ifdef USE_ALLOCA -#ifdef _WIN32 -#include -#else -#include -#endif -#endif - -#include "../../../Common/Defs.h" -#include "../../Common/StreamUtils.h" - -#include "LZMAEncoder.h" - -// extern "C" { #include "../../../../C/7zCrc.h" } - -// #define SHOW_STAT - - -namespace NCompress { -namespace NLZMA { - -// struct CCrcInit { CCrcInit() { InitCrcTable(); } } g_CrcInit; - -const int kDefaultDictionaryLogSize = 22; -const UInt32 kNumFastBytesDefault = 0x20; - -#ifndef LZMA_LOG_BSR -Byte g_FastPos[1 << kNumLogBits]; - -class CFastPosInit -{ -public: - CFastPosInit() { Init(); } - void Init() - { - const Byte kFastSlots = kNumLogBits * 2; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - - for (Byte slotFast = 2; slotFast < kFastSlots; slotFast++) - { - UInt32 k = (1 << ((slotFast >> 1) - 1)); - for (UInt32 j = 0; j < k; j++, c++) - g_FastPos[c] = slotFast; - } - } -} g_FastPosInit; -#endif - -void CLiteralEncoder2::Encode(NRangeCoder::CEncoder *rangeEncoder, Byte symbol) -{ - UInt32 context = 1; - int i = 8; - do - { - i--; - UInt32 bit = (symbol >> i) & 1; - _encoders[context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - while(i != 0); -} - -void CLiteralEncoder2::EncodeMatched(NRangeCoder::CEncoder *rangeEncoder, - Byte matchByte, Byte symbol) -{ - UInt32 context = 1; - int i = 8; - do - { - i--; - UInt32 bit = (symbol >> i) & 1; - UInt32 matchBit = (matchByte >> i) & 1; - _encoders[0x100 + (matchBit << 8) + context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - while(i != 0) - { - i--; - UInt32 bit = (symbol >> i) & 1; - _encoders[context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - break; - } - } - while(i != 0); -} - -UInt32 CLiteralEncoder2::GetPrice(bool matchMode, Byte matchByte, Byte symbol) const -{ - UInt32 price = 0; - UInt32 context = 1; - int i = 8; - if (matchMode) - { - do - { - i--; - UInt32 matchBit = (matchByte >> i) & 1; - UInt32 bit = (symbol >> i) & 1; - price += _encoders[0x100 + (matchBit << 8) + context].GetPrice(bit); - context = (context << 1) | bit; - if (matchBit != bit) - break; - } - while (i != 0); - } - while(i != 0) - { - i--; - UInt32 bit = (symbol >> i) & 1; - price += _encoders[context].GetPrice(bit); - context = (context << 1) | bit; - } - return price; -}; - - -namespace NLength { - -void CEncoder::Init(UInt32 numPosStates) -{ - _choice.Init(); - _choice2.Init(); - for (UInt32 posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); -} - -void CEncoder::Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState) -{ - if(symbol < kNumLowSymbols) - { - _choice.Encode(rangeEncoder, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - _choice.Encode(rangeEncoder, 1); - if(symbol < kNumLowSymbols + kNumMidSymbols) - { - _choice2.Encode(rangeEncoder, 0); - _midCoder[posState].Encode(rangeEncoder, symbol - kNumLowSymbols); - } - else - { - _choice2.Encode(rangeEncoder, 1); - _highCoder.Encode(rangeEncoder, symbol - kNumLowSymbols - kNumMidSymbols); - } - } -} - -void CEncoder::SetPrices(UInt32 posState, UInt32 numSymbols, UInt32 *prices) const -{ - UInt32 a0 = _choice.GetPrice0(); - UInt32 a1 = _choice.GetPrice1(); - UInt32 b0 = a1 + _choice2.GetPrice0(); - UInt32 b1 = a1 + _choice2.GetPrice1(); - UInt32 i = 0; - for (i = 0; i < kNumLowSymbols; i++) - { - if (i >= numSymbols) - return; - prices[i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < kNumLowSymbols + kNumMidSymbols; i++) - { - if (i >= numSymbols) - return; - prices[i] = b0 + _midCoder[posState].GetPrice(i - kNumLowSymbols); - } - for (; i < numSymbols; i++) - prices[i] = b1 + _highCoder.GetPrice(i - kNumLowSymbols - kNumMidSymbols); -} - -} - -CEncoder::CEncoder(): - _numFastBytes(kNumFastBytesDefault), - _distTableSize(kDefaultDictionaryLogSize * 2), - _posStateBits(2), - _posStateMask(4 - 1), - _numLiteralPosStateBits(0), - _numLiteralContextBits(3), - _dictionarySize(1 << kDefaultDictionaryLogSize), - _matchFinderCycles(0), - #ifdef COMPRESS_MF_MT - _multiThread(false), - #endif - _writeEndMark(false) -{ - MatchFinder_Construct(&_matchFinderBase); - // _maxMode = false; - _fastMode = false; - #ifdef COMPRESS_MF_MT - MatchFinderMt_Construct(&_matchFinderMt); - _matchFinderMt.MatchFinder = &_matchFinderBase; - #endif -} - - -static void *SzAlloc(size_t size) { return BigAlloc(size); } -static void SzFree(void *address) { BigFree(address); } -ISzAlloc g_Alloc = { SzAlloc, SzFree }; - -CEncoder::~CEncoder() -{ - #ifdef COMPRESS_MF_MT - MatchFinderMt_Destruct(&_matchFinderMt, &g_Alloc); - #endif - MatchFinder_Free(&_matchFinderBase, &g_Alloc); -} - -static const UInt32 kBigHashDicLimit = (UInt32)1 << 24; - -HRESULT CEncoder::Create() -{ - if (!_rangeEncoder.Create(1 << 20)) - return E_OUTOFMEMORY; - bool btMode = (_matchFinderBase.btMode != 0); - #ifdef COMPRESS_MF_MT - _mtMode = (_multiThread && !_fastMode && btMode); - #endif - - if (!_literalEncoder.Create(_numLiteralPosStateBits, _numLiteralContextBits)) - return E_OUTOFMEMORY; - - _matchFinderBase.bigHash = (_dictionarySize > kBigHashDicLimit); - - UInt32 numCycles = 16 + (_numFastBytes >> 1); - if (!btMode) - numCycles >>= 1; - if (_matchFinderCycles != 0) - numCycles = _matchFinderCycles; - _matchFinderBase.cutValue = numCycles; - #ifdef COMPRESS_MF_MT - if (_mtMode) - { - RINOK(MatchFinderMt_Create(&_matchFinderMt, _dictionarySize, kNumOpts, _numFastBytes, kMatchMaxLen, &g_Alloc)); - _matchFinderObj = &_matchFinderMt; - MatchFinderMt_CreateVTable(&_matchFinderMt, &_matchFinder); - } - else - #endif - { - if (!MatchFinder_Create(&_matchFinderBase, _dictionarySize, kNumOpts, _numFastBytes, kMatchMaxLen, &g_Alloc)) - return E_OUTOFMEMORY; - _matchFinderObj = &_matchFinderBase; - MatchFinder_CreateVTable(&_matchFinderBase, &_matchFinder); - } - return S_OK; -} - -inline wchar_t GetUpperChar(wchar_t c) -{ - if (c >= 'a' && c <= 'z') - c -= 0x20; - return c; -} - -static int ParseMatchFinder(const wchar_t *s, int *btMode, UInt32 *numHashBytes /* , int *skipModeBits */) -{ - wchar_t c = GetUpperChar(*s++); - if (c == L'H') - { - if (GetUpperChar(*s++) != L'C') - return 0; - int numHashBytesLoc = (int)(*s++ - L'0'); - if (numHashBytesLoc < 4 || numHashBytesLoc > 4) - return 0; - if (*s++ != 0) - return 0; - *btMode = 0; - *numHashBytes = numHashBytesLoc; - return 1; - } - if (c != L'B') - return 0; - - if (GetUpperChar(*s++) != L'T') - return 0; - int numHashBytesLoc = (int)(*s++ - L'0'); - if (numHashBytesLoc < 2 || numHashBytesLoc > 4) - return 0; - c = GetUpperChar(*s++); - /* - int skipModeBitsLoc = 0; - if (c == L'D') - { - skipModeBitsLoc = 2; - c = GetUpperChar(*s++); - } - */ - if (c != L'\0') - return 0; - *btMode = 1; - *numHashBytes = numHashBytesLoc; - // *skipModeBits = skipModeBitsLoc; - return 1; -} - -STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties) -{ - for (UInt32 i = 0; i < numProperties; i++) - { - const PROPVARIANT &prop = properties[i]; - switch(propIDs[i]) - { - case NCoderPropID::kNumFastBytes: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 numFastBytes = prop.ulVal; - if(numFastBytes < 5 || numFastBytes > kMatchMaxLen) - return E_INVALIDARG; - _numFastBytes = numFastBytes; - break; - } - case NCoderPropID::kMatchFinderCycles: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - _matchFinderCycles = prop.ulVal; - break; - } - case NCoderPropID::kAlgorithm: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 maximize = prop.ulVal; - _fastMode = (maximize == 0); - // _maxMode = (maximize >= 2); - break; - } - case NCoderPropID::kMatchFinder: - { - if (prop.vt != VT_BSTR) - return E_INVALIDARG; - if (!ParseMatchFinder(prop.bstrVal, &_matchFinderBase.btMode, &_matchFinderBase.numHashBytes /* , &_matchFinderBase.skipModeBits */)) - return E_INVALIDARG; - break; - } - case NCoderPropID::kMultiThread: - { - if (prop.vt != VT_BOOL) - return E_INVALIDARG; - #ifdef COMPRESS_MF_MT - Bool newMultiThread = (prop.boolVal == VARIANT_TRUE); - if (newMultiThread != _multiThread) - { - ReleaseMatchFinder(); - _multiThread = newMultiThread; - } - #endif - break; - } - case NCoderPropID::kNumThreads: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - #ifdef COMPRESS_MF_MT - Bool newMultiThread = (prop.ulVal > 1) ? True : False; - if (newMultiThread != _multiThread) - { - ReleaseMatchFinder(); - _multiThread = newMultiThread; - } - #endif - break; - } - case NCoderPropID::kDictionarySize: - { - const int kDicLogSizeMaxCompress = 30; // must be <= ((kNumLogBits - 1) * 2) + 7 = 31; - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 dictionarySize = prop.ulVal; - if (dictionarySize < UInt32(1 << kDicLogSizeMin) || - dictionarySize > UInt32(1 << kDicLogSizeMaxCompress)) - return E_INVALIDARG; - _dictionarySize = dictionarySize; - UInt32 dicLogSize; - for(dicLogSize = 0; dicLogSize < (UInt32)kDicLogSizeMaxCompress; dicLogSize++) - if (dictionarySize <= (UInt32(1) << dicLogSize)) - break; - _distTableSize = dicLogSize * 2; - break; - } - case NCoderPropID::kPosStateBits: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 value = prop.ulVal; - if (value > (UInt32)NLength::kNumPosStatesBitsEncodingMax) - return E_INVALIDARG; - _posStateBits = value; - _posStateMask = (1 << _posStateBits) - 1; - break; - } - case NCoderPropID::kLitPosBits: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 value = prop.ulVal; - if (value > (UInt32)kNumLitPosStatesBitsEncodingMax) - return E_INVALIDARG; - _numLiteralPosStateBits = value; - break; - } - case NCoderPropID::kLitContextBits: - { - if (prop.vt != VT_UI4) - return E_INVALIDARG; - UInt32 value = prop.ulVal; - if (value > (UInt32)kNumLitContextBitsMax) - return E_INVALIDARG; - _numLiteralContextBits = value; - break; - } - case NCoderPropID::kEndMarker: - { - if (prop.vt != VT_BOOL) - return E_INVALIDARG; - SetWriteEndMarkerMode(prop.boolVal == VARIANT_TRUE); - break; - } - default: - return E_INVALIDARG; - } - } - return S_OK; -} - -STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream) -{ - const UInt32 kPropSize = 5; - Byte properties[kPropSize]; - properties[0] = (Byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = Byte(_dictionarySize >> (8 * i)); - return WriteStream(outStream, properties, kPropSize, NULL); -} - -STDMETHODIMP CEncoder::SetOutStream(ISequentialOutStream *outStream) -{ - _rangeEncoder.SetStream(outStream); - return S_OK; -} - -STDMETHODIMP CEncoder::ReleaseOutStream() -{ - _rangeEncoder.ReleaseStream(); - return S_OK; -} - -HRESULT CEncoder::Init() -{ - CBaseState::Init(); - - _rangeEncoder.Init(); - - for(int i = 0; i < kNumStates; i++) - { - for (UInt32 j = 0; j <= _posStateMask; j++) - { - _isMatch[i][j].Init(); - _isRep0Long[i][j].Init(); - } - _isRep[i].Init(); - _isRepG0[i].Init(); - _isRepG1[i].Init(); - _isRepG2[i].Init(); - } - - _literalEncoder.Init(); - - { - for(UInt32 i = 0; i < kNumLenToPosStates; i++) - _posSlotEncoder[i].Init(); - } - { - for(UInt32 i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) - _posEncoders[i].Init(); - } - - _lenEncoder.Init(1 << _posStateBits); - _repMatchLenEncoder.Init(1 << _posStateBits); - - _posAlignEncoder.Init(); - - _longestMatchWasFound = false; - _optimumEndIndex = 0; - _optimumCurrentIndex = 0; - _additionalOffset = 0; - - return S_OK; -} - -#ifdef SHOW_STAT -static int ttt = 0; -#endif - -void CEncoder::MovePos(UInt32 num) -{ - #ifdef SHOW_STAT - ttt += num; - printf("\n MovePos %d", num); - #endif - if (num != 0) - { - _additionalOffset += num; - _matchFinder.Skip(_matchFinderObj, num); - } -} - -UInt32 CEncoder::Backward(UInt32 &backRes, UInt32 cur) -{ - _optimumEndIndex = cur; - UInt32 posMem = _optimum[cur].PosPrev; - UInt32 backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - UInt32 posPrev = posMem; - UInt32 backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while(cur != 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; -} - -/* -Out: - (lenRes == 1) && (backRes == 0xFFFFFFFF) means Literal -*/ - -UInt32 CEncoder::GetOptimum(UInt32 position, UInt32 &backRes) -{ - if(_optimumEndIndex != _optimumCurrentIndex) - { - const COptimal &optimum = _optimum[_optimumCurrentIndex]; - UInt32 lenRes = optimum.PosPrev - _optimumCurrentIndex; - backRes = optimum.BackPrev; - _optimumCurrentIndex = optimum.PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - UInt32 numAvailableBytes = _matchFinder.GetNumAvailableBytes(_matchFinderObj); - - UInt32 lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - lenMain = ReadMatchDistances(numDistancePairs); - } - else - { - lenMain = _longestMatchLength; - numDistancePairs = _numDistancePairs; - _longestMatchWasFound = false; - } - - const Byte *data = _matchFinder.GetPointerToCurrentPos(_matchFinderObj) - 1; - if (numAvailableBytes < 2) - { - backRes = (UInt32)(-1); - return 1; - } - if (numAvailableBytes > kMatchMaxLen) - numAvailableBytes = kMatchMaxLen; - - UInt32 reps[kNumRepDistances]; - UInt32 repLens[kNumRepDistances]; - UInt32 repMaxIndex = 0; - UInt32 i; - for(i = 0; i < kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - const Byte *data2 = data - (reps[i] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - { - repLens[i] = 0; - continue; - } - UInt32 lenTest; - for (lenTest = 2; lenTest < numAvailableBytes && data[lenTest] == data2[lenTest]; lenTest++); - repLens[i] = lenTest; - if (lenTest > repLens[repMaxIndex]) - repMaxIndex = i; - } - if(repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - UInt32 lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - UInt32 *matchDistances = _matchDistances; - if(lenMain >= _numFastBytes) - { - backRes = matchDistances[numDistancePairs - 1] + kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - Byte currentByte = *data; - Byte matchByte = *(data - (reps[0] + 1)); - - if(lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = (UInt32)-1; - return 1; - } - - _optimum[0].State = _state; - - UInt32 posState = (position & _posStateMask); - - _optimum[1].Price = _isMatch[_state.Index][posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _previousByte)->GetPrice(!_state.IsCharState(), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - UInt32 matchPrice = _isMatch[_state.Index][posState].GetPrice1(); - UInt32 repMatchPrice = matchPrice + _isRep[_state.Index].GetPrice1(); - - if(matchByte == currentByte) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if(shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - UInt32 lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if(lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - for (i = 0; i < kNumRepDistances; i++) - _optimum[0].Backs[i] = reps[i]; - - UInt32 len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for(i = 0; i < kNumRepDistances; i++) - { - UInt32 repLen = repLens[i]; - if (repLen < 2) - continue; - UInt32 price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - UInt32 curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - COptimal &optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while(--repLen >= 2); - } - - UInt32 normalMatchPrice = matchPrice + _isRep[_state.Index].GetPrice0(); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - UInt32 offs = 0; - while (len > matchDistances[offs]) - offs += 2; - for(; ; len++) - { - UInt32 distance = matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - COptimal &optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - UInt32 cur = 0; - - for (;;) - { - cur++; - if(cur == lenEnd) - { - return Backward(backRes, cur); - } - UInt32 numAvailableBytesFull = _matchFinder.GetNumAvailableBytes(_matchFinderObj); - UInt32 newLen, numDistancePairs; - newLen = ReadMatchDistances(numDistancePairs); - if(newLen >= _numFastBytes) - { - _numDistancePairs = numDistancePairs; - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(backRes, cur); - } - position++; - COptimal &curOptimum = _optimum[cur]; - UInt32 posPrev = curOptimum.PosPrev; - CState state; - if (curOptimum.Prev1IsChar) - { - posPrev--; - if (curOptimum.Prev2) - { - state = _optimum[curOptimum.PosPrev2].State; - if (curOptimum.BackPrev2 < kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - else - state = _optimum[posPrev].State; - state.UpdateChar(); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (curOptimum.IsShortRep()) - state.UpdateShortRep(); - else - state.UpdateChar(); - } - else - { - UInt32 pos; - if (curOptimum.Prev1IsChar && curOptimum.Prev2) - { - posPrev = curOptimum.PosPrev2; - pos = curOptimum.BackPrev2; - state.UpdateRep(); - } - else - { - pos = curOptimum.BackPrev; - if (pos < kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - const COptimal &prevOptimum = _optimum[posPrev]; - if (pos < kNumRepDistances) - { - reps[0] = prevOptimum.Backs[pos]; - UInt32 i; - for(i = 1; i <= pos; i++) - reps[i] = prevOptimum.Backs[i - 1]; - for(; i < kNumRepDistances; i++) - reps[i] = prevOptimum.Backs[i]; - } - else - { - reps[0] = (pos - kNumRepDistances); - for(UInt32 i = 1; i < kNumRepDistances; i++) - reps[i] = prevOptimum.Backs[i - 1]; - } - } - curOptimum.State = state; - for(UInt32 i = 0; i < kNumRepDistances; i++) - curOptimum.Backs[i] = reps[i]; - UInt32 curPrice = curOptimum.Price; - const Byte *data = _matchFinder.GetPointerToCurrentPos(_matchFinderObj) - 1; - const Byte currentByte = *data; - const Byte matchByte = *(data - (reps[0] + 1)); - - UInt32 posState = (position & _posStateMask); - - UInt32 curAnd1Price = curPrice + - _isMatch[state.Index][posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, *(data - 1))->GetPrice(!state.IsCharState(), matchByte, currentByte); - - COptimal &nextOptimum = _optimum[cur + 1]; - - bool nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - UInt32 matchPrice = curPrice + _isMatch[state.Index][posState].GetPrice1(); - UInt32 repMatchPrice = matchPrice + _isRep[state.Index].GetPrice1(); - - if(matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if(shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - /* - if(newLen == 2 && matchDistances[2] >= kDistLimit2) // test it maybe set 2000 ? - continue; - */ - - numAvailableBytesFull = MyMin(kNumOpts - 1 - cur, numAvailableBytesFull); - UInt32 numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) // speed optimization - { - // try Literal + rep0 - const Byte *data2 = data - (reps[0] + 1); - UInt32 limit = MyMin(numAvailableBytesFull, _numFastBytes + 1); - UInt32 temp; - for (temp = 1; temp < limit && data[temp] == data2[temp]; temp++); - UInt32 lenTest2 = temp - 1; - if (lenTest2 >= 2) - { - CState state2 = state; - state2.UpdateChar(); - UInt32 posStateNext = (position + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAnd1Price + - _isMatch[state2.Index][posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - // for (; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = cur + 1 + lenTest2; - while(lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - COptimal &optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - UInt32 startLen = 2; // speed optimization - for(UInt32 repIndex = 0; repIndex < kNumRepDistances; repIndex++) - { - // UInt32 repLen = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], newLen); // test it; - const Byte *data2 = data - (reps[repIndex] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - continue; - UInt32 lenTest; - for (lenTest = 2; lenTest < numAvailableBytes && data[lenTest] == data2[lenTest]; lenTest++); - while(lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 lenTestTemp = lenTest; - UInt32 price = repMatchPrice + GetPureRepPrice(repIndex, state, posState); - do - { - UInt32 curAndLenPrice = price + _repMatchLenEncoder.GetPrice(lenTest - 2, posState); - COptimal &optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while(--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - { - UInt32 lenTest2 = lenTest + 1; - UInt32 limit = MyMin(numAvailableBytesFull, lenTest2 + _numFastBytes); - for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); - lenTest2 -= lenTest + 1; - if (lenTest2 >= 2) - { - CState state2 = state; - state2.UpdateRep(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = - price + _repMatchLenEncoder.GetPrice(lenTest - 2, posState) + - _isMatch[state2.Index][posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, data[lenTest - 1])->GetPrice( - true, data2[lenTest], data[lenTest]); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAndLenCharPrice + - _isMatch[state2.Index][posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - - // for(; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = cur + lenTest + 1 + lenTest2; - while(lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - COptimal &optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - // for(UInt32 lenTest = 2; lenTest <= newLen; lenTest++) - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > matchDistances[numDistancePairs]; numDistancePairs += 2); - matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - UInt32 normalMatchPrice = matchPrice + _isRep[state.Index].GetPrice0(); - while(lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - UInt32 offs = 0; - while(startLen > matchDistances[offs]) - offs += 2; - UInt32 curBack = matchDistances[offs + 1]; - UInt32 posSlot = GetPosSlot2(curBack); - for(UInt32 lenTest = /*2*/ startLen; ; lenTest++) - { - UInt32 curAndLenPrice = normalMatchPrice; - UInt32 lenToPosState = GetLenToPosState(lenTest); - if (curBack < kNumFullDistances) - curAndLenPrice += _distancesPrices[lenToPosState][curBack]; - else - curAndLenPrice += _posSlotPrices[lenToPosState][posSlot] + _alignPrices[curBack & kAlignMask]; - - curAndLenPrice += _lenEncoder.GetPrice(lenTest - kMatchMinLen, posState); - - COptimal &optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (/*_maxMode && */lenTest == matchDistances[offs]) - { - // Try Match + Literal + Rep0 - const Byte *data2 = data - (curBack + 1); - UInt32 lenTest2 = lenTest + 1; - UInt32 limit = MyMin(numAvailableBytesFull, lenTest2 + _numFastBytes); - for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); - lenTest2 -= lenTest + 1; - if (lenTest2 >= 2) - { - CState state2 = state; - state2.UpdateMatch(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = curAndLenPrice + - _isMatch[state2.Index][posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, data[lenTest - 1])->GetPrice( - true, data2[lenTest], data[lenTest]); - state2.UpdateChar(); - posStateNext = (posStateNext + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAndLenCharPrice + - _isMatch[state2.Index][posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - - // for(; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = cur + lenTest + 1 + lenTest2; - while(lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - COptimal &optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - curBack = matchDistances[offs + 1]; - if (curBack >= kNumFullDistances) - posSlot = GetPosSlot2(curBack); - } - } - } - } -} - -static inline bool ChangePair(UInt32 smallDist, UInt32 bigDist) -{ - return ((bigDist >> 7) > smallDist); -} - -UInt32 CEncoder::ReadMatchDistances(UInt32 &numDistancePairs) -{ - UInt32 lenRes = 0; - numDistancePairs = _matchFinder.GetMatches(_matchFinderObj, _matchDistances); - #ifdef SHOW_STAT - printf("\n i = %d numPairs = %d ", ttt, numDistancePairs / 2); - if (ttt >= 61994) - ttt = ttt; - - ttt++; - for (UInt32 i = 0; i < numDistancePairs; i += 2) - printf("%2d %6d | ", _matchDistances[i], _matchDistances[i + 1]); - #endif - if (numDistancePairs > 0) - { - lenRes = _matchDistances[numDistancePairs - 2]; - if (lenRes == _numFastBytes) - { - UInt32 numAvail = _matchFinder.GetNumAvailableBytes(_matchFinderObj) + 1; - const Byte *pby = _matchFinder.GetPointerToCurrentPos(_matchFinderObj) - 1; - UInt32 distance = _matchDistances[numDistancePairs - 1] + 1; - if (numAvail > kMatchMaxLen) - numAvail = kMatchMaxLen; - - const Byte *pby2 = pby - distance; - for (; lenRes < numAvail && pby[lenRes] == pby2[lenRes]; lenRes++); - } - } - _additionalOffset++; - return lenRes; -} - -UInt32 CEncoder::GetOptimumFast(UInt32 &backRes) -{ - UInt32 numAvailableBytes = _matchFinder.GetNumAvailableBytes(_matchFinderObj); - UInt32 lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - lenMain = ReadMatchDistances(numDistancePairs); - } - else - { - lenMain = _longestMatchLength; - numDistancePairs = _numDistancePairs; - _longestMatchWasFound = false; - } - - const Byte *data = _matchFinder.GetPointerToCurrentPos(_matchFinderObj) - 1; - if (numAvailableBytes > kMatchMaxLen) - numAvailableBytes = kMatchMaxLen; - if (numAvailableBytes < 2) - { - backRes = (UInt32)(-1); - return 1; - } - - UInt32 repLens[kNumRepDistances]; - UInt32 repMaxIndex = 0; - - for(UInt32 i = 0; i < kNumRepDistances; i++) - { - const Byte *data2 = data - (_repDistances[i] + 1); - if (data[0] != data2[0] || data[1] != data2[1]) - { - repLens[i] = 0; - continue; - } - UInt32 len; - for (len = 2; len < numAvailableBytes && data[len] == data2[len]; len++); - if(len >= _numFastBytes) - { - backRes = i; - MovePos(len - 1); - return len; - } - repLens[i] = len; - if (len > repLens[repMaxIndex]) - repMaxIndex = i; - } - UInt32 *matchDistances = _matchDistances; - if(lenMain >= _numFastBytes) - { - backRes = matchDistances[numDistancePairs - 1] + kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - UInt32 backMain = 0; // for GCC - if (lenMain >= 2) - { - backMain = matchDistances[numDistancePairs - 1]; - while (numDistancePairs > 2 && lenMain == matchDistances[numDistancePairs - 4] + 1) - { - if (!ChangePair(matchDistances[numDistancePairs - 3], backMain)) - break; - numDistancePairs -= 2; - lenMain = matchDistances[numDistancePairs - 2]; - backMain = matchDistances[numDistancePairs - 1]; - } - if (lenMain == 2 && backMain >= 0x80) - lenMain = 1; - } - - if (repLens[repMaxIndex] >= 2) - { - if (repLens[repMaxIndex] + 1 >= lenMain || - repLens[repMaxIndex] + 2 >= lenMain && (backMain > (1 << 9)) || - repLens[repMaxIndex] + 3 >= lenMain && (backMain > (1 << 15))) - { - backRes = repMaxIndex; - UInt32 lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - } - - if (lenMain >= 2 && numAvailableBytes > 2) - { - numAvailableBytes = _matchFinder.GetNumAvailableBytes(_matchFinderObj); - _longestMatchLength = ReadMatchDistances(_numDistancePairs); - if (_longestMatchLength >= 2) - { - UInt32 newDistance = matchDistances[_numDistancePairs - 1]; - if (_longestMatchLength >= lenMain && newDistance < backMain || - _longestMatchLength == lenMain + 1 && !ChangePair(backMain, newDistance) || - _longestMatchLength > lenMain + 1 || - _longestMatchLength + 1 >= lenMain && lenMain >= 3 && ChangePair(newDistance, backMain)) - { - _longestMatchWasFound = true; - backRes = UInt32(-1); - return 1; - } - } - data = _matchFinder.GetPointerToCurrentPos(_matchFinderObj) - 1; - for(UInt32 i = 0; i < kNumRepDistances; i++) - { - const Byte *data2 = data - (_repDistances[i] + 1); - if (data[1] != data2[1] || data[2] != data2[2]) - { - repLens[i] = 0; - continue; - } - UInt32 len; - for (len = 2; len < numAvailableBytes && data[len] == data2[len]; len++); - if (len + 1 >= lenMain) - { - _longestMatchWasFound = true; - backRes = UInt32(-1); - return 1; - } - } - backRes = backMain + kNumRepDistances; - MovePos(lenMain - 2); - return lenMain; - } - backRes = UInt32(-1); - return 1; -} - -HRESULT CEncoder::Flush(UInt32 nowPos) -{ - // ReleaseMFStream(); - if (_matchFinderBase.result != SZ_OK) - return _matchFinderBase.result; - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - return _rangeEncoder.FlushStream(); -} - -void CEncoder::WriteEndMarker(UInt32 posState) -{ - // This function for writing End Mark for stream version of LZMA. - // In current version this feature is not used. - if (!_writeEndMark) - return; - - _isMatch[_state.Index][posState].Encode(&_rangeEncoder, 1); - _isRep[_state.Index].Encode(&_rangeEncoder, 0); - _state.UpdateMatch(); - UInt32 len = kMatchMinLen; // kMatchMaxLen; - _lenEncoder.Encode(&_rangeEncoder, len - kMatchMinLen, posState, !_fastMode); - UInt32 posSlot = (1 << kNumPosSlotBits) - 1; - UInt32 lenToPosState = GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(&_rangeEncoder, posSlot); - UInt32 footerBits = 30; - UInt32 posReduced = (UInt32(1) << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> kNumAlignBits, footerBits - kNumAlignBits); - _posAlignEncoder.ReverseEncode(&_rangeEncoder, posReduced & kAlignMask); -} - -HRESULT CEncoder::CodeReal(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - // _needReleaseMFStream = false; - #ifdef COMPRESS_MF_MT - #ifdef USE_ALLOCA - alloca(0x300); - #endif - #endif - CCoderReleaser coderReleaser(this); - RINOK(SetStreams(inStream, outStream, inSize, outSize)); - for (;;) - { - UInt64 processedInSize; - UInt64 processedOutSize; - Int32 finished; - RINOK(CodeOneBlock(&processedInSize, &processedOutSize, &finished)); - if (finished != 0) - break; - if (progress != 0) - { - RINOK(progress->SetRatioInfo(&processedInSize, &processedOutSize)); - } - } - return S_OK; -} - -HRESULT CEncoder::SetStreams(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 * /* inSize */, const UInt64 * /* outSize */) -{ - _inStream = inStream; - _finished = false; - RINOK(Create()); - RINOK(SetOutStream(outStream)); - RINOK(Init()); - - if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - kMatchMinLen); - _lenEncoder.UpdateTables(1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - kMatchMinLen); - _repMatchLenEncoder.UpdateTables(1 << _posStateBits); - - nowPos64 = 0; - return S_OK; -} - -static HRes MyRead(void *object, void *data, UInt32 size, UInt32 *processedSize) -{ - return (HRes)((CSeqInStream *)object)->RealStream->Read(data, size, processedSize); -} - -HRESULT CEncoder::CodeOneBlock(UInt64 *inSize, UInt64 *outSize, Int32 *finished) -{ - if (_inStream != 0) - { - _seqInStream.RealStream = _inStream; - _seqInStream.SeqInStream.Read = MyRead; - _matchFinderBase.stream = &_seqInStream.SeqInStream; - _matchFinder.Init(_matchFinderObj); - _needReleaseMFStream = true; - _inStream = 0; - } - - - *finished = 1; - if (_finished) - return _matchFinderBase.result; - _finished = true; - - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes(_matchFinderObj) == 0) - return Flush((UInt32)nowPos64); - UInt32 len, numDistancePairs; - len = ReadMatchDistances(numDistancePairs); - UInt32 posState = UInt32(nowPos64) & _posStateMask; - _isMatch[_state.Index][posState].Encode(&_rangeEncoder, 0); - _state.UpdateChar(); - Byte curByte = _matchFinder.GetIndexByte(_matchFinderObj, 0 - _additionalOffset); - _literalEncoder.GetSubCoder(UInt32(nowPos64), _previousByte)->Encode(&_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - - UInt32 nowPos32 = (UInt32)nowPos64; - UInt32 progressPosValuePrev = nowPos32; - - if (_matchFinder.GetNumAvailableBytes(_matchFinderObj) == 0) - return Flush(nowPos32); - - for (;;) - { - #ifdef _NO_EXCEPTIONS - if (_rangeEncoder.Stream.ErrorCode != S_OK) - return _rangeEncoder.Stream.ErrorCode; - #endif - UInt32 pos, len; - - if (_fastMode) - len = GetOptimumFast(pos); - else - len = GetOptimum(nowPos32, pos); - - UInt32 posState = nowPos32 & _posStateMask; - if(len == 1 && pos == 0xFFFFFFFF) - { - _isMatch[_state.Index][posState].Encode(&_rangeEncoder, 0); - Byte curByte = _matchFinder.GetIndexByte(_matchFinderObj, 0 - _additionalOffset); - CLiteralEncoder2 *subCoder = _literalEncoder.GetSubCoder(nowPos32, _previousByte); - if(_state.IsCharState()) - subCoder->Encode(&_rangeEncoder, curByte); - else - { - Byte matchByte = _matchFinder.GetIndexByte(_matchFinderObj, 0 - _repDistances[0] - 1 - _additionalOffset); - subCoder->EncodeMatched(&_rangeEncoder, matchByte, curByte); - } - _state.UpdateChar(); - _previousByte = curByte; - } - else - { - _isMatch[_state.Index][posState].Encode(&_rangeEncoder, 1); - if(pos < kNumRepDistances) - { - _isRep[_state.Index].Encode(&_rangeEncoder, 1); - if(pos == 0) - { - _isRepG0[_state.Index].Encode(&_rangeEncoder, 0); - _isRep0Long[_state.Index][posState].Encode(&_rangeEncoder, ((len == 1) ? 0 : 1)); - } - else - { - UInt32 distance = _repDistances[pos]; - _isRepG0[_state.Index].Encode(&_rangeEncoder, 1); - if (pos == 1) - _isRepG1[_state.Index].Encode(&_rangeEncoder, 0); - else - { - _isRepG1[_state.Index].Encode(&_rangeEncoder, 1); - _isRepG2[_state.Index].Encode(&_rangeEncoder, pos - 2); - if (pos == 3) - _repDistances[3] = _repDistances[2]; - _repDistances[2] = _repDistances[1]; - } - _repDistances[1] = _repDistances[0]; - _repDistances[0] = distance; - } - if (len == 1) - _state.UpdateShortRep(); - else - { - _repMatchLenEncoder.Encode(&_rangeEncoder, len - kMatchMinLen, posState, !_fastMode); - _state.UpdateRep(); - } - } - else - { - _isRep[_state.Index].Encode(&_rangeEncoder, 0); - _state.UpdateMatch(); - _lenEncoder.Encode(&_rangeEncoder, len - kMatchMinLen, posState, !_fastMode); - pos -= kNumRepDistances; - UInt32 posSlot = GetPosSlot(pos); - _posSlotEncoder[GetLenToPosState(len)].Encode(&_rangeEncoder, posSlot); - - if (posSlot >= kStartPosModelIndex) - { - UInt32 footerBits = ((posSlot >> 1) - 1); - UInt32 base = ((2 | (posSlot & 1)) << footerBits); - UInt32 posReduced = pos - base; - - if (posSlot < kEndPosModelIndex) - NRangeCoder::ReverseBitTreeEncode(_posEncoders + base - posSlot - 1, - &_rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> kNumAlignBits, footerBits - kNumAlignBits); - _posAlignEncoder.ReverseEncode(&_rangeEncoder, posReduced & kAlignMask); - _alignPriceCount++; - } - } - _repDistances[3] = _repDistances[2]; - _repDistances[2] = _repDistances[1]; - _repDistances[1] = _repDistances[0]; - _repDistances[0] = pos; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte(_matchFinderObj, len - 1 - _additionalOffset); - } - _additionalOffset -= len; - nowPos32 += len; - if (_additionalOffset == 0) - { - if (!_fastMode) - { - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= kAlignTableSize) - FillAlignPrices(); - } - if (_matchFinder.GetNumAvailableBytes(_matchFinderObj) == 0) - return Flush(nowPos32); - if (nowPos32 - progressPosValuePrev >= (1 << 14)) - { - nowPos64 += nowPos32 - progressPosValuePrev; - *inSize = nowPos64; - *outSize = _rangeEncoder.GetProcessedSize(); - _finished = false; - *finished = 0; - return _matchFinderBase.result; - } - } - } -} - -STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, - ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress) -{ - #ifndef _NO_EXCEPTIONS - try - { - #endif - return CodeReal(inStream, outStream, inSize, outSize, progress); - #ifndef _NO_EXCEPTIONS - } - catch(const COutBufferException &e) { return e.ErrorCode; } - catch(...) { return E_FAIL; } - #endif -} - -void CEncoder::FillDistancesPrices() -{ - UInt32 tempPrices[kNumFullDistances]; - for (UInt32 i = kStartPosModelIndex; i < kNumFullDistances; i++) - { - UInt32 posSlot = GetPosSlot(i); - UInt32 footerBits = ((posSlot >> 1) - 1); - UInt32 base = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = NRangeCoder::ReverseBitTreeGetPrice(_posEncoders + - base - posSlot - 1, footerBits, i - base); - } - - for (UInt32 lenToPosState = 0; lenToPosState < kNumLenToPosStates; lenToPosState++) - { - UInt32 posSlot; - NRangeCoder::CBitTreeEncoder &encoder = _posSlotEncoder[lenToPosState]; - UInt32 *posSlotPrices = _posSlotPrices[lenToPosState]; - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - posSlotPrices[posSlot] = encoder.GetPrice(posSlot); - for (posSlot = kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - posSlotPrices[posSlot] += ((((posSlot >> 1) - 1) - kNumAlignBits) << NRangeCoder::kNumBitPriceShiftBits); - - UInt32 *distancesPrices = _distancesPrices[lenToPosState]; - UInt32 i; - for (i = 0; i < kStartPosModelIndex; i++) - distancesPrices[i] = posSlotPrices[i]; - for (; i < kNumFullDistances; i++) - distancesPrices[i] = posSlotPrices[GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; -} - -void CEncoder::FillAlignPrices() -{ - for (UInt32 i = 0; i < kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.h deleted file mode 100644 index da159795..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMAEncoder.h +++ /dev/null @@ -1,465 +0,0 @@ -// LZMA/Encoder.h - -#ifndef __LZMA_ENCODER_H -#define __LZMA_ENCODER_H - -#include "../../../Common/MyCom.h" -#include "../../ICoder.h" - -extern "C" -{ - #include "../../../../C/Alloc.h" - #include "../../../../C/Compress/Lz/MatchFinder.h" - #ifdef COMPRESS_MF_MT - #include "../../../../C/Compress/Lz/MatchFinderMt.h" - #endif -} - -#include "../RangeCoder/RangeCoderBitTree.h" - -#include "LZMA.h" - -namespace NCompress { -namespace NLZMA { - -typedef NRangeCoder::CBitEncoder CMyBitEncoder; - -class CBaseState -{ -protected: - CState _state; - Byte _previousByte; - UInt32 _repDistances[kNumRepDistances]; - void Init() - { - _state.Init(); - _previousByte = 0; - for(UInt32 i = 0 ; i < kNumRepDistances; i++) - _repDistances[i] = 0; - } -}; - -struct COptimal -{ - CState State; - - bool Prev1IsChar; - bool Prev2; - - UInt32 PosPrev2; - UInt32 BackPrev2; - - UInt32 Price; - UInt32 PosPrev; // posNext; - UInt32 BackPrev; - UInt32 Backs[kNumRepDistances]; - void MakeAsChar() { BackPrev = UInt32(-1); Prev1IsChar = false; } - void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; } - bool IsShortRep() { return (BackPrev == 0); } -}; - - -// #define LZMA_LOG_BRANCH - -#if _MSC_VER >= 1400 -// Must give gain in core 2. but slower ~2% on k8. -// #define LZMA_LOG_BSR -#endif - -#ifndef LZMA_LOG_BSR -static const int kNumLogBits = 13; // don't change it ! -extern Byte g_FastPos[]; -#endif -inline UInt32 GetPosSlot(UInt32 pos) -{ - #ifdef LZMA_LOG_BSR - if (pos < 2) - return pos; - unsigned long index; - _BitScanReverse(&index, pos); - return (index + index) + ((pos >> (index - 1)) & 1); - #else - if (pos < (1 << kNumLogBits)) - return g_FastPos[pos]; - if (pos < (1 << (kNumLogBits * 2 - 1))) - return g_FastPos[pos >> (kNumLogBits - 1)] + (kNumLogBits - 1) * 2; - return g_FastPos[pos >> (kNumLogBits - 1) * 2] + (kNumLogBits - 1) * 4; - #endif -} - -inline UInt32 GetPosSlot2(UInt32 pos) -{ - #ifdef LZMA_LOG_BSR - unsigned long index; - _BitScanReverse(&index, pos); - return (index + index) + ((pos >> (index - 1)) & 1); - #else - #ifdef LZMA_LOG_BRANCH - if (pos < (1 << (kNumLogBits + 6))) - return g_FastPos[pos >> 6] + 12; - if (pos < (1 << (kNumLogBits * 2 + 5))) - return g_FastPos[pos >> (kNumLogBits + 5)] + (kNumLogBits + 5) * 2; - return g_FastPos[pos >> (kNumLogBits * 2 + 4)] + (kNumLogBits * 2 + 4) * 2; - #else - // it's faster with VC6-32bit. - UInt32 s = 6 + ((kNumLogBits - 1) & (UInt32)((Int32)(((1 << (kNumLogBits + 6)) - 1) - pos) >> 31)); - return g_FastPos[pos >> s] + (s * 2); - #endif - #endif -} - -const UInt32 kIfinityPrice = 0xFFFFFFF; - -const UInt32 kNumOpts = 1 << 12; - - -class CLiteralEncoder2 -{ - CMyBitEncoder _encoders[0x300]; -public: - void Init() - { - for (int i = 0; i < 0x300; i++) - _encoders[i].Init(); - } - void Encode(NRangeCoder::CEncoder *rangeEncoder, Byte symbol); - void EncodeMatched(NRangeCoder::CEncoder *rangeEncoder, Byte matchByte, Byte symbol); - UInt32 GetPrice(bool matchMode, Byte matchByte, Byte symbol) const; -}; - -class CLiteralEncoder -{ - CLiteralEncoder2 *_coders; - int _numPrevBits; - int _numPosBits; - UInt32 _posMask; -public: - CLiteralEncoder(): _coders(0) {} - ~CLiteralEncoder() { Free(); } - void Free() - { - MyFree(_coders); - _coders = 0; - } - bool Create(int numPosBits, int numPrevBits) - { - if (_coders == 0 || (numPosBits + numPrevBits) != (_numPrevBits + _numPosBits)) - { - Free(); - UInt32 numStates = 1 << (numPosBits + numPrevBits); - _coders = (CLiteralEncoder2 *)MyAlloc(numStates * sizeof(CLiteralEncoder2)); - } - _numPosBits = numPosBits; - _posMask = (1 << numPosBits) - 1; - _numPrevBits = numPrevBits; - return (_coders != 0); - } - void Init() - { - UInt32 numStates = 1 << (_numPrevBits + _numPosBits); - for (UInt32 i = 0; i < numStates; i++) - _coders[i].Init(); - } - CLiteralEncoder2 *GetSubCoder(UInt32 pos, Byte prevByte) - { return &_coders[((pos & _posMask) << _numPrevBits) + (prevByte >> (8 - _numPrevBits))]; } -}; - -namespace NLength { - -class CEncoder -{ - CMyBitEncoder _choice; - CMyBitEncoder _choice2; - NRangeCoder::CBitTreeEncoder _lowCoder[kNumPosStatesEncodingMax]; - NRangeCoder::CBitTreeEncoder _midCoder[kNumPosStatesEncodingMax]; - NRangeCoder::CBitTreeEncoder _highCoder; -public: - void Init(UInt32 numPosStates); - void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState); - void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32 *prices) const; -}; - -const UInt32 kNumSpecSymbols = kNumLowSymbols + kNumMidSymbols; - -class CPriceTableEncoder: public CEncoder -{ - UInt32 _prices[kNumPosStatesEncodingMax][kNumSymbolsTotal]; - UInt32 _tableSize; - UInt32 _counters[kNumPosStatesEncodingMax]; -public: - void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; } - UInt32 GetPrice(UInt32 symbol, UInt32 posState) const { return _prices[posState][symbol]; } - void UpdateTable(UInt32 posState) - { - SetPrices(posState, _tableSize, _prices[posState]); - _counters[posState] = _tableSize; - } - void UpdateTables(UInt32 numPosStates) - { - for (UInt32 posState = 0; posState < numPosStates; posState++) - UpdateTable(posState); - } - void Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState, bool updatePrice) - { - CEncoder::Encode(rangeEncoder, symbol, posState); - if (updatePrice) - if (--_counters[posState] == 0) - UpdateTable(posState); - } -}; - -} - -typedef struct _CSeqInStream -{ - ISeqInStream SeqInStream; - CMyComPtr RealStream; -} CSeqInStream; - - -class CEncoder : - public ICompressCoder, - public ICompressSetOutStream, - public ICompressSetCoderProperties, - public ICompressWriteCoderProperties, - public CBaseState, - public CMyUnknownImp -{ - NRangeCoder::CEncoder _rangeEncoder; - - IMatchFinder _matchFinder; - void *_matchFinderObj; - - #ifdef COMPRESS_MF_MT - Bool _multiThread; - Bool _mtMode; - CMatchFinderMt _matchFinderMt; - #endif - - CMatchFinder _matchFinderBase; - #ifdef COMPRESS_MF_MT - Byte _pad1[kMtCacheLineDummy]; - #endif - - COptimal _optimum[kNumOpts]; - - CMyBitEncoder _isMatch[kNumStates][NLength::kNumPosStatesEncodingMax]; - CMyBitEncoder _isRep[kNumStates]; - CMyBitEncoder _isRepG0[kNumStates]; - CMyBitEncoder _isRepG1[kNumStates]; - CMyBitEncoder _isRepG2[kNumStates]; - CMyBitEncoder _isRep0Long[kNumStates][NLength::kNumPosStatesEncodingMax]; - - NRangeCoder::CBitTreeEncoder _posSlotEncoder[kNumLenToPosStates]; - - CMyBitEncoder _posEncoders[kNumFullDistances - kEndPosModelIndex]; - NRangeCoder::CBitTreeEncoder _posAlignEncoder; - - NLength::CPriceTableEncoder _lenEncoder; - NLength::CPriceTableEncoder _repMatchLenEncoder; - - CLiteralEncoder _literalEncoder; - - UInt32 _matchDistances[kMatchMaxLen * 2 + 2 + 1]; - - bool _fastMode; - // bool _maxMode; - UInt32 _numFastBytes; - UInt32 _longestMatchLength; - UInt32 _numDistancePairs; - - UInt32 _additionalOffset; - - UInt32 _optimumEndIndex; - UInt32 _optimumCurrentIndex; - - bool _longestMatchWasFound; - - UInt32 _posSlotPrices[kNumLenToPosStates][kDistTableSizeMax]; - - UInt32 _distancesPrices[kNumLenToPosStates][kNumFullDistances]; - - UInt32 _alignPrices[kAlignTableSize]; - UInt32 _alignPriceCount; - - UInt32 _distTableSize; - - UInt32 _posStateBits; - UInt32 _posStateMask; - UInt32 _numLiteralPosStateBits; - UInt32 _numLiteralContextBits; - - UInt32 _dictionarySize; - - UInt32 _matchPriceCount; - UInt64 nowPos64; - bool _finished; - ISequentialInStream *_inStream; - - CSeqInStream _seqInStream; - - UInt32 _matchFinderCycles; - // int _numSkip - - bool _writeEndMark; - - bool _needReleaseMFStream; - - void ReleaseMatchFinder() - { - _matchFinder.Init = 0; - _seqInStream.RealStream.Release(); - } - - void ReleaseMFStream() - { - if (_matchFinderObj && _needReleaseMFStream) - { - #ifdef COMPRESS_MF_MT - if (_mtMode) - MatchFinderMt_ReleaseStream(&_matchFinderMt); - #endif - _needReleaseMFStream = false; - } - _seqInStream.RealStream.Release(); - } - - UInt32 ReadMatchDistances(UInt32 &numDistancePairs); - - void MovePos(UInt32 num); - UInt32 GetRepLen1Price(CState state, UInt32 posState) const - { - return _isRepG0[state.Index].GetPrice0() + - _isRep0Long[state.Index][posState].GetPrice0(); - } - - UInt32 GetPureRepPrice(UInt32 repIndex, CState state, UInt32 posState) const - { - UInt32 price; - if(repIndex == 0) - { - price = _isRepG0[state.Index].GetPrice0(); - price += _isRep0Long[state.Index][posState].GetPrice1(); - } - else - { - price = _isRepG0[state.Index].GetPrice1(); - if (repIndex == 1) - price += _isRepG1[state.Index].GetPrice0(); - else - { - price += _isRepG1[state.Index].GetPrice1(); - price += _isRepG2[state.Index].GetPrice(repIndex - 2); - } - } - return price; - } - UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, CState state, UInt32 posState) const - { - return _repMatchLenEncoder.GetPrice(len - kMatchMinLen, posState) + - GetPureRepPrice(repIndex, state, posState); - } - /* - UInt32 GetPosLen2Price(UInt32 pos, UInt32 posState) const - { - if (pos >= kNumFullDistances) - return kIfinityPrice; - return _distancesPrices[0][pos] + _lenEncoder.GetPrice(0, posState); - } - UInt32 GetPosLen3Price(UInt32 pos, UInt32 len, UInt32 posState) const - { - UInt32 price; - UInt32 lenToPosState = GetLenToPosState(len); - if (pos < kNumFullDistances) - price = _distancesPrices[lenToPosState][pos]; - else - price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] + - _alignPrices[pos & kAlignMask]; - return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState); - } - */ - UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) const - { - UInt32 price; - UInt32 lenToPosState = GetLenToPosState(len); - if (pos < kNumFullDistances) - price = _distancesPrices[lenToPosState][pos]; - else - price = _posSlotPrices[lenToPosState][GetPosSlot2(pos)] + - _alignPrices[pos & kAlignMask]; - return price + _lenEncoder.GetPrice(len - kMatchMinLen, posState); - } - - UInt32 Backward(UInt32 &backRes, UInt32 cur); - UInt32 GetOptimum(UInt32 position, UInt32 &backRes); - UInt32 GetOptimumFast(UInt32 &backRes); - - void FillDistancesPrices(); - void FillAlignPrices(); - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - HRESULT Flush(UInt32 nowPos); - class CCoderReleaser - { - CEncoder *_coder; - public: - CCoderReleaser(CEncoder *coder): _coder(coder) {} - ~CCoderReleaser() { _coder->ReleaseStreams(); } - }; - friend class CCoderReleaser; - - void WriteEndMarker(UInt32 posState); - -public: - CEncoder(); - void SetWriteEndMarkerMode(bool writeEndMarker) - { _writeEndMark= writeEndMarker; } - - HRESULT Create(); - - MY_UNKNOWN_IMP3( - ICompressSetOutStream, - ICompressSetCoderProperties, - ICompressWriteCoderProperties - ) - - HRESULT Init(); - - // ICompressCoder interface - HRESULT SetStreams(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize); - HRESULT CodeOneBlock(UInt64 *inSize, UInt64 *outSize, Int32 *finished); - - HRESULT CodeReal(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - - // ICompressCoder interface - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, const UInt64 *outSize, - ICompressProgressInfo *progress); - - // ICompressSetCoderProperties2 - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties); - - // ICompressWriteCoderProperties - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream); - - STDMETHOD(SetOutStream)(ISequentialOutStream *outStream); - STDMETHOD(ReleaseOutStream)(); - - virtual ~CEncoder(); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMARegister.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMARegister.cpp deleted file mode 100644 index bc8f7262..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/LZMARegister.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// LZMARegister.cpp - -#include "StdAfx.h" - -#include "../../Common/RegisterCodec.h" - -#include "LZMADecoder.h" -static void *CreateCodec() { return (void *)(ICompressCoder *)(new NCompress::NLZMA::CDecoder); } -#ifndef EXTRACT_ONLY -#include "LZMAEncoder.h" -static void *CreateCodecOut() { return (void *)(ICompressCoder *)(new NCompress::NLZMA::CEncoder); } -#else -#define CreateCodecOut 0 -#endif - -static CCodecInfo g_CodecInfo = - { CreateCodec, CreateCodecOut, 0x030101, L"LZMA", 1, false }; - -REGISTER_CODEC(LZMA) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.h deleted file mode 100644 index e7fb6986..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp deleted file mode 100644 index 39fee934..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsp +++ /dev/null @@ -1,504 +0,0 @@ -# Microsoft Developer Studio Project File - Name="AloneLZMA" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=AloneLZMA - Win32 DebugU -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "AloneLZMA.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "AloneLZMA.mak" CFG="AloneLZMA - Win32 DebugU" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "AloneLZMA - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 ReleaseU" (based on "Win32 (x86) Console Application") -!MESSAGE "AloneLZMA - Win32 DebugU" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "AloneLZMA - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\\" /D "NDEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /FAcs /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\lzma.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_MBCS" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\lzma.exe" /pdbtype:sept - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 ReleaseU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "ReleaseU" -# PROP BASE Intermediate_Dir "ReleaseU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "ReleaseU" -# PROP Intermediate_Dir "ReleaseU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /Yu"StdAfx.h" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\\" /D "NDEBUG" /D "UNICODE" /D "_UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\7za2.exe" /opt:NOWIN98 -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"c:\UTIL\lzma.exe" /opt:NOWIN98 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "AloneLZMA - Win32 DebugU" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "DebugU" -# PROP BASE Intermediate_Dir "DebugU" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "DebugU" -# PROP Intermediate_Dir "DebugU" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "EXCLUDE_COM" /D "NO_REGISTRY" /D "FORMAT_7Z" /D "FORMAT_BZIP2" /D "FORMAT_ZIP" /D "FORMAT_TAR" /D "FORMAT_GZIP" /D "COMPRESS_LZMA" /D "COMPRESS_BCJ_X86" /D "COMPRESS_BCJ2" /D "COMPRESS_COPY" /D "COMPRESS_MF_PAT" /D "COMPRESS_MF_BT" /D "COMPRESS_PPMD" /D "COMPRESS_DEFLATE" /D "COMPRESS_IMPLODE" /D "COMPRESS_BZIP2" /D "CRYPTO_ZIP" /D "_MBCS" /Yu"StdAfx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /D "WIN32" /D "_CONSOLE" /D "COMPRESS_MF_MT" /D "BENCH_MT" /Yu"StdAfx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\7za2.exe" /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"c:\UTIL\lzma.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "AloneLZMA - Win32 Release" -# Name "AloneLZMA - Win32 Debug" -# Name "AloneLZMA - Win32 ReleaseU" -# Name "AloneLZMA - Win32 DebugU" -# Begin Group "Spec" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"StdAfx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Compress" - -# PROP Default_Filter "" -# Begin Group "LZMA" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\LZMA\LZMA.h -# End Source File -# Begin Source File - -SOURCE=..\LZMA\LZMADecoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\LZMA\LZMADecoder.h -# End Source File -# Begin Source File - -SOURCE=..\LZMA\LZMAEncoder.cpp -# End Source File -# Begin Source File - -SOURCE=..\LZMA\LZMAEncoder.h -# End Source File -# End Group -# Begin Group "RangeCoder" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\RangeCoder\RangeCoder.h -# End Source File -# Begin Source File - -SOURCE=..\RangeCoder\RangeCoderBit.cpp -# End Source File -# Begin Source File - -SOURCE=..\RangeCoder\RangeCoderBit.h -# End Source File -# Begin Source File - -SOURCE=..\RangeCoder\RangeCoderBitTree.h -# End Source File -# Begin Source File - -SOURCE=..\RangeCoder\RangeCoderOpt.h -# End Source File -# End Group -# Begin Group "LZ" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\LZ\LZOutWindow.cpp -# End Source File -# Begin Source File - -SOURCE=..\LZ\LZOutWindow.h -# End Source File -# End Group -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Synchronization.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\System.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Thread.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CommandLineParser.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\CRC.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\Defs.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyCom.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyWindows.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringToInt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Types.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\InBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\OutBuffer.h -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\StreamUtils.h -# End Source File -# End Group -# Begin Group "C" - -# PROP Default_Filter "" -# Begin Group "C-Lz" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinder.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinder.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinderMt.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lz\MatchFinderMt.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Threads.h -# End Source File -# End Group -# Begin Group "LZMA_C" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lzma\LzmaDecode.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lzma\LzmaDecode.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Lzma\LzmaTypes.h -# End Source File -# End Group -# Begin Group "Branch" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchTypes.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchX86.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Compress\Branch\BranchX86.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\7zCrc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Alloc.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\..\C\Types.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\..\ICoder.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaAlone.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBench.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBench.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaBenchCon.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaBenchCon.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaRam.cpp -# End Source File -# Begin Source File - -SOURCE=.\LzmaRam.h -# End Source File -# Begin Source File - -SOURCE=.\LzmaRamDecode.c -# SUBTRACT CPP /YX /Yc /Yu -# End Source File -# Begin Source File - -SOURCE=.\LzmaRamDecode.h -# End Source File -# End Target -# End Project diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw deleted file mode 100644 index d7482d8a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/AloneLZMA.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "AloneLZMA"=.\AloneLZMA.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp deleted file mode 100644 index 5b97fd09..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaAlone.cpp +++ /dev/null @@ -1,554 +0,0 @@ -// LzmaAlone.cpp - -#include "StdAfx.h" - -#include "../../../Common/MyWindows.h" -#include "../../../Common/MyInitGuid.h" - -#include - -#if defined(_WIN32) || defined(OS2) || defined(MSDOS) -#include -#include -#define MY_SET_BINARY_MODE(file) _setmode(_fileno(file), O_BINARY) -#else -#define MY_SET_BINARY_MODE(file) -#endif - -#include "../../../Common/CommandLineParser.h" -#include "../../../Common/StringConvert.h" -#include "../../../Common/StringToInt.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/StreamUtils.h" - -#include "../LZMA/LZMADecoder.h" -#include "../LZMA/LZMAEncoder.h" - -#include "LzmaBenchCon.h" -#include "LzmaRam.h" - -#ifdef COMPRESS_MF_MT -#include "../../../Windows/System.h" -#endif - -#include "../../MyVersion.h" - -extern "C" -{ -#include "LzmaRamDecode.h" -} - -using namespace NCommandLineParser; - -#ifdef _WIN32 -bool g_IsNT = false; -static inline bool IsItWindowsNT() -{ - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if (!::GetVersionEx(&versionInfo)) - return false; - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif - -static const char *kCantAllocate = "Can not allocate memory"; -static const char *kReadError = "Read error"; -static const char *kWriteError = "Write error"; - -namespace NKey { -enum Enum -{ - kHelp1 = 0, - kHelp2, - kMode, - kDictionary, - kFastBytes, - kMatchFinderCycles, - kLitContext, - kLitPos, - kPosBits, - kMatchFinder, - kMultiThread, - kEOS, - kStdIn, - kStdOut, - kFilter86 -}; -} - -static const CSwitchForm kSwitchForms[] = -{ - { L"?", NSwitchType::kSimple, false }, - { L"H", NSwitchType::kSimple, false }, - { L"A", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"D", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"FB", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MC", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"LC", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"LP", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"PB", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MF", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"MT", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"EOS", NSwitchType::kSimple, false }, - { L"SI", NSwitchType::kSimple, false }, - { L"SO", NSwitchType::kSimple, false }, - { L"F86", NSwitchType::kPostChar, false, 0, 0, L"+" } -}; - -static const int kNumSwitches = sizeof(kSwitchForms) / sizeof(kSwitchForms[0]); - -static void PrintHelp() -{ - fprintf(stderr, "\nUsage: LZMA inputFile outputFile [...]\n" - " e: encode file\n" - " d: decode file\n" - " b: Benchmark\n" - "\n" - " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" - " -d{N}: set dictionary - [0,30], default: 23 (8MB)\n" - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" - " -mc{N}: set number of cycles for match finder\n" - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" - " -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, hc4], default: bt4\n" - " -mt{N}: set number of CPU threads\n" - " -eos: write End Of Stream marker\n" - " -si: read data from stdin\n" - " -so: write data to stdout\n" - ); -} - -static void PrintHelpAndExit(const char *s) -{ - fprintf(stderr, "\nError: %s\n\n", s); - PrintHelp(); - throw -1; -} - -static void IncorrectCommand() -{ - PrintHelpAndExit("Incorrect command"); -} - -static void WriteArgumentsToStringList(int numArguments, const char *arguments[], - UStringVector &strings) -{ - for(int i = 1; i < numArguments; i++) - strings.Add(MultiByteToUnicodeString(arguments[i])); -} - -static bool GetNumber(const wchar_t *s, UInt32 &value) -{ - value = 0; - if (MyStringLen(s) == 0) - return false; - const wchar_t *end; - UInt64 res = ConvertStringToUInt64(s, &end); - if (*end != L'\0') - return false; - if (res > 0xFFFFFFFF) - return false; - value = UInt32(res); - return true; -} - -int main2(int n, const char *args[]) -{ - #ifdef _WIN32 - g_IsNT = IsItWindowsNT(); - #endif - - fprintf(stderr, "\nLZMA " MY_VERSION_COPYRIGHT_DATE "\n"); - - if (n == 1) - { - PrintHelp(); - return 0; - } - - bool unsupportedTypes = (sizeof(Byte) != 1 || sizeof(UInt32) < 4 || sizeof(UInt64) < 4); - if (unsupportedTypes) - { - fprintf(stderr, "Unsupported base types. Edit Common/Types.h and recompile"); - return 1; - } - - UStringVector commandStrings; - WriteArgumentsToStringList(n, args, commandStrings); - CParser parser(kNumSwitches); - try - { - parser.ParseStrings(kSwitchForms, commandStrings); - } - catch(...) - { - IncorrectCommand(); - } - - if(parser[NKey::kHelp1].ThereIs || parser[NKey::kHelp2].ThereIs) - { - PrintHelp(); - return 0; - } - const UStringVector &nonSwitchStrings = parser.NonSwitchStrings; - - int paramIndex = 0; - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &command = nonSwitchStrings[paramIndex++]; - - bool dictionaryIsDefined = false; - UInt32 dictionary = (UInt32)-1; - if(parser[NKey::kDictionary].ThereIs) - { - UInt32 dicLog; - if (!GetNumber(parser[NKey::kDictionary].PostStrings[0], dicLog)) - IncorrectCommand(); - dictionary = 1 << dicLog; - dictionaryIsDefined = true; - } - UString mf = L"BT4"; - if (parser[NKey::kMatchFinder].ThereIs) - mf = parser[NKey::kMatchFinder].PostStrings[0]; - - UInt32 numThreads = (UInt32)-1; - - #ifdef COMPRESS_MF_MT - if (parser[NKey::kMultiThread].ThereIs) - { - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - const UString &s = parser[NKey::kMultiThread].PostStrings[0]; - if (s.IsEmpty()) - numThreads = numCPUs; - else - if (!GetNumber(s, numThreads)) - IncorrectCommand(); - } - #endif - - if (command.CompareNoCase(L"b") == 0) - { - const UInt32 kNumDefaultItereations = 1; - UInt32 numIterations = kNumDefaultItereations; - { - if (paramIndex < nonSwitchStrings.Size()) - if (!GetNumber(nonSwitchStrings[paramIndex++], numIterations)) - numIterations = kNumDefaultItereations; - } - return LzmaBenchCon(stderr, numIterations, numThreads, dictionary); - } - - if (numThreads == (UInt32)-1) - numThreads = 1; - - bool encodeMode = false; - if (command.CompareNoCase(L"e") == 0) - encodeMode = true; - else if (command.CompareNoCase(L"d") == 0) - encodeMode = false; - else - IncorrectCommand(); - - bool stdInMode = parser[NKey::kStdIn].ThereIs; - bool stdOutMode = parser[NKey::kStdOut].ThereIs; - - CMyComPtr inStream; - CInFileStream *inStreamSpec = 0; - if (stdInMode) - { - inStream = new CStdInFileStream; - MY_SET_BINARY_MODE(stdin); - } - else - { - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &inputName = nonSwitchStrings[paramIndex++]; - inStreamSpec = new CInFileStream; - inStream = inStreamSpec; - if (!inStreamSpec->Open(GetSystemString(inputName))) - { - fprintf(stderr, "\nError: can not open input file %s\n", - (const char *)GetOemString(inputName)); - return 1; - } - } - - CMyComPtr outStream; - COutFileStream *outStreamSpec = NULL; - if (stdOutMode) - { - outStream = new CStdOutFileStream; - MY_SET_BINARY_MODE(stdout); - } - else - { - if (paramIndex >= nonSwitchStrings.Size()) - IncorrectCommand(); - const UString &outputName = nonSwitchStrings[paramIndex++]; - outStreamSpec = new COutFileStream; - outStream = outStreamSpec; - if (!outStreamSpec->Create(GetSystemString(outputName), true)) - { - fprintf(stderr, "\nError: can not open output file %s\n", - (const char *)GetOemString(outputName)); - return 1; - } - } - - if (parser[NKey::kFilter86].ThereIs) - { - // -f86 switch is for x86 filtered mode: BCJ + LZMA. - if (parser[NKey::kEOS].ThereIs || stdInMode) - throw "Can not use stdin in this mode"; - UInt64 fileSize; - inStreamSpec->File.GetLength(fileSize); - if (fileSize > 0xF0000000) - throw "File is too big"; - UInt32 inSize = (UInt32)fileSize; - Byte *inBuffer = 0; - if (inSize != 0) - { - inBuffer = (Byte *)MyAlloc((size_t)inSize); - if (inBuffer == 0) - throw kCantAllocate; - } - - UInt32 processedSize; - if (ReadStream(inStream, inBuffer, (UInt32)inSize, &processedSize) != S_OK) - throw "Can not read"; - if ((UInt32)inSize != processedSize) - throw "Read size error"; - - Byte *outBuffer = 0; - size_t outSizeProcessed; - if (encodeMode) - { - // we allocate 105% of original size for output buffer - size_t outSize = (size_t)fileSize / 20 * 21 + (1 << 16); - if (outSize != 0) - { - outBuffer = (Byte *)MyAlloc((size_t)outSize); - if (outBuffer == 0) - throw kCantAllocate; - } - if (!dictionaryIsDefined) - dictionary = 1 << 23; - int res = LzmaRamEncode(inBuffer, inSize, outBuffer, outSize, &outSizeProcessed, - dictionary, parser[NKey::kFilter86].PostCharIndex == 0 ? SZ_FILTER_YES : SZ_FILTER_AUTO); - if (res != 0) - { - fprintf(stderr, "\nEncoder error = %d\n", (int)res); - return 1; - } - } - else - { - size_t outSize; - if (LzmaRamGetUncompressedSize(inBuffer, inSize, &outSize) != 0) - throw "data error"; - if (outSize != 0) - { - outBuffer = (Byte *)MyAlloc(outSize); - if (outBuffer == 0) - throw kCantAllocate; - } - int res = LzmaRamDecompress(inBuffer, inSize, outBuffer, outSize, &outSizeProcessed, malloc, free); - if (res != 0) - throw "LzmaDecoder error"; - } - if (WriteStream(outStream, outBuffer, (UInt32)outSizeProcessed, &processedSize) != S_OK) - throw kWriteError; - MyFree(outBuffer); - MyFree(inBuffer); - return 0; - } - - - UInt64 fileSize; - if (encodeMode) - { - NCompress::NLZMA::CEncoder *encoderSpec = new NCompress::NLZMA::CEncoder; - CMyComPtr encoder = encoderSpec; - - if (!dictionaryIsDefined) - dictionary = 1 << 23; - - UInt32 posStateBits = 2; - UInt32 litContextBits = 3; // for normal files - // UInt32 litContextBits = 0; // for 32-bit data - UInt32 litPosBits = 0; - // UInt32 litPosBits = 2; // for 32-bit data - UInt32 algorithm = 1; - UInt32 numFastBytes = 128; - UInt32 matchFinderCycles = 16 + numFastBytes / 2; - bool matchFinderCyclesDefined = false; - - bool eos = parser[NKey::kEOS].ThereIs || stdInMode; - - if(parser[NKey::kMode].ThereIs) - if (!GetNumber(parser[NKey::kMode].PostStrings[0], algorithm)) - IncorrectCommand(); - - if(parser[NKey::kFastBytes].ThereIs) - if (!GetNumber(parser[NKey::kFastBytes].PostStrings[0], numFastBytes)) - IncorrectCommand(); - matchFinderCyclesDefined = parser[NKey::kMatchFinderCycles].ThereIs; - if (matchFinderCyclesDefined) - if (!GetNumber(parser[NKey::kMatchFinderCycles].PostStrings[0], matchFinderCycles)) - IncorrectCommand(); - if(parser[NKey::kLitContext].ThereIs) - if (!GetNumber(parser[NKey::kLitContext].PostStrings[0], litContextBits)) - IncorrectCommand(); - if(parser[NKey::kLitPos].ThereIs) - if (!GetNumber(parser[NKey::kLitPos].PostStrings[0], litPosBits)) - IncorrectCommand(); - if(parser[NKey::kPosBits].ThereIs) - if (!GetNumber(parser[NKey::kPosBits].PostStrings[0], posStateBits)) - IncorrectCommand(); - - PROPID propIDs[] = - { - NCoderPropID::kDictionarySize, - NCoderPropID::kPosStateBits, - NCoderPropID::kLitContextBits, - NCoderPropID::kLitPosBits, - NCoderPropID::kAlgorithm, - NCoderPropID::kNumFastBytes, - NCoderPropID::kMatchFinder, - NCoderPropID::kEndMarker, - NCoderPropID::kNumThreads, - NCoderPropID::kMatchFinderCycles, - }; - const int kNumPropsMax = sizeof(propIDs) / sizeof(propIDs[0]); - - PROPVARIANT properties[kNumPropsMax]; - for (int p = 0; p < 6; p++) - properties[p].vt = VT_UI4; - - properties[0].ulVal = (UInt32)dictionary; - properties[1].ulVal = (UInt32)posStateBits; - properties[2].ulVal = (UInt32)litContextBits; - properties[3].ulVal = (UInt32)litPosBits; - properties[4].ulVal = (UInt32)algorithm; - properties[5].ulVal = (UInt32)numFastBytes; - - properties[6].vt = VT_BSTR; - properties[6].bstrVal = (BSTR)(const wchar_t *)mf; - - properties[7].vt = VT_BOOL; - properties[7].boolVal = eos ? VARIANT_TRUE : VARIANT_FALSE; - - properties[8].vt = VT_UI4; - properties[8].ulVal = (UInt32)numThreads; - - // it must be last in property list - properties[9].vt = VT_UI4; - properties[9].ulVal = (UInt32)matchFinderCycles; - - int numProps = kNumPropsMax; - if (!matchFinderCyclesDefined) - numProps--; - - if (encoderSpec->SetCoderProperties(propIDs, properties, numProps) != S_OK) - IncorrectCommand(); - encoderSpec->WriteCoderProperties(outStream); - - if (eos || stdInMode) - fileSize = (UInt64)(Int64)-1; - else - inStreamSpec->File.GetLength(fileSize); - - for (int i = 0; i < 8; i++) - { - Byte b = Byte(fileSize >> (8 * i)); - if (outStream->Write(&b, 1, 0) != S_OK) - { - fprintf(stderr, kWriteError); - return 1; - } - } - HRESULT result = encoder->Code(inStream, outStream, 0, 0, 0); - if (result == E_OUTOFMEMORY) - { - fprintf(stderr, "\nError: Can not allocate memory\n"); - return 1; - } - else if (result != S_OK) - { - fprintf(stderr, "\nEncoder error = %X\n", (unsigned int)result); - return 1; - } - } - else - { - NCompress::NLZMA::CDecoder *decoderSpec = new NCompress::NLZMA::CDecoder; - CMyComPtr decoder = decoderSpec; - const UInt32 kPropertiesSize = 5; - Byte properties[kPropertiesSize]; - UInt32 processedSize; - if (ReadStream(inStream, properties, kPropertiesSize, &processedSize) != S_OK) - { - fprintf(stderr, kReadError); - return 1; - } - if (processedSize != kPropertiesSize) - { - fprintf(stderr, kReadError); - return 1; - } - if (decoderSpec->SetDecoderProperties2(properties, kPropertiesSize) != S_OK) - { - fprintf(stderr, "SetDecoderProperties error"); - return 1; - } - fileSize = 0; - for (int i = 0; i < 8; i++) - { - Byte b; - if (inStream->Read(&b, 1, &processedSize) != S_OK) - { - fprintf(stderr, kReadError); - return 1; - } - if (processedSize != 1) - { - fprintf(stderr, kReadError); - return 1; - } - fileSize |= ((UInt64)b) << (8 * i); - } - if (decoder->Code(inStream, outStream, 0, &fileSize, 0) != S_OK) - { - fprintf(stderr, "Decoder error"); - return 1; - } - } - if (outStreamSpec != NULL) - { - if (outStreamSpec->Close() != S_OK) - { - fprintf(stderr, "File closing error"); - return 1; - } - } - return 0; -} - -int main(int n, const char *args[]) -{ - try { return main2(n, args); } - catch(const char *s) - { - fprintf(stderr, "\nError: %s\n", s); - return 1; - } - catch(...) - { - fprintf(stderr, "\nError\n"); - return 1; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp deleted file mode 100644 index 4cd2d63e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.cpp +++ /dev/null @@ -1,1024 +0,0 @@ -// LzmaBench.cpp - -#include "StdAfx.h" - -#include "LzmaBench.h" - -#ifndef _WIN32 -#define USE_POSIX_TIME -#define USE_POSIX_TIME2 -#endif - -#ifdef USE_POSIX_TIME -#include -#ifdef USE_POSIX_TIME2 -#include -#endif -#endif - -#ifdef _WIN32 -#define USE_ALLOCA -#endif - -#ifdef USE_ALLOCA -#ifdef _WIN32 -#include -#else -#include -#endif -#endif - -extern "C" -{ -#include "../../../../C/Alloc.h" -#include "../../../../C/7zCrc.h" -} -#include "../../../Common/MyCom.h" -#include "../../ICoder.h" - -#ifdef BENCH_MT -#include "../../../Windows/Thread.h" -#include "../../../Windows/Synchronization.h" -#endif - -#ifdef EXTERNAL_LZMA -#include "../../../Windows/PropVariant.h" -#else -#include "../LZMA/LZMADecoder.h" -#include "../LZMA/LZMAEncoder.h" -#endif - -static const UInt32 kUncompressMinBlockSize = 1 << 26; -static const UInt32 kAdditionalSize = (1 << 16); -static const UInt32 kCompressedAdditionalSize = (1 << 10); -static const UInt32 kMaxLzmaPropSize = 5; - -class CBaseRandomGenerator -{ - UInt32 A1; - UInt32 A2; -public: - CBaseRandomGenerator() { Init(); } - void Init() { A1 = 362436069; A2 = 521288629;} - UInt32 GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >> 16)) << 16) + - ((A2 = 18000 * (A2 & 0xffff) + (A2 >> 16)) ); - } -}; - -class CBenchBuffer -{ -public: - size_t BufferSize; - Byte *Buffer; - CBenchBuffer(): Buffer(0) {} - virtual ~CBenchBuffer() { Free(); } - void Free() - { - ::MidFree(Buffer); - Buffer = 0; - } - bool Alloc(size_t bufferSize) - { - if (Buffer != 0 && BufferSize == bufferSize) - return true; - Free(); - Buffer = (Byte *)::MidAlloc(bufferSize); - BufferSize = bufferSize; - return (Buffer != 0); - } -}; - -class CBenchRandomGenerator: public CBenchBuffer -{ - CBaseRandomGenerator *RG; -public: - void Set(CBaseRandomGenerator *rg) { RG = rg; } - UInt32 GetVal(UInt32 &res, int numBits) - { - UInt32 val = res & (((UInt32)1 << numBits) - 1); - res >>= numBits; - return val; - } - UInt32 GetLen(UInt32 &res) - { - UInt32 len = GetVal(res, 2); - return GetVal(res, 1 + len); - } - void Generate() - { - UInt32 pos = 0; - UInt32 rep0 = 1; - while (pos < BufferSize) - { - UInt32 res = RG->GetRnd(); - res >>= 1; - if (GetVal(res, 1) == 0 || pos < 1024) - Buffer[pos++] = (Byte)(res & 0xFF); - else - { - UInt32 len; - len = 1 + GetLen(res); - if (GetVal(res, 3) != 0) - { - len += GetLen(res); - do - { - UInt32 ppp = GetVal(res, 5) + 6; - res = RG->GetRnd(); - if (ppp > 30) - continue; - rep0 = /* (1 << ppp) +*/ GetVal(res, ppp); - res = RG->GetRnd(); - } - while (rep0 >= pos); - rep0++; - } - - for (UInt32 i = 0; i < len && pos < BufferSize; i++, pos++) - Buffer[pos] = Buffer[pos - rep0]; - } - } - } -}; - - -class CBenchmarkInStream: - public ISequentialInStream, - public CMyUnknownImp -{ - const Byte *Data; - size_t Pos; - size_t Size; -public: - MY_UNKNOWN_IMP - void Init(const Byte *data, size_t size) - { - Data = data; - Size = size; - Pos = 0; - } - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CBenchmarkInStream::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - size_t remain = Size - Pos; - UInt32 kMaxBlockSize = (1 << 20); - if (size > kMaxBlockSize) - size = kMaxBlockSize; - if (size > remain) - size = (UInt32)remain; - for (UInt32 i = 0; i < size; i++) - ((Byte *)data)[i] = Data[Pos + i]; - Pos += size; - if(processedSize != NULL) - *processedSize = size; - return S_OK; -} - -class CBenchmarkOutStream: - public ISequentialOutStream, - public CBenchBuffer, - public CMyUnknownImp -{ - // bool _overflow; -public: - UInt32 Pos; - // CBenchmarkOutStream(): _overflow(false) {} - void Init() - { - // _overflow = false; - Pos = 0; - } - MY_UNKNOWN_IMP - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CBenchmarkOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - size_t curSize = BufferSize - Pos; - if (curSize > size) - curSize = size; - memcpy(Buffer + Pos, data, curSize); - Pos += (UInt32)curSize; - if(processedSize != NULL) - *processedSize = (UInt32)curSize; - if (curSize != size) - { - // _overflow = true; - return E_FAIL; - } - return S_OK; -} - -class CCrcOutStream: - public ISequentialOutStream, - public CMyUnknownImp -{ -public: - UInt32 Crc; - MY_UNKNOWN_IMP - void Init() { Crc = CRC_INIT_VAL; } - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CCrcOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - Crc = CrcUpdate(Crc, data, size); - if (processedSize != NULL) - *processedSize = size; - return S_OK; -} - -static UInt64 GetTimeCount() -{ - #ifdef USE_POSIX_TIME - #ifdef USE_POSIX_TIME2 - timeval v; - if (gettimeofday(&v, 0) == 0) - return (UInt64)(v.tv_sec) * 1000000 + v.tv_usec; - return (UInt64)time(NULL) * 1000000; - #else - return time(NULL); - #endif - #else - /* - LARGE_INTEGER value; - if (::QueryPerformanceCounter(&value)) - return value.QuadPart; - */ - return GetTickCount(); - #endif -} - -static UInt64 GetFreq() -{ - #ifdef USE_POSIX_TIME - #ifdef USE_POSIX_TIME2 - return 1000000; - #else - return 1; - #endif - #else - /* - LARGE_INTEGER value; - if (::QueryPerformanceFrequency(&value)) - return value.QuadPart; - */ - return 1000; - #endif -} - -#ifndef USE_POSIX_TIME -static inline UInt64 GetTime64(const FILETIME &t) { return ((UInt64)t.dwHighDateTime << 32) | t.dwLowDateTime; } -#endif -static UInt64 GetUserTime() -{ - #ifdef USE_POSIX_TIME - return clock(); - #else - FILETIME creationTime, exitTime, kernelTime, userTime; - if (::GetProcessTimes(::GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime) != 0) - return GetTime64(userTime) + GetTime64(kernelTime); - return (UInt64)GetTickCount() * 10000; - #endif -} - -static UInt64 GetUserFreq() -{ - #ifdef USE_POSIX_TIME - return CLOCKS_PER_SEC; - #else - return 10000000; - #endif -} - -class CBenchProgressStatus -{ - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSection CS; - #endif -public: - HRESULT Res; - bool EncodeMode; - void SetResult(HRESULT res) - { - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSectionLock lock(CS); - #endif - Res = res; - } - HRESULT GetResult() - { - #ifdef BENCH_MT - NWindows::NSynchronization::CCriticalSectionLock lock(CS); - #endif - return Res; - } -}; - -class CBenchProgressInfo: - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - CBenchProgressStatus *Status; - CBenchInfo BenchInfo; - HRESULT Res; - IBenchCallback *callback; - CBenchProgressInfo(): callback(0) {} - MY_UNKNOWN_IMP - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); -}; - -void SetStartTime(CBenchInfo &bi) -{ - bi.GlobalFreq = GetFreq(); - bi.UserFreq = GetUserFreq(); - bi.GlobalTime = ::GetTimeCount(); - bi.UserTime = ::GetUserTime(); -} - -void SetFinishTime(const CBenchInfo &biStart, CBenchInfo &dest) -{ - dest.GlobalFreq = GetFreq(); - dest.UserFreq = GetUserFreq(); - dest.GlobalTime = ::GetTimeCount() - biStart.GlobalTime; - dest.UserTime = ::GetUserTime() - biStart.UserTime; -} - -STDMETHODIMP CBenchProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - HRESULT res = Status->GetResult(); - if (res != S_OK) - return res; - if (!callback) - return res; - CBenchInfo info = BenchInfo; - SetFinishTime(BenchInfo, info); - if (Status->EncodeMode) - { - info.UnpackSize = *inSize; - info.PackSize = *outSize; - res = callback->SetEncodeResult(info, false); - } - else - { - info.PackSize = BenchInfo.PackSize + *inSize; - info.UnpackSize = BenchInfo.UnpackSize + *outSize; - res = callback->SetDecodeResult(info, false); - } - if (res != S_OK) - Status->SetResult(res); - return res; -} - -static const int kSubBits = 8; - -static UInt32 GetLogSize(UInt32 size) -{ - for (int i = kSubBits; i < 32; i++) - for (UInt32 j = 0; j < (1 << kSubBits); j++) - if (size <= (((UInt32)1) << i) + (j << (i - kSubBits))) - return (i << kSubBits) + j; - return (32 << kSubBits); -} - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - while (v1 > 1000000) - { - v1 >>= 1; - v2 >>= 1; - } -} - -UInt64 GetUsage(const CBenchInfo &info) -{ - UInt64 userTime = info.UserTime; - UInt64 userFreq = info.UserFreq; - UInt64 globalTime = info.GlobalTime; - UInt64 globalFreq = info.GlobalFreq; - NormalizeVals(userTime, userFreq); - NormalizeVals(globalFreq, globalTime); - if (userFreq == 0) - userFreq = 1; - if (globalTime == 0) - globalTime = 1; - return userTime * globalFreq * 1000000 / userFreq / globalTime; -} - -UInt64 GetRatingPerUsage(const CBenchInfo &info, UInt64 rating) -{ - UInt64 userTime = info.UserTime; - UInt64 userFreq = info.UserFreq; - UInt64 globalTime = info.GlobalTime; - UInt64 globalFreq = info.GlobalFreq; - NormalizeVals(userFreq, userTime); - NormalizeVals(globalTime, globalFreq); - if (globalFreq == 0) - globalFreq = 1; - if (userTime == 0) - userTime = 1; - return userFreq * globalTime / globalFreq * rating / userTime; -} - -static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime, UInt64 freq) -{ - UInt64 elTime = elapsedTime; - NormalizeVals(freq, elTime); - if (elTime == 0) - elTime = 1; - return value * freq / elTime; -} - -UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 freq, UInt64 size) -{ - UInt64 t = GetLogSize(dictionarySize) - (kBenchMinDicLogSize << kSubBits); - // UInt64 numCommandsForOne = 1000 + ((t * t * 7) >> (2 * kSubBits)); // AMD K8 - UInt64 numCommandsForOne = 870 + ((t * t * 5) >> (2 * kSubBits)); // Intel Core2 - - UInt64 numCommands = (UInt64)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime, freq); -} - -UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt32 numIterations) -{ - // UInt64 numCommands = (inSize * 216 + outSize * 14) * numIterations; // AMD K8 - UInt64 numCommands = (inSize * 220 + outSize * 8) * numIterations; // Intel Core2 - return MyMultDiv64(numCommands, elapsedTime, freq); -} - -#ifdef EXTERNAL_LZMA -typedef UInt32 (WINAPI * CreateObjectPointer)(const GUID *clsID, - const GUID *interfaceID, void **outObject); -#endif - -struct CEncoderInfo; - -struct CEncoderInfo -{ - #ifdef BENCH_MT - NWindows::CThread thread[2]; - #endif - CMyComPtr encoder; - CBenchProgressInfo *progressInfoSpec[2]; - CMyComPtr progressInfo[2]; - UInt32 NumIterations; - #ifdef USE_ALLOCA - size_t AllocaSize; - #endif - - struct CDecoderInfo - { - CEncoderInfo *Encoder; - UInt32 DecoderIndex; - #ifdef USE_ALLOCA - size_t AllocaSize; - #endif - bool CallbackMode; - }; - CDecoderInfo decodersInfo[2]; - - CMyComPtr decoders[2]; - HRESULT Results[2]; - CBenchmarkOutStream *outStreamSpec; - CMyComPtr outStream; - IBenchCallback *callback; - UInt32 crc; - UInt32 kBufferSize; - UInt32 compressedSize; - CBenchRandomGenerator rg; - CBenchmarkOutStream *propStreamSpec; - CMyComPtr propStream; - HRESULT Init(UInt32 dictionarySize, UInt32 numThreads, CBaseRandomGenerator *rg); - HRESULT Encode(); - HRESULT Decode(UInt32 decoderIndex); - - CEncoderInfo(): outStreamSpec(0), callback(0), propStreamSpec(0) {} - - #ifdef BENCH_MT - static THREAD_FUNC_DECL EncodeThreadFunction(void *param) - { - CEncoderInfo *encoder = (CEncoderInfo *)param; - #ifdef USE_ALLOCA - alloca(encoder->AllocaSize); - #endif - HRESULT res = encoder->Encode(); - encoder->Results[0] = res; - if (res != S_OK) - encoder->progressInfoSpec[0]->Status->SetResult(res); - - return 0; - } - static THREAD_FUNC_DECL DecodeThreadFunction(void *param) - { - CDecoderInfo *decoder = (CDecoderInfo *)param; - #ifdef USE_ALLOCA - alloca(decoder->AllocaSize); - #endif - CEncoderInfo *encoder = decoder->Encoder; - encoder->Results[decoder->DecoderIndex] = encoder->Decode(decoder->DecoderIndex); - return 0; - } - - HRESULT CreateEncoderThread() - { - return thread[0].Create(EncodeThreadFunction, this); - } - - HRESULT CreateDecoderThread(int index, bool callbackMode - #ifdef USE_ALLOCA - , size_t allocaSize - #endif - ) - { - CDecoderInfo &decoder = decodersInfo[index]; - decoder.DecoderIndex = index; - decoder.Encoder = this; - #ifdef USE_ALLOCA - decoder.AllocaSize = allocaSize; - #endif - decoder.CallbackMode = callbackMode; - return thread[index].Create(DecodeThreadFunction, &decoder); - } - #endif -}; - -HRESULT CEncoderInfo::Init(UInt32 dictionarySize, UInt32 numThreads, CBaseRandomGenerator *rgLoc) -{ - rg.Set(rgLoc); - kBufferSize = dictionarySize + kAdditionalSize; - UInt32 kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - if (!rg.Alloc(kBufferSize)) - return E_OUTOFMEMORY; - rg.Generate(); - crc = CrcCalc(rg.Buffer, rg.BufferSize); - - outStreamSpec = new CBenchmarkOutStream; - if (!outStreamSpec->Alloc(kCompressedBufferSize)) - return E_OUTOFMEMORY; - - outStream = outStreamSpec; - - propStreamSpec = 0; - if (!propStream) - { - propStreamSpec = new CBenchmarkOutStream; - propStream = propStreamSpec; - } - if (!propStreamSpec->Alloc(kMaxLzmaPropSize)) - return E_OUTOFMEMORY; - propStreamSpec->Init(); - - PROPID propIDs[] = - { - NCoderPropID::kDictionarySize, - NCoderPropID::kMultiThread - }; - const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]); - PROPVARIANT properties[kNumProps]; - properties[0].vt = VT_UI4; - properties[0].ulVal = (UInt32)dictionarySize; - - properties[1].vt = VT_BOOL; - properties[1].boolVal = (numThreads > 1) ? VARIANT_TRUE : VARIANT_FALSE; - - { - CMyComPtr setCoderProperties; - RINOK(encoder.QueryInterface(IID_ICompressSetCoderProperties, &setCoderProperties)); - if (!setCoderProperties) - return E_FAIL; - RINOK(setCoderProperties->SetCoderProperties(propIDs, properties, kNumProps)); - - CMyComPtr writeCoderProperties; - encoder.QueryInterface(IID_ICompressWriteCoderProperties, &writeCoderProperties); - if (writeCoderProperties) - { - RINOK(writeCoderProperties->WriteCoderProperties(propStream)); - } - } - return S_OK; -} - -HRESULT CEncoderInfo::Encode() -{ - CBenchmarkInStream *inStreamSpec = new CBenchmarkInStream; - CMyComPtr inStream = inStreamSpec; - inStreamSpec->Init(rg.Buffer, rg.BufferSize); - outStreamSpec->Init(); - - RINOK(encoder->Code(inStream, outStream, 0, 0, progressInfo[0])); - compressedSize = outStreamSpec->Pos; - encoder.Release(); - return S_OK; -} - -HRESULT CEncoderInfo::Decode(UInt32 decoderIndex) -{ - CBenchmarkInStream *inStreamSpec = new CBenchmarkInStream; - CMyComPtr inStream = inStreamSpec; - CMyComPtr &decoder = decoders[decoderIndex]; - - CMyComPtr compressSetDecoderProperties; - decoder.QueryInterface(IID_ICompressSetDecoderProperties2, &compressSetDecoderProperties); - if (!compressSetDecoderProperties) - return E_FAIL; - - CCrcOutStream *crcOutStreamSpec = new CCrcOutStream; - CMyComPtr crcOutStream = crcOutStreamSpec; - - CBenchProgressInfo *pi = progressInfoSpec[decoderIndex]; - pi->BenchInfo.UnpackSize = 0; - pi->BenchInfo.PackSize = 0; - - for (UInt32 j = 0; j < NumIterations; j++) - { - inStreamSpec->Init(outStreamSpec->Buffer, compressedSize); - crcOutStreamSpec->Init(); - - RINOK(compressSetDecoderProperties->SetDecoderProperties2(propStreamSpec->Buffer, propStreamSpec->Pos)); - UInt64 outSize = kBufferSize; - RINOK(decoder->Code(inStream, crcOutStream, 0, &outSize, progressInfo[decoderIndex])); - if (CRC_GET_DIGEST(crcOutStreamSpec->Crc) != crc) - return S_FALSE; - pi->BenchInfo.UnpackSize += kBufferSize; - pi->BenchInfo.PackSize += compressedSize; - } - decoder.Release(); - return S_OK; -} - -static const UInt32 kNumThreadsMax = (1 << 16); - -struct CBenchEncoders -{ - CEncoderInfo *encoders; - CBenchEncoders(UInt32 num): encoders(0) { encoders = new CEncoderInfo[num]; } - ~CBenchEncoders() { delete []encoders; } -}; - -HRESULT LzmaBench( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - UInt32 numThreads, UInt32 dictionarySize, IBenchCallback *callback) -{ - UInt32 numEncoderThreads = - #ifdef BENCH_MT - (numThreads > 1 ? numThreads / 2 : 1); - #else - 1; - #endif - UInt32 numSubDecoderThreads = - #ifdef BENCH_MT - (numThreads > 1 ? 2 : 1); - #else - 1; - #endif - if (dictionarySize < (1 << kBenchMinDicLogSize) || numThreads < 1 || numEncoderThreads > kNumThreadsMax) - { - return E_INVALIDARG; - } - - CBenchEncoders encodersSpec(numEncoderThreads); - CEncoderInfo *encoders = encodersSpec.encoders; - - #ifdef EXTERNAL_LZMA - UString name = L"LZMA"; - #endif - - UInt32 i; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.callback = (i == 0) ? callback : 0; - - #ifdef EXTERNAL_LZMA - RINOK(codecs->CreateCoder(name, true, encoder.encoder)); - #else - encoder.encoder = new NCompress::NLZMA::CEncoder; - #endif - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - #ifdef EXTERNAL_LZMA - RINOK(codecs->CreateCoder(name, false, encoder.decoders[j])); - #else - encoder.decoders[j] = new NCompress::NLZMA::CDecoder; - #endif - } - } - - CBaseRandomGenerator rg; - rg.Init(); - for (i = 0; i < numEncoderThreads; i++) - { - RINOK(encoders[i].Init(dictionarySize, numThreads, &rg)); - } - - CBenchProgressStatus status; - status.Res = S_OK; - status.EncodeMode = true; - - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - for (int j = 0; j < 2; j++) - { - encoder.progressInfo[j] = encoder.progressInfoSpec[j] = new CBenchProgressInfo; - encoder.progressInfoSpec[j]->Status = &status; - } - if (i == 0) - { - encoder.progressInfoSpec[0]->callback = callback; - encoder.progressInfoSpec[0]->BenchInfo.NumIterations = numEncoderThreads; - SetStartTime(encoder.progressInfoSpec[0]->BenchInfo); - } - - #ifdef BENCH_MT - if (numEncoderThreads > 1) - { - #ifdef USE_ALLOCA - encoder.AllocaSize = (i * 16 * 21) & 0x7FF; - #endif - RINOK(encoder.CreateEncoderThread()) - } - else - #endif - { - RINOK(encoder.Encode()); - } - } - #ifdef BENCH_MT - if (numEncoderThreads > 1) - for (i = 0; i < numEncoderThreads; i++) - encoders[i].thread[0].Wait(); - #endif - - RINOK(status.Res); - - CBenchInfo info; - - SetFinishTime(encoders[0].progressInfoSpec[0]->BenchInfo, info); - info.UnpackSize = 0; - info.PackSize = 0; - info.NumIterations = 1; // progressInfoSpec->NumIterations; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - info.UnpackSize += encoder.kBufferSize; - info.PackSize += encoder.compressedSize; - } - RINOK(callback->SetEncodeResult(info, true)); - - - status.Res = S_OK; - status.EncodeMode = false; - - UInt32 numDecoderThreads = numEncoderThreads * numSubDecoderThreads; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.NumIterations = 2 + kUncompressMinBlockSize / encoder.kBufferSize; - - if (i == 0) - { - encoder.progressInfoSpec[0]->callback = callback; - encoder.progressInfoSpec[0]->BenchInfo.NumIterations = numDecoderThreads; - SetStartTime(encoder.progressInfoSpec[0]->BenchInfo); - } - - #ifdef BENCH_MT - if (numDecoderThreads > 1) - { - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - size_t allocaSize = ((i * numSubDecoderThreads + j) * 16 * 21) & 0x7FF; - HRESULT res = encoder.CreateDecoderThread(j, (i == 0 && j == 0) - #ifdef USE_ALLOCA - , allocaSize - #endif - ); - RINOK(res); - } - } - else - #endif - { - RINOK(encoder.Decode(0)); - } - } - #ifdef BENCH_MT - HRESULT res = S_OK; - if (numDecoderThreads > 1) - for (i = 0; i < numEncoderThreads; i++) - for (UInt32 j = 0; j < numSubDecoderThreads; j++) - { - CEncoderInfo &encoder = encoders[i]; - encoder.thread[j].Wait(); - if (encoder.Results[j] != S_OK) - res = encoder.Results[j]; - } - RINOK(res); - #endif - RINOK(status.Res); - SetFinishTime(encoders[0].progressInfoSpec[0]->BenchInfo, info); - info.UnpackSize = 0; - info.PackSize = 0; - info.NumIterations = numSubDecoderThreads * encoders[0].NumIterations; - for (i = 0; i < numEncoderThreads; i++) - { - CEncoderInfo &encoder = encoders[i]; - info.UnpackSize += encoder.kBufferSize; - info.PackSize += encoder.compressedSize; - } - RINOK(callback->SetDecodeResult(info, false)); - RINOK(callback->SetDecodeResult(info, true)); - return S_OK; -} - - -inline UInt64 GetLZMAUsage(bool multiThread, UInt32 dictionary) -{ - UInt32 hs = dictionary - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - hs++; - return ((hs + (1 << 16)) + (UInt64)dictionary * 2) * 4 + (UInt64)dictionary * 3 / 2 + - (1 << 20) + (multiThread ? (6 << 20) : 0); -} - -UInt64 GetBenchMemoryUsage(UInt32 numThreads, UInt32 dictionary) -{ - const UInt32 kBufferSize = dictionary; - const UInt32 kCompressedBufferSize = (kBufferSize / 2); - UInt32 numSubThreads = (numThreads > 1) ? 2 : 1; - UInt32 numBigThreads = numThreads / numSubThreads; - return (kBufferSize + kCompressedBufferSize + - GetLZMAUsage((numThreads > 1), dictionary) + (2 << 20)) * numBigThreads; -} - -static bool CrcBig(const void *data, UInt32 size, UInt32 numCycles, UInt32 crcBase) -{ - for (UInt32 i = 0; i < numCycles; i++) - if (CrcCalc(data, size) != crcBase) - return false; - return true; -} - -#ifdef BENCH_MT -struct CCrcInfo -{ - NWindows::CThread Thread; - const Byte *Data; - UInt32 Size; - UInt32 NumCycles; - UInt32 Crc; - bool Res; - void Wait() - { - Thread.Wait(); - Thread.Close(); - } -}; - -static THREAD_FUNC_DECL CrcThreadFunction(void *param) -{ - CCrcInfo *p = (CCrcInfo *)param; - p->Res = CrcBig(p->Data, p->Size, p->NumCycles, p->Crc); - return 0; -} - -struct CCrcThreads -{ - UInt32 NumThreads; - CCrcInfo *Items; - CCrcThreads(): Items(0), NumThreads(0) {} - void WaitAll() - { - for (UInt32 i = 0; i < NumThreads; i++) - Items[i].Wait(); - NumThreads = 0; - } - ~CCrcThreads() - { - WaitAll(); - delete []Items; - } -}; -#endif - -static UInt32 CrcCalc1(const Byte *buf, UInt32 size) -{ - UInt32 crc = CRC_INIT_VAL;; - for (UInt32 i = 0; i < size; i++) - crc = CRC_UPDATE_BYTE(crc, buf[i]); - return CRC_GET_DIGEST(crc); -} - -static void RandGen(Byte *buf, UInt32 size, CBaseRandomGenerator &RG) -{ - for (UInt32 i = 0; i < size; i++) - buf[i] = (Byte)RG.GetRnd(); -} - -static UInt32 RandGenCrc(Byte *buf, UInt32 size, CBaseRandomGenerator &RG) -{ - RandGen(buf, size, RG); - return CrcCalc1(buf, size); -} - -bool CrcInternalTest() -{ - CBenchBuffer buffer; - const UInt32 kBufferSize0 = (1 << 8); - const UInt32 kBufferSize1 = (1 << 10); - const UInt32 kCheckSize = (1 << 5); - if (!buffer.Alloc(kBufferSize0 + kBufferSize1)) - return false; - Byte *buf = buffer.Buffer; - UInt32 i; - for (i = 0; i < kBufferSize0; i++) - buf[i] = (Byte)i; - UInt32 crc1 = CrcCalc1(buf, kBufferSize0); - if (crc1 != 0x29058C73) - return false; - CBaseRandomGenerator RG; - RandGen(buf + kBufferSize0, kBufferSize1, RG); - for (i = 0; i < kBufferSize0 + kBufferSize1 - kCheckSize; i++) - for (UInt32 j = 0; j < kCheckSize; j++) - if (CrcCalc1(buf + i, j) != CrcCalc(buf + i, j)) - return false; - return true; -} - -HRESULT CrcBench(UInt32 numThreads, UInt32 bufferSize, UInt64 &speed) -{ - if (numThreads == 0) - numThreads = 1; - - CBenchBuffer buffer; - size_t totalSize = (size_t)bufferSize * numThreads; - if (totalSize / numThreads != bufferSize) - return E_OUTOFMEMORY; - if (!buffer.Alloc(totalSize)) - return E_OUTOFMEMORY; - - Byte *buf = buffer.Buffer; - CBaseRandomGenerator RG; - UInt32 numCycles = ((UInt32)1 << 30) / ((bufferSize >> 2) + 1) + 1; - - UInt64 timeVal; - #ifdef BENCH_MT - CCrcThreads threads; - if (numThreads > 1) - { - threads.Items = new CCrcInfo[numThreads]; - UInt32 i; - for (i = 0; i < numThreads; i++) - { - CCrcInfo &info = threads.Items[i]; - Byte *data = buf + (size_t)bufferSize * i; - info.Data = data; - info.NumCycles = numCycles; - info.Size = bufferSize; - info.Crc = RandGenCrc(data, bufferSize, RG); - } - timeVal = GetTimeCount(); - for (i = 0; i < numThreads; i++) - { - CCrcInfo &info = threads.Items[i]; - RINOK(info.Thread.Create(CrcThreadFunction, &info)); - threads.NumThreads++; - } - threads.WaitAll(); - for (i = 0; i < numThreads; i++) - if (!threads.Items[i].Res) - return S_FALSE; - } - else - #endif - { - UInt32 crc = RandGenCrc(buf, bufferSize, RG); - timeVal = GetTimeCount(); - if (!CrcBig(buf, bufferSize, numCycles, crc)) - return S_FALSE; - } - timeVal = GetTimeCount() - timeVal; - if (timeVal == 0) - timeVal = 1; - - UInt64 size = (UInt64)numCycles * totalSize; - speed = MyMultDiv64(size, timeVal, GetFreq()); - return S_OK; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h deleted file mode 100644 index d57e7977..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBench.h +++ /dev/null @@ -1,48 +0,0 @@ -// LzmaBench.h - -#ifndef __LZMABENCH_H -#define __LZMABENCH_H - -#include -#include "../../../Common/Types.h" -#ifdef EXTERNAL_LZMA -#include "../../UI/Common/LoadCodecs.h" -#endif - -struct CBenchInfo -{ - UInt64 GlobalTime; - UInt64 GlobalFreq; - UInt64 UserTime; - UInt64 UserFreq; - UInt64 UnpackSize; - UInt64 PackSize; - UInt32 NumIterations; - CBenchInfo(): NumIterations(0) {} -}; - -struct IBenchCallback -{ - virtual HRESULT SetEncodeResult(const CBenchInfo &info, bool final) = 0; - virtual HRESULT SetDecodeResult(const CBenchInfo &info, bool final) = 0; -}; - -UInt64 GetUsage(const CBenchInfo &benchOnfo); -UInt64 GetRatingPerUsage(const CBenchInfo &info, UInt64 rating); -UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 freq, UInt64 size); -UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 freq, UInt64 outSize, UInt64 inSize, UInt32 numIterations); - -HRESULT LzmaBench( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - UInt32 numThreads, UInt32 dictionarySize, IBenchCallback *callback); - -const int kBenchMinDicLogSize = 18; - -UInt64 GetBenchMemoryUsage(UInt32 numThreads, UInt32 dictionary); - -bool CrcInternalTest(); -HRESULT CrcBench(UInt32 numThreads, UInt32 bufferSize, UInt64 &speed); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp deleted file mode 100644 index e55b4bc7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.cpp +++ /dev/null @@ -1,311 +0,0 @@ -// LzmaBenchCon.cpp - -#include "StdAfx.h" - -#include - -#include "LzmaBench.h" -#include "LzmaBenchCon.h" -#include "../../../Common/IntToString.h" - -#if defined(BENCH_MT) || defined(_WIN32) -#include "../../../Windows/System.h" -#endif - -#ifdef BREAK_HANDLER -#include "../../UI/Console/ConsoleClose.h" -#endif -#include "../../../Common/MyCom.h" - -struct CTotalBenchRes -{ - UInt64 NumIterations; - UInt64 Rating; - UInt64 Usage; - UInt64 RPU; - void Init() { NumIterations = 0; Rating = 0; Usage = 0; RPU = 0; } - void Normalize() - { - if (NumIterations == 0) - return; - Rating /= NumIterations; - Usage /= NumIterations; - RPU /= NumIterations; - NumIterations = 1; - } - void SetMid(const CTotalBenchRes &r1, const CTotalBenchRes &r2) - { - Rating = (r1.Rating + r2.Rating) / 2; - Usage = (r1.Usage + r2.Usage) / 2; - RPU = (r1.RPU + r2.RPU) / 2; - NumIterations = (r1.NumIterations + r2.NumIterations) / 2; - } -}; - -struct CBenchCallback: public IBenchCallback -{ - CTotalBenchRes EncodeRes; - CTotalBenchRes DecodeRes; - FILE *f; - void Init() { EncodeRes.Init(); DecodeRes.Init(); } - void Normalize() { EncodeRes.Normalize(); DecodeRes.Normalize(); } - UInt32 dictionarySize; - HRESULT SetEncodeResult(const CBenchInfo &info, bool final); - HRESULT SetDecodeResult(const CBenchInfo &info, bool final); -}; - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - while (v1 > 1000000) - { - v1 >>= 1; - v2 >>= 1; - } -} - -static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime, UInt64 freq) -{ - UInt64 elTime = elapsedTime; - NormalizeVals(freq, elTime); - if (elTime == 0) - elTime = 1; - return value * freq / elTime; -} - -static void PrintNumber(FILE *f, UInt64 value, int size) -{ - char s[32]; - ConvertUInt64ToString(value, s); - fprintf(f, " "); - for (int len = (int)strlen(s); len < size; len++) - fprintf(f, " "); - fprintf(f, "%s", s); -} - -static void PrintRating(FILE *f, UInt64 rating) -{ - PrintNumber(f, rating / 1000000, 6); -} - -static void PrintResults(FILE *f, UInt64 usage, UInt64 rpu, UInt64 rating) -{ - PrintNumber(f, (usage + 5000) / 10000, 5); - PrintRating(f, rpu); - PrintRating(f, rating); -} - - -static void PrintResults(FILE *f, const CBenchInfo &info, UInt64 rating, CTotalBenchRes &res) -{ - UInt64 speed = MyMultDiv64(info.UnpackSize, info.GlobalTime, info.GlobalFreq); - PrintNumber(f, speed / 1024, 7); - UInt64 usage = GetUsage(info); - UInt64 rpu = GetRatingPerUsage(info, rating); - PrintResults(f, usage, rpu, rating); - res.NumIterations++; - res.RPU += rpu; - res.Rating += rating; - res.Usage += usage; -} - -static void PrintTotals(FILE *f, const CTotalBenchRes &res) -{ - fprintf(f, " "); - PrintResults(f, res.Usage, res.RPU, res.Rating); -} - - -HRESULT CBenchCallback::SetEncodeResult(const CBenchInfo &info, bool final) -{ - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - - if (final) - { - UInt64 rating = GetCompressRating(dictionarySize, info.GlobalTime, info.GlobalFreq, info.UnpackSize); - PrintResults(f, info, rating, EncodeRes); - } - return S_OK; -} - -static const char *kSep = " | "; - - -HRESULT CBenchCallback::SetDecodeResult(const CBenchInfo &info, bool final) -{ - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - if (final) - { - UInt64 rating = GetDecompressRating(info.GlobalTime, info.GlobalFreq, info.UnpackSize, info.PackSize, info.NumIterations); - fprintf(f, kSep); - CBenchInfo info2 = info; - info2.UnpackSize *= info2.NumIterations; - info2.PackSize *= info2.NumIterations; - info2.NumIterations = 1; - PrintResults(f, info2, rating, DecodeRes); - } - return S_OK; -} - -static void PrintRequirements(FILE *f, const char *sizeString, UInt64 size, const char *threadsString, UInt32 numThreads) -{ - fprintf(f, "\nRAM %s ", sizeString); - PrintNumber(f, (size >> 20), 5); - fprintf(f, " MB, # %s %3d", threadsString, (unsigned int)numThreads); -} - -HRESULT LzmaBenchCon( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary) -{ - if (!CrcInternalTest()) - return S_FALSE; - #ifdef BENCH_MT - UInt64 ramSize = NWindows::NSystem::GetRamSize(); // - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - PrintRequirements(f, "size: ", ramSize, "CPU hardware threads:", numCPUs); - if (numThreads == (UInt32)-1) - numThreads = numCPUs; - if (numThreads > 1) - numThreads &= ~1; - if (dictionary == (UInt32)-1) - { - int dicSizeLog; - for (dicSizeLog = 25; dicSizeLog > kBenchMinDicLogSize; dicSizeLog--) - if (GetBenchMemoryUsage(numThreads, ((UInt32)1 << dicSizeLog)) + (8 << 20) <= ramSize) - break; - dictionary = (1 << dicSizeLog); - } - #else - if (dictionary == (UInt32)-1) - dictionary = (1 << 22); - numThreads = 1; - #endif - - PrintRequirements(f, "usage:", GetBenchMemoryUsage(numThreads, dictionary), "Benchmark threads: ", numThreads); - - CBenchCallback callback; - callback.Init(); - callback.f = f; - - fprintf(f, "\n\nDict Compressing | Decompressing\n "); - int j; - for (j = 0; j < 2; j++) - { - fprintf(f, " Speed Usage R/U Rating"); - if (j == 0) - fprintf(f, kSep); - } - fprintf(f, "\n "); - for (j = 0; j < 2; j++) - { - fprintf(f, " KB/s %% MIPS MIPS"); - if (j == 0) - fprintf(f, kSep); - } - fprintf(f, "\n\n"); - for (UInt32 i = 0; i < numIterations; i++) - { - const int kStartDicLog = 22; - int pow = (dictionary < ((UInt32)1 << kStartDicLog)) ? kBenchMinDicLogSize : kStartDicLog; - while (((UInt32)1 << pow) > dictionary) - pow--; - for (; ((UInt32)1 << pow) <= dictionary; pow++) - { - fprintf(f, "%2d:", pow); - callback.dictionarySize = (UInt32)1 << pow; - HRESULT res = LzmaBench( - #ifdef EXTERNAL_LZMA - codecs, - #endif - numThreads, callback.dictionarySize, &callback); - fprintf(f, "\n"); - RINOK(res); - } - } - callback.Normalize(); - fprintf(f, "----------------------------------------------------------------\nAvr:"); - PrintTotals(f, callback.EncodeRes); - fprintf(f, " "); - PrintTotals(f, callback.DecodeRes); - fprintf(f, "\nTot:"); - CTotalBenchRes midRes; - midRes.SetMid(callback.EncodeRes, callback.DecodeRes); - PrintTotals(f, midRes); - fprintf(f, "\n"); - return S_OK; -} - -struct CTempValues -{ - UInt64 *Values; - CTempValues(UInt32 num) { Values = new UInt64[num]; } - ~CTempValues() { delete []Values; } -}; - -HRESULT CrcBenchCon(FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary) -{ - if (!CrcInternalTest()) - return S_FALSE; - - #ifdef BENCH_MT - UInt64 ramSize = NWindows::NSystem::GetRamSize(); - UInt32 numCPUs = NWindows::NSystem::GetNumberOfProcessors(); - PrintRequirements(f, "size: ", ramSize, "CPU hardware threads:", numCPUs); - if (numThreads == (UInt32)-1) - numThreads = numCPUs; - #else - numThreads = 1; - #endif - if (dictionary == (UInt32)-1) - dictionary = (1 << 24); - - CTempValues speedTotals(numThreads); - fprintf(f, "\n\nSize"); - for (UInt32 ti = 0; ti < numThreads; ti++) - { - fprintf(f, " %5d", ti + 1); - speedTotals.Values[ti] = 0; - } - fprintf(f, "\n\n"); - - UInt64 numSteps = 0; - for (UInt32 i = 0; i < numIterations; i++) - { - for (int pow = 10; pow < 32; pow++) - { - UInt32 bufSize = (UInt32)1 << pow; - if (bufSize > dictionary) - break; - fprintf(f, "%2d: ", pow); - UInt64 speed; - for (UInt32 ti = 0; ti < numThreads; ti++) - { - #ifdef BREAK_HANDLER - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - #endif - RINOK(CrcBench(ti + 1, bufSize, speed)); - PrintNumber(f, (speed >> 20), 5); - speedTotals.Values[ti] += speed; - } - fprintf(f, "\n"); - numSteps++; - } - } - if (numSteps != 0) - { - fprintf(f, "\nAvg:"); - for (UInt32 ti = 0; ti < numThreads; ti++) - PrintNumber(f, ((speedTotals.Values[ti] / numSteps) >> 20), 5); - fprintf(f, "\n"); - } - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h deleted file mode 100644 index ea8539d1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaBenchCon.h +++ /dev/null @@ -1,20 +0,0 @@ -// LzmaBenchCon.h - -#ifndef __LZMABENCHCON_H -#define __LZMABENCHCON_H - -#include -#include "../../../Common/Types.h" -#ifdef EXTERNAL_LZMA -#include "../../UI/Common/LoadCodecs.h" -#endif -HRESULT LzmaBenchCon( - #ifdef EXTERNAL_LZMA - CCodecs *codecs, - #endif - FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary); - -HRESULT CrcBenchCon(FILE *f, UInt32 numIterations, UInt32 numThreads, UInt32 dictionary); - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.cpp deleted file mode 100644 index b86d1ea9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.cpp +++ /dev/null @@ -1,226 +0,0 @@ -// LzmaRam.cpp - -#include "StdAfx.h" -#include "../../../Common/Types.h" -#include "../LZMA/LZMADecoder.h" -#include "../LZMA/LZMAEncoder.h" -#include "LzmaRam.h" - -extern "C" -{ - #include "../../../../C/Compress/Branch/BranchX86.h" -} - -class CInStreamRam: - public ISequentialInStream, - public CMyUnknownImp -{ - const Byte *Data; - size_t Size; - size_t Pos; -public: - MY_UNKNOWN_IMP - void Init(const Byte *data, size_t size) - { - Data = data; - Size = size; - Pos = 0; - } - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP CInStreamRam::Read(void *data, UInt32 size, UInt32 *processedSize) -{ - if (size > (Size - Pos)) - size = (UInt32)(Size - Pos); - for (UInt32 i = 0; i < size; i++) - ((Byte *)data)[i] = Data[Pos + i]; - Pos += size; - if(processedSize != NULL) - *processedSize = size; - return S_OK; -} - -class COutStreamRam: - public ISequentialOutStream, - public CMyUnknownImp -{ - size_t Size; -public: - Byte *Data; - size_t Pos; - bool Overflow; - void Init(Byte *data, size_t size) - { - Data = data; - Size = size; - Pos = 0; - Overflow = false; - } - void SetPos(size_t pos) - { - Overflow = false; - Pos = pos; - } - MY_UNKNOWN_IMP - HRESULT WriteByte(Byte b) - { - if (Pos >= Size) - { - Overflow = true; - return E_FAIL; - } - Data[Pos++] = b; - return S_OK; - } - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -}; - -STDMETHODIMP COutStreamRam::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - UInt32 i; - for (i = 0; i < size && Pos < Size; i++) - Data[Pos++] = ((const Byte *)data)[i]; - if(processedSize != NULL) - *processedSize = i; - if (i != size) - { - Overflow = true; - return E_FAIL; - } - return S_OK; -} - -#define SZ_RAM_E_FAIL (1) -#define SZ_RAM_E_OUTOFMEMORY (2) -#define SZE_OUT_OVERFLOW (3) - -int LzmaRamEncode( - const Byte *inBuffer, size_t inSize, - Byte *outBuffer, size_t outSize, size_t *outSizeProcessed, - UInt32 dictionarySize, ESzFilterMode filterMode) -{ - #ifndef _NO_EXCEPTIONS - try { - #endif - - *outSizeProcessed = 0; - const size_t kIdSize = 1; - const size_t kLzmaPropsSize = 5; - const size_t kMinDestSize = kIdSize + kLzmaPropsSize + 8; - if (outSize < kMinDestSize) - return SZE_OUT_OVERFLOW; - NCompress::NLZMA::CEncoder *encoderSpec = new NCompress::NLZMA::CEncoder; - CMyComPtr encoder = encoderSpec; - - PROPID propIDs[] = - { - NCoderPropID::kAlgorithm, - NCoderPropID::kDictionarySize, - NCoderPropID::kNumFastBytes, - }; - const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]); - PROPVARIANT properties[kNumProps]; - properties[0].vt = VT_UI4; - properties[1].vt = VT_UI4; - properties[2].vt = VT_UI4; - properties[0].ulVal = (UInt32)2; - properties[1].ulVal = (UInt32)dictionarySize; - properties[2].ulVal = (UInt32)64; - - if (encoderSpec->SetCoderProperties(propIDs, properties, kNumProps) != S_OK) - return 1; - - COutStreamRam *outStreamSpec = new COutStreamRam; - if (outStreamSpec == 0) - return SZ_RAM_E_OUTOFMEMORY; - CMyComPtr outStream = outStreamSpec; - CInStreamRam *inStreamSpec = new CInStreamRam; - if (inStreamSpec == 0) - return SZ_RAM_E_OUTOFMEMORY; - CMyComPtr inStream = inStreamSpec; - - outStreamSpec->Init(outBuffer, outSize); - if (outStreamSpec->WriteByte(0) != S_OK) - return SZE_OUT_OVERFLOW; - - if (encoderSpec->WriteCoderProperties(outStream) != S_OK) - return SZE_OUT_OVERFLOW; - if (outStreamSpec->Pos != kIdSize + kLzmaPropsSize) - return 1; - - int i; - for (i = 0; i < 8; i++) - { - UInt64 t = (UInt64)(inSize); - if (outStreamSpec->WriteByte((Byte)((t) >> (8 * i))) != S_OK) - return SZE_OUT_OVERFLOW; - } - - Byte *filteredStream = 0; - - bool useFilter = (filterMode != SZ_FILTER_NO); - if (useFilter) - { - if (inSize != 0) - { - filteredStream = (Byte *)MyAlloc(inSize); - if (filteredStream == 0) - return SZ_RAM_E_OUTOFMEMORY; - memmove(filteredStream, inBuffer, inSize); - } - UInt32 x86State; - x86_Convert_Init(x86State); - x86_Convert(filteredStream, (SizeT)inSize, 0, &x86State, 1); - } - - size_t minSize = 0; - int numPasses = (filterMode == SZ_FILTER_AUTO) ? 3 : 1; - bool bestIsFiltered = false; - int mainResult = 0; - size_t startPos = outStreamSpec->Pos; - for (i = 0; i < numPasses; i++) - { - if (numPasses > 1 && i == numPasses - 1 && !bestIsFiltered) - break; - outStreamSpec->SetPos(startPos); - bool curModeIsFiltered = false; - if (useFilter && i == 0) - curModeIsFiltered = true; - if (numPasses > 1 && i == numPasses - 1) - curModeIsFiltered = true; - - inStreamSpec->Init(curModeIsFiltered ? filteredStream : inBuffer, inSize); - - HRESULT lzmaResult = encoder->Code(inStream, outStream, 0, 0, 0); - - mainResult = 0; - if (lzmaResult == E_OUTOFMEMORY) - { - mainResult = SZ_RAM_E_OUTOFMEMORY; - break; - } - if (i == 0 || outStreamSpec->Pos <= minSize) - { - minSize = outStreamSpec->Pos; - bestIsFiltered = curModeIsFiltered; - } - if (outStreamSpec->Overflow) - mainResult = SZE_OUT_OVERFLOW; - else if (lzmaResult != S_OK) - { - mainResult = SZ_RAM_E_FAIL; - break; - } - } - *outSizeProcessed = outStreamSpec->Pos; - if (bestIsFiltered) - outBuffer[0] = 1; - if (useFilter) - MyFree(filteredStream); - return mainResult; - - #ifndef _NO_EXCEPTIONS - } catch(...) { return SZ_RAM_E_OUTOFMEMORY; } - #endif -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.h deleted file mode 100644 index 1244dc86..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRam.h +++ /dev/null @@ -1,46 +0,0 @@ -// LzmaRam.h - -#ifndef __LzmaRam_h -#define __LzmaRam_h - -#include -#include "../../../Common/Types.h" - -/* -LzmaRamEncode: BCJ + LZMA RAM->RAM compressing. -It uses .lzma format, but it writes one additional byte to .lzma file: - 0: - no filter - 1: - x86(BCJ) filter. - -To provide best compression ratio dictionarySize mustbe >= inSize - -LzmaRamEncode allocates Data with MyAlloc/BigAlloc functions. -RAM Requirements: - RamSize = dictionarySize * 9.5 + 6MB + FilterBlockSize - FilterBlockSize = 0, if useFilter == false - FilterBlockSize = inSize, if useFilter == true - - Return code: - 0 - OK - 1 - Unspecified Error - 2 - Memory allocating error - 3 - Output buffer OVERFLOW - -If you use SZ_FILTER_AUTO mode, then encoder will use 2 or 3 passes: - 2 passes when FILTER_NO provides better compression. - 3 passes when FILTER_YES provides better compression. -*/ - -enum ESzFilterMode -{ - SZ_FILTER_NO, - SZ_FILTER_YES, - SZ_FILTER_AUTO -}; - -int LzmaRamEncode( - const Byte *inBuffer, size_t inSize, - Byte *outBuffer, size_t outSize, size_t *outSizeProcessed, - UInt32 dictionarySize, ESzFilterMode filterMode); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.c b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.c deleted file mode 100644 index 29f798be..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.c +++ /dev/null @@ -1,78 +0,0 @@ -/* LzmaRamDecode.c */ - -#include "LzmaRamDecode.h" -#ifdef _SZ_ONE_DIRECTORY -#include "LzmaDecode.h" -#include "BranchX86.h" -#else -#include "../../../../C/Compress/Lzma/LzmaDecode.h" -#include "../../../../C/Compress/Branch/BranchX86.h" -#endif - -#define LZMA_PROPS_SIZE 14 -#define LZMA_SIZE_OFFSET 6 - -int LzmaRamGetUncompressedSize( - const unsigned char *inBuffer, - size_t inSize, - size_t *outSize) -{ - unsigned int i; - if (inSize < LZMA_PROPS_SIZE) - return 1; - *outSize = 0; - for(i = 0; i < sizeof(size_t); i++) - *outSize += ((size_t)inBuffer[LZMA_SIZE_OFFSET + i]) << (8 * i); - for(; i < 8; i++) - if (inBuffer[LZMA_SIZE_OFFSET + i] != 0) - return 1; - return 0; -} - -#define SZE_DATA_ERROR (1) -#define SZE_OUTOFMEMORY (2) - -int LzmaRamDecompress( - const unsigned char *inBuffer, - size_t inSize, - unsigned char *outBuffer, - size_t outSize, - size_t *outSizeProcessed, - void * (*allocFunc)(size_t size), - void (*freeFunc)(void *)) -{ - CLzmaDecoderState state; /* it's about 24 bytes structure, if int is 32-bit */ - int result; - SizeT outSizeProcessedLoc; - SizeT inProcessed; - int useFilter; - - if (inSize < LZMA_PROPS_SIZE) - return 1; - useFilter = inBuffer[0]; - - *outSizeProcessed = 0; - if (useFilter > 1) - return 1; - - if (LzmaDecodeProperties(&state.Properties, inBuffer + 1, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) - return 1; - state.Probs = (CProb *)allocFunc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return SZE_OUTOFMEMORY; - - result = LzmaDecode(&state, - inBuffer + LZMA_PROPS_SIZE, (SizeT)inSize - LZMA_PROPS_SIZE, &inProcessed, - outBuffer, (SizeT)outSize, &outSizeProcessedLoc); - freeFunc(state.Probs); - if (result != LZMA_RESULT_OK) - return 1; - *outSizeProcessed = (size_t)outSizeProcessedLoc; - if (useFilter == 1) - { - UInt32 x86State; - x86_Convert_Init(x86State); - x86_Convert(outBuffer, (SizeT)outSizeProcessedLoc, 0, &x86State, 0); - } - return 0; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.h deleted file mode 100644 index 7e641c55..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/LzmaRamDecode.h +++ /dev/null @@ -1,55 +0,0 @@ -/* LzmaRamDecode.h */ - -#ifndef __LzmaRamDecode_h -#define __LzmaRamDecode_h - -#include - -/* -LzmaRamGetUncompressedSize: - In: - inBuffer - input data - inSize - input data size - Out: - outSize - uncompressed size - Return code: - 0 - OK - 1 - Error in headers -*/ - -int LzmaRamGetUncompressedSize( - const unsigned char *inBuffer, - size_t inSize, - size_t *outSize); - - -/* -LzmaRamDecompress: - In: - inBuffer - input data - inSize - input data size - outBuffer - output data - outSize - output size - allocFunc - alloc function (can be malloc) - freeFunc - free function (can be free) - Out: - outSizeProcessed - processed size - Return code: - 0 - OK - 1 - Error in headers / data stream - 2 - Memory allocating error - -Memory requirements depend from properties of LZMA stream. -With default lzma settings it's about 16 KB. -*/ - -int LzmaRamDecompress( - const unsigned char *inBuffer, - size_t inSize, - unsigned char *outBuffer, - size_t outSize, - size_t *outSizeProcessed, - void * (*allocFunc)(size_t size), - void (*freeFunc)(void *)); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.h deleted file mode 100644 index e7fb6986..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/StdAfx.h +++ /dev/null @@ -1,8 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile deleted file mode 100644 index 16e76376..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile +++ /dev/null @@ -1,136 +0,0 @@ -PROG = lzma.exe -CFLAGS = $(CFLAGS) \ - -DCOMPRESS_MF_MT \ - -DBENCH_MT \ - -LIBS = $(LIBS) oleaut32.lib user32.lib - -!IFDEF CPU -LIBS = $(LIBS) bufferoverflowU.lib -CFLAGS = $(CFLAGS) -GS- -Zc:forScope -W4 -Wp64 -DUNICODE -D_UNICODE -!ENDIF - -!IFNDEF O -!IFDEF CPU -O=$(CPU) -!ELSE -O=O -!ENDIF -!ENDIF - -!IFDEF MY_STATIC_LINK -!IFNDEF MY_SINGLE_THREAD -CFLAGS = $(CFLAGS) -MT -!ENDIF -!ELSE -CFLAGS = $(CFLAGS) -MD -!ENDIF - -CFLAGS = $(CFLAGS) -nologo -EHsc -c -Fo$O/ -CFLAGS_O1 = $(CFLAGS) -O1 -CFLAGS_O2 = $(CFLAGS) -O2 - -LFLAGS = $(LFLAGS) -nologo -OPT:NOWIN98 - -PROGPATH = $O\$(PROG) - -COMPL_O1 = $(CPP) $(CFLAGS_O1) $** -COMPL_O2 = $(CPP) $(CFLAGS_O2) $** -COMPL = $(CPP) $(CFLAGS_O1) $** - - -LZMA_OBJS = \ - $O\LzmaAlone.obj \ - $O\LzmaBench.obj \ - $O\LzmaBenchCon.obj \ - $O\LzmaRam.obj \ - -LZMA_OPT_OBJS = \ - $O\LZMADecoder.obj \ - $O\LZMAEncoder.obj \ - -COMMON_OBJS = \ - $O\CommandLineParser.obj \ - $O\CRC.obj \ - $O\IntToString.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj - -WIN_OBJS = \ - $O\System.obj - -7ZIP_COMMON_OBJS = \ - $O\InBuffer.obj \ - $O\OutBuffer.obj \ - $O\StreamUtils.obj \ - -LZ_OBJS = \ - $O\LZOutWindow.obj \ - -C_OBJS = \ - $O\Alloc.obj \ - $O\7zCrc.obj \ - $O\Threads.obj \ - -C_LZ_OBJS = \ - $O\MatchFinder.obj \ - $O\MatchFinderMt.obj \ - -OBJS = \ - $(LZMA_OBJS) \ - $(LZMA_OPT_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - $(LZ_OBJS) \ - $(C_OBJS) \ - $(C_LZ_OBJS) \ - $O\LzmaRamDecode.obj \ - $O\LzmaDecode.obj \ - $O\FileStreams.obj \ - $O\FileIO.obj \ - $O\RangeCoderBit.obj \ - $O\BranchX86.obj \ - -all: $(PROGPATH) - -clean: - -del /Q $(PROGPATH) $O\*.exe $O\*.dll $O\*.obj $O\*.lib $O\*.exp $O\*.res $O\*.pch - -$O: - if not exist "$O" mkdir "$O" - -$(PROGPATH): $O $(OBJS) - link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS) - - -$(LZMA_OBJS): $(*B).cpp - $(COMPL) -$(LZMA_OPT_OBJS): ../LZMA/$(*B).cpp - $(COMPL_O2) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) -$(LZ_OBJS): ../LZ/$(*B).cpp - $(COMPL) -$O\RangeCoderBit.obj: ../RangeCoder/$(*B).cpp - $(COMPL) -$O\LzmaRamDecode.obj: LzmaRamDecode.c - $(COMPL_O1) -$O\LzmaDecode.obj: ../../../../C/Compress/Lzma/LzmaDecode.c - $(COMPL_O2) -$O\BranchX86.obj: ../../../../C/Compress/Branch/BranchX86.c - $(COMPL_O2) -$O\FileStreams.obj: ../../Common/FileStreams.cpp - $(COMPL) -$O\FileIO.obj: ../../../Windows/FileIO.cpp - $(COMPL) -$(C_OBJS): ../../../../C/$(*B).c - $(COMPL_O2) -$(C_LZ_OBJS): ../../../../C/Compress/Lz/$(*B).c - $(COMPL_O2) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile.gcc b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile.gcc deleted file mode 100644 index 4fed05e6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/LZMA_Alone/makefile.gcc +++ /dev/null @@ -1,139 +0,0 @@ -PROG = lzma -CXX = g++ -O2 -Wall -CXX_C = gcc -O2 -Wall -LIB = -lm -RM = rm -f -CFLAGS = -c - -ifdef SystemDrive -IS_MINGW = 1 -endif - -ifdef IS_MINGW -FILE_IO =FileIO -FILE_IO_2 =Windows/$(FILE_IO) -LIB2 = -luuid -else -FILE_IO =C_FileIO -FILE_IO_2 =Common/$(FILE_IO) -endif - -OBJS = \ - LzmaAlone.o \ - LzmaBench.o \ - LzmaBenchCon.o \ - LzmaRam.o \ - LZMADecoder.o \ - LZMAEncoder.o \ - LZOutWindow.o \ - RangeCoderBit.o \ - InBuffer.o \ - OutBuffer.o \ - FileStreams.o \ - StreamUtils.o \ - $(FILE_IO).o \ - CommandLineParser.o \ - CRC.o \ - IntToString.o \ - MyString.o \ - StringConvert.o \ - StringToInt.o \ - MyVector.o \ - 7zCrc.o \ - Alloc.o \ - BranchX86.o \ - MatchFinder.o \ - LzmaDecode.o \ - LzmaRamDecode.o \ - - -all: $(PROG) - -$(PROG): $(OBJS) - $(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2) - -LzmaAlone.o: LzmaAlone.cpp - $(CXX) $(CFLAGS) LzmaAlone.cpp - -LzmaBench.o: LzmaBench.cpp - $(CXX) $(CFLAGS) LzmaBench.cpp - -LzmaBenchCon.o: LzmaBenchCon.cpp - $(CXX) $(CFLAGS) LzmaBenchCon.cpp - -LzmaRam.o: LzmaRam.cpp - $(CXX) $(CFLAGS) LzmaRam.cpp - -LZMADecoder.o: ../LZMA/LZMADecoder.cpp - $(CXX) $(CFLAGS) ../LZMA/LZMADecoder.cpp - -LZMAEncoder.o: ../LZMA/LZMAEncoder.cpp - $(CXX) $(CFLAGS) ../LZMA/LZMAEncoder.cpp - -LZOutWindow.o: ../LZ/LZOutWindow.cpp - $(CXX) $(CFLAGS) ../LZ/LZOutWindow.cpp - -RangeCoderBit.o: ../RangeCoder/RangeCoderBit.cpp - $(CXX) $(CFLAGS) ../RangeCoder/RangeCoderBit.cpp - -InBuffer.o: ../../Common/InBuffer.cpp - $(CXX) $(CFLAGS) ../../Common/InBuffer.cpp - -OutBuffer.o: ../../Common/OutBuffer.cpp - $(CXX) $(CFLAGS) ../../Common/OutBuffer.cpp - -FileStreams.o: ../../Common/FileStreams.cpp - $(CXX) $(CFLAGS) ../../Common/FileStreams.cpp - -StreamUtils.o: ../../Common/StreamUtils.cpp - $(CXX) $(CFLAGS) ../../Common/StreamUtils.cpp - -$(FILE_IO).o: ../../../$(FILE_IO_2).cpp - $(CXX) $(CFLAGS) ../../../$(FILE_IO_2).cpp - - -CommandLineParser.o: ../../../Common/CommandLineParser.cpp - $(CXX) $(CFLAGS) ../../../Common/CommandLineParser.cpp - -CRC.o: ../../../Common/CRC.cpp - $(CXX) $(CFLAGS) ../../../Common/CRC.cpp - -MyWindows.o: ../../../Common/MyWindows.cpp - $(CXX) $(CFLAGS) ../../../Common/MyWindows.cpp - -IntToString.o: ../../../Common/IntToString.cpp - $(CXX) $(CFLAGS) ../../../Common/IntToString.cpp - -MyString.o: ../../../Common/MyString.cpp - $(CXX) $(CFLAGS) ../../../Common/MyString.cpp - -StringConvert.o: ../../../Common/StringConvert.cpp - $(CXX) $(CFLAGS) ../../../Common/StringConvert.cpp - -StringToInt.o: ../../../Common/StringToInt.cpp - $(CXX) $(CFLAGS) ../../../Common/StringToInt.cpp - -MyVector.o: ../../../Common/MyVector.cpp - $(CXX) $(CFLAGS) ../../../Common/MyVector.cpp - -7zCrc.o: ../../../../C/7zCrc.c - $(CXX_C) $(CFLAGS) ../../../../C/7zCrc.c - -Alloc.o: ../../../../C/Alloc.c - $(CXX_C) $(CFLAGS) ../../../../C/Alloc.c - -BranchX86.o: ../../../../C/Compress/Branch/BranchX86.c - $(CXX_C) $(CFLAGS) ../../../../C/Compress/Branch/BranchX86.c - -MatchFinder.o: ../../../../C/Compress/Lz/MatchFinder.c - $(CXX_C) $(CFLAGS) ../../../../C/Compress/Lz/MatchFinder.c - -LzmaDecode.o: ../../../../C/Compress/Lzma/LzmaDecode.c - $(CXX_C) $(CFLAGS) ../../../../C/Compress/Lzma/LzmaDecode.c - -LzmaRamDecode.o: LzmaRamDecode.c - $(CXX_C) $(CFLAGS) LzmaRamDecode.c - -clean: - -$(RM) $(PROG) $(OBJS) - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoder.h deleted file mode 100644 index bbb2ba82..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoder.h +++ /dev/null @@ -1,205 +0,0 @@ -// Compress/RangeCoder/RangeCoder.h - -#ifndef __COMPRESS_RANGECODER_H -#define __COMPRESS_RANGECODER_H - -#include "../../Common/InBuffer.h" -#include "../../Common/OutBuffer.h" - -namespace NCompress { -namespace NRangeCoder { - -const int kNumTopBits = 24; -const UInt32 kTopValue = (1 << kNumTopBits); - -class CEncoder -{ - UInt32 _cacheSize; - Byte _cache; -public: - UInt64 Low; - UInt32 Range; - COutBuffer Stream; - bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); } - - void SetStream(ISequentialOutStream *stream) { Stream.SetStream(stream); } - void Init() - { - Stream.Init(); - Low = 0; - Range = 0xFFFFFFFF; - _cacheSize = 1; - _cache = 0; - } - - void FlushData() - { - // Low += 1; - for(int i = 0; i < 5; i++) - ShiftLow(); - } - - HRESULT FlushStream() { return Stream.Flush(); } - - void ReleaseStream() { Stream.ReleaseStream(); } - - void Encode(UInt32 start, UInt32 size, UInt32 total) - { - Low += start * (Range /= total); - Range *= size; - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - void ShiftLow() - { - if ((UInt32)Low < (UInt32)0xFF000000 || (int)(Low >> 32) != 0) - { - Byte temp = _cache; - do - { - Stream.WriteByte((Byte)(temp + (Byte)(Low >> 32))); - temp = 0xFF; - } - while(--_cacheSize != 0); - _cache = (Byte)((UInt32)Low >> 24); - } - _cacheSize++; - Low = (UInt32)Low << 8; - } - - void EncodeDirectBits(UInt32 value, int numTotalBits) - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>= 1; - if (((value >> i) & 1) == 1) - Low += Range; - if (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - } - - void EncodeBit(UInt32 size0, UInt32 numTotalBits, UInt32 symbol) - { - UInt32 newBound = (Range >> numTotalBits) * size0; - if (symbol == 0) - Range = newBound; - else - { - Low += newBound; - Range -= newBound; - } - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - UInt64 GetProcessedSize() { return Stream.GetProcessedSize() + _cacheSize + 4; } -}; - -class CDecoder -{ -public: - CInBuffer Stream; - UInt32 Range; - UInt32 Code; - bool Create(UInt32 bufferSize) { return Stream.Create(bufferSize); } - - void Normalize() - { - while (Range < kTopValue) - { - Code = (Code << 8) | Stream.ReadByte(); - Range <<= 8; - } - } - - void SetStream(ISequentialInStream *stream) { Stream.SetStream(stream); } - void Init() - { - Stream.Init(); - Code = 0; - Range = 0xFFFFFFFF; - for(int i = 0; i < 5; i++) - Code = (Code << 8) | Stream.ReadByte(); - } - - void ReleaseStream() { Stream.ReleaseStream(); } - - UInt32 GetThreshold(UInt32 total) - { - return (Code) / ( Range /= total); - } - - void Decode(UInt32 start, UInt32 size) - { - Code -= start * Range; - Range *= size; - Normalize(); - } - - UInt32 DecodeDirectBits(int numTotalBits) - { - UInt32 range = Range; - UInt32 code = Code; - UInt32 result = 0; - for (int i = numTotalBits; i != 0; i--) - { - range >>= 1; - /* - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - */ - UInt32 t = (code - range) >> 31; - code -= range & (t - 1); - result = (result << 1) | (1 - t); - - if (range < kTopValue) - { - code = (code << 8) | Stream.ReadByte(); - range <<= 8; - } - } - Range = range; - Code = code; - return result; - } - - UInt32 DecodeBit(UInt32 size0, UInt32 numTotalBits) - { - UInt32 newBound = (Range >> numTotalBits) * size0; - UInt32 symbol; - if (Code < newBound) - { - symbol = 0; - Range = newBound; - } - else - { - symbol = 1; - Code -= newBound; - Range -= newBound; - } - Normalize(); - return symbol; - } - - UInt64 GetProcessedSize() {return Stream.GetProcessedSize(); } -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp deleted file mode 100644 index 8e4c4d3a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// Compress/RangeCoder/RangeCoderBit.cpp - -#include "StdAfx.h" - -#include "RangeCoderBit.h" - -namespace NCompress { -namespace NRangeCoder { - -UInt32 CPriceTables::ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; -static CPriceTables g_PriceTables; - -CPriceTables::CPriceTables() { Init(); } - -void CPriceTables::Init() -{ - const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for(int i = kNumBits - 1; i >= 0; i--) - { - UInt32 start = 1 << (kNumBits - i - 1); - UInt32 end = 1 << (kNumBits - i); - for (UInt32 j = start; j < end; j++) - ProbPrices[j] = (i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1)); - } - - /* - // simplest: bad solution - for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++) - ProbPrices[i] = kBitPrice; - */ - - /* - const double kDummyMultMid = (1.0 / kBitPrice) / 2; - const double kDummyMultMid = 0; - // float solution - double ln2 = log(double(2)); - double lnAll = log(double(kBitModelTotal >> kNumMoveReducingBits)); - for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++) - ProbPrices[i] = UInt32((fabs(lnAll - log(double(i))) / ln2 + kDummyMultMid) * kBitPrice); - */ - - /* - // experimental, slow, solution: - for(UInt32 i = 1; i < (kBitModelTotal >> kNumMoveReducingBits) - 1; i++) - { - const int kCyclesBits = 5; - const UInt32 kCycles = (1 << kCyclesBits); - - UInt32 range = UInt32(-1); - UInt32 bitCount = 0; - for (UInt32 j = 0; j < kCycles; j++) - { - range >>= (kNumBitModelTotalBits - kNumMoveReducingBits); - range *= i; - while(range < (1 << 31)) - { - range <<= 1; - bitCount++; - } - } - bitCount <<= kNumBitPriceShiftBits; - range -= (1 << 31); - for (int k = kNumBitPriceShiftBits - 1; k >= 0; k--) - { - range <<= 1; - if (range > (1 << 31)) - { - bitCount += (1 << k); - range -= (1 << 31); - } - } - ProbPrices[i] = (bitCount - // + (1 << (kCyclesBits - 1)) - ) >> kCyclesBits; - } - */ -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.h deleted file mode 100644 index 624f887c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBit.h +++ /dev/null @@ -1,120 +0,0 @@ -// Compress/RangeCoder/RangeCoderBit.h - -#ifndef __COMPRESS_RANGECODER_BIT_H -#define __COMPRESS_RANGECODER_BIT_H - -#include "RangeCoder.h" - -namespace NCompress { -namespace NRangeCoder { - -const int kNumBitModelTotalBits = 11; -const UInt32 kBitModelTotal = (1 << kNumBitModelTotalBits); - -const int kNumMoveReducingBits = 2; - -const int kNumBitPriceShiftBits = 6; -const UInt32 kBitPrice = 1 << kNumBitPriceShiftBits; - -class CPriceTables -{ -public: - static UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; - static void Init(); - CPriceTables(); -}; - -template -class CBitModel -{ -public: - UInt32 Prob; - void UpdateModel(UInt32 symbol) - { - /* - Prob -= (Prob + ((symbol - 1) & ((1 << numMoveBits) - 1))) >> numMoveBits; - Prob += (1 - symbol) << (kNumBitModelTotalBits - numMoveBits); - */ - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> numMoveBits; - else - Prob -= (Prob) >> numMoveBits; - } -public: - void Init() { Prob = kBitModelTotal / 2; } -}; - -template -class CBitEncoder: public CBitModel -{ -public: - void Encode(CEncoder *encoder, UInt32 symbol) - { - /* - encoder->EncodeBit(this->Prob, kNumBitModelTotalBits, symbol); - this->UpdateModel(symbol); - */ - UInt32 newBound = (encoder->Range >> kNumBitModelTotalBits) * this->Prob; - if (symbol == 0) - { - encoder->Range = newBound; - this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits; - } - else - { - encoder->Low += newBound; - encoder->Range -= newBound; - this->Prob -= (this->Prob) >> numMoveBits; - } - if (encoder->Range < kTopValue) - { - encoder->Range <<= 8; - encoder->ShiftLow(); - } - } - UInt32 GetPrice(UInt32 symbol) const - { - return CPriceTables::ProbPrices[ - (((this->Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits]; - } - UInt32 GetPrice0() const { return CPriceTables::ProbPrices[this->Prob >> kNumMoveReducingBits]; } - UInt32 GetPrice1() const { return CPriceTables::ProbPrices[(kBitModelTotal - this->Prob) >> kNumMoveReducingBits]; } -}; - - -template -class CBitDecoder: public CBitModel -{ -public: - UInt32 Decode(CDecoder *decoder) - { - UInt32 newBound = (decoder->Range >> kNumBitModelTotalBits) * this->Prob; - if (decoder->Code < newBound) - { - decoder->Range = newBound; - this->Prob += (kBitModelTotal - this->Prob) >> numMoveBits; - if (decoder->Range < kTopValue) - { - decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte(); - decoder->Range <<= 8; - } - return 0; - } - else - { - decoder->Range -= newBound; - decoder->Code -= newBound; - this->Prob -= (this->Prob) >> numMoveBits; - if (decoder->Range < kTopValue) - { - decoder->Code = (decoder->Code << 8) | decoder->Stream.ReadByte(); - decoder->Range <<= 8; - } - return 1; - } - } -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBitTree.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBitTree.h deleted file mode 100644 index 4f0c78b4..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderBitTree.h +++ /dev/null @@ -1,161 +0,0 @@ -// Compress/RangeCoder/RangeCoderBitTree.h - -#ifndef __COMPRESS_RANGECODER_BIT_TREE_H -#define __COMPRESS_RANGECODER_BIT_TREE_H - -#include "RangeCoderBit.h" -#include "RangeCoderOpt.h" - -namespace NCompress { -namespace NRangeCoder { - -template -class CBitTreeEncoder -{ - CBitEncoder Models[1 << NumBitLevels]; -public: - void Init() - { - for(UInt32 i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - void Encode(CEncoder *rangeEncoder, UInt32 symbol) - { - UInt32 modelIndex = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0 ;) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - Models[modelIndex].Encode(rangeEncoder, bit); - modelIndex = (modelIndex << 1) | bit; - } - }; - void ReverseEncode(CEncoder *rangeEncoder, UInt32 symbol) - { - UInt32 modelIndex = 1; - for (int i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[modelIndex].Encode(rangeEncoder, bit); - modelIndex = (modelIndex << 1) | bit; - symbol >>= 1; - } - } - UInt32 GetPrice(UInt32 symbol) const - { - symbol |= (1 << NumBitLevels); - UInt32 price = 0; - while (symbol != 1) - { - price += Models[symbol >> 1].GetPrice(symbol & 1); - symbol >>= 1; - } - return price; - } - UInt32 ReverseGetPrice(UInt32 symbol) const - { - UInt32 price = 0; - UInt32 modelIndex = 1; - for (int i = NumBitLevels; i != 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[modelIndex].GetPrice(bit); - modelIndex = (modelIndex << 1) | bit; - } - return price; - } -}; - -template -class CBitTreeDecoder -{ - CBitDecoder Models[1 << NumBitLevels]; -public: - void Init() - { - for(UInt32 i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - UInt32 Decode(CDecoder *rangeDecoder) - { - UInt32 modelIndex = 1; - RC_INIT_VAR - for(int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--) - { - // modelIndex = (modelIndex << 1) + Models[modelIndex].Decode(rangeDecoder); - RC_GETBIT(numMoveBits, Models[modelIndex].Prob, modelIndex) - } - RC_FLUSH_VAR - return modelIndex - (1 << NumBitLevels); - }; - UInt32 ReverseDecode(CDecoder *rangeDecoder) - { - UInt32 modelIndex = 1; - UInt32 symbol = 0; - RC_INIT_VAR - for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - // UInt32 bit = Models[modelIndex].Decode(rangeDecoder); - // modelIndex <<= 1; - // modelIndex += bit; - // symbol |= (bit << bitIndex); - RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex)) - } - RC_FLUSH_VAR - return symbol; - } -}; - -template -void ReverseBitTreeEncode(CBitEncoder *Models, - CEncoder *rangeEncoder, int NumBitLevels, UInt32 symbol) -{ - UInt32 modelIndex = 1; - for (int i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[modelIndex].Encode(rangeEncoder, bit); - modelIndex = (modelIndex << 1) | bit; - symbol >>= 1; - } -} - -template -UInt32 ReverseBitTreeGetPrice(CBitEncoder *Models, - UInt32 NumBitLevels, UInt32 symbol) -{ - UInt32 price = 0; - UInt32 modelIndex = 1; - for (int i = NumBitLevels; i != 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[modelIndex].GetPrice(bit); - modelIndex = (modelIndex << 1) | bit; - } - return price; -} - -template -UInt32 ReverseBitTreeDecode(CBitDecoder *Models, - CDecoder *rangeDecoder, int NumBitLevels) -{ - UInt32 modelIndex = 1; - UInt32 symbol = 0; - RC_INIT_VAR - for(int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - // UInt32 bit = Models[modelIndex].Decode(rangeDecoder); - // modelIndex <<= 1; - // modelIndex += bit; - // symbol |= (bit << bitIndex); - RC_GETBIT2(numMoveBits, Models[modelIndex].Prob, modelIndex, ; , symbol |= (1 << bitIndex)) - } - RC_FLUSH_VAR - return symbol; -} - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderOpt.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderOpt.h deleted file mode 100644 index 668b9a5b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/RangeCoderOpt.h +++ /dev/null @@ -1,31 +0,0 @@ -// Compress/RangeCoder/RangeCoderOpt.h - -#ifndef __COMPRESS_RANGECODER_OPT_H -#define __COMPRESS_RANGECODER_OPT_H - -#define RC_INIT_VAR \ - UInt32 range = rangeDecoder->Range; \ - UInt32 code = rangeDecoder->Code; - -#define RC_FLUSH_VAR \ - rangeDecoder->Range = range; \ - rangeDecoder->Code = code; - -#define RC_NORMALIZE \ - if (range < NCompress::NRangeCoder::kTopValue) \ - { code = (code << 8) | rangeDecoder->Stream.ReadByte(); range <<= 8; } - -#define RC_GETBIT2(numMoveBits, prob, mi, A0, A1) \ - { UInt32 bound = (range >> NCompress::NRangeCoder::kNumBitModelTotalBits) * prob; \ - if (code < bound) \ - { A0; range = bound; \ - prob += (NCompress::NRangeCoder::kBitModelTotal - prob) >> numMoveBits; \ - mi <<= 1; } \ - else \ - { A1; range -= bound; code -= bound; prob -= (prob) >> numMoveBits; \ - mi = (mi + mi) + 1; }} \ - RC_NORMALIZE - -#define RC_GETBIT(numMoveBits, prob, mi) RC_GETBIT2(numMoveBits, prob, mi, ; , ;) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/StdAfx.h deleted file mode 100644 index b637fd40..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/Compress/RangeCoder/StdAfx.h +++ /dev/null @@ -1,6 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/ICoder.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/ICoder.h deleted file mode 100644 index a4976534..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/ICoder.h +++ /dev/null @@ -1,185 +0,0 @@ -// ICoder.h - -#ifndef __ICODER_H -#define __ICODER_H - -#include "IStream.h" - -#define CODER_INTERFACE(i, x) DECL_INTERFACE(i, 4, x) - -CODER_INTERFACE(ICompressProgressInfo, 0x04) -{ - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE; -}; - -CODER_INTERFACE(ICompressCoder, 0x05) -{ - STDMETHOD(Code)(ISequentialInStream *inStream, - ISequentialOutStream *outStream, - const UInt64 *inSize, - const UInt64 *outSize, - ICompressProgressInfo *progress) PURE; -}; - -CODER_INTERFACE(ICompressCoder2, 0x18) -{ - STDMETHOD(Code)(ISequentialInStream **inStreams, - const UInt64 **inSizes, - UInt32 numInStreams, - ISequentialOutStream **outStreams, - const UInt64 **outSizes, - UInt32 numOutStreams, - ICompressProgressInfo *progress) PURE; -}; - -namespace NCoderPropID -{ - enum EEnum - { - kDictionarySize = 0x400, - kUsedMemorySize, - kOrder, - kPosStateBits = 0x440, - kLitContextBits, - kLitPosBits, - kNumFastBytes = 0x450, - kMatchFinder, - kMatchFinderCycles, - kNumPasses = 0x460, - kAlgorithm = 0x470, - kMultiThread = 0x480, - kNumThreads, - kEndMarker = 0x490 - }; -} - -CODER_INTERFACE(ICompressSetCoderProperties, 0x20) -{ - STDMETHOD(SetCoderProperties)(const PROPID *propIDs, - const PROPVARIANT *properties, UInt32 numProperties) PURE; -}; - -/* -CODER_INTERFACE(ICompressSetCoderProperties, 0x21) -{ - STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE; -}; -*/ - -CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22) -{ - STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE; -}; - -CODER_INTERFACE(ICompressWriteCoderProperties, 0x23) -{ - STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStreams) PURE; -}; - -CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24) -{ - STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE; -}; - -CODER_INTERFACE(ICompressSetCoderMt, 0x25) -{ - STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE; -}; - -CODER_INTERFACE(ICompressGetSubStreamSize, 0x30) -{ - STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE; -}; - -CODER_INTERFACE(ICompressSetInStream, 0x31) -{ - STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE; - STDMETHOD(ReleaseInStream)() PURE; -}; - -CODER_INTERFACE(ICompressSetOutStream, 0x32) -{ - STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE; - STDMETHOD(ReleaseOutStream)() PURE; -}; - -CODER_INTERFACE(ICompressSetInStreamSize, 0x33) -{ - STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE; -}; - -CODER_INTERFACE(ICompressSetOutStreamSize, 0x34) -{ - STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE; -}; - -CODER_INTERFACE(ICompressFilter, 0x40) -{ - STDMETHOD(Init)() PURE; - STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE; - // Filter return outSize (UInt32) - // if (outSize <= size): Filter have converted outSize bytes - // if (outSize > size): Filter have not converted anything. - // and it needs at least outSize bytes to convert one block - // (it's for crypto block algorithms). -}; - -CODER_INTERFACE(ICompressCodecsInfo, 0x60) -{ - STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods) PURE; - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE; - STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE; - STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE; -}; -CODER_INTERFACE(ISetCompressCodecsInfo, 0x61) -{ - STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE; -}; - -CODER_INTERFACE(ICryptoProperties, 0x80) -{ - STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE; - STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE; -}; - -/* -CODER_INTERFACE(ICryptoResetSalt, 0x88) -{ - STDMETHOD(ResetSalt)() PURE; -}; -*/ - -CODER_INTERFACE(ICryptoResetInitVector, 0x8C) -{ - STDMETHOD(ResetInitVector)() PURE; -}; - -CODER_INTERFACE(ICryptoSetPassword, 0x90) -{ - STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE; -}; - -CODER_INTERFACE(ICryptoSetCRC, 0xA0) -{ - STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE; -}; - -////////////////////// -// It's for DLL file -namespace NMethodPropID -{ - enum EEnum - { - kID, - kName, - kDecoder, - kEncoder, - kInStreams, - kOutStreams, - kDescription, - kDecoderIsAssigned, - kEncoderIsAssigned - }; -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IDecl.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IDecl.h deleted file mode 100644 index 8316eb3a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IDecl.h +++ /dev/null @@ -1,15 +0,0 @@ -// IDecl.h - -#ifndef __IDECL_H -#define __IDECL_H - -#include "../Common/MyUnknown.h" - -#define DECL_INTERFACE_SUB(i, base, groupId, subId) \ -DEFINE_GUID(IID_ ## i, \ -0x23170F69, 0x40C1, 0x278A, 0, 0, 0, (groupId), 0, (subId), 0, 0); \ -struct i: public base - -#define DECL_INTERFACE(i, groupId, subId) DECL_INTERFACE_SUB(i, IUnknown, groupId, subId) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IPassword.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IPassword.h deleted file mode 100644 index 3ca7b090..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IPassword.h +++ /dev/null @@ -1,24 +0,0 @@ -// IPassword.h - -#ifndef __IPASSWORD_H -#define __IPASSWORD_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -#define PASSWORD_INTERFACE(i, x) DECL_INTERFACE(i, 5, x) - -PASSWORD_INTERFACE(ICryptoGetTextPassword, 0x10) -{ - STDMETHOD(CryptoGetTextPassword)(BSTR *password) PURE; -}; - -PASSWORD_INTERFACE(ICryptoGetTextPassword2, 0x11) -{ - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password) PURE; -}; - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IProgress.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IProgress.h deleted file mode 100644 index f5f54b28..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IProgress.h +++ /dev/null @@ -1,30 +0,0 @@ -// Interface/IProgress.h - -#ifndef __IPROGRESS_H -#define __IPROGRESS_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -DECL_INTERFACE(IProgress, 0, 5) -{ - STDMETHOD(SetTotal)(UInt64 total) PURE; - STDMETHOD(SetCompleted)(const UInt64 *completeValue) PURE; -}; - -/* -// {23170F69-40C1-278A-0000-000000050002} -DEFINE_GUID(IID_IProgress2, -0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02); -MIDL_INTERFACE("23170F69-40C1-278A-0000-000000050002") -IProgress2: public IUnknown -{ -public: - STDMETHOD(SetTotal)(const UInt64 *total) PURE; - STDMETHOD(SetCompleted)(const UInt64 *completeValue) PURE; -}; -*/ - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IStream.h deleted file mode 100644 index a19d04f9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/IStream.h +++ /dev/null @@ -1,58 +0,0 @@ -// IStream.h - -#ifndef __ISTREAM_H -#define __ISTREAM_H - -#include "../Common/MyUnknown.h" -#include "../Common/Types.h" - -#include "IDecl.h" - -#define STREAM_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 3, x) -#define STREAM_INTERFACE(i, x) STREAM_INTERFACE_SUB(i, IUnknown, x) - -STREAM_INTERFACE(ISequentialInStream, 0x01) -{ - STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE; - /* - Out: if size != 0, return_value = S_OK and (*processedSize == 0), - then there are no more bytes in stream. - if (size > 0) && there are bytes in stream, - this function must read at least 1 byte. - This function is allowed to read less than number of remaining bytes in stream. - You must call Read function in loop, if you need exact amount of data - */ -}; - -STREAM_INTERFACE(ISequentialOutStream, 0x02) -{ - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE; - /* - if (size > 0) this function must write at least 1 byte. - This function is allowed to write less than "size". - You must call Write function in loop, if you need to write exact amount of data - */ -}; - -STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03) -{ - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE; -}; - -STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04) -{ - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE; - STDMETHOD(SetSize)(Int64 newSize) PURE; -}; - -STREAM_INTERFACE(IStreamGetSize, 0x06) -{ - STDMETHOD(GetSize)(UInt64 *size) PURE; -}; - -STREAM_INTERFACE(IOutStreamFlush, 0x07) -{ - STDMETHOD(Flush)() PURE; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersion.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersion.h deleted file mode 100644 index af5c7d31..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersion.h +++ /dev/null @@ -1,8 +0,0 @@ -#define MY_VER_MAJOR 4 -#define MY_VER_MINOR 57 -#define MY_VER_BUILD 0 -#define MY_VERSION "4.57" -#define MY_7ZIP_VERSION "7-Zip 4.57" -#define MY_DATE "2007-12-06" -#define MY_COPYRIGHT "Copyright (c) 1999-2007 Igor Pavlov" -#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersionInfo.rc b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersionInfo.rc deleted file mode 100644 index c3712b16..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/MyVersionInfo.rc +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include "MyVersion.h" - -#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0 - -#ifdef DEBUG -#define DBG_FL VS_FF_DEBUG -#else -#define DBG_FL 0 -#endif - -#define MY_VERSION_INFO(fileType, descr, intName, origName) \ -LANGUAGE 9, 1 \ -1 VERSIONINFO \ - FILEVERSION MY_VER \ - PRODUCTVERSION MY_VER \ - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK \ - FILEFLAGS DBG_FL \ - FILEOS VOS_NT_WINDOWS32 \ - FILETYPE fileType \ - FILESUBTYPE 0x0L \ -BEGIN \ - BLOCK "StringFileInfo" \ - BEGIN \ - BLOCK "040904b0" \ - BEGIN \ - VALUE "CompanyName", "Igor Pavlov" \ - VALUE "FileDescription", descr \ - VALUE "FileVersion", MY_VERSION \ - VALUE "InternalName", intName \ - VALUE "LegalCopyright", MY_COPYRIGHT \ - VALUE "OriginalFilename", origName \ - VALUE "ProductName", "7-Zip" \ - VALUE "ProductVersion", MY_VERSION \ - END \ - END \ - BLOCK "VarFileInfo" \ - BEGIN \ - VALUE "Translation", 0x409, 1200 \ - END \ -END - -#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(VFT_APP, descr, intName, intName ".exe") - -#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(VFT_DLL, descr, intName, intName ".dll") diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/PropID.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/PropID.h deleted file mode 100644 index a13fe27f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/PropID.h +++ /dev/null @@ -1,60 +0,0 @@ -// Interface/PropID.h - -#ifndef __INTERFACE_PROPID_H -#define __INTERFACE_PROPID_H - -enum -{ - kpidNoProperty = 0, - - kpidHandlerItemIndex = 2, - kpidPath, - kpidName, - kpidExtension, - kpidIsFolder, - kpidSize, - kpidPackedSize, - kpidAttributes, - kpidCreationTime, - kpidLastAccessTime, - kpidLastWriteTime, - kpidSolid, - kpidCommented, - kpidEncrypted, - kpidSplitBefore, - kpidSplitAfter, - kpidDictionarySize, - kpidCRC, - kpidType, - kpidIsAnti, - kpidMethod, - kpidHostOS, - kpidFileSystem, - kpidUser, - kpidGroup, - kpidBlock, - kpidComment, - kpidPosition, - kpidPrefix, - kpidNumSubFolders, - kpidNumSubFiles, - kpidUnpackVer, - kpidVolume, - kpidIsVolume, - kpidOffset, - kpidLinks, - kpidNumBlocks, - kpidNumVolumes, - - kpidTotalSize = 0x1100, - kpidFreeSpace, - kpidClusterSize, - kpidVolumeName, - - kpidLocalName = 0x1200, - kpidProvider, - - kpidUserDefined = 0x10000 -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.cpp deleted file mode 100644 index fce1c4f6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +++ /dev/null @@ -1,880 +0,0 @@ -// Client7z.cpp - -#include "StdAfx.h" - -#include "Common/MyInitGuid.h" -#include "Common/StringConvert.h" -#include "Common/IntToString.h" - -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" -#include "Windows/DLL.h" -#include "Windows/FileDir.h" -#include "Windows/FileName.h" -#include "Windows/FileFind.h" - -#include "../../Common/FileStreams.h" -#include "../../Archive/IArchive.h" -#include "../../IPassword.h" -#include "../../MyVersion.h" - - -// {23170F69-40C1-278A-1000-000110070000} -DEFINE_GUID(CLSID_CFormat7z, - 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00); - -using namespace NWindows; - -#define kDllName "7z.dll" - -static const char *kCopyrightString = MY_7ZIP_VERSION -" (" kDllName " client) " -MY_COPYRIGHT " " MY_DATE; - -static const char *kHelpString = -"Usage: Client7z.exe [a | l | x ] archive.7z [fileName ...]\n" -"Examples:\n" -" Client7z.exe a archive.7z f1.txt f2.txt : compress two files to archive.7z\n" -" Client7z.exe l archive.7z : List contents of archive.7z\n" -" Client7z.exe x archive.7z : eXtract files from archive.7z\n"; - - -typedef UINT32 (WINAPI * CreateObjectFunc)( - const GUID *clsID, - const GUID *interfaceID, - void **outObject); - -#ifdef _WIN32 -#ifndef _UNICODE -bool g_IsNT = false; -static inline bool IsItWindowsNT() -{ - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if (!::GetVersionEx(&versionInfo)) - return false; - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif -#endif - -void PrintString(const UString &s) -{ - printf("%s", (LPCSTR)GetOemString(s)); -} - -void PrintString(const AString &s) -{ - printf("%s", (LPCSTR)s); -} - -void PrintNewLine() -{ - PrintString("\n"); -} - -void PrintStringLn(const AString &s) -{ - PrintString(s); - PrintNewLine(); -} - -void PrintError(const AString &s) -{ - PrintNewLine(); - PrintString(s); - PrintNewLine(); -} - -static HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, propID, &prop)); - if(prop.vt == VT_BOOL) - result = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt == VT_EMPTY) - result = false; - else - return E_FAIL; - return S_OK; -} - -static HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result) -{ - return IsArchiveItemProp(archive, index, kpidIsFolder, result); -} - - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - - -////////////////////////////////////////////////////////////// -// Archive Open callback class - - -class CArchiveOpenCallback: - public IArchiveOpenCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes); - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes); - - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - bool PasswordIsDefined; - UString Password; - - CArchiveOpenCallback() : PasswordIsDefined(false) {} -}; - -STDMETHODIMP CArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveOpenCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - CMyComBSTR tempName(Password); - *password = tempName.Detach(); - return S_OK; -} - - -////////////////////////////////////////////////////////////// -// Archive Extracting callback class - -static const wchar_t *kCantDeleteOutputFile = L"ERROR: Can not delete output file "; - -static const char *kTestingString = "Testing "; -static const char *kExtractingString = "Extracting "; -static const char *kSkippingString = "Skipping "; - -static const char *kUnsupportedMethod = "Unsupported Method"; -static const char *kCRCFailed = "CRC Failed"; -static const char *kDataError = "Data Error"; -static const char *kUnknownError = "Unknown Error"; - -class CArchiveExtractCallback: - public IArchiveExtractCallback, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP1(ICryptoGetTextPassword) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IArchiveExtractCallback - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode); - STDMETHOD(PrepareOperation)(Int32 askExtractMode); - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult); - - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); - -private: - CMyComPtr _archiveHandler; - UString _directoryPath; // Output directory - UString _filePath; // name inside arcvhive - UString _diskFilePath; // full path to file on disk - bool _extractMode; - struct CProcessedFileInfo - { - FILETIME UTCLastWriteTime; - UInt32 Attributes; - bool IsDirectory; - bool AttributesAreDefined; - bool UTCLastWriteTimeIsDefined; - } _processedFileInfo; - - COutFileStream *_outFileStreamSpec; - CMyComPtr _outFileStream; - -public: - void Init(IInArchive *archiveHandler, const UString &directoryPath); - - UInt64 NumErrors; - bool PasswordIsDefined; - UString Password; - - CArchiveExtractCallback() : PasswordIsDefined(false) {} -}; - -void CArchiveExtractCallback::Init(IInArchive *archiveHandler, const UString &directoryPath) -{ - NumErrors = 0; - _archiveHandler = archiveHandler; - _directoryPath = directoryPath; - NFile::NName::NormalizeDirPathPrefix(_directoryPath); -} - -STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 /* size */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, - ISequentialOutStream **outStream, Int32 askExtractMode) -{ - *outStream = 0; - _outFileStream.Release(); - - { - // Get Name - NCOM::CPropVariant propVariant; - RINOK(_archiveHandler->GetProperty(index, kpidPath, &propVariant)); - - UString fullPath; - if(propVariant.vt == VT_EMPTY) - fullPath = kEmptyFileAlias; - else - { - if(propVariant.vt != VT_BSTR) - return E_FAIL; - fullPath = propVariant.bstrVal; - } - _filePath = fullPath; - } - - if (askExtractMode != NArchive::NExtract::NAskMode::kExtract) - return S_OK; - - { - // Get Attributes - NCOM::CPropVariant propVariant; - RINOK(_archiveHandler->GetProperty(index, kpidAttributes, &propVariant)); - if (propVariant.vt == VT_EMPTY) - { - _processedFileInfo.Attributes = 0; - _processedFileInfo.AttributesAreDefined = false; - } - else - { - if (propVariant.vt != VT_UI4) - throw "incorrect item"; - _processedFileInfo.Attributes = propVariant.ulVal; - _processedFileInfo.AttributesAreDefined = true; - } - } - - RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.IsDirectory)); - - { - // Get Modified Time - NCOM::CPropVariant propVariant; - RINOK(_archiveHandler->GetProperty(index, kpidLastWriteTime, &propVariant)); - _processedFileInfo.UTCLastWriteTimeIsDefined = false; - switch(propVariant.vt) - { - case VT_EMPTY: - // _processedFileInfo.UTCLastWriteTime = _utcLastWriteTimeDefault; - break; - case VT_FILETIME: - _processedFileInfo.UTCLastWriteTime = propVariant.filetime; - _processedFileInfo.UTCLastWriteTimeIsDefined = true; - break; - default: - return E_FAIL; - } - - } - { - // Get Size - NCOM::CPropVariant propVariant; - RINOK(_archiveHandler->GetProperty(index, kpidSize, &propVariant)); - bool newFileSizeDefined = (propVariant.vt != VT_EMPTY); - UInt64 newFileSize; - if (newFileSizeDefined) - newFileSize = ConvertPropVariantToUInt64(propVariant); - } - - - { - // Create folders for file - int slashPos = _filePath.ReverseFind(WCHAR_PATH_SEPARATOR); - if (slashPos >= 0) - NFile::NDirectory::CreateComplexDirectory(_directoryPath + _filePath.Left(slashPos)); - } - - UString fullProcessedPath = _directoryPath + _filePath; - _diskFilePath = fullProcessedPath; - - if (_processedFileInfo.IsDirectory) - { - NFile::NDirectory::CreateComplexDirectory(fullProcessedPath); - } - else - { - NFile::NFind::CFileInfoW fileInfo; - if(NFile::NFind::FindFile(fullProcessedPath, fileInfo)) - { - if (!NFile::NDirectory::DeleteFileAlways(fullProcessedPath)) - { - PrintString(UString(kCantDeleteOutputFile) + fullProcessedPath); - return E_ABORT; - } - } - - _outFileStreamSpec = new COutFileStream; - CMyComPtr outStreamLoc(_outFileStreamSpec); - if (!_outFileStreamSpec->Open(fullProcessedPath, CREATE_ALWAYS)) - { - PrintString((UString)L"can not open output file " + fullProcessedPath); - return E_ABORT; - } - _outFileStream = outStreamLoc; - *outStream = outStreamLoc.Detach(); - } - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) -{ - _extractMode = false; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: - _extractMode = true; - }; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: - PrintString(kExtractingString); - break; - case NArchive::NExtract::NAskMode::kTest: - PrintString(kTestingString); - break; - case NArchive::NExtract::NAskMode::kSkip: - PrintString(kSkippingString); - break; - }; - PrintString(_filePath); - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult) -{ - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - break; - default: - { - NumErrors++; - PrintString(" "); - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - PrintString(kUnsupportedMethod); - break; - case NArchive::NExtract::NOperationResult::kCRCError: - PrintString(kCRCFailed); - break; - case NArchive::NExtract::NOperationResult::kDataError: - PrintString(kDataError); - break; - default: - PrintString(kUnknownError); - } - } - } - - if (_outFileStream != NULL) - { - if (_processedFileInfo.UTCLastWriteTimeIsDefined) - _outFileStreamSpec->SetLastWriteTime(&_processedFileInfo.UTCLastWriteTime); - RINOK(_outFileStreamSpec->Close()); - } - _outFileStream.Release(); - if (_extractMode && _processedFileInfo.AttributesAreDefined) - NFile::NDirectory::MySetFileAttributes(_diskFilePath, _processedFileInfo.Attributes); - PrintNewLine(); - return S_OK; -} - - -STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - CMyComBSTR tempName(Password); - *password = tempName.Detach(); - return S_OK; -} - - - -////////////////////////////////////////////////////////////// -// Archive Creating callback class - -struct CDirItem -{ - UInt32 Attributes; - FILETIME CreationTime; - FILETIME LastAccessTime; - FILETIME LastWriteTime; - UInt64 Size; - UString Name; - UString FullPath; - bool IsDirectory() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0 ; } -}; - -class CArchiveUpdateCallback: - public IArchiveUpdateCallback2, - public ICryptoGetTextPassword2, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP2(IArchiveUpdateCallback2, ICryptoGetTextPassword2) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IUpdateCallback2 - STDMETHOD(EnumProperties)(IEnumSTATPROPSTG **enumerator); - STDMETHOD(GetUpdateItemInfo)(UInt32 index, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive); - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream); - STDMETHOD(SetOperationResult)(Int32 operationResult); - STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size); - STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream); - - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password); - -public: - CRecordVector VolumesSizes; - UString VolName; - UString VolExt; - - UString DirPrefix; - const CObjectVector *DirItems; - - bool PasswordIsDefined; - UString Password; - bool AskPassword; - - bool m_NeedBeClosed; - - UStringVector FailedFiles; - CRecordVector FailedCodes; - - CArchiveUpdateCallback(): PasswordIsDefined(false), AskPassword(false), DirItems(0) {}; - - ~CArchiveUpdateCallback() { Finilize(); } - HRESULT Finilize(); - - void Init(const CObjectVector *dirItems) - { - DirItems = dirItems; - m_NeedBeClosed = false; - FailedFiles.Clear(); - FailedCodes.Clear(); - } -}; - -STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 /* size */) -{ - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 * /* completeValue */) -{ - return S_OK; -} - - -STDMETHODIMP CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG ** /* enumerator */) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 /* index */, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive) -{ - if(newData != NULL) - *newData = BoolToInt(true); - if(newProperties != NULL) - *newProperties = BoolToInt(true); - if(indexInArchive != NULL) - *indexInArchive = UInt32(-1); - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - NWindows::NCOM::CPropVariant propVariant; - - if (propID == kpidIsAnti) - { - propVariant = false; - propVariant.Detach(value); - return S_OK; - } - - { - const CDirItem &dirItem = (*DirItems)[index]; - switch(propID) - { - case kpidPath: - propVariant = dirItem.Name; - break; - case kpidIsFolder: - propVariant = dirItem.IsDirectory(); - break; - case kpidSize: - propVariant = dirItem.Size; - break; - case kpidAttributes: - propVariant = dirItem.Attributes; - break; - case kpidLastAccessTime: - propVariant = dirItem.LastAccessTime; - break; - case kpidCreationTime: - propVariant = dirItem.CreationTime; - break; - case kpidLastWriteTime: - propVariant = dirItem.LastWriteTime; - break; - } - } - propVariant.Detach(value); - return S_OK; -} - -HRESULT CArchiveUpdateCallback::Finilize() -{ - if (m_NeedBeClosed) - { - PrintNewLine(); - m_NeedBeClosed = false; - } - return S_OK; -} - -static void GetStream2(const wchar_t *name) -{ - PrintString("Compressing "); - if (name[0] == 0) - name = kEmptyFileAlias; - PrintString(name); -} - -STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream) -{ - RINOK(Finilize()); - - const CDirItem &dirItem = (*DirItems)[index]; - GetStream2(dirItem.Name); - - if(dirItem.IsDirectory()) - return S_OK; - - { - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - UString path = DirPrefix + dirItem.FullPath; - if(!inStreamSpec->Open(path)) - { - DWORD sysError = ::GetLastError(); - FailedCodes.Add(sysError); - FailedFiles.Add(path); - // if (systemError == ERROR_SHARING_VIOLATION) - { - PrintNewLine(); - PrintError("WARNING: can't open file"); - // PrintString(NError::MyFormatMessageW(systemError)); - return S_FALSE; - } - // return sysError; - } - *inStream = inStreamLoc.Detach(); - } - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 /* operationResult */) -{ - m_NeedBeClosed = true; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size) -{ - if (VolumesSizes.Size() == 0) - return S_FALSE; - if (index >= (UInt32)VolumesSizes.Size()) - index = VolumesSizes.Size() - 1; - *size = VolumesSizes[index]; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream) -{ - wchar_t temp[32]; - ConvertUInt64ToString(index + 1, temp); - UString res = temp; - while (res.Length() < 2) - res = UString(L'0') + res; - UString fileName = VolName; - fileName += L'.'; - fileName += res; - fileName += VolExt; - COutFileStream *streamSpec = new COutFileStream; - CMyComPtr streamLoc(streamSpec); - if(!streamSpec->Create(fileName, false)) - return ::GetLastError(); - *volumeStream = streamLoc.Detach(); - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - if (!PasswordIsDefined) - { - if (AskPassword) - { - // You can ask real password here from user - // Password = GetPassword(OutStream); - // PasswordIsDefined = true; - PrintError("Password is not defined"); - return E_ABORT; - } - } - *passwordIsDefined = BoolToInt(PasswordIsDefined); - CMyComBSTR tempName(Password); - *password = tempName.Detach(); - return S_OK; -} - - - -////////////////////////////////////////////////////////////////////////// -// Main function - -int -#ifdef _MSC_VER -__cdecl -#endif -main(int argc, char* argv[]) -{ - #ifdef _WIN32 - #ifndef _UNICODE - g_IsNT = IsItWindowsNT(); - #endif - #endif - - PrintStringLn(kCopyrightString); - - if (argc < 3) - { - PrintStringLn(kHelpString); - return 1; - } - NWindows::NDLL::CLibrary library; - if (!library.Load(TEXT(kDllName))) - { - PrintError("Can not load library"); - return 1; - } - CreateObjectFunc createObjectFunc = (CreateObjectFunc)library.GetProcAddress("CreateObject"); - if (createObjectFunc == 0) - { - PrintError("Can not get CreateObject"); - return 1; - } - - AString command = argv[1]; - UString archiveName = GetUnicodeString(argv[2], CP_OEMCP); - if (command.CompareNoCase("a") == 0) - { - // create archive command - if (argc < 4) - { - PrintStringLn(kHelpString); - return 1; - } - CObjectVector dirItems; - int i; - for (i = 3; i < argc; i++) - { - CDirItem item; - UString name = GetUnicodeString(argv[i], CP_OEMCP); - - NFile::NFind::CFileInfoW fileInfo; - if (!NFile::NFind::FindFile(name, fileInfo)) - { - PrintString(UString(L"Can't find file") + name); - return 1; - } - - item.Attributes = fileInfo.Attributes; - item.Size = fileInfo.Size; - item.CreationTime = fileInfo.CreationTime; - item.LastAccessTime = fileInfo.LastAccessTime; - item.LastWriteTime = fileInfo.LastWriteTime; - item.Name = name; - item.FullPath = name; - dirItems.Add(item); - } - COutFileStream *outFileStreamSpec = new COutFileStream; - CMyComPtr outFileStream = outFileStreamSpec; - if (!outFileStreamSpec->Create(archiveName, false)) - { - PrintError("can't create archive file"); - return 1; - } - - CMyComPtr outArchive; - if (createObjectFunc(&CLSID_CFormat7z, &IID_IOutArchive, (void **)&outArchive) != S_OK) - { - PrintError("Can not get class object"); - return 1; - } - - CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback; - CMyComPtr updateCallback(updateCallbackSpec); - updateCallbackSpec->Init(&dirItems); - // updateCallbackSpec->PasswordIsDefined = true; - // updateCallbackSpec->Password = L"1"; - - HRESULT result = outArchive->UpdateItems(outFileStream, dirItems.Size(), updateCallback); - updateCallbackSpec->Finilize(); - if (result != S_OK) - { - PrintError("Update Error"); - return 1; - } - for (i = 0; i < updateCallbackSpec->FailedFiles.Size(); i++) - { - PrintNewLine(); - PrintString((UString)L"Error for file: " + updateCallbackSpec->FailedFiles[i]); - } - if (updateCallbackSpec->FailedFiles.Size() != 0) - return 1; - } - else - { - if (argc != 3) - { - PrintStringLn(kHelpString); - return 1; - } - - bool listCommand; - if (command.CompareNoCase("l") == 0) - listCommand = true; - else if (command.CompareNoCase("x") == 0) - listCommand = false; - else - { - PrintError("incorrect command"); - return 1; - } - - CMyComPtr archive; - if (createObjectFunc(&CLSID_CFormat7z, &IID_IInArchive, (void **)&archive) != S_OK) - { - PrintError("Can not get class object"); - return 1; - } - - CInFileStream *fileSpec = new CInFileStream; - CMyComPtr file = fileSpec; - - if (!fileSpec->Open(archiveName)) - { - PrintError("Can not open archive file"); - return 1; - } - - { - CArchiveOpenCallback *openCallbackSpec = new CArchiveOpenCallback; - CMyComPtr openCallback(openCallbackSpec); - openCallbackSpec->PasswordIsDefined = false; - // openCallbackSpec->PasswordIsDefined = true; - // openCallbackSpec->Password = L"1"; - - if (archive->Open(file, 0, openCallback) != S_OK) - { - PrintError("Can not open archive"); - return 1; - } - } - - if (listCommand) - { - // List command - UInt32 numItems = 0; - archive->GetNumberOfItems(&numItems); - for (UInt32 i = 0; i < numItems; i++) - { - { - // Get uncompressed size of file - NWindows::NCOM::CPropVariant propVariant; - archive->GetProperty(i, kpidSize, &propVariant); - UString s = ConvertPropVariantToString(propVariant); - PrintString(s); - PrintString(" "); - } - { - // Get name of file - NWindows::NCOM::CPropVariant propVariant; - archive->GetProperty(i, kpidPath, &propVariant); - UString s = ConvertPropVariantToString(propVariant); - PrintString(s); - } - PrintString("\n"); - } - } - else - { - // Extract command - CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; - CMyComPtr extractCallback(extractCallbackSpec); - extractCallbackSpec->Init(archive, L""); // second parameter is output folder path - extractCallbackSpec->PasswordIsDefined = false; - // extractCallbackSpec->PasswordIsDefined = true; - // extractCallbackSpec->Password = L"1"; - HRESULT result = archive->Extract(NULL, (UInt32)(Int32)(-1), false, extractCallback); - if (result != S_OK) - { - PrintError("Extract Error"); - return 1; - } - } - } - return 0; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsp deleted file mode 100644 index 542e2852..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +++ /dev/null @@ -1,226 +0,0 @@ -# Microsoft Developer Studio Project File - Name="Client7z" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=Client7z - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "Client7z.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "Client7z.mak" CFG="Client7z - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "Client7z - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "Client7z - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "Client7z - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD BASE RSC /l 0x419 /d "NDEBUG" -# ADD RSC /l 0x419 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "Client7z - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD BASE RSC /l 0x419 /d "_DEBUG" -# ADD RSC /l 0x419 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "Client7z - Win32 Release" -# Name "Client7z - Win32 Debug" -# Begin Group "Spec" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"stdafx.h" -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Windows" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\DLL.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileDir.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileFind.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileIO.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\FileName.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariant.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Windows\PropVariantConversions.h -# End Source File -# End Group -# Begin Group "Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\IntToString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyString.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\MyVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\NewHandler.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\StringConvert.h -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\..\Common\Wildcard.h -# End Source File -# End Group -# Begin Group "7zip Common" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\Common\FileStreams.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\Common\FileStreams.h -# End Source File -# End Group -# Begin Source File - -SOURCE=.\Client7z.cpp -# End Source File -# End Target -# End Project diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsw b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsw deleted file mode 100644 index 598a6d3f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "Client7z"=.\Client7z.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.h deleted file mode 100644 index b23436e9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include -#include - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/makefile b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/makefile deleted file mode 100644 index 226c36a2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Client7z/makefile +++ /dev/null @@ -1,45 +0,0 @@ -PROG = 7z.exe -LIBS = $(LIBS) user32.lib oleaut32.lib advapi32.lib -CFLAGS = $(CFLAGS) -I ../../../ - -CONSOLE_OBJS = \ - $O\Client7z.obj \ - -COMMON_OBJS = \ - $O\IntToString.obj \ - $O\NewHandler.obj \ - $O\MyString.obj \ - $O\StringConvert.obj \ - $O\StringToInt.obj \ - $O\MyVector.obj \ - $O\Wildcard.obj \ - -WIN_OBJS = \ - $O\DLL.obj \ - $O\FileDir.obj \ - $O\FileFind.obj \ - $O\FileIO.obj \ - $O\FileName.obj \ - $O\PropVariant.obj \ - $O\PropVariantConversions.obj \ - -7ZIP_COMMON_OBJS = \ - $O\FileStreams.obj \ - -OBJS = \ - $O\StdAfx.obj \ - $(CONSOLE_OBJS) \ - $(COMMON_OBJS) \ - $(WIN_OBJS) \ - $(7ZIP_COMMON_OBJS) \ - -!include "../../../Build.mak" - -$(CONSOLE_OBJS): $(*B).cpp - $(COMPL) -$(COMMON_OBJS): ../../../Common/$(*B).cpp - $(COMPL) -$(WIN_OBJS): ../../../Windows/$(*B).cpp - $(COMPL) -$(7ZIP_COMMON_OBJS): ../../Common/$(*B).cpp - $(COMPL) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp deleted file mode 100644 index 6cf95f27..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +++ /dev/null @@ -1,1003 +0,0 @@ -// ArchiveCommandLine.cpp - -#include "StdAfx.h" - -#ifdef _WIN32 -#include -#endif -#include - -#include "Common/ListFileUtils.h" -#include "Common/StringConvert.h" -#include "Common/StringToInt.h" - -#include "Windows/FileName.h" -#include "Windows/FileDir.h" -#ifdef _WIN32 -#include "Windows/FileMapping.h" -#include "Windows/Synchronization.h" -#endif - -#include "ArchiveCommandLine.h" -#include "UpdateAction.h" -#include "Update.h" -#include "SortUtils.h" -#include "EnumDirItems.h" - -extern bool g_CaseSensitive; - -#if _MSC_VER >= 1400 -#define MY_isatty_fileno(x) _isatty(_fileno(x)) -#else -#define MY_isatty_fileno(x) isatty(fileno(x)) -#endif - -#define MY_IS_TERMINAL(x) (MY_isatty_fileno(x) != 0); - -using namespace NCommandLineParser; -using namespace NWindows; -using namespace NFile; - -namespace NKey { -enum Enum -{ - kHelp1 = 0, - kHelp2, - kHelp3, - kDisableHeaders, - kDisablePercents, - kArchiveType, - kYes, - kPassword, - kProperty, - kOutputDir, - kWorkingDir, - kInclude, - kExclude, - kArInclude, - kArExclude, - kNoArName, - kUpdate, - kVolume, - kRecursed, - kSfx, - kStdIn, - kStdOut, - kOverwrite, - kEmail, - kShowDialog, - kLargePages, - kCharSet, - kTechMode, - kShareForWrite, - kCaseSensitive -}; - -} - - -static const wchar_t kRecursedIDChar = 'R'; -static const wchar_t *kRecursedPostCharSet = L"0-"; - -namespace NRecursedPostCharIndex { - enum EEnum - { - kWildCardRecursionOnly = 0, - kNoRecursion = 1 - }; -} - -static const char kImmediateNameID = '!'; -static const char kMapNameID = '#'; -static const char kFileListID = '@'; - -static const char kSomeCludePostStringMinSize = 2; // at least <@|!>ame must be -static const char kSomeCludeAfterRecursedPostStringMinSize = 2; // at least <@|!>ame must be - -static const wchar_t *kOverwritePostCharSet = L"asut"; - -NExtract::NOverwriteMode::EEnum k_OverwriteModes[] = -{ - NExtract::NOverwriteMode::kWithoutPrompt, - NExtract::NOverwriteMode::kSkipExisting, - NExtract::NOverwriteMode::kAutoRename, - NExtract::NOverwriteMode::kAutoRenameExisting -}; - -static const CSwitchForm kSwitchForms[] = - { - { L"?", NSwitchType::kSimple, false }, - { L"H", NSwitchType::kSimple, false }, - { L"-HELP", NSwitchType::kSimple, false }, - { L"BA", NSwitchType::kSimple, false }, - { L"BD", NSwitchType::kSimple, false }, - { L"T", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"Y", NSwitchType::kSimple, false }, - { L"P", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"M", NSwitchType::kUnLimitedPostString, true, 1 }, - { L"O", NSwitchType::kUnLimitedPostString, false, 1 }, - { L"W", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"I", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"X", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AI", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AX", NSwitchType::kUnLimitedPostString, true, kSomeCludePostStringMinSize}, - { L"AN", NSwitchType::kSimple, false }, - { L"U", NSwitchType::kUnLimitedPostString, true, 1}, - { L"V", NSwitchType::kUnLimitedPostString, true, 1}, - { L"R", NSwitchType::kPostChar, false, 0, 0, kRecursedPostCharSet }, - { L"SFX", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"SI", NSwitchType::kUnLimitedPostString, false, 0 }, - { L"SO", NSwitchType::kSimple, false, 0 }, - { L"AO", NSwitchType::kPostChar, false, 1, 1, kOverwritePostCharSet}, - { L"SEML", NSwitchType::kUnLimitedPostString, false, 0}, - { L"AD", NSwitchType::kSimple, false }, - { L"SLP", NSwitchType::kUnLimitedPostString, false, 0}, - { L"SCS", NSwitchType::kUnLimitedPostString, false, 0}, - { L"SLT", NSwitchType::kSimple, false }, - { L"SSW", NSwitchType::kSimple, false }, - { L"SSC", NSwitchType::kPostChar, false, 0, 0, L"-" } - }; - -static const CCommandForm g_CommandForms[] = -{ - { L"A", false }, - { L"U", false }, - { L"D", false }, - { L"T", false }, - { L"E", false }, - { L"X", false }, - { L"L", false }, - { L"B", false }, - { L"I", false } -}; - -static const int kNumCommandForms = sizeof(g_CommandForms) / sizeof(g_CommandForms[0]); - -static const wchar_t *kUniversalWildcard = L"*"; -static const int kMinNonSwitchWords = 1; -static const int kCommandIndex = 0; - -// --------------------------- -// exception messages - -static const char *kUserErrorMessage = "Incorrect command line"; -static const char *kIncorrectListFile = "Incorrect item in listfile.\nCheck charset encoding and -scs switch."; -static const char *kIncorrectWildCardInListFile = "Incorrect wildcard in listfile"; -static const char *kIncorrectWildCardInCommandLine = "Incorrect wildcard in command line"; -static const char *kTerminalOutError = "I won't write compressed data to a terminal"; -static const char *kSameTerminalError = "I won't write data and program's messages to same terminal"; - -static void ThrowException(const char *errorMessage) -{ - throw CArchiveCommandLineException(errorMessage); -}; - -static void ThrowUserErrorException() -{ - ThrowException(kUserErrorMessage); -}; - -// --------------------------- - -bool CArchiveCommand::IsFromExtractGroup() const -{ - switch(CommandType) - { - case NCommandType::kTest: - case NCommandType::kExtract: - case NCommandType::kFullExtract: - return true; - default: - return false; - } -} - -NExtract::NPathMode::EEnum CArchiveCommand::GetPathMode() const -{ - switch(CommandType) - { - case NCommandType::kTest: - case NCommandType::kFullExtract: - return NExtract::NPathMode::kFullPathnames; - default: - return NExtract::NPathMode::kNoPathnames; - } -} - -bool CArchiveCommand::IsFromUpdateGroup() const -{ - return (CommandType == NCommandType::kAdd || - CommandType == NCommandType::kUpdate || - CommandType == NCommandType::kDelete); -} - -static NRecursedType::EEnum GetRecursedTypeFromIndex(int index) -{ - switch (index) - { - case NRecursedPostCharIndex::kWildCardRecursionOnly: - return NRecursedType::kWildCardOnlyRecursed; - case NRecursedPostCharIndex::kNoRecursion: - return NRecursedType::kNonRecursed; - default: - return NRecursedType::kRecursed; - } -} - -static bool ParseArchiveCommand(const UString &commandString, CArchiveCommand &command) -{ - UString commandStringUpper = commandString; - commandStringUpper.MakeUpper(); - UString postString; - int commandIndex = ParseCommand(kNumCommandForms, g_CommandForms, commandStringUpper, - postString) ; - if (commandIndex < 0) - return false; - command.CommandType = (NCommandType::EEnum)commandIndex; - return true; -} - -// ------------------------------------------------------------------ -// filenames functions - -static bool AddNameToCensor(NWildcard::CCensor &wildcardCensor, - const UString &name, bool include, NRecursedType::EEnum type) -{ - bool isWildCard = DoesNameContainWildCard(name); - bool recursed = false; - - switch (type) - { - case NRecursedType::kWildCardOnlyRecursed: - recursed = isWildCard; - break; - case NRecursedType::kRecursed: - recursed = true; - break; - case NRecursedType::kNonRecursed: - recursed = false; - break; - } - wildcardCensor.AddItem(include, name, recursed); - return true; -} - -static void AddToCensorFromListFile(NWildcard::CCensor &wildcardCensor, - LPCWSTR fileName, bool include, NRecursedType::EEnum type, UINT codePage) -{ - UStringVector names; - if (!ReadNamesFromListFile(fileName, names, codePage)) - throw kIncorrectListFile; - for (int i = 0; i < names.Size(); i++) - if (!AddNameToCensor(wildcardCensor, names[i], include, type)) - throw kIncorrectWildCardInListFile; -} - -static void AddCommandLineWildCardToCensr(NWildcard::CCensor &wildcardCensor, - const UString &name, bool include, NRecursedType::EEnum recursedType) -{ - if (!AddNameToCensor(wildcardCensor, name, include, recursedType)) - throw kIncorrectWildCardInCommandLine; -} - -static void AddToCensorFromNonSwitchesStrings( - int startIndex, - NWildcard::CCensor &wildcardCensor, - const UStringVector &nonSwitchStrings, NRecursedType::EEnum type, - bool thereAreSwitchIncludes, UINT codePage) -{ - if(nonSwitchStrings.Size() == startIndex && (!thereAreSwitchIncludes)) - AddCommandLineWildCardToCensr(wildcardCensor, kUniversalWildcard, true, type); - for(int i = startIndex; i < nonSwitchStrings.Size(); i++) - { - const UString &s = nonSwitchStrings[i]; - if (s[0] == kFileListID) - AddToCensorFromListFile(wildcardCensor, s.Mid(1), true, type, codePage); - else - AddCommandLineWildCardToCensr(wildcardCensor, s, true, type); - } -} - -#ifdef _WIN32 -static void ParseMapWithPaths(NWildcard::CCensor &wildcardCensor, - const UString &switchParam, bool include, - NRecursedType::EEnum commonRecursedType) -{ - int splitPos = switchParam.Find(L':'); - if (splitPos < 0) - ThrowUserErrorException(); - UString mappingName = switchParam.Left(splitPos); - - UString switchParam2 = switchParam.Mid(splitPos + 1); - splitPos = switchParam2.Find(L':'); - if (splitPos < 0) - ThrowUserErrorException(); - - UString mappingSize = switchParam2.Left(splitPos); - UString eventName = switchParam2.Mid(splitPos + 1); - - UInt64 dataSize64 = ConvertStringToUInt64(mappingSize, NULL); - UInt32 dataSize = (UInt32)dataSize64; - { - CFileMapping fileMapping; - if (!fileMapping.Open(FILE_MAP_READ, false, GetSystemString(mappingName))) - ThrowException("Can not open mapping"); - LPVOID data = fileMapping.MapViewOfFile(FILE_MAP_READ, 0, dataSize); - if (data == NULL) - ThrowException("MapViewOfFile error"); - try - { - const wchar_t *curData = (const wchar_t *)data; - if (*curData != 0) - ThrowException("Incorrect mapping data"); - UInt32 numChars = dataSize / sizeof(wchar_t); - UString name; - for (UInt32 i = 1; i < numChars; i++) - { - wchar_t c = curData[i]; - if (c == L'\0') - { - AddCommandLineWildCardToCensr(wildcardCensor, - name, include, commonRecursedType); - name.Empty(); - } - else - name += c; - } - if (!name.IsEmpty()) - ThrowException("data error"); - } - catch(...) - { - UnmapViewOfFile(data); - throw; - } - UnmapViewOfFile(data); - } - - { - NSynchronization::CManualResetEvent event; - if (event.Open(EVENT_MODIFY_STATE, false, GetSystemString(eventName)) == S_OK) - event.Set(); - } -} -#endif - -static void AddSwitchWildCardsToCensor(NWildcard::CCensor &wildcardCensor, - const UStringVector &strings, bool include, - NRecursedType::EEnum commonRecursedType, UINT codePage) -{ - for(int i = 0; i < strings.Size(); i++) - { - const UString &name = strings[i]; - NRecursedType::EEnum recursedType; - int pos = 0; - if (name.Length() < kSomeCludePostStringMinSize) - ThrowUserErrorException(); - if (::MyCharUpper(name[pos]) == kRecursedIDChar) - { - pos++; - int index = UString(kRecursedPostCharSet).Find(name[pos]); - recursedType = GetRecursedTypeFromIndex(index); - if (index >= 0) - pos++; - } - else - recursedType = commonRecursedType; - if (name.Length() < pos + kSomeCludeAfterRecursedPostStringMinSize) - ThrowUserErrorException(); - UString tail = name.Mid(pos + 1); - if (name[pos] == kImmediateNameID) - AddCommandLineWildCardToCensr(wildcardCensor, tail, include, recursedType); - else if (name[pos] == kFileListID) - AddToCensorFromListFile(wildcardCensor, tail, include, recursedType, codePage); - #ifdef _WIN32 - else if (name[pos] == kMapNameID) - ParseMapWithPaths(wildcardCensor, tail, include, recursedType); - #endif - else - ThrowUserErrorException(); - } -} - -#ifdef _WIN32 - -// This code converts all short file names to long file names. - -static void ConvertToLongName(const UString &prefix, UString &name) -{ - if (name.IsEmpty() || DoesNameContainWildCard(name)) - return; - NFind::CFileInfoW fileInfo; - if (NFind::FindFile(prefix + name, fileInfo)) - name = fileInfo.Name; -} - -static void ConvertToLongNames(const UString &prefix, CObjectVector &items) -{ - for (int i = 0; i < items.Size(); i++) - { - NWildcard::CItem &item = items[i]; - if (item.Recursive || item.PathParts.Size() != 1) - continue; - ConvertToLongName(prefix, item.PathParts.Front()); - } -} - -static void ConvertToLongNames(const UString &prefix, NWildcard::CCensorNode &node) -{ - ConvertToLongNames(prefix, node.IncludeItems); - ConvertToLongNames(prefix, node.ExcludeItems); - int i; - for (i = 0; i < node.SubNodes.Size(); i++) - ConvertToLongName(prefix, node.SubNodes[i].Name); - // mix folders with same name - for (i = 0; i < node.SubNodes.Size(); i++) - { - NWildcard::CCensorNode &nextNode1 = node.SubNodes[i]; - for (int j = i + 1; j < node.SubNodes.Size();) - { - const NWildcard::CCensorNode &nextNode2 = node.SubNodes[j]; - if (nextNode1.Name.CompareNoCase(nextNode2.Name) == 0) - { - nextNode1.IncludeItems += nextNode2.IncludeItems; - nextNode1.ExcludeItems += nextNode2.ExcludeItems; - node.SubNodes.Delete(j); - } - else - j++; - } - } - for (i = 0; i < node.SubNodes.Size(); i++) - { - NWildcard::CCensorNode &nextNode = node.SubNodes[i]; - ConvertToLongNames(prefix + nextNode.Name + wchar_t(NFile::NName::kDirDelimiter), nextNode); - } -} - -static void ConvertToLongNames(NWildcard::CCensor &censor) -{ - for (int i = 0; i < censor.Pairs.Size(); i++) - { - NWildcard::CPair &pair = censor.Pairs[i]; - ConvertToLongNames(pair.Prefix, pair.Head); - } -} - -#endif - -static NUpdateArchive::NPairAction::EEnum GetUpdatePairActionType(int i) -{ - switch(i) - { - case NUpdateArchive::NPairAction::kIgnore: return NUpdateArchive::NPairAction::kIgnore; - case NUpdateArchive::NPairAction::kCopy: return NUpdateArchive::NPairAction::kCopy; - case NUpdateArchive::NPairAction::kCompress: return NUpdateArchive::NPairAction::kCompress; - case NUpdateArchive::NPairAction::kCompressAsAnti: return NUpdateArchive::NPairAction::kCompressAsAnti; - } - throw 98111603; -} - -const UString kUpdatePairStateIDSet = L"PQRXYZW"; -const int kUpdatePairStateNotSupportedActions[] = {2, 2, 1, -1, -1, -1, -1}; - -const UString kUpdatePairActionIDSet = L"0123"; //Ignore, Copy, Compress, Create Anti - -const wchar_t *kUpdateIgnoreItselfPostStringID = L"-"; -const wchar_t kUpdateNewArchivePostCharID = '!'; - - -static bool ParseUpdateCommandString2(const UString &command, - NUpdateArchive::CActionSet &actionSet, UString &postString) -{ - for(int i = 0; i < command.Length();) - { - wchar_t c = MyCharUpper(command[i]); - int statePos = kUpdatePairStateIDSet.Find(c); - if (statePos < 0) - { - postString = command.Mid(i); - return true; - } - i++; - if (i >= command.Length()) - return false; - int actionPos = kUpdatePairActionIDSet.Find(::MyCharUpper(command[i])); - if (actionPos < 0) - return false; - actionSet.StateActions[statePos] = GetUpdatePairActionType(actionPos); - if (kUpdatePairStateNotSupportedActions[statePos] == actionPos) - return false; - i++; - } - postString.Empty(); - return true; -} - -static void ParseUpdateCommandString(CUpdateOptions &options, - const UStringVector &updatePostStrings, - const NUpdateArchive::CActionSet &defaultActionSet) -{ - for(int i = 0; i < updatePostStrings.Size(); i++) - { - const UString &updateString = updatePostStrings[i]; - if(updateString.CompareNoCase(kUpdateIgnoreItselfPostStringID) == 0) - { - if(options.UpdateArchiveItself) - { - options.UpdateArchiveItself = false; - options.Commands.Delete(0); - } - } - else - { - NUpdateArchive::CActionSet actionSet = defaultActionSet; - - UString postString; - if (!ParseUpdateCommandString2(updateString, actionSet, postString)) - ThrowUserErrorException(); - if(postString.IsEmpty()) - { - if(options.UpdateArchiveItself) - options.Commands[0].ActionSet = actionSet; - } - else - { - if(MyCharUpper(postString[0]) != kUpdateNewArchivePostCharID) - ThrowUserErrorException(); - CUpdateArchiveCommand uc; - UString archivePath = postString.Mid(1); - if (archivePath.IsEmpty()) - ThrowUserErrorException(); - uc.UserArchivePath = archivePath; - uc.ActionSet = actionSet; - options.Commands.Add(uc); - } - } - } -} - -static const char kByteSymbol = 'B'; -static const char kKiloSymbol = 'K'; -static const char kMegaSymbol = 'M'; -static const char kGigaSymbol = 'G'; - -static bool ParseComplexSize(const UString &src, UInt64 &result) -{ - UString s = src; - s.MakeUpper(); - - const wchar_t *start = s; - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(start, &end); - int numDigits = (int)(end - start); - if (numDigits == 0 || s.Length() > numDigits + 1) - return false; - if (s.Length() == numDigits) - { - result = number; - return true; - } - int numBits; - switch (s[numDigits]) - { - case kByteSymbol: - result = number; - return true; - case kKiloSymbol: - numBits = 10; - break; - case kMegaSymbol: - numBits = 20; - break; - case kGigaSymbol: - numBits = 30; - break; - default: - return false; - } - if (number >= ((UInt64)1 << (64 - numBits))) - return false; - result = number << numBits; - return true; -} - -static void SetAddCommandOptions( - NCommandType::EEnum commandType, - const CParser &parser, - CUpdateOptions &options) -{ - NUpdateArchive::CActionSet defaultActionSet; - switch(commandType) - { - case NCommandType::kAdd: - defaultActionSet = NUpdateArchive::kAddActionSet; - break; - case NCommandType::kDelete: - defaultActionSet = NUpdateArchive::kDeleteActionSet; - break; - default: - defaultActionSet = NUpdateArchive::kUpdateActionSet; - } - - options.UpdateArchiveItself = true; - - options.Commands.Clear(); - CUpdateArchiveCommand updateMainCommand; - updateMainCommand.ActionSet = defaultActionSet; - options.Commands.Add(updateMainCommand); - if(parser[NKey::kUpdate].ThereIs) - ParseUpdateCommandString(options, parser[NKey::kUpdate].PostStrings, - defaultActionSet); - if(parser[NKey::kWorkingDir].ThereIs) - { - const UString &postString = parser[NKey::kWorkingDir].PostStrings[0]; - if (postString.IsEmpty()) - NDirectory::MyGetTempPath(options.WorkingDir); - else - options.WorkingDir = postString; - } - options.SfxMode = parser[NKey::kSfx].ThereIs; - if (options.SfxMode) - options.SfxModule = parser[NKey::kSfx].PostStrings[0]; - - if (parser[NKey::kVolume].ThereIs) - { - const UStringVector &sv = parser[NKey::kVolume].PostStrings; - for (int i = 0; i < sv.Size(); i++) - { - UInt64 size; - if (!ParseComplexSize(sv[i], size)) - ThrowException("Incorrect volume size"); - options.VolumesSizes.Add(size); - } - } -} - -static void SetMethodOptions(const CParser &parser, CObjectVector &properties) -{ - if (parser[NKey::kProperty].ThereIs) - { - // options.MethodMode.Properties.Clear(); - for(int i = 0; i < parser[NKey::kProperty].PostStrings.Size(); i++) - { - CProperty property; - const UString &postString = parser[NKey::kProperty].PostStrings[i]; - int index = postString.Find(L'='); - if (index < 0) - property.Name = postString; - else - { - property.Name = postString.Left(index); - property.Value = postString.Mid(index + 1); - } - properties.Add(property); - } - } -} - -CArchiveCommandLineParser::CArchiveCommandLineParser(): - parser(sizeof(kSwitchForms) / sizeof(kSwitchForms[0])) {} - -void CArchiveCommandLineParser::Parse1(const UStringVector &commandStrings, - CArchiveCommandLineOptions &options) -{ - try - { - parser.ParseStrings(kSwitchForms, commandStrings); - } - catch(...) - { - ThrowUserErrorException(); - } - - options.IsInTerminal = MY_IS_TERMINAL(stdin); - options.IsStdOutTerminal = MY_IS_TERMINAL(stdout); - options.IsStdErrTerminal = MY_IS_TERMINAL(stderr); - options.StdOutMode = parser[NKey::kStdOut].ThereIs; - options.EnableHeaders = !parser[NKey::kDisableHeaders].ThereIs; - options.HelpMode = parser[NKey::kHelp1].ThereIs || parser[NKey::kHelp2].ThereIs || parser[NKey::kHelp3].ThereIs; - - #ifdef _WIN32 - options.LargePages = false; - if (parser[NKey::kLargePages].ThereIs) - { - const UString &postString = parser[NKey::kLargePages].PostStrings.Front(); - if (postString.IsEmpty()) - options.LargePages = true; - } - #endif -} - -struct CCodePagePair -{ - const wchar_t *Name; - UINT CodePage; -}; - -static CCodePagePair g_CodePagePairs[] = -{ - { L"UTF-8", CP_UTF8 }, - { L"WIN", CP_ACP }, - { L"DOS", CP_OEMCP } -}; - -static const int kNumCodePages = sizeof(g_CodePagePairs) / sizeof(g_CodePagePairs[0]); - -static bool ConvertStringToUInt32(const wchar_t *s, UInt32 &v) -{ - const wchar_t *end; - UInt64 number = ConvertStringToUInt64(s, &end); - if (*end != 0) - return false; - if (number > (UInt32)0xFFFFFFFF) - return false; - v = (UInt32)number; - return true; -} - -void CArchiveCommandLineParser::Parse2(CArchiveCommandLineOptions &options) -{ - const UStringVector &nonSwitchStrings = parser.NonSwitchStrings; - int numNonSwitchStrings = nonSwitchStrings.Size(); - if(numNonSwitchStrings < kMinNonSwitchWords) - ThrowUserErrorException(); - - if (!ParseArchiveCommand(nonSwitchStrings[kCommandIndex], options.Command)) - ThrowUserErrorException(); - - options.TechMode = parser[NKey::kTechMode].ThereIs; - - if (parser[NKey::kCaseSensitive].ThereIs) - g_CaseSensitive = (parser[NKey::kCaseSensitive].PostCharIndex < 0); - - NRecursedType::EEnum recursedType; - if (parser[NKey::kRecursed].ThereIs) - recursedType = GetRecursedTypeFromIndex(parser[NKey::kRecursed].PostCharIndex); - else - recursedType = NRecursedType::kNonRecursed; - - UINT codePage = CP_UTF8; - if (parser[NKey::kCharSet].ThereIs) - { - UString name = parser[NKey::kCharSet].PostStrings.Front(); - name.MakeUpper(); - int i; - for (i = 0; i < kNumCodePages; i++) - { - const CCodePagePair &pair = g_CodePagePairs[i]; - if (name.Compare(pair.Name) == 0) - { - codePage = pair.CodePage; - break; - } - } - if (i >= kNumCodePages) - ThrowUserErrorException(); - } - - bool thereAreSwitchIncludes = false; - if (parser[NKey::kInclude].ThereIs) - { - thereAreSwitchIncludes = true; - AddSwitchWildCardsToCensor(options.WildcardCensor, - parser[NKey::kInclude].PostStrings, true, recursedType, codePage); - } - if (parser[NKey::kExclude].ThereIs) - AddSwitchWildCardsToCensor(options.WildcardCensor, - parser[NKey::kExclude].PostStrings, false, recursedType, codePage); - - int curCommandIndex = kCommandIndex + 1; - bool thereIsArchiveName = !parser[NKey::kNoArName].ThereIs && - options.Command.CommandType != NCommandType::kBenchmark && - options.Command.CommandType != NCommandType::kInfo; - if (thereIsArchiveName) - { - if(curCommandIndex >= numNonSwitchStrings) - ThrowUserErrorException(); - options.ArchiveName = nonSwitchStrings[curCommandIndex++]; - } - - AddToCensorFromNonSwitchesStrings( - curCommandIndex, options.WildcardCensor, - nonSwitchStrings, recursedType, thereAreSwitchIncludes, codePage); - - options.YesToAll = parser[NKey::kYes].ThereIs; - - bool isExtractGroupCommand = options.Command.IsFromExtractGroup(); - - options.PasswordEnabled = parser[NKey::kPassword].ThereIs; - - if(options.PasswordEnabled) - options.Password = parser[NKey::kPassword].PostStrings[0]; - - options.StdInMode = parser[NKey::kStdIn].ThereIs; - options.ShowDialog = parser[NKey::kShowDialog].ThereIs; - - if(isExtractGroupCommand || options.Command.CommandType == NCommandType::kList) - { - if (options.StdInMode) - ThrowException("Reading archives from stdin is not implemented"); - if (!options.WildcardCensor.AllAreRelative()) - ThrowException("Cannot use absolute pathnames for this command"); - - NWildcard::CCensor archiveWildcardCensor; - - if (parser[NKey::kArInclude].ThereIs) - { - AddSwitchWildCardsToCensor(archiveWildcardCensor, - parser[NKey::kArInclude].PostStrings, true, NRecursedType::kNonRecursed, codePage); - } - if (parser[NKey::kArExclude].ThereIs) - AddSwitchWildCardsToCensor(archiveWildcardCensor, - parser[NKey::kArExclude].PostStrings, false, NRecursedType::kNonRecursed, codePage); - - if (thereIsArchiveName) - AddCommandLineWildCardToCensr(archiveWildcardCensor, options.ArchiveName, true, NRecursedType::kNonRecursed); - - #ifdef _WIN32 - ConvertToLongNames(archiveWildcardCensor); - #endif - - archiveWildcardCensor.ExtendExclude(); - - CObjectVector dirItems; - { - UStringVector errorPaths; - CRecordVector errorCodes; - HRESULT res = EnumerateItems(archiveWildcardCensor, dirItems, NULL, errorPaths, errorCodes); - if (res != S_OK || errorPaths.Size() > 0) - throw "cannot find archive"; - } - UStringVector archivePaths; - int i; - for (i = 0; i < dirItems.Size(); i++) - { - const CDirItem &dirItem = dirItems[i]; - if (!dirItem.IsDirectory()) - archivePaths.Add(dirItem.FullPath); - } - - if (archivePaths.Size() == 0) - throw "there is no such archive"; - - UStringVector archivePathsFull; - - for (i = 0; i < archivePaths.Size(); i++) - { - UString fullPath; - NFile::NDirectory::MyGetFullPathName(archivePaths[i], fullPath); - archivePathsFull.Add(fullPath); - } - CIntVector indices; - SortFileNames(archivePathsFull, indices); - options.ArchivePathsSorted.Reserve(indices.Size()); - options.ArchivePathsFullSorted.Reserve(indices.Size()); - for (i = 0; i < indices.Size(); i++) - { - options.ArchivePathsSorted.Add(archivePaths[indices[i]]); - options.ArchivePathsFullSorted.Add(archivePathsFull[indices[i]]); - } - - if (isExtractGroupCommand) - { - SetMethodOptions(parser, options.ExtractProperties); - if (options.StdOutMode && options.IsStdOutTerminal && options.IsStdErrTerminal) - throw kSameTerminalError; - if(parser[NKey::kOutputDir].ThereIs) - { - options.OutputDir = parser[NKey::kOutputDir].PostStrings[0]; - NFile::NName::NormalizeDirPathPrefix(options.OutputDir); - } - - options.OverwriteMode = NExtract::NOverwriteMode::kAskBefore; - if(parser[NKey::kOverwrite].ThereIs) - options.OverwriteMode = - k_OverwriteModes[parser[NKey::kOverwrite].PostCharIndex]; - else if (options.YesToAll) - options.OverwriteMode = NExtract::NOverwriteMode::kWithoutPrompt; - } - } - else if(options.Command.IsFromUpdateGroup()) - { - CUpdateOptions &updateOptions = options.UpdateOptions; - - if(parser[NKey::kArchiveType].ThereIs) - options.ArcType = parser[NKey::kArchiveType].PostStrings[0]; - - SetAddCommandOptions(options.Command.CommandType, parser, updateOptions); - - SetMethodOptions(parser, updateOptions.MethodMode.Properties); - - if (parser[NKey::kShareForWrite].ThereIs) - updateOptions.OpenShareForWrite = true; - - options.EnablePercents = !parser[NKey::kDisablePercents].ThereIs; - - if (options.EnablePercents) - { - if ((options.StdOutMode && !options.IsStdErrTerminal) || - (!options.StdOutMode && !options.IsStdOutTerminal)) - options.EnablePercents = false; - } - - updateOptions.EMailMode = parser[NKey::kEmail].ThereIs; - if (updateOptions.EMailMode) - { - updateOptions.EMailAddress = parser[NKey::kEmail].PostStrings.Front(); - if (updateOptions.EMailAddress.Length() > 0) - if (updateOptions.EMailAddress[0] == L'.') - { - updateOptions.EMailRemoveAfter = true; - updateOptions.EMailAddress.Delete(0); - } - } - - updateOptions.StdOutMode = options.StdOutMode; - updateOptions.StdInMode = options.StdInMode; - - if (updateOptions.StdOutMode && updateOptions.EMailMode) - throw "stdout mode and email mode cannot be combined"; - if (updateOptions.StdOutMode && options.IsStdOutTerminal) - throw kTerminalOutError; - if(updateOptions.StdInMode) - updateOptions.StdInFileName = parser[NKey::kStdIn].PostStrings.Front(); - - #ifdef _WIN32 - ConvertToLongNames(options.WildcardCensor); - #endif - } - else if(options.Command.CommandType == NCommandType::kBenchmark) - { - options.NumThreads = (UInt32)-1; - options.DictionarySize = (UInt32)-1; - options.NumIterations = 1; - if (curCommandIndex < numNonSwitchStrings) - { - if (!ConvertStringToUInt32(nonSwitchStrings[curCommandIndex++], options.NumIterations)) - ThrowUserErrorException(); - } - for (int i = 0; i < parser[NKey::kProperty].PostStrings.Size(); i++) - { - UString postString = parser[NKey::kProperty].PostStrings[i]; - postString.MakeUpper(); - if (postString.Length() < 2) - ThrowUserErrorException(); - if (postString[0] == 'D') - { - int pos = 1; - if (postString[pos] == '=') - pos++; - UInt32 logSize; - if (!ConvertStringToUInt32((const wchar_t *)postString + pos, logSize)) - ThrowUserErrorException(); - if (logSize > 31) - ThrowUserErrorException(); - options.DictionarySize = 1 << logSize; - } - else if (postString[0] == 'M' && postString[1] == 'T' ) - { - int pos = 2; - if (postString[pos] == '=') - pos++; - if (postString[pos] != 0) - if (!ConvertStringToUInt32((const wchar_t *)postString + pos, options.NumThreads)) - ThrowUserErrorException(); - } - else if (postString[0] == 'M' && postString[1] == '=' ) - { - int pos = 2; - if (postString[pos] != 0) - options.Method = postString.Mid(2); - } - else - ThrowUserErrorException(); - } - } - else if(options.Command.CommandType == NCommandType::kInfo) - { - } - else - ThrowUserErrorException(); - options.WildcardCensor.ExtendExclude(); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h deleted file mode 100644 index 5f54b064..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +++ /dev/null @@ -1,104 +0,0 @@ -// ArchiveCommandLine.h - -#ifndef __ARCHIVECOMMANDLINE_H -#define __ARCHIVECOMMANDLINE_H - -#include "Common/Wildcard.h" -#include "Common/CommandLineParser.h" - -#include "Extract.h" -#include "Update.h" - -struct CArchiveCommandLineException: public AString -{ - CArchiveCommandLineException(const char *errorMessage): AString(errorMessage) {} -}; - -namespace NCommandType { enum EEnum -{ - kAdd = 0, - kUpdate, - kDelete, - kTest, - kExtract, - kFullExtract, - kList, - kBenchmark, - kInfo -};} - -namespace NRecursedType { enum EEnum -{ - kRecursed, - kWildCardOnlyRecursed, - kNonRecursed -};} - -struct CArchiveCommand -{ - NCommandType::EEnum CommandType; - bool IsFromExtractGroup() const; - bool IsFromUpdateGroup() const; - bool IsTestMode() const { return CommandType == NCommandType::kTest; } - NExtract::NPathMode::EEnum GetPathMode() const; -}; - -struct CArchiveCommandLineOptions -{ - bool HelpMode; - - #ifdef _WIN32 - bool LargePages; - #endif - - bool IsInTerminal; - bool IsStdOutTerminal; - bool IsStdErrTerminal; - bool StdInMode; - bool StdOutMode; - bool EnableHeaders; - - bool YesToAll; - bool ShowDialog; - // NWildcard::CCensor ArchiveWildcardCensor; - NWildcard::CCensor WildcardCensor; - - CArchiveCommand Command; - UString ArchiveName; - - bool PasswordEnabled; - UString Password; - - bool TechMode; - // Extract - bool AppendName; - UString OutputDir; - NExtract::NOverwriteMode::EEnum OverwriteMode; - UStringVector ArchivePathsSorted; - UStringVector ArchivePathsFullSorted; - CObjectVector ExtractProperties; - - CUpdateOptions UpdateOptions; - UString ArcType; - bool EnablePercents; - - // Benchmark - UInt32 NumIterations; - UInt32 NumThreads; - UInt32 DictionarySize; - UString Method; - - - CArchiveCommandLineOptions(): StdInMode(false), StdOutMode(false) {}; -}; - -class CArchiveCommandLineParser -{ - NCommandLineParser::CParser parser; -public: - CArchiveCommandLineParser(); - void Parse1(const UStringVector &commandStrings, CArchiveCommandLineOptions &options); - void Parse2(CArchiveCommandLineOptions &options); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp deleted file mode 100644 index c3913e1c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +++ /dev/null @@ -1,479 +0,0 @@ -// ArchiveExtractCallback.cpp - -#include "StdAfx.h" - -#include "ArchiveExtractCallback.h" - -#include "Common/Wildcard.h" -#include "Common/StringConvert.h" -#include "Common/ComTry.h" - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/Time.h" -#include "Windows/Defs.h" -#include "Windows/PropVariant.h" - -#include "Windows/PropVariantConversions.h" - -#include "../../Common/FilePathAutoRename.h" - -#include "../Common/ExtractingFilePath.h" -#include "OpenArchive.h" - -using namespace NWindows; - -static const wchar_t *kCantAutoRename = L"ERROR: Can not create file with auto name"; -static const wchar_t *kCantRenameFile = L"ERROR: Can not rename existing file "; -static const wchar_t *kCantDeleteOutputFile = L"ERROR: Can not delete output file "; - - -void CArchiveExtractCallback::Init( - IInArchive *archiveHandler, - IFolderArchiveExtractCallback *extractCallback2, - bool stdOutMode, - const UString &directoryPath, - const UStringVector &removePathParts, - const UString &itemDefaultName, - const FILETIME &utcLastWriteTimeDefault, - UInt32 attributesDefault, - UInt64 packSize) -{ - _stdOutMode = stdOutMode; - _numErrors = 0; - _unpTotal = 1; - _packTotal = packSize; - - _extractCallback2 = extractCallback2; - _compressProgress.Release(); - _extractCallback2.QueryInterface(IID_ICompressProgressInfo, &_compressProgress); - - LocalProgressSpec->Init(extractCallback2, true); - LocalProgressSpec->SendProgress = false; - - _itemDefaultName = itemDefaultName; - _utcLastWriteTimeDefault = utcLastWriteTimeDefault; - _attributesDefault = attributesDefault; - _removePathParts = removePathParts; - _archiveHandler = archiveHandler; - _directoryPath = directoryPath; - NFile::NName::NormalizeDirPathPrefix(_directoryPath); -} - -STDMETHODIMP CArchiveExtractCallback::SetTotal(UInt64 size) -{ - COM_TRY_BEGIN - _unpTotal = size; - if (!_multiArchives && _extractCallback2) - return _extractCallback2->SetTotal(size); - return S_OK; - COM_TRY_END -} - -static void NormalizeVals(UInt64 &v1, UInt64 &v2) -{ - const UInt64 kMax = (UInt64)1 << 31; - while (v1 > kMax) - { - v1 >>= 1; - v2 >>= 1; - } -} - -static UInt64 MyMultDiv64(UInt64 unpCur, UInt64 unpTotal, UInt64 packTotal) -{ - NormalizeVals(packTotal, unpTotal); - NormalizeVals(unpCur, unpTotal); - if (unpTotal == 0) - unpTotal = 1; - return unpCur * packTotal / unpTotal; -} - -STDMETHODIMP CArchiveExtractCallback::SetCompleted(const UInt64 *completeValue) -{ - COM_TRY_BEGIN - if (!_extractCallback2) - return S_OK; - - if (_multiArchives) - { - if (completeValue != NULL) - { - UInt64 packCur = LocalProgressSpec->InSize + MyMultDiv64(*completeValue, _unpTotal, _packTotal); - return _extractCallback2->SetCompleted(&packCur); - } - } - return _extractCallback2->SetCompleted(completeValue); - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - COM_TRY_BEGIN - return _localProgress->SetRatioInfo(inSize, outSize); - COM_TRY_END -} - -void CArchiveExtractCallback::CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath) -{ - fullPath = _directoryPath; - for(int i = 0; i < dirPathParts.Size(); i++) - { - if (i > 0) - fullPath += wchar_t(NFile::NName::kDirDelimiter); - fullPath += dirPathParts[i]; - NFile::NDirectory::MyCreateDirectory(fullPath); - } -} - -static UString MakePathNameFromParts(const UStringVector &parts) -{ - UString result; - for(int i = 0; i < parts.Size(); i++) - { - if(i != 0) - result += wchar_t(NFile::NName::kDirDelimiter); - result += parts[i]; - } - return result; -} - - -HRESULT CArchiveExtractCallback::GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined) -{ - filetimeIsDefined = false; - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, propID, &prop)); - if (prop.vt == VT_FILETIME) - { - filetime = prop.filetime; - filetimeIsDefined = (filetime.dwHighDateTime != 0 || filetime.dwLowDateTime != 0); - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -STDMETHODIMP CArchiveExtractCallback::GetStream(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) -{ - COM_TRY_BEGIN - *outStream = 0; - _outFileStream.Release(); - - _encrypted = false; - _isSplit = false; - _curSize = 0; - - UString fullPath; - - RINOK(GetArchiveItemPath(_archiveHandler, index, _itemDefaultName, fullPath)); - RINOK(IsArchiveItemFolder(_archiveHandler, index, _processedFileInfo.IsDirectory)); - - _filePath = fullPath; - - { - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidPosition, &prop)); - if (prop.vt != VT_EMPTY) - { - if (prop.vt != VT_UI8) - return E_FAIL; - _position = prop.uhVal.QuadPart; - _isSplit = true; - } - } - - RINOK(IsArchiveItemProp(_archiveHandler, index, kpidEncrypted, _encrypted)); - - bool newFileSizeDefined; - UInt64 newFileSize; - { - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidSize, &prop)); - newFileSizeDefined = (prop.vt != VT_EMPTY); - if (newFileSizeDefined) - { - newFileSize = ConvertPropVariantToUInt64(prop); - _curSize = newFileSize; - } - } - - if(askExtractMode == NArchive::NExtract::NAskMode::kExtract) - { - if (_stdOutMode) - { - CMyComPtr outStreamLoc = new CStdOutFileStream; - *outStream = outStreamLoc.Detach(); - return S_OK; - } - - { - NCOM::CPropVariant prop; - RINOK(_archiveHandler->GetProperty(index, kpidAttributes, &prop)); - if (prop.vt == VT_EMPTY) - { - _processedFileInfo.Attributes = _attributesDefault; - _processedFileInfo.AttributesAreDefined = false; - } - else - { - if (prop.vt != VT_UI4) - return E_FAIL; - _processedFileInfo.Attributes = prop.ulVal; - _processedFileInfo.AttributesAreDefined = true; - } - } - - RINOK(GetTime(index, kpidCreationTime, _processedFileInfo.CreationTime, - _processedFileInfo.IsCreationTimeDefined)); - RINOK(GetTime(index, kpidLastWriteTime, _processedFileInfo.LastWriteTime, - _processedFileInfo.IsLastWriteTimeDefined)); - RINOK(GetTime(index, kpidLastAccessTime, _processedFileInfo.LastAccessTime, - _processedFileInfo.IsLastAccessTimeDefined)); - - bool isAnti = false; - RINOK(IsArchiveItemProp(_archiveHandler, index, kpidIsAnti, isAnti)); - - UStringVector pathParts; - SplitPathToParts(fullPath, pathParts); - - if(pathParts.IsEmpty()) - return E_FAIL; - int numRemovePathParts = 0; - switch(_pathMode) - { - case NExtract::NPathMode::kFullPathnames: - break; - case NExtract::NPathMode::kCurrentPathnames: - { - numRemovePathParts = _removePathParts.Size(); - if (pathParts.Size() <= numRemovePathParts) - return E_FAIL; - for (int i = 0; i < numRemovePathParts; i++) - if (_removePathParts[i].CompareNoCase(pathParts[i]) != 0) - return E_FAIL; - break; - } - case NExtract::NPathMode::kNoPathnames: - { - numRemovePathParts = pathParts.Size() - 1; - break; - } - } - pathParts.Delete(0, numRemovePathParts); - MakeCorrectPath(pathParts); - UString processedPath = MakePathNameFromParts(pathParts); - if (!isAnti) - { - if (!_processedFileInfo.IsDirectory) - { - if (!pathParts.IsEmpty()) - pathParts.DeleteBack(); - } - - if (!pathParts.IsEmpty()) - { - UString fullPathNew; - CreateComplexDirectory(pathParts, fullPathNew); - if (_processedFileInfo.IsDirectory) - NFile::NDirectory::SetDirTime(fullPathNew, - (WriteCreated && _processedFileInfo.IsCreationTimeDefined) ? &_processedFileInfo.CreationTime : NULL, - (WriteAccessed && _processedFileInfo.IsLastAccessTimeDefined) ? &_processedFileInfo.LastAccessTime : NULL, - (WriteModified && _processedFileInfo.IsLastWriteTimeDefined) ? &_processedFileInfo.LastWriteTime : &_utcLastWriteTimeDefault); - } - } - - - UString fullProcessedPath = _directoryPath + processedPath; - - if(_processedFileInfo.IsDirectory) - { - _diskFilePath = fullProcessedPath; - if (isAnti) - NFile::NDirectory::MyRemoveDirectory(_diskFilePath); - return S_OK; - } - - if (!_isSplit) - { - NFile::NFind::CFileInfoW fileInfo; - if(NFile::NFind::FindFile(fullProcessedPath, fileInfo)) - { - switch(_overwriteMode) - { - case NExtract::NOverwriteMode::kSkipExisting: - return S_OK; - case NExtract::NOverwriteMode::kAskBefore: - { - Int32 overwiteResult; - RINOK(_extractCallback2->AskOverwrite( - fullProcessedPath, &fileInfo.LastWriteTime, &fileInfo.Size, fullPath, - _processedFileInfo.IsLastWriteTimeDefined ? &_processedFileInfo.LastWriteTime : NULL, - newFileSizeDefined ? &newFileSize : NULL, - &overwiteResult)) - - switch(overwiteResult) - { - case NOverwriteAnswer::kCancel: - return E_ABORT; - case NOverwriteAnswer::kNo: - return S_OK; - case NOverwriteAnswer::kNoToAll: - _overwriteMode = NExtract::NOverwriteMode::kSkipExisting; - return S_OK; - case NOverwriteAnswer::kYesToAll: - _overwriteMode = NExtract::NOverwriteMode::kWithoutPrompt; - break; - case NOverwriteAnswer::kYes: - break; - case NOverwriteAnswer::kAutoRename: - _overwriteMode = NExtract::NOverwriteMode::kAutoRename; - break; - default: - return E_FAIL; - } - } - } - if (_overwriteMode == NExtract::NOverwriteMode::kAutoRename) - { - if (!AutoRenamePath(fullProcessedPath)) - { - UString message = UString(kCantAutoRename) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - } - else if (_overwriteMode == NExtract::NOverwriteMode::kAutoRenameExisting) - { - UString existPath = fullProcessedPath; - if (!AutoRenamePath(existPath)) - { - UString message = kCantAutoRename + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - if(!NFile::NDirectory::MyMoveFile(fullProcessedPath, existPath)) - { - UString message = UString(kCantRenameFile) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return E_FAIL; - } - } - else - if (!NFile::NDirectory::DeleteFileAlways(fullProcessedPath)) - { - UString message = UString(kCantDeleteOutputFile) + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return S_OK; - // return E_FAIL; - } - } - } - if (!isAnti) - { - _outFileStreamSpec = new COutFileStream; - CMyComPtr outStreamLoc(_outFileStreamSpec); - if (!_outFileStreamSpec->Open(fullProcessedPath, _isSplit ? OPEN_ALWAYS: CREATE_ALWAYS)) - { - // if (::GetLastError() != ERROR_FILE_EXISTS || !isSplit) - { - UString message = L"can not open output file " + fullProcessedPath; - RINOK(_extractCallback2->MessageError(message)); - return S_OK; - } - } - if (_isSplit) - { - RINOK(_outFileStreamSpec->Seek(_position, STREAM_SEEK_SET, NULL)); - } - _outFileStream = outStreamLoc; - *outStream = outStreamLoc.Detach(); - } - _diskFilePath = fullProcessedPath; - } - else - { - *outStream = NULL; - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) -{ - COM_TRY_BEGIN - _extractMode = false; - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: - _extractMode = true; - }; - return _extractCallback2->PrepareOperation(_filePath, _processedFileInfo.IsDirectory, - askExtractMode, _isSplit ? &_position: 0); - COM_TRY_END -} - -STDMETHODIMP CArchiveExtractCallback::SetOperationResult(Int32 operationResult) -{ - COM_TRY_BEGIN - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - case NArchive::NExtract::NOperationResult::kCRCError: - case NArchive::NExtract::NOperationResult::kDataError: - break; - default: - _outFileStream.Release(); - return E_FAIL; - } - if (_outFileStream != NULL) - { - _outFileStreamSpec->SetTime( - (WriteCreated && _processedFileInfo.IsCreationTimeDefined) ? &_processedFileInfo.CreationTime : NULL, - (WriteAccessed && _processedFileInfo.IsLastAccessTimeDefined) ? &_processedFileInfo.LastAccessTime : NULL, - (WriteModified && _processedFileInfo.IsLastWriteTimeDefined) ? &_processedFileInfo.LastWriteTime : &_utcLastWriteTimeDefault); - _curSize = _outFileStreamSpec->ProcessedSize; - RINOK(_outFileStreamSpec->Close()); - _outFileStream.Release(); - } - UnpackSize += _curSize; - if (_processedFileInfo.IsDirectory) - NumFolders++; - else - NumFiles++; - - if (_extractMode && _processedFileInfo.AttributesAreDefined) - NFile::NDirectory::MySetFileAttributes(_diskFilePath, _processedFileInfo.Attributes); - RINOK(_extractCallback2->SetOperationResult(operationResult, _encrypted)); - return S_OK; - COM_TRY_END -} - -/* -STDMETHODIMP CArchiveExtractCallback::GetInStream( - const wchar_t *name, ISequentialInStream **inStream) -{ - COM_TRY_BEGIN - CInFileStream *inFile = new CInFileStream; - CMyComPtr inStreamTemp = inFile; - if (!inFile->Open(_srcDirectoryPrefix + name)) - return ::GetLastError(); - *inStream = inStreamTemp.Detach(); - return S_OK; - COM_TRY_END -} -*/ - -STDMETHODIMP CArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) -{ - COM_TRY_BEGIN - if (!_cryptoGetTextPassword) - { - RINOK(_extractCallback2.QueryInterface(IID_ICryptoGetTextPassword, - &_cryptoGetTextPassword)); - } - return _cryptoGetTextPassword->CryptoGetTextPassword(password); - COM_TRY_END -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h deleted file mode 100644 index fd30d64d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +++ /dev/null @@ -1,139 +0,0 @@ -// ArchiveExtractCallback.h - -#ifndef __ARCHIVEEXTRACTCALLBACK_H -#define __ARCHIVEEXTRACTCALLBACK_H - -#include "../../Archive/IArchive.h" -#include "IFileExtractCallback.h" - -#include "Common/MyString.h" -#include "Common/MyCom.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/ProgressUtils.h" -#include "../../IPassword.h" - -#include "ExtractMode.h" - -class CArchiveExtractCallback: - public IArchiveExtractCallback, - // public IArchiveVolumeExtractCallback, - public ICryptoGetTextPassword, - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo) - // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); - - // IExtractCallBack - STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode); - STDMETHOD(PrepareOperation)(Int32 askExtractMode); - STDMETHOD(SetOperationResult)(Int32 resultEOperationResult); - - // IArchiveVolumeExtractCallback - // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream); - - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); - -private: - CMyComPtr _archiveHandler; - CMyComPtr _extractCallback2; - CMyComPtr _compressProgress; - CMyComPtr _cryptoGetTextPassword; - UString _directoryPath; - NExtract::NPathMode::EEnum _pathMode; - NExtract::NOverwriteMode::EEnum _overwriteMode; - - UString _filePath; - UInt64 _position; - bool _isSplit; - - UString _diskFilePath; - - bool _extractMode; - - bool WriteModified; - bool WriteCreated; - bool WriteAccessed; - - bool _encrypted; - - struct CProcessedFileInfo - { - FILETIME CreationTime; - FILETIME LastWriteTime; - FILETIME LastAccessTime; - UInt32 Attributes; - - bool IsCreationTimeDefined; - bool IsLastWriteTimeDefined; - bool IsLastAccessTimeDefined; - - bool IsDirectory; - bool AttributesAreDefined; - } _processedFileInfo; - - UInt64 _curSize; - COutFileStream *_outFileStreamSpec; - CMyComPtr _outFileStream; - UStringVector _removePathParts; - - UString _itemDefaultName; - FILETIME _utcLastWriteTimeDefault; - UInt32 _attributesDefault; - bool _stdOutMode; - - void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath); - HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined); -public: - CArchiveExtractCallback(): - WriteModified(true), - WriteCreated(false), - WriteAccessed(false), - _multiArchives(false) - { - LocalProgressSpec = new CLocalProgress(); - _localProgress = LocalProgressSpec; - } - - CLocalProgress *LocalProgressSpec; - CMyComPtr _localProgress; - UInt64 _packTotal; - UInt64 _unpTotal; - - bool _multiArchives; - UInt64 NumFolders; - UInt64 NumFiles; - UInt64 UnpackSize; - - void InitForMulti(bool multiArchives, - NExtract::NPathMode::EEnum pathMode, - NExtract::NOverwriteMode::EEnum overwriteMode) - { - _multiArchives = multiArchives; NumFolders = NumFiles = UnpackSize = 0; - _pathMode = pathMode; - _overwriteMode = overwriteMode; - } - - void Init( - IInArchive *archiveHandler, - IFolderArchiveExtractCallback *extractCallback2, - bool stdOutMode, - const UString &directoryPath, - const UStringVector &removePathParts, - const UString &itemDefaultName, - const FILETIME &utcLastWriteTimeDefault, - UInt32 attributesDefault, - UInt64 packSize); - - UInt64 _numErrors; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.cpp deleted file mode 100644 index 2d50ede1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// ArchiveName.cpp - -#include "StdAfx.h" - -#include "Windows/FileFind.h" -#include "Windows/FileDir.h" - -using namespace NWindows; - -UString CreateArchiveName(const UString &srcName, bool fromPrev, bool keepName) -{ - UString resultName = L"Archive"; - if (fromPrev) - { - UString dirPrefix; - if (NFile::NDirectory::GetOnlyDirPrefix(srcName, dirPrefix)) - { - if (dirPrefix.Length() > 0) - if (dirPrefix[dirPrefix.Length() - 1] == '\\') - { - dirPrefix.Delete(dirPrefix.Length() - 1); - NFile::NFind::CFileInfoW fileInfo; - if (NFile::NFind::FindFile(dirPrefix, fileInfo)) - resultName = fileInfo.Name; - } - } - } - else - { - NFile::NFind::CFileInfoW fileInfo; - if (!NFile::NFind::FindFile(srcName, fileInfo)) - return resultName; - resultName = fileInfo.Name; - if (!fileInfo.IsDirectory() && !keepName) - { - int dotPos = resultName.ReverseFind('.'); - if (dotPos > 0) - { - UString archiveName2 = resultName.Left(dotPos); - if (archiveName2.ReverseFind('.') < 0) - resultName = archiveName2; - } - } - } - return resultName; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.h deleted file mode 100644 index 9513fb2b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveName.h +++ /dev/null @@ -1,10 +0,0 @@ -// ArchiveName.h - -#ifndef __ARCHIVENAME_H -#define __ARCHIVENAME_H - -#include "Common/MyString.h" - -UString CreateArchiveName(const UString &srcName, bool fromPrev, bool keepName); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp deleted file mode 100644 index 2f0c41a4..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// ArchiveOpenCallback.cpp - -#include "StdAfx.h" - -#include "ArchiveOpenCallback.h" - -#include "Common/StringConvert.h" -#include "Common/ComTry.h" -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" - -using namespace NWindows; - -STDMETHODIMP COpenCallbackImp::SetTotal(const UInt64 *files, const UInt64 *bytes) -{ - COM_TRY_BEGIN - if (!Callback) - return S_OK; - return Callback->SetTotal(files, bytes); - COM_TRY_END -} - -STDMETHODIMP COpenCallbackImp::SetCompleted(const UInt64 *files, const UInt64 *bytes) -{ - COM_TRY_BEGIN - if (!Callback) - return S_OK; - return Callback->SetTotal(files, bytes); - COM_TRY_END -} - -STDMETHODIMP COpenCallbackImp::GetProperty(PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - NCOM::CPropVariant propVariant; - if (_subArchiveMode) - { - switch(propID) - { - case kpidName: - propVariant = _subArchiveName; - break; - } - propVariant.Detach(value); - return S_OK; - } - switch(propID) - { - case kpidName: - propVariant = _fileInfo.Name; - break; - case kpidIsFolder: - propVariant = _fileInfo.IsDirectory(); - break; - case kpidSize: - propVariant = _fileInfo.Size; - break; - case kpidAttributes: - propVariant = (UInt32)_fileInfo.Attributes; - break; - case kpidLastAccessTime: - propVariant = _fileInfo.LastAccessTime; - break; - case kpidCreationTime: - propVariant = _fileInfo.CreationTime; - break; - case kpidLastWriteTime: - propVariant = _fileInfo.LastWriteTime; - break; - } - propVariant.Detach(value); - return S_OK; - COM_TRY_END -} - -int COpenCallbackImp::FindName(const UString &name) -{ - for (int i = 0; i < FileNames.Size(); i++) - if (name.CompareNoCase(FileNames[i]) == 0) - return i; - return -1; -} - -struct CInFileStreamVol: public CInFileStream -{ - UString Name; - COpenCallbackImp *OpenCallbackImp; - CMyComPtr OpenCallbackRef; - ~CInFileStreamVol() - { - int index = OpenCallbackImp->FindName(Name); - if (index >= 0) - OpenCallbackImp->FileNames.Delete(index); - } -}; - -STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStream) -{ - COM_TRY_BEGIN - if (_subArchiveMode) - return S_FALSE; - if (Callback) - { - RINOK(Callback->CheckBreak()); - } - *inStream = NULL; - UString fullPath = _folderPrefix + name; - if (!NFile::NFind::FindFile(fullPath, _fileInfo)) - return S_FALSE; - if (_fileInfo.IsDirectory()) - return S_FALSE; - CInFileStreamVol *inFile = new CInFileStreamVol; - CMyComPtr inStreamTemp = inFile; - if (!inFile->Open(fullPath)) - return ::GetLastError(); - *inStream = inStreamTemp.Detach(); - inFile->Name = name; - inFile->OpenCallbackImp = this; - inFile->OpenCallbackRef = this; - FileNames.Add(name); - TotalSize += _fileInfo.Size; - return S_OK; - COM_TRY_END -} - -#ifndef _NO_CRYPTO -STDMETHODIMP COpenCallbackImp::CryptoGetTextPassword(BSTR *password) -{ - COM_TRY_BEGIN - if (!Callback) - return E_NOTIMPL; - return Callback->CryptoGetTextPassword(password); - COM_TRY_END -} -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h deleted file mode 100644 index 12b2b325..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +++ /dev/null @@ -1,93 +0,0 @@ -// ArchiveOpenCallback.h - -#ifndef __ARCHIVE_OPEN_CALLBACK_H -#define __ARCHIVE_OPEN_CALLBACK_H - -#include "Common/MyString.h" -#include "Common/MyCom.h" -#include "Windows/FileFind.h" - -#ifndef _NO_CRYPTO -#include "../../IPassword.h" -#endif -#include "../../Archive/IArchive.h" - -struct IOpenCallbackUI -{ - virtual HRESULT CheckBreak() = 0; - virtual HRESULT SetTotal(const UInt64 *files, const UInt64 *bytes) = 0; - virtual HRESULT SetCompleted(const UInt64 *files, const UInt64 *bytes) = 0; - #ifndef _NO_CRYPTO - virtual HRESULT CryptoGetTextPassword(BSTR *password) = 0; - virtual HRESULT GetPasswordIfAny(UString &password) = 0; - virtual bool WasPasswordAsked() = 0; - virtual void ClearPasswordWasAskedFlag() = 0; - #endif -}; - -class COpenCallbackImp: - public IArchiveOpenCallback, - public IArchiveOpenVolumeCallback, - public IArchiveOpenSetSubArchiveName, - #ifndef _NO_CRYPTO - public ICryptoGetTextPassword, - #endif - public CMyUnknownImp -{ -public: - #ifndef _NO_CRYPTO - MY_UNKNOWN_IMP3( - IArchiveOpenVolumeCallback, - ICryptoGetTextPassword, - IArchiveOpenSetSubArchiveName - ) - #else - MY_UNKNOWN_IMP2( - IArchiveOpenVolumeCallback, - IArchiveOpenSetSubArchiveName - ) - #endif - - STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes); - STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes); - - // IArchiveOpenVolumeCallback - STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value); - STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream); - - #ifndef _NO_CRYPTO - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - #endif - - STDMETHOD(SetSubArchiveName(const wchar_t *name)) - { - _subArchiveMode = true; - _subArchiveName = name; - return S_OK; - } - -private: - UString _folderPrefix; - NWindows::NFile::NFind::CFileInfoW _fileInfo; - bool _subArchiveMode; - UString _subArchiveName; -public: - UStringVector FileNames; - IOpenCallbackUI *Callback; - UInt64 TotalSize; - - COpenCallbackImp(): Callback(NULL) {} - void Init(const UString &folderPrefix, const UString &fileName) - { - _folderPrefix = folderPrefix; - if (!NWindows::NFile::NFind::FindFile(_folderPrefix + fileName, _fileInfo)) - throw 1; - FileNames.Clear(); - _subArchiveMode = false; - TotalSize = 0; - } - int FindName(const UString &name); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.cpp deleted file mode 100644 index 8ee7c048..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// DefaultName.cpp - -#include "StdAfx.h" - -#include "DefaultName.h" - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - -UString GetDefaultName2(const UString &fileName, - const UString &extension, const UString &addSubExtension) -{ - int extLength = extension.Length(); - int fileNameLength = fileName.Length(); - if (fileNameLength > extLength + 1) - { - int dotPos = fileNameLength - (extLength + 1); - if (fileName[dotPos] == '.') - if (extension.CompareNoCase(fileName.Mid(dotPos + 1)) == 0) - return fileName.Left(dotPos) + addSubExtension; - } - int dotPos = fileName.ReverseFind(L'.'); - if (dotPos > 0) - return fileName.Left(dotPos) + addSubExtension; - return kEmptyFileAlias; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.h deleted file mode 100644 index a702cb0f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DefaultName.h +++ /dev/null @@ -1,11 +0,0 @@ -// DefaultName.h - -#ifndef __DEFAULTNAME_H -#define __DEFAULTNAME_H - -#include "Common/MyString.h" - -UString GetDefaultName2(const UString &fileName, - const UString &extension, const UString &addSubExtension); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DirItem.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DirItem.h deleted file mode 100644 index 89bd4cd3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/DirItem.h +++ /dev/null @@ -1,34 +0,0 @@ -// DirItem.h - -#ifndef __DIR_ITEM_H -#define __DIR_ITEM_H - -#include "Common/MyString.h" -#include "Common/Types.h" - -struct CDirItem -{ - UInt32 Attributes; - FILETIME CreationTime; - FILETIME LastAccessTime; - FILETIME LastWriteTime; - UInt64 Size; - UString Name; - UString FullPath; - bool IsDirectory() const { return (Attributes & FILE_ATTRIBUTE_DIRECTORY) != 0 ; } -}; - -struct CArchiveItem -{ - bool IsDirectory; - // DWORD Attributes; - // NWindows::NCOM::CPropVariant LastWriteTime; - FILETIME LastWriteTime; - bool SizeIsDefined; - UInt64 Size; - UString Name; - bool Censored; - int IndexInServer; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp deleted file mode 100644 index 454092ec..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +++ /dev/null @@ -1,281 +0,0 @@ -// EnumDirItems.cpp - -#include "StdAfx.h" - -#include "Common/StringConvert.h" -#include "Common/Wildcard.h" -#include "Common/MyCom.h" - -#include "EnumDirItems.h" - -using namespace NWindows; -using namespace NFile; -using namespace NName; - -void AddDirFileInfo( - const UString &prefix, // prefix for logical path - const UString &fullPathName, // path on disk: can be relative to some basePrefix - const NFind::CFileInfoW &fileInfo, - CObjectVector &dirItems) -{ - CDirItem item; - item.Attributes = fileInfo.Attributes; - item.Size = fileInfo.Size; - item.CreationTime = fileInfo.CreationTime; - item.LastAccessTime = fileInfo.LastAccessTime; - item.LastWriteTime = fileInfo.LastWriteTime; - item.Name = prefix + fileInfo.Name; - item.FullPath = fullPathName; - dirItems.Add(item); -} - -static void EnumerateDirectory( - const UString &baseFolderPrefix, // base (disk) prefix for scanning - const UString &directory, // additional disk prefix starting from baseFolderPrefix - const UString &prefix, // logical prefix - CObjectVector &dirItems, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - NFind::CEnumeratorW enumerator(baseFolderPrefix + directory + wchar_t(kAnyStringWildcard)); - for (;;) - { - NFind::CFileInfoW fileInfo; - bool found; - if (!enumerator.Next(fileInfo, found)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(baseFolderPrefix + directory); - return; - } - if (!found) - break; - AddDirFileInfo(prefix, directory + fileInfo.Name, fileInfo, dirItems); - if (fileInfo.IsDirectory()) - { - EnumerateDirectory(baseFolderPrefix, directory + fileInfo.Name + wchar_t(kDirDelimiter), - prefix + fileInfo.Name + wchar_t(kDirDelimiter), dirItems, errorPaths, errorCodes); - } - } -} - -void EnumerateDirItems( - const UString &baseFolderPrefix, // base (disk) prefix for scanning - const UStringVector &fileNames, // names relative to baseFolderPrefix - const UString &archiveNamePrefix, - CObjectVector &dirItems, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - for(int i = 0; i < fileNames.Size(); i++) - { - const UString &fileName = fileNames[i]; - NFind::CFileInfoW fileInfo; - if (!NFind::FindFile(baseFolderPrefix + fileName, fileInfo)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(baseFolderPrefix + fileName); - continue; - } - AddDirFileInfo(archiveNamePrefix, fileName, fileInfo, dirItems); - if (fileInfo.IsDirectory()) - { - EnumerateDirectory(baseFolderPrefix, fileName + wchar_t(kDirDelimiter), - archiveNamePrefix + fileInfo.Name + wchar_t(kDirDelimiter), - dirItems, errorPaths, errorCodes); - } - } -} - -static HRESULT EnumerateDirItems( - const NWildcard::CCensorNode &curNode, - const UString &diskPrefix, // full disk path prefix - const UString &archivePrefix, // prefix from root - const UStringVector &addArchivePrefix, // prefix from curNode - CObjectVector &dirItems, - bool enterToSubFolders, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - if (!enterToSubFolders) - if (curNode.NeedCheckSubDirs()) - enterToSubFolders = true; - if (callback) - RINOK(callback->CheckBreak()); - - // try direct_names case at first - if (addArchivePrefix.IsEmpty() && !enterToSubFolders) - { - // check that all names are direct - int i; - for (i = 0; i < curNode.IncludeItems.Size(); i++) - { - const NWildcard::CItem &item = curNode.IncludeItems[i]; - if (item.Recursive || item.PathParts.Size() != 1) - break; - const UString &name = item.PathParts.Front(); - if (name.IsEmpty() || DoesNameContainWildCard(name)) - break; - } - if (i == curNode.IncludeItems.Size()) - { - // all names are direct (no wildcards) - // so we don't need file_system's dir enumerator - CRecordVector needEnterVector; - for (i = 0; i < curNode.IncludeItems.Size(); i++) - { - const NWildcard::CItem &item = curNode.IncludeItems[i]; - const UString &name = item.PathParts.Front(); - const UString fullPath = diskPrefix + name; - NFind::CFileInfoW fileInfo; - if (!NFind::FindFile(fullPath, fileInfo)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(fullPath); - continue; - } - bool isDir = fileInfo.IsDirectory(); - if (isDir && !item.ForDir || !isDir && !item.ForFile) - { - errorCodes.Add((DWORD)E_FAIL); - errorPaths.Add(fullPath); - continue; - } - const UString realName = fileInfo.Name; - const UString realDiskPath = diskPrefix + realName; - { - UStringVector pathParts; - pathParts.Add(fileInfo.Name); - if (curNode.CheckPathToRoot(false, pathParts, !isDir)) - continue; - } - AddDirFileInfo(archivePrefix, realDiskPath, fileInfo, dirItems); - if (!isDir) - continue; - - UStringVector addArchivePrefixNew; - const NWildcard::CCensorNode *nextNode = 0; - int index = curNode.FindSubNode(name); - if (index >= 0) - { - for (int t = needEnterVector.Size(); t <= index; t++) - needEnterVector.Add(true); - needEnterVector[index] = false; - nextNode = &curNode.SubNodes[index]; - } - else - { - nextNode = &curNode; - addArchivePrefixNew.Add(name); // don't change it to realName. It's for shortnames support - } - RINOK(EnumerateDirItems(*nextNode, - realDiskPath + wchar_t(kDirDelimiter), - archivePrefix + realName + wchar_t(kDirDelimiter), - addArchivePrefixNew, dirItems, true, callback, errorPaths, errorCodes)); - } - for (i = 0; i < curNode.SubNodes.Size(); i++) - { - if (i < needEnterVector.Size()) - if (!needEnterVector[i]) - continue; - const NWildcard::CCensorNode &nextNode = curNode.SubNodes[i]; - const UString fullPath = diskPrefix + nextNode.Name; - NFind::CFileInfoW fileInfo; - if (!NFind::FindFile(fullPath, fileInfo)) - { - if (!nextNode.AreThereIncludeItems()) - continue; - errorCodes.Add(::GetLastError()); - errorPaths.Add(fullPath); - continue; - } - if (!fileInfo.IsDirectory()) - { - errorCodes.Add((DWORD)E_FAIL); - errorPaths.Add(fullPath); - continue; - } - RINOK(EnumerateDirItems(nextNode, - diskPrefix + fileInfo.Name + wchar_t(kDirDelimiter), - archivePrefix + fileInfo.Name + wchar_t(kDirDelimiter), - UStringVector(), dirItems, false, callback, errorPaths, errorCodes)); - } - return S_OK; - } - } - - - NFind::CEnumeratorW enumerator(diskPrefix + wchar_t(kAnyStringWildcard)); - for (;;) - { - NFind::CFileInfoW fileInfo; - bool found; - if (!enumerator.Next(fileInfo, found)) - { - errorCodes.Add(::GetLastError()); - errorPaths.Add(diskPrefix); - break; - } - if (!found) - break; - - if (callback) - RINOK(callback->CheckBreak()); - const UString &name = fileInfo.Name; - bool enterToSubFolders2 = enterToSubFolders; - UStringVector addArchivePrefixNew = addArchivePrefix; - addArchivePrefixNew.Add(name); - { - UStringVector addArchivePrefixNewTemp(addArchivePrefixNew); - if (curNode.CheckPathToRoot(false, addArchivePrefixNewTemp, !fileInfo.IsDirectory())) - continue; - } - if (curNode.CheckPathToRoot(true, addArchivePrefixNew, !fileInfo.IsDirectory())) - { - AddDirFileInfo(archivePrefix, diskPrefix + name, fileInfo, dirItems); - if (fileInfo.IsDirectory()) - enterToSubFolders2 = true; - } - if (!fileInfo.IsDirectory()) - continue; - - const NWildcard::CCensorNode *nextNode = 0; - if (addArchivePrefix.IsEmpty()) - { - int index = curNode.FindSubNode(name); - if (index >= 0) - nextNode = &curNode.SubNodes[index]; - } - if (!enterToSubFolders2 && nextNode == 0) - continue; - - addArchivePrefixNew = addArchivePrefix; - if (nextNode == 0) - { - nextNode = &curNode; - addArchivePrefixNew.Add(name); - } - RINOK(EnumerateDirItems(*nextNode, - diskPrefix + name + wchar_t(kDirDelimiter), - archivePrefix + name + wchar_t(kDirDelimiter), - addArchivePrefixNew, dirItems, enterToSubFolders2, callback, errorPaths, errorCodes)); - } - return S_OK; -} - -HRESULT EnumerateItems( - const NWildcard::CCensor &censor, - CObjectVector &dirItems, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes) -{ - for (int i = 0; i < censor.Pairs.Size(); i++) - { - const NWildcard::CPair &pair = censor.Pairs[i]; - RINOK(EnumerateDirItems(pair.Head, pair.Prefix, L"", UStringVector(), dirItems, false, - callback, errorPaths, errorCodes)); - } - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.h deleted file mode 100644 index 8d5495a8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/EnumDirItems.h +++ /dev/null @@ -1,39 +0,0 @@ -// EnumDirItems.h - -#ifndef __ENUM_DIR_ITEMS_H -#define __ENUM_DIR_ITEMS_H - -#include "Common/Wildcard.h" -#include "DirItem.h" - -#include "Windows/FileFind.h" - -void AddDirFileInfo( - const UString &prefix, - const UString &fullPathName, - const NWindows::NFile::NFind::CFileInfoW &fileInfo, - CObjectVector &dirItems); - - -void EnumerateDirItems( - const UString &baseFolderPrefix, - const UStringVector &fileNames, - const UString &archiveNamePrefix, - CObjectVector &dirItems, - UStringVector &errorPaths, - CRecordVector &errorCodes); - -struct IEnumDirItemCallback -{ - virtual HRESULT CheckBreak() { return S_OK; } -}; - - -HRESULT EnumerateItems( - const NWildcard::CCensor &censor, - CObjectVector &dirItems, - IEnumDirItemCallback *callback, - UStringVector &errorPaths, - CRecordVector &errorCodes); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExitCode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExitCode.h deleted file mode 100644 index 0aac3695..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExitCode.h +++ /dev/null @@ -1,27 +0,0 @@ -// ExitCode.h - -#ifndef __EXIT_CODE_H -#define __EXIT_CODE_H - -namespace NExitCode { - -enum EEnum { - - kSuccess = 0, // Successful operation - kWarning = 1, // Non fatal error(s) occurred - kFatalError = 2, // A fatal error occurred - // kCRCError = 3, // A CRC error occurred when unpacking - // kLockedArchive = 4, // Attempt to modify an archive previously locked - // kWriteError = 5, // Write to disk error - // kOpenError = 6, // Open file error - kUserError = 7, // Command line option error - kMemoryError = 8, // Not enough memory for operation - // kCreateFileError = 9, // Create file error - - kUserBreak = 255 // User stopped the process - -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.cpp deleted file mode 100644 index 0e56a08a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// Extract.cpp - -#include "StdAfx.h" - -#include "Extract.h" - -#include "Windows/Defs.h" -#include "Windows/FileDir.h" - -#include "OpenArchive.h" -#include "SetProperties.h" - -using namespace NWindows; - -HRESULT DecompressArchive( - IInArchive *archive, - UInt64 packSize, - const UString &defaultName, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &options, - IExtractCallbackUI *callback, - CArchiveExtractCallback *extractCallbackSpec, - UString &errorMessage) -{ - CRecordVector realIndices; - UInt32 numItems; - RINOK(archive->GetNumberOfItems(&numItems)); - - for(UInt32 i = 0; i < numItems; i++) - { - UString filePath; - RINOK(GetArchiveItemPath(archive, i, options.DefaultItemName, filePath)); - bool isFolder; - RINOK(IsArchiveItemFolder(archive, i, isFolder)); - if (!wildcardCensor.CheckPath(filePath, !isFolder)) - continue; - realIndices.Add(i); - } - if (realIndices.Size() == 0) - { - callback->ThereAreNoFiles(); - return S_OK; - } - - UStringVector removePathParts; - - UString outDir = options.OutputDir; - outDir.Replace(L"*", defaultName); - if(!outDir.IsEmpty()) - if(!NFile::NDirectory::CreateComplexDirectory(outDir)) - { - HRESULT res = ::GetLastError(); - if (res == S_OK) - res = E_FAIL; - errorMessage = ((UString)L"Can not create output directory ") + outDir; - return res; - } - - extractCallbackSpec->Init( - archive, - callback, - options.StdOutMode, - outDir, - removePathParts, - options.DefaultItemName, - options.ArchiveFileInfo.LastWriteTime, - options.ArchiveFileInfo.Attributes, - packSize); - - #ifdef COMPRESS_MT - RINOK(SetProperties(archive, options.Properties)); - #endif - - HRESULT result = archive->Extract(&realIndices.Front(), - realIndices.Size(), options.TestMode? 1: 0, extractCallbackSpec); - - return callback->ExtractResult(result); -} - -HRESULT DecompressArchives( - CCodecs *codecs, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &optionsSpec, - IOpenCallbackUI *openCallback, - IExtractCallbackUI *extractCallback, - UString &errorMessage, - CDecompressStat &stat) -{ - stat.Clear(); - CExtractOptions options = optionsSpec; - int i; - UInt64 totalPackSize = 0; - CRecordVector archiveSizes; - for (i = 0; i < archivePaths.Size(); i++) - { - const UString &archivePath = archivePaths[i]; - NFile::NFind::CFileInfoW archiveFileInfo; - if (!NFile::NFind::FindFile(archivePath, archiveFileInfo)) - throw "there is no such archive"; - if (archiveFileInfo.IsDirectory()) - throw "can't decompress folder"; - archiveSizes.Add(archiveFileInfo.Size); - totalPackSize += archiveFileInfo.Size; - } - CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; - CMyComPtr ec(extractCallbackSpec); - bool multi = (archivePaths.Size() > 1); - extractCallbackSpec->InitForMulti(multi, options.PathMode, options.OverwriteMode); - if (multi) - { - RINOK(extractCallback->SetTotal(totalPackSize)); - } - for (i = 0; i < archivePaths.Size(); i++) - { - const UString &archivePath = archivePaths[i]; - NFile::NFind::CFileInfoW archiveFileInfo; - if (!NFile::NFind::FindFile(archivePath, archiveFileInfo)) - throw "there is no such archive"; - - if (archiveFileInfo.IsDirectory()) - throw "there is no such archive"; - - options.ArchiveFileInfo = archiveFileInfo; - - #ifndef _NO_CRYPTO - openCallback->ClearPasswordWasAskedFlag(); - #endif - - RINOK(extractCallback->BeforeOpen(archivePath)); - CArchiveLink archiveLink; - HRESULT result = MyOpenArchive(codecs, archivePath, archiveLink, openCallback); - - bool crypted = false; - #ifndef _NO_CRYPTO - crypted = openCallback->WasPasswordAsked(); - #endif - - RINOK(extractCallback->OpenResult(archivePath, result, crypted)); - if (result != S_OK) - continue; - - for (int v = 0; v < archiveLink.VolumePaths.Size(); v++) - { - int index = archivePathsFull.FindInSorted(archiveLink.VolumePaths[v]); - if (index >= 0 && index > i) - { - archivePaths.Delete(index); - archivePathsFull.Delete(index); - totalPackSize -= archiveSizes[index]; - archiveSizes.Delete(index); - } - } - if (archiveLink.VolumePaths.Size() != 0) - { - totalPackSize += archiveLink.VolumesSize; - RINOK(extractCallback->SetTotal(totalPackSize)); - } - - #ifndef _NO_CRYPTO - UString password; - RINOK(openCallback->GetPasswordIfAny(password)); - if (!password.IsEmpty()) - { - RINOK(extractCallback->SetPassword(password)); - } - #endif - - options.DefaultItemName = archiveLink.GetDefaultItemName(); - RINOK(DecompressArchive( - archiveLink.GetArchive(), - archiveFileInfo.Size + archiveLink.VolumesSize, - archiveLink.GetDefaultItemName(), - wildcardCensor, options, extractCallback, extractCallbackSpec, errorMessage)); - extractCallbackSpec->LocalProgressSpec->InSize += archiveFileInfo.Size + - archiveLink.VolumesSize; - extractCallbackSpec->LocalProgressSpec->OutSize = extractCallbackSpec->UnpackSize; - if (!errorMessage.IsEmpty()) - return E_FAIL; - } - stat.NumFolders = extractCallbackSpec->NumFolders; - stat.NumFiles = extractCallbackSpec->NumFiles; - stat.UnpackSize = extractCallbackSpec->UnpackSize; - stat.NumArchives = archivePaths.Size(); - stat.PackSize = extractCallbackSpec->LocalProgressSpec->InSize; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.h deleted file mode 100644 index e7add12e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Extract.h +++ /dev/null @@ -1,77 +0,0 @@ -// Extract.h - -#ifndef __EXTRACT_H -#define __EXTRACT_H - -#include "Common/Wildcard.h" -#include "Windows/FileFind.h" - -#include "../../Archive/IArchive.h" - -#include "ArchiveExtractCallback.h" -#include "ArchiveOpenCallback.h" -#include "ExtractMode.h" -#include "Property.h" - -#include "../Common/LoadCodecs.h" - -class CExtractOptions -{ -public: - bool StdOutMode; - bool TestMode; - NExtract::NPathMode::EEnum PathMode; - - UString OutputDir; - bool YesToAll; - UString DefaultItemName; - NWindows::NFile::NFind::CFileInfoW ArchiveFileInfo; - - // bool ShowDialog; - // bool PasswordEnabled; - // UString Password; - #ifdef COMPRESS_MT - CObjectVector Properties; - #endif - - NExtract::NOverwriteMode::EEnum OverwriteMode; - - #ifdef EXTERNAL_CODECS - CCodecs *Codecs; - #endif - - CExtractOptions(): - StdOutMode(false), - YesToAll(false), - TestMode(false), - PathMode(NExtract::NPathMode::kFullPathnames), - OverwriteMode(NExtract::NOverwriteMode::kAskBefore) - {} - - /* - bool FullPathMode() const { return (ExtractMode == NExtractMode::kTest) || - (ExtractMode == NExtractMode::kFullPath); } - */ -}; - -struct CDecompressStat -{ - UInt64 NumArchives; - UInt64 UnpackSize; - UInt64 PackSize; - UInt64 NumFolders; - UInt64 NumFiles; - void Clear() { NumArchives = PackSize = UnpackSize = NumFolders = NumFiles = 0; } -}; - -HRESULT DecompressArchives( - CCodecs *codecs, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - const CExtractOptions &options, - IOpenCallbackUI *openCallback, - IExtractCallbackUI *extractCallback, - UString &errorMessage, - CDecompressStat &stat); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractMode.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractMode.h deleted file mode 100644 index 96b5a8cd..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractMode.h +++ /dev/null @@ -1,31 +0,0 @@ -// ExtractMode.h - -#ifndef __EXTRACT_MODE_H -#define __EXTRACT_MODE_H - -namespace NExtract { - - namespace NPathMode - { - enum EEnum - { - kFullPathnames, - kCurrentPathnames, - kNoPathnames - }; - } - - namespace NOverwriteMode - { - enum EEnum - { - kAskBefore, - kWithoutPrompt, - kSkipExisting, - kAutoRename, - kAutoRenameExisting - }; - } -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp deleted file mode 100644 index fa796ca6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// ExtractingFilePath.cpp - -#include "StdAfx.h" -#include "ExtractingFilePath.h" - -static UString ReplaceIncorrectChars(const UString &s) -{ - #ifdef _WIN32 - UString res; - for (int i = 0; i < s.Length(); i++) - { - wchar_t c = s[i]; - if (c < 0x20 || c == '*' || c == '?' || c == '<' || c == '>' || c == '|' || c == ':' || c == '"') - c = '_'; - res += c; - } - return res; - #else - return s; - #endif -} - -#ifdef _WIN32 -static const wchar_t *g_ReservedNames[] = -{ - L"CON", L"PRN", L"AUX", L"NUL" -}; - -static bool CheckTail(const UString &name, int len) -{ - int dotPos = name.Find(L'.'); - if (dotPos < 0) - dotPos = name.Length(); - UString s = name.Left(dotPos); - s.TrimRight(); - return (s.Length() != len); -} - -static bool CheckNameNum(const UString &name, const wchar_t *reservedName) -{ - int len = MyStringLen(reservedName); - if (name.Length() <= len) - return true; - if (name.Left(len).CompareNoCase(reservedName) != 0) - return true; - wchar_t c = name[len]; - if (c < L'0' || c > L'9') - return true; - return CheckTail(name, len + 1); -} - -static bool IsSupportedName(const UString &name) -{ - for (int i = 0; i < sizeof(g_ReservedNames) / sizeof(g_ReservedNames[0]); i++) - { - const wchar_t *reservedName = g_ReservedNames[i]; - int len = MyStringLen(reservedName); - if (name.Length() < len) - continue; - if (name.Left(len).CompareNoCase(reservedName) != 0) - continue; - if (!CheckTail(name, len)) - return false; - } - if (!CheckNameNum(name, L"COM")) - return false; - return CheckNameNum(name, L"LPT"); -} -#endif - -static UString GetCorrectFileName(const UString &path) -{ - if (path == L".." || path == L".") - return UString(); - return ReplaceIncorrectChars(path); -} - -void MakeCorrectPath(UStringVector &pathParts) -{ - for (int i = 0; i < pathParts.Size();) - { - UString &s = pathParts[i]; - s = GetCorrectFileName(s); - if (s.IsEmpty()) - pathParts.Delete(i); - else - { - #ifdef _WIN32 - if (!IsSupportedName(s)) - s = (UString)L"_" + s; - #endif - i++; - } - } -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h deleted file mode 100644 index a86a6a9b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +++ /dev/null @@ -1,10 +0,0 @@ -// ExtractingFilePath.h - -#ifndef __EXTRACTINGFILEPATH_H -#define __EXTRACTINGFILEPATH_H - -#include "Common/MyString.h" - -void MakeCorrectPath(UStringVector &pathParts); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h deleted file mode 100644 index 284e9cb3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +++ /dev/null @@ -1,43 +0,0 @@ -// IFileExtractCallback.h - -#ifndef __IFILEEXTRACTCALLBACK_H -#define __IFILEEXTRACTCALLBACK_H - -#include "Common/MyString.h" -#include "../../IDecl.h" - -namespace NOverwriteAnswer -{ - enum EEnum - { - kYes, - kYesToAll, - kNo, - kNoToAll, - kAutoRename, - kCancel - }; -} - -DECL_INTERFACE_SUB(IFolderArchiveExtractCallback, IProgress, 0x01, 0x07) -{ -public: - STDMETHOD(AskOverwrite)( - const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, - const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, - Int32 *answer) PURE; - STDMETHOD(PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position) PURE; - STDMETHOD(MessageError)(const wchar_t *message) PURE; - STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted) PURE; -}; - -struct IExtractCallbackUI: IFolderArchiveExtractCallback -{ - virtual HRESULT BeforeOpen(const wchar_t *name) = 0; - virtual HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted) = 0; - virtual HRESULT ThereAreNoFiles() = 0; - virtual HRESULT ExtractResult(HRESULT result) = 0; - virtual HRESULT SetPassword(const UString &password) = 0; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp deleted file mode 100644 index 087340a1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +++ /dev/null @@ -1,644 +0,0 @@ -// LoadCodecs.cpp - -#include "StdAfx.h" - -#include "LoadCodecs.h" - -#include "../../../Common/MyCom.h" -#ifdef NEW_FOLDER_INTERFACE -#include "../../../Common/StringToInt.h" -#endif -#include "../../../Windows/PropVariant.h" - -#include "../../ICoder.h" -#include "../../Common/RegisterArc.h" - -#ifdef EXTERNAL_CODECS -#include "../../../Windows/FileFind.h" -#include "../../../Windows/DLL.h" -#ifdef NEW_FOLDER_INTERFACE -#include "../../../Windows/ResourceString.h" -static const UINT kIconTypesResId = 100; -#endif - -#ifdef _WIN32 -#include "Windows/Registry.h" -#endif - -using namespace NWindows; -using namespace NFile; - -#ifdef _WIN32 -extern HINSTANCE g_hInstance; -#endif - -static CSysString GetLibraryFolderPrefix() -{ - #ifdef _WIN32 - TCHAR fullPath[MAX_PATH + 1]; - ::GetModuleFileName(g_hInstance, fullPath, MAX_PATH); - CSysString path = fullPath; - int pos = path.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - return path.Left(pos + 1); - #else - return CSysString(); // FIX IT - #endif -} - -#define kCodecsFolderName TEXT("Codecs") -#define kFormatsFolderName TEXT("Formats") -static TCHAR *kMainDll = TEXT("7z.dll"); - -#ifdef _WIN32 -static LPCTSTR kRegistryPath = TEXT("Software\\7-zip"); -static LPCTSTR kProgramPathValue = TEXT("Path"); -static bool ReadPathFromRegistry(HKEY baseKey, CSysString &path) -{ - NRegistry::CKey key; - if(key.Open(baseKey, kRegistryPath, KEY_READ) == ERROR_SUCCESS) - if (key.QueryValue(kProgramPathValue, path) == ERROR_SUCCESS) - { - NName::NormalizeDirPathPrefix(path); - return true; - } - return false; -} - -#endif - -CSysString GetBaseFolderPrefixFromRegistry() -{ - CSysString moduleFolderPrefix = GetLibraryFolderPrefix(); - NFind::CFileInfo fileInfo; - if (NFind::FindFile(moduleFolderPrefix + kMainDll, fileInfo)) - if (!fileInfo.IsDirectory()) - return moduleFolderPrefix; - if (NFind::FindFile(moduleFolderPrefix + kCodecsFolderName, fileInfo)) - if (fileInfo.IsDirectory()) - return moduleFolderPrefix; - if (NFind::FindFile(moduleFolderPrefix + kFormatsFolderName, fileInfo)) - if (fileInfo.IsDirectory()) - return moduleFolderPrefix; - #ifdef _WIN32 - CSysString path; - if (ReadPathFromRegistry(HKEY_CURRENT_USER, path)) - return path; - if (ReadPathFromRegistry(HKEY_LOCAL_MACHINE, path)) - return path; - #endif - return moduleFolderPrefix; -} - -typedef UInt32 (WINAPI *GetNumberOfMethodsFunc)(UInt32 *numMethods); -typedef UInt32 (WINAPI *GetNumberOfFormatsFunc)(UInt32 *numFormats); -typedef UInt32 (WINAPI *GetHandlerPropertyFunc)(PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *GetHandlerPropertyFunc2)(UInt32 index, PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *iid, void **outObject); -typedef UInt32 (WINAPI *SetLargePageModeFunc)(); - - -static HRESULT GetCoderClass(GetMethodPropertyFunc getMethodProperty, UInt32 index, - PROPID propId, CLSID &clsId, bool &isAssigned) -{ - NWindows::NCOM::CPropVariant prop; - isAssigned = false; - RINOK(getMethodProperty(index, propId, &prop)); - if (prop.vt == VT_BSTR) - { - isAssigned = true; - clsId = *(const GUID *)prop.bstrVal; - } - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -HRESULT CCodecs::LoadCodecs() -{ - CCodecLib &lib = Libs.Back(); - lib.GetMethodProperty = (GetMethodPropertyFunc)lib.Lib.GetProcAddress("GetMethodProperty"); - if (lib.GetMethodProperty == NULL) - return S_OK; - - UInt32 numMethods = 1; - GetNumberOfMethodsFunc getNumberOfMethodsFunc = (GetNumberOfMethodsFunc)lib.Lib.GetProcAddress("GetNumberOfMethods"); - if (getNumberOfMethodsFunc != NULL) - { - RINOK(getNumberOfMethodsFunc(&numMethods)); - } - - for(UInt32 i = 0; i < numMethods; i++) - { - CDllCodecInfo info; - info.LibIndex = Libs.Size() - 1; - info.CodecIndex = i; - - RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kEncoder, info.Encoder, info.EncoderIsAssigned)); - RINOK(GetCoderClass(lib.GetMethodProperty, i, NMethodPropID::kDecoder, info.Decoder, info.DecoderIsAssigned)); - - Codecs.Add(info); - } - return S_OK; -} - -static HRESULT ReadProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, NCOM::CPropVariant &prop) -{ - if (getProp2) - return getProp2(index, propID, &prop);; - return getProp(propID, &prop); -} - -static HRESULT ReadBoolProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, bool &res) -{ - NCOM::CPropVariant prop; - RINOK(ReadProp(getProp, getProp2, index, propID, prop)); - if (prop.vt == VT_BOOL) - res = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -static HRESULT ReadStringProp( - GetHandlerPropertyFunc getProp, - GetHandlerPropertyFunc2 getProp2, - UInt32 index, PROPID propID, UString &res) -{ - NCOM::CPropVariant prop; - RINOK(ReadProp(getProp, getProp2, index, propID, prop)); - if (prop.vt == VT_BSTR) - res = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - return E_FAIL; - return S_OK; -} - -#endif - -static const unsigned int kNumArcsMax = 32; -static unsigned int g_NumArcs = 0; -static const CArcInfo *g_Arcs[kNumArcsMax]; -void RegisterArc(const CArcInfo *arcInfo) -{ - if (g_NumArcs < kNumArcsMax) - g_Arcs[g_NumArcs++] = arcInfo; -} - -static void SplitString(const UString &srcString, UStringVector &destStrings) -{ - destStrings.Clear(); - UString s; - int len = srcString.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = srcString[i]; - if (c == L' ') - { - if (!s.IsEmpty()) - { - destStrings.Add(s); - s.Empty(); - } - } - else - s += c; - } - if (!s.IsEmpty()) - destStrings.Add(s); -} - -void CArcInfoEx::AddExts(const wchar_t* ext, const wchar_t* addExt) -{ - UStringVector exts, addExts; - SplitString(ext, exts); - if (addExt != 0) - SplitString(addExt, addExts); - for (int i = 0; i < exts.Size(); i++) - { - CArcExtInfo extInfo; - extInfo.Ext = exts[i]; - if (i < addExts.Size()) - { - extInfo.AddExt = addExts[i]; - if (extInfo.AddExt == L"*") - extInfo.AddExt.Empty(); - } - Exts.Add(extInfo); - } -} - -#ifdef EXTERNAL_CODECS - -HRESULT CCodecs::LoadFormats() -{ - const NDLL::CLibrary &lib = Libs.Back().Lib; - GetHandlerPropertyFunc getProp = 0; - GetHandlerPropertyFunc2 getProp2 = (GetHandlerPropertyFunc2) - lib.GetProcAddress("GetHandlerProperty2"); - if (getProp2 == NULL) - { - getProp = (GetHandlerPropertyFunc) - lib.GetProcAddress("GetHandlerProperty"); - if (getProp == NULL) - return S_OK; - } - - UInt32 numFormats = 1; - GetNumberOfFormatsFunc getNumberOfFormats = (GetNumberOfFormatsFunc) - lib.GetProcAddress("GetNumberOfFormats"); - if (getNumberOfFormats != NULL) - { - RINOK(getNumberOfFormats(&numFormats)); - } - if (getProp2 == NULL) - numFormats = 1; - - for(UInt32 i = 0; i < numFormats; i++) - { - CArcInfoEx item; - item.LibIndex = Libs.Size() - 1; - item.FormatIndex = i; - - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kName, item.Name)); - - NCOM::CPropVariant prop; - if (ReadProp(getProp, getProp2, i, NArchive::kClassID, prop) != S_OK) - continue; - if (prop.vt != VT_BSTR) - continue; - item.ClassID = *(const GUID *)prop.bstrVal; - prop.Clear(); - - UString ext, addExt; - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kExtension, ext)); - RINOK(ReadStringProp(getProp, getProp2, i, NArchive::kAddExtension, addExt)); - item.AddExts(ext, addExt); - - ReadBoolProp(getProp, getProp2, i, NArchive::kUpdate, item.UpdateEnabled); - if (item.UpdateEnabled) - ReadBoolProp(getProp, getProp2, i, NArchive::kKeepName, item.KeepName); - - if (ReadProp(getProp, getProp2, i, NArchive::kStartSignature, prop) == S_OK) - if (prop.vt == VT_BSTR) - { - UINT len = ::SysStringByteLen(prop.bstrVal); - item.StartSignature.SetCapacity(len); - memmove(item.StartSignature, prop.bstrVal, len); - } - Formats.Add(item); - } - return S_OK; -} - -#ifdef NEW_FOLDER_INTERFACE -void CCodecLib::LoadIcons() -{ - UString iconTypes = MyLoadStringW((HMODULE)Lib, kIconTypesResId); - UStringVector pairs; - SplitString(iconTypes, pairs); - for (int i = 0; i < pairs.Size(); i++) - { - const UString &s = pairs[i]; - int pos = s.Find(L':'); - if (pos < 0) - continue; - CIconPair iconPair; - const wchar_t *end; - UString num = s.Mid(pos + 1); - iconPair.IconIndex = (UInt32)ConvertStringToUInt64(num, &end); - if (*end != L'\0') - continue; - iconPair.Ext = s.Left(pos); - IconPairs.Add(iconPair); - } -} - -int CCodecLib::FindIconIndex(const UString &ext) const -{ - for (int i = 0; i < IconPairs.Size(); i++) - { - const CIconPair &pair = IconPairs[i]; - if (ext.CompareNoCase(pair.Ext) == 0) - return pair.IconIndex; - } - return -1; -} -#endif - -#ifdef _7ZIP_LARGE_PAGES -extern "C" -{ - extern SIZE_T g_LargePageSize; -} -#endif - -HRESULT CCodecs::LoadDll(const CSysString &dllPath) -{ - { - NDLL::CLibrary library; - if (!library.LoadEx(dllPath, LOAD_LIBRARY_AS_DATAFILE)) - return S_OK; - } - Libs.Add(CCodecLib()); - CCodecLib &lib = Libs.Back(); - #ifdef NEW_FOLDER_INTERFACE - lib.Path = dllPath; - #endif - bool used = false; - HRESULT res = S_OK; - if (lib.Lib.Load(dllPath)) - { - #ifdef NEW_FOLDER_INTERFACE - lib.LoadIcons(); - #endif - - #ifdef _7ZIP_LARGE_PAGES - if (g_LargePageSize != 0) - { - SetLargePageModeFunc setLargePageMode = (SetLargePageModeFunc)lib.Lib.GetProcAddress("SetLargePageMode"); - if (setLargePageMode != 0) - setLargePageMode(); - } - #endif - - lib.CreateObject = (CreateObjectFunc)lib.Lib.GetProcAddress("CreateObject"); - if (lib.CreateObject != 0) - { - int startSize = Codecs.Size(); - res = LoadCodecs(); - used = (Codecs.Size() != startSize); - if (res == S_OK) - { - startSize = Formats.Size(); - res = LoadFormats(); - used = used || (Formats.Size() != startSize); - } - } - } - if (!used) - Libs.DeleteBack(); - return res; -} - -HRESULT CCodecs::LoadDllsFromFolder(const CSysString &folderPrefix) -{ - NFile::NFind::CEnumerator enumerator(folderPrefix + CSysString(TEXT("*"))); - NFile::NFind::CFileInfo fileInfo; - while (enumerator.Next(fileInfo)) - { - if (fileInfo.IsDirectory()) - continue; - RINOK(LoadDll(folderPrefix + fileInfo.Name)); - } - return S_OK; -} - -#endif - -#ifndef _SFX -static inline void SetBuffer(CByteBuffer &bb, const Byte *data, int size) -{ - bb.SetCapacity(size); - memmove((Byte *)bb, data, size); -} -#endif - -HRESULT CCodecs::Load() -{ - Formats.Clear(); - #ifdef EXTERNAL_CODECS - Codecs.Clear(); - #endif - for (UInt32 i = 0; i < g_NumArcs; i++) - { - const CArcInfo &arc = *g_Arcs[i]; - CArcInfoEx item; - item.Name = arc.Name; - item.CreateInArchive = arc.CreateInArchive; - item.CreateOutArchive = arc.CreateOutArchive; - item.AddExts(arc.Ext, arc.AddExt); - item.UpdateEnabled = (arc.CreateOutArchive != 0); - item.KeepName = arc.KeepName; - - #ifndef _SFX - SetBuffer(item.StartSignature, arc.Signature, arc.SignatureSize); - #endif - Formats.Add(item); - } - #ifdef EXTERNAL_CODECS - const CSysString baseFolder = GetBaseFolderPrefixFromRegistry(); - RINOK(LoadDll(baseFolder + kMainDll)); - RINOK(LoadDllsFromFolder(baseFolder + kCodecsFolderName TEXT(STRING_PATH_SEPARATOR))); - RINOK(LoadDllsFromFolder(baseFolder + kFormatsFolderName TEXT(STRING_PATH_SEPARATOR))); - #endif - return S_OK; -} - -int CCodecs::FindFormatForArchiveName(const UString &archivePath) const -{ - int slashPos1 = archivePath.ReverseFind(L'\\'); - int slashPos2 = archivePath.ReverseFind(L'.'); - int dotPos = archivePath.ReverseFind(L'.'); - if (dotPos < 0 || dotPos < slashPos1 || dotPos < slashPos2) - return -1; - UString ext = archivePath.Mid(dotPos + 1); - for (int i = 0; i < Formats.Size(); i++) - { - const CArcInfoEx &arc = Formats[i]; - if (!arc.UpdateEnabled) - continue; - // if (arc.FindExtension(ext) >= 0) - UString mainExt = arc.GetMainExt(); - if (!mainExt.IsEmpty() && ext.CompareNoCase(mainExt) == 0) - return i; - } - return -1; -} - -int CCodecs::FindFormatForArchiveType(const UString &arcType) const -{ - for (int i = 0; i < Formats.Size(); i++) - { - const CArcInfoEx &arc = Formats[i]; - if (!arc.UpdateEnabled) - continue; - if (arc.Name.CompareNoCase(arcType) == 0) - return i; - } - return -1; -} - -#ifdef EXTERNAL_CODECS - -#ifdef EXPORT_CODECS -extern unsigned int g_NumCodecs; -STDAPI CreateCoder2(bool encode, UInt32 index, const GUID *iid, void **outObject); -STDAPI GetMethodProperty(UInt32 codecIndex, PROPID propID, PROPVARIANT *value); -// STDAPI GetNumberOfMethods(UINT32 *numCodecs); -#endif - -STDMETHODIMP CCodecs::GetNumberOfMethods(UINT32 *numMethods) -{ - *numMethods = - #ifdef EXPORT_CODECS - g_NumCodecs + - #endif - Codecs.Size(); - return S_OK; -} - -STDMETHODIMP CCodecs::GetProperty(UINT32 index, PROPID propID, PROPVARIANT *value) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return GetMethodProperty(index, propID, value); - #endif - - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - - if (propID == NMethodPropID::kDecoderIsAssigned) - { - NWindows::NCOM::CPropVariant propVariant; - propVariant = ci.DecoderIsAssigned; - propVariant.Detach(value); - return S_OK; - } - if (propID == NMethodPropID::kEncoderIsAssigned) - { - NWindows::NCOM::CPropVariant propVariant; - propVariant = ci.EncoderIsAssigned; - propVariant.Detach(value); - return S_OK; - } - return Libs[ci.LibIndex].GetMethodProperty(ci.CodecIndex, propID, value); -} - -STDMETHODIMP CCodecs::CreateDecoder(UINT32 index, const GUID *iid, void **coder) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return CreateCoder2(false, index, iid, coder); - #endif - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - if (ci.DecoderIsAssigned) - return Libs[ci.LibIndex].CreateObject(&ci.Decoder, iid, (void **)coder); - return S_OK; -} - -STDMETHODIMP CCodecs::CreateEncoder(UINT32 index, const GUID *iid, void **coder) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return CreateCoder2(true, index, iid, coder); - #endif - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - if (ci.EncoderIsAssigned) - return Libs[ci.LibIndex].CreateObject(&ci.Encoder, iid, (void **)coder); - return S_OK; -} - -HRESULT CCodecs::CreateCoder(const UString &name, bool encode, CMyComPtr &coder) const -{ - for (int i = 0; i < Codecs.Size(); i++) - { - const CDllCodecInfo &codec = Codecs[i]; - if (encode && !codec.EncoderIsAssigned || !encode && !codec.DecoderIsAssigned) - continue; - const CCodecLib &lib = Libs[codec.LibIndex]; - UString res; - NWindows::NCOM::CPropVariant prop; - RINOK(lib.GetMethodProperty(codec.CodecIndex, NMethodPropID::kName, &prop)); - if (prop.vt == VT_BSTR) - res = prop.bstrVal; - else if (prop.vt != VT_EMPTY) - continue; - if (name.CompareNoCase(res) == 0) - return lib.CreateObject(encode ? &codec.Encoder : &codec.Decoder, &IID_ICompressCoder, (void **)&coder); - } - return CLASS_E_CLASSNOTAVAILABLE; -} - -int CCodecs::GetCodecLibIndex(UInt32 index) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - return -1; - #endif - #ifdef EXTERNAL_CODECS - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - return ci.LibIndex; - #else - return -1; - #endif -} - -bool CCodecs::GetCodecEncoderIsAssigned(UInt32 index) -{ - #ifdef EXPORT_CODECS - if (index < g_NumCodecs) - { - NWindows::NCOM::CPropVariant prop; - if (GetProperty(index, NMethodPropID::kEncoder, &prop) == S_OK) - if (prop.vt != VT_EMPTY) - return true; - return false; - } - #endif - #ifdef EXTERNAL_CODECS - const CDllCodecInfo &ci = Codecs[index - #ifdef EXPORT_CODECS - - g_NumCodecs - #endif - ]; - return ci.EncoderIsAssigned; - #else - return false; - #endif -} - -HRESULT CCodecs::GetCodecId(UInt32 index, UInt64 &id) -{ - UString s; - NWindows::NCOM::CPropVariant prop; - RINOK(GetProperty(index, NMethodPropID::kID, &prop)); - if (prop.vt != VT_UI8) - return E_INVALIDARG; - id = prop.uhVal.QuadPart; - return S_OK; -} - -UString CCodecs::GetCodecName(UInt32 index) -{ - UString s; - NWindows::NCOM::CPropVariant prop; - if (GetProperty(index, NMethodPropID::kName, &prop) == S_OK) - if (prop.vt == VT_BSTR) - s = prop.bstrVal; - return s; -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.h deleted file mode 100644 index 231680b5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/LoadCodecs.h +++ /dev/null @@ -1,215 +0,0 @@ -// LoadCodecs.h - -#ifndef __LOADCODECS_H -#define __LOADCODECS_H - -#include "../../../Common/Types.h" -#include "../../../Common/MyCom.h" -#include "../../../Common/MyString.h" -#include "../../../Common/Buffer.h" -#include "../../ICoder.h" - -#ifdef EXTERNAL_CODECS -#include "../../../Windows/DLL.h" -#endif - -struct CDllCodecInfo -{ - CLSID Encoder; - CLSID Decoder; - bool EncoderIsAssigned; - bool DecoderIsAssigned; - int LibIndex; - UInt32 CodecIndex; -}; - -#include "../../Archive/IArchive.h" - -typedef IInArchive * (*CreateInArchiveP)(); -typedef IOutArchive * (*CreateOutArchiveP)(); - -struct CArcExtInfo -{ - UString Ext; - UString AddExt; - CArcExtInfo() {} - CArcExtInfo(const UString &ext): Ext(ext) {} - CArcExtInfo(const UString &ext, const UString &addExt): Ext(ext), AddExt(addExt) {} -}; - - -struct CArcInfoEx -{ - #ifdef EXTERNAL_CODECS - int LibIndex; - UInt32 FormatIndex; - CLSID ClassID; - #endif - bool UpdateEnabled; - CreateInArchiveP CreateInArchive; - CreateOutArchiveP CreateOutArchive; - UString Name; - CObjectVector Exts; - #ifndef _SFX - CByteBuffer StartSignature; - // CByteBuffer FinishSignature; - #ifdef NEW_FOLDER_INTERFACE - UStringVector AssociateExts; - #endif - #endif - bool KeepName; - UString GetMainExt() const - { - if (Exts.IsEmpty()) - return UString(); - return Exts[0].Ext; - } - int FindExtension(const UString &ext) const - { - for (int i = 0; i < Exts.Size(); i++) - if (ext.CompareNoCase(Exts[i].Ext) == 0) - return i; - return -1; - } - UString GetAllExtensions() const - { - UString s; - for (int i = 0; i < Exts.Size(); i++) - { - if (i > 0) - s += ' '; - s += Exts[i].Ext; - } - return s; - } - - void AddExts(const wchar_t* ext, const wchar_t* addExt); - - CArcInfoEx(): - #ifdef EXTERNAL_CODECS - LibIndex(-1), - #endif - UpdateEnabled(false), - CreateInArchive(0), CreateOutArchive(0), - KeepName(false) - #ifndef _SFX - #endif - {} -}; - -#ifdef EXTERNAL_CODECS -typedef UInt32 (WINAPI *GetMethodPropertyFunc)(UInt32 index, PROPID propID, PROPVARIANT *value); -typedef UInt32 (WINAPI *CreateObjectFunc)(const GUID *clsID, const GUID *interfaceID, void **outObject); - - -struct CCodecLib -{ - NWindows::NDLL::CLibrary Lib; - GetMethodPropertyFunc GetMethodProperty; - CreateObjectFunc CreateObject; - #ifdef NEW_FOLDER_INTERFACE - struct CIconPair - { - UString Ext; - UInt32 IconIndex; - }; - CSysString Path; - CObjectVector IconPairs; - void LoadIcons(); - int FindIconIndex(const UString &ext) const; - #endif - CCodecLib(): GetMethodProperty(0) {} -}; -#endif - -class CCodecs: - #ifdef EXTERNAL_CODECS - public ICompressCodecsInfo, - #else - public IUnknown, - #endif - public CMyUnknownImp -{ -public: - #ifdef EXTERNAL_CODECS - CObjectVector Libs; - CObjectVector Codecs; - HRESULT LoadCodecs(); - HRESULT LoadFormats(); - HRESULT LoadDll(const CSysString &path); - HRESULT LoadDllsFromFolder(const CSysString &folderPrefix); - - HRESULT CreateArchiveHandler(const CArcInfoEx &ai, void **archive, bool outHandler) const - { - return Libs[ai.LibIndex].CreateObject(&ai.ClassID, outHandler ? &IID_IOutArchive : &IID_IInArchive, (void **)archive); - } - #endif - -public: - CObjectVector Formats; - HRESULT Load(); - int FindFormatForArchiveName(const UString &archivePath) const; - int FindFormatForArchiveType(const UString &arcType) const; - - MY_UNKNOWN_IMP - - #ifdef EXTERNAL_CODECS - STDMETHOD(GetNumberOfMethods)(UINT32 *numMethods); - STDMETHOD(GetProperty)(UINT32 index, PROPID propID, PROPVARIANT *value); - STDMETHOD(CreateDecoder)(UINT32 index, const GUID *interfaceID, void **coder); - STDMETHOD(CreateEncoder)(UINT32 index, const GUID *interfaceID, void **coder); - #endif - - int GetCodecLibIndex(UInt32 index); - bool GetCodecEncoderIsAssigned(UInt32 index); - HRESULT GetCodecId(UInt32 index, UInt64 &id); - UString GetCodecName(UInt32 index); - - HRESULT CreateInArchive(int formatIndex, CMyComPtr &archive) const - { - const CArcInfoEx &ai = Formats[formatIndex]; - #ifdef EXTERNAL_CODECS - if (ai.LibIndex < 0) - #endif - { - archive = ai.CreateInArchive(); - return S_OK; - } - #ifdef EXTERNAL_CODECS - return CreateArchiveHandler(ai, (void **)&archive, false); - #endif - } - HRESULT CreateOutArchive(int formatIndex, CMyComPtr &archive) const - { - const CArcInfoEx &ai = Formats[formatIndex]; - #ifdef EXTERNAL_CODECS - if (ai.LibIndex < 0) - #endif - { - archive = ai.CreateOutArchive(); - return S_OK; - } - #ifdef EXTERNAL_CODECS - return CreateArchiveHandler(ai, (void **)&archive, true); - #endif - } - int FindOutFormatFromName(const UString &name) const - { - for (int i = 0; i < Formats.Size(); i++) - { - const CArcInfoEx &arc = Formats[i]; - if (!arc.UpdateEnabled) - continue; - if (arc.Name.CompareNoCase(name) == 0) - return i; - } - return -1; - } - - #ifdef EXTERNAL_CODECS - HRESULT CreateCoder(const UString &name, bool encode, CMyComPtr &coder) const; - #endif - -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.cpp deleted file mode 100644 index 2874f6a7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +++ /dev/null @@ -1,461 +0,0 @@ -// OpenArchive.cpp - -#include "StdAfx.h" - -#include "OpenArchive.h" - -#include "Common/Wildcard.h" - -#include "Windows/FileName.h" -#include "Windows/FileDir.h" -#include "Windows/Defs.h" -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" -#include "../../Common/StreamUtils.h" - -#include "Common/StringConvert.h" - -#include "DefaultName.h" - -using namespace NWindows; - -HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, UString &result) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, kpidPath, &prop)); - if(prop.vt == VT_BSTR) - result = prop.bstrVal; - else if (prop.vt == VT_EMPTY) - result.Empty(); - else - return E_FAIL; - return S_OK; -} - -HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, const UString &defaultName, UString &result) -{ - RINOK(GetArchiveItemPath(archive, index, result)); - if (result.IsEmpty()) - result = defaultName; - return S_OK; -} - -HRESULT GetArchiveItemFileTime(IInArchive *archive, UInt32 index, - const FILETIME &defaultFileTime, FILETIME &fileTime) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, kpidLastWriteTime, &prop)); - if (prop.vt == VT_FILETIME) - fileTime = prop.filetime; - else if (prop.vt == VT_EMPTY) - fileTime = defaultFileTime; - else - return E_FAIL; - return S_OK; -} - -HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result) -{ - NCOM::CPropVariant prop; - RINOK(archive->GetProperty(index, propID, &prop)); - if(prop.vt == VT_BOOL) - result = VARIANT_BOOLToBool(prop.boolVal); - else if (prop.vt == VT_EMPTY) - result = false; - else - return E_FAIL; - return S_OK; -} - -HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result) -{ - return IsArchiveItemProp(archive, index, kpidIsFolder, result); -} - -HRESULT IsArchiveItemAnti(IInArchive *archive, UInt32 index, bool &result) -{ - return IsArchiveItemProp(archive, index, kpidIsAnti, result); -} - -// Static-SFX (for Linux) can be big. -const UInt64 kMaxCheckStartPosition = 1 << 22; - -HRESULT ReOpenArchive(IInArchive *archive, const UString &fileName, IArchiveOpenCallback *openArchiveCallback) -{ - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStream(inStreamSpec); - inStreamSpec->Open(fileName); - return archive->Open(inStream, &kMaxCheckStartPosition, openArchiveCallback); -} - -#ifndef _SFX -static inline bool TestSignature(const Byte *p1, const Byte *p2, size_t size) -{ - for (size_t i = 0; i < size; i++) - if (p1[i] != p2[i]) - return false; - return true; -} -#endif - -HRESULT OpenArchive( - CCodecs *codecs, - IInStream *inStream, - const UString &fileName, - IInArchive **archiveResult, - int &formatIndex, - UString &defaultItemName, - IArchiveOpenCallback *openArchiveCallback) -{ - *archiveResult = NULL; - UString extension; - { - int dotPos = fileName.ReverseFind(L'.'); - if (dotPos >= 0) - extension = fileName.Mid(dotPos + 1); - } - CIntVector orderIndices; - int i; - int numFinded = 0; - for (i = 0; i < codecs->Formats.Size(); i++) - if (codecs->Formats[i].FindExtension(extension) >= 0) - orderIndices.Insert(numFinded++, i); - else - orderIndices.Add(i); - - #ifndef _SFX - if (numFinded != 1) - { - CIntVector orderIndices2; - CByteBuffer byteBuffer; - const UInt32 kBufferSize = (200 << 10); - byteBuffer.SetCapacity(kBufferSize); - Byte *buffer = byteBuffer; - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL)); - UInt32 processedSize; - RINOK(ReadStream(inStream, buffer, kBufferSize, &processedSize)); - for (UInt32 pos = 0; pos < processedSize; pos++) - { - for (int i = 0; i < orderIndices.Size(); i++) - { - int index = orderIndices[i]; - const CArcInfoEx &ai = codecs->Formats[index]; - const CByteBuffer &sig = ai.StartSignature; - if (sig.GetCapacity() == 0) - continue; - if (pos + sig.GetCapacity() > processedSize) - continue; - if (TestSignature(buffer + pos, sig, sig.GetCapacity())) - { - orderIndices2.Add(index); - orderIndices.Delete(i--); - } - } - } - orderIndices2 += orderIndices; - orderIndices = orderIndices2; - } - else if (extension == L"000" || extension == L"001") - { - CByteBuffer byteBuffer; - const UInt32 kBufferSize = (1 << 10); - byteBuffer.SetCapacity(kBufferSize); - Byte *buffer = byteBuffer; - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL)); - UInt32 processedSize; - RINOK(ReadStream(inStream, buffer, kBufferSize, &processedSize)); - if (processedSize >= 16) - { - Byte kRarHeader[] = {0x52 , 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00}; - if (TestSignature(buffer, kRarHeader, 7) && buffer[9] == 0x73 && (buffer[10] && 1) != 0) - { - for (int i = 0; i < orderIndices.Size(); i++) - { - int index = orderIndices[i]; - const CArcInfoEx &ai = codecs->Formats[index]; - if (ai.Name.CompareNoCase(L"rar") != 0) - continue; - orderIndices.Delete(i--); - orderIndices.Insert(0, index); - break; - } - } - } - } - #endif - - HRESULT badResult = S_OK; - for(i = 0; i < orderIndices.Size(); i++) - { - inStream->Seek(0, STREAM_SEEK_SET, NULL); - - CMyComPtr archive; - - formatIndex = orderIndices[i]; - RINOK(codecs->CreateInArchive(formatIndex, archive)); - if (!archive) - continue; - - #ifdef EXTERNAL_CODECS - { - CMyComPtr setCompressCodecsInfo; - archive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs)); - } - } - #endif - - HRESULT result = archive->Open(inStream, &kMaxCheckStartPosition, openArchiveCallback); - if (result == S_FALSE) - continue; - if(result != S_OK) - { - badResult = result; - if(result == E_ABORT) - break; - continue; - } - *archiveResult = archive.Detach(); - const CArcInfoEx &format = codecs->Formats[formatIndex]; - if (format.Exts.Size() == 0) - { - defaultItemName = GetDefaultName2(fileName, L"", L""); - } - else - { - int subExtIndex = format.FindExtension(extension); - if (subExtIndex < 0) - subExtIndex = 0; - defaultItemName = GetDefaultName2(fileName, - format.Exts[subExtIndex].Ext, - format.Exts[subExtIndex].AddExt); - } - return S_OK; - } - if (badResult != S_OK) - return badResult; - return S_FALSE; -} - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &filePath, - IInArchive **archiveResult, - int &formatIndex, - UString &defaultItemName, - IArchiveOpenCallback *openArchiveCallback) -{ - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStream(inStreamSpec); - if (!inStreamSpec->Open(filePath)) - return GetLastError(); - return OpenArchive(codecs, inStream, ExtractFileNameFromPath(filePath), - archiveResult, formatIndex, - defaultItemName, openArchiveCallback); -} - -static void MakeDefaultName(UString &name) -{ - int dotPos = name.ReverseFind(L'.'); - if (dotPos < 0) - return; - UString ext = name.Mid(dotPos + 1); - if (ext.IsEmpty()) - return; - for (int pos = 0; pos < ext.Length(); pos++) - if (ext[pos] < L'0' || ext[pos] > L'9') - return; - name = name.Left(dotPos); -} - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &fileName, - IInArchive **archive0, - IInArchive **archive1, - int &formatIndex0, - int &formatIndex1, - UString &defaultItemName0, - UString &defaultItemName1, - IArchiveOpenCallback *openArchiveCallback) -{ - HRESULT result = OpenArchive(codecs, fileName, - archive0, formatIndex0, defaultItemName0, openArchiveCallback); - RINOK(result); - CMyComPtr getStream; - result = (*archive0)->QueryInterface(IID_IInArchiveGetStream, (void **)&getStream); - if (result != S_OK || getStream == 0) - return S_OK; - - CMyComPtr subSeqStream; - result = getStream->GetStream(0, &subSeqStream); - if (result != S_OK) - return S_OK; - - CMyComPtr subStream; - if (subSeqStream.QueryInterface(IID_IInStream, &subStream) != S_OK) - return S_OK; - if (!subStream) - return S_OK; - - UInt32 numItems; - RINOK((*archive0)->GetNumberOfItems(&numItems)); - if (numItems < 1) - return S_OK; - - UString subPath; - RINOK(GetArchiveItemPath(*archive0, 0, subPath)) - if (subPath.IsEmpty()) - { - MakeDefaultName(defaultItemName0); - subPath = defaultItemName0; - const CArcInfoEx &format = codecs->Formats[formatIndex0]; - if (format.Name.CompareNoCase(L"7z") == 0) - { - if (subPath.Right(3).CompareNoCase(L".7z") != 0) - subPath += L".7z"; - } - } - else - subPath = ExtractFileNameFromPath(subPath); - - CMyComPtr setSubArchiveName; - openArchiveCallback->QueryInterface(IID_IArchiveOpenSetSubArchiveName, (void **)&setSubArchiveName); - if (setSubArchiveName) - setSubArchiveName->SetSubArchiveName(subPath); - - result = OpenArchive(codecs, subStream, subPath, - archive1, formatIndex1, defaultItemName1, openArchiveCallback); - return S_OK; -} - -static void SetCallback(const UString &archiveName, - IOpenCallbackUI *openCallbackUI, CMyComPtr &openCallback) -{ - COpenCallbackImp *openCallbackSpec = new COpenCallbackImp; - openCallback = openCallbackSpec; - openCallbackSpec->Callback = openCallbackUI; - - UString fullName; - int fileNamePartStartIndex; - NFile::NDirectory::MyGetFullPathName(archiveName, fullName, fileNamePartStartIndex); - openCallbackSpec->Init( - fullName.Left(fileNamePartStartIndex), - fullName.Mid(fileNamePartStartIndex)); -} - -HRESULT MyOpenArchive( - CCodecs *codecs, - const UString &archiveName, - IInArchive **archive, UString &defaultItemName, IOpenCallbackUI *openCallbackUI) -{ - CMyComPtr openCallback; - SetCallback(archiveName, openCallbackUI, openCallback); - int formatInfo; - return OpenArchive(codecs, archiveName, archive, formatInfo, defaultItemName, openCallback); -} - -HRESULT MyOpenArchive( - CCodecs *codecs, - const UString &archiveName, - IInArchive **archive0, - IInArchive **archive1, - UString &defaultItemName0, - UString &defaultItemName1, - UStringVector &volumePaths, - UInt64 &volumesSize, - IOpenCallbackUI *openCallbackUI) -{ - volumesSize = 0; - COpenCallbackImp *openCallbackSpec = new COpenCallbackImp; - CMyComPtr openCallback = openCallbackSpec; - openCallbackSpec->Callback = openCallbackUI; - - UString fullName; - int fileNamePartStartIndex; - NFile::NDirectory::MyGetFullPathName(archiveName, fullName, fileNamePartStartIndex); - UString prefix = fullName.Left(fileNamePartStartIndex); - UString name = fullName.Mid(fileNamePartStartIndex); - openCallbackSpec->Init(prefix, name); - - int formatIndex0, formatIndex1; - RINOK(OpenArchive(codecs, archiveName, - archive0, - archive1, - formatIndex0, - formatIndex1, - defaultItemName0, - defaultItemName1, - openCallback)); - volumePaths.Add(prefix + name); - for (int i = 0; i < openCallbackSpec->FileNames.Size(); i++) - volumePaths.Add(prefix + openCallbackSpec->FileNames[i]); - volumesSize = openCallbackSpec->TotalSize; - return S_OK; -} - -HRESULT CArchiveLink::Close() -{ - if (Archive1 != 0) - RINOK(Archive1->Close()); - if (Archive0 != 0) - RINOK(Archive0->Close()); - IsOpen = false; - return S_OK; -} - -void CArchiveLink::Release() -{ - IsOpen = false; - Archive1.Release(); - Archive0.Release(); -} - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &archiveName, - CArchiveLink &archiveLink, - IArchiveOpenCallback *openCallback) -{ - HRESULT res = OpenArchive(codecs, archiveName, - &archiveLink.Archive0, &archiveLink.Archive1, - archiveLink.FormatIndex0, archiveLink.FormatIndex1, - archiveLink.DefaultItemName0, archiveLink.DefaultItemName1, - openCallback); - archiveLink.IsOpen = (res == S_OK); - return res; -} - -HRESULT MyOpenArchive(CCodecs *codecs, - const UString &archiveName, - CArchiveLink &archiveLink, - IOpenCallbackUI *openCallbackUI) -{ - HRESULT res = MyOpenArchive(codecs, archiveName, - &archiveLink.Archive0, &archiveLink.Archive1, - archiveLink.DefaultItemName0, archiveLink.DefaultItemName1, - archiveLink.VolumePaths, - archiveLink.VolumesSize, - openCallbackUI); - archiveLink.IsOpen = (res == S_OK); - return res; -} - -HRESULT ReOpenArchive(CCodecs *codecs, CArchiveLink &archiveLink, const UString &fileName) -{ - if (archiveLink.GetNumLevels() > 1) - return E_NOTIMPL; - - if (archiveLink.GetNumLevels() == 0) - return MyOpenArchive(codecs, fileName, archiveLink, 0); - - CMyComPtr openCallback; - SetCallback(fileName, NULL, openCallback); - - HRESULT res = ReOpenArchive(archiveLink.GetArchive(), fileName, openCallback); - archiveLink.IsOpen = (res == S_OK); - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.h deleted file mode 100644 index 7b424463..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/OpenArchive.h +++ /dev/null @@ -1,130 +0,0 @@ -// OpenArchive.h - -#ifndef __OPENARCHIVE_H -#define __OPENARCHIVE_H - -#include "Common/MyString.h" -#include "Windows/FileFind.h" - -#include "../../Archive/IArchive.h" -#include "LoadCodecs.h" -#include "ArchiveOpenCallback.h" - -HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, UString &result); -HRESULT GetArchiveItemPath(IInArchive *archive, UInt32 index, const UString &defaultName, UString &result); -HRESULT GetArchiveItemFileTime(IInArchive *archive, UInt32 index, - const FILETIME &defaultFileTime, FILETIME &fileTime); -HRESULT IsArchiveItemProp(IInArchive *archive, UInt32 index, PROPID propID, bool &result); -HRESULT IsArchiveItemFolder(IInArchive *archive, UInt32 index, bool &result); -HRESULT IsArchiveItemAnti(IInArchive *archive, UInt32 index, bool &result); - -struct ISetSubArchiveName -{ - virtual void SetSubArchiveName(const wchar_t *name) = 0; -}; - -HRESULT OpenArchive( - CCodecs *codecs, - IInStream *inStream, - const UString &fileName, - IInArchive **archiveResult, - int &formatIndex, - UString &defaultItemName, - IArchiveOpenCallback *openArchiveCallback); - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &filePath, - IInArchive **archive, - int &formatIndex, - UString &defaultItemName, - IArchiveOpenCallback *openArchiveCallback); - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &filePath, - IInArchive **archive0, - IInArchive **archive1, - int &formatIndex0, - int &formatIndex1, - UString &defaultItemName0, - UString &defaultItemName1, - IArchiveOpenCallback *openArchiveCallback); - - -HRESULT ReOpenArchive(IInArchive *archive, const UString &fileName, IArchiveOpenCallback *openArchiveCallback); - -HRESULT MyOpenArchive( - CCodecs *codecs, - const UString &archiveName, - IInArchive **archive, - UString &defaultItemName, - IOpenCallbackUI *openCallbackUI); - -HRESULT MyOpenArchive( - CCodecs *codecs, - const UString &archiveName, - IInArchive **archive0, - IInArchive **archive1, - UString &defaultItemName0, - UString &defaultItemName1, - UStringVector &volumePaths, - UInt64 &volumesSize, - IOpenCallbackUI *openCallbackUI); - -struct CArchiveLink -{ - CMyComPtr Archive0; - CMyComPtr Archive1; - UString DefaultItemName0; - UString DefaultItemName1; - - int FormatIndex0; - int FormatIndex1; - - UStringVector VolumePaths; - - UInt64 VolumesSize; - - int GetNumLevels() const - { - int result = 0; - if (Archive0) - { - result++; - if (Archive1) - result++; - } - return result; - } - - bool IsOpen; - - CArchiveLink(): IsOpen(false), VolumesSize(0) {}; - - IInArchive *GetArchive() { return Archive1 != 0 ? Archive1: Archive0; } - UString GetDefaultItemName() { return Archive1 != 0 ? DefaultItemName1: DefaultItemName0; } - int GetArchiverIndex() const { return Archive1 != 0 ? FormatIndex1: FormatIndex0; } - HRESULT Close(); - void Release(); -}; - -HRESULT OpenArchive( - CCodecs *codecs, - const UString &archiveName, - CArchiveLink &archiveLink, - IArchiveOpenCallback *openCallback); - -HRESULT MyOpenArchive( - CCodecs *codecs, - const UString &archiveName, - CArchiveLink &archiveLink, - IOpenCallbackUI *openCallbackUI); - -HRESULT ReOpenArchive( - CCodecs *codecs, - CArchiveLink &archiveLink, - const UString &fileName); - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp deleted file mode 100644 index 76596883..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// PropIDUtils.cpp - -#include "StdAfx.h" - -#include "PropIDUtils.h" - -#include "Common/IntToString.h" -#include "Common/StringConvert.h" - -#include "Windows/FileFind.h" -#include "Windows/PropVariantConversions.h" - -#include "../../PropID.h" - -using namespace NWindows; - -static UString ConvertUInt32ToString(UInt32 value) -{ - wchar_t buffer[32]; - ConvertUInt64ToString(value, buffer); - return buffer; -} - -static void ConvertUInt32ToHex(UInt32 value, wchar_t *s) -{ - for (int i = 0; i < 8; i++) - { - int t = value & 0xF; - value >>= 4; - s[7 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10))); - } - s[8] = L'\0'; -} - -UString ConvertPropertyToString(const PROPVARIANT &propVariant, PROPID propID, bool full) -{ - switch(propID) - { - case kpidCreationTime: - case kpidLastWriteTime: - case kpidLastAccessTime: - { - if (propVariant.vt != VT_FILETIME) - return UString(); // It is error; - FILETIME localFileTime; - if (propVariant.filetime.dwHighDateTime == 0 && - propVariant.filetime.dwLowDateTime == 0) - return UString(); - if (!::FileTimeToLocalFileTime(&propVariant.filetime, &localFileTime)) - return UString(); // It is error; - return ConvertFileTimeToString(localFileTime, true, full); - } - case kpidCRC: - { - if(propVariant.vt != VT_UI4) - break; - wchar_t temp[12]; - ConvertUInt32ToHex(propVariant.ulVal, temp); - return temp; - } - case kpidAttributes: - { - if(propVariant.vt != VT_UI4) - break; - UString result; - UInt32 attributes = propVariant.ulVal; - if (NFile::NFind::NAttributes::IsReadOnly(attributes)) result += L'R'; - if (NFile::NFind::NAttributes::IsHidden(attributes)) result += L'H'; - if (NFile::NFind::NAttributes::IsSystem(attributes)) result += L'S'; - if (NFile::NFind::NAttributes::IsDirectory(attributes)) result += L'D'; - if (NFile::NFind::NAttributes::IsArchived(attributes)) result += L'A'; - if (NFile::NFind::NAttributes::IsCompressed(attributes)) result += L'C'; - if (NFile::NFind::NAttributes::IsEncrypted(attributes)) result += L'E'; - return result; - } - case kpidDictionarySize: - { - if(propVariant.vt != VT_UI4) - break; - UInt32 size = propVariant.ulVal; - if (size % (1 << 20) == 0) - return ConvertUInt32ToString(size >> 20) + L"MB"; - if (size % (1 << 10) == 0) - return ConvertUInt32ToString(size >> 10) + L"KB"; - return ConvertUInt32ToString(size); - } - } - return ConvertPropVariantToString(propVariant); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.h deleted file mode 100644 index 1d820976..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/PropIDUtils.h +++ /dev/null @@ -1,10 +0,0 @@ -// PropIDUtils.h - -#ifndef __PROPIDUTILS_H -#define __PROPIDUTILS_H - -#include "Common/MyString.h" - -UString ConvertPropertyToString(const PROPVARIANT &propVariant, PROPID propID, bool full = true); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Property.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Property.h deleted file mode 100644 index 9fd340cb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Property.h +++ /dev/null @@ -1,14 +0,0 @@ -// Property.h - -#ifndef __PROPERTY_H -#define __PROPERTY_H - -#include "Common/MyString.h" - -struct CProperty -{ - UString Name; - UString Value; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.cpp deleted file mode 100644 index b1434ace..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// SetProperties.cpp - -#include "StdAfx.h" - -#include "SetProperties.h" - -#include "Windows/PropVariant.h" -#include "Common/MyString.h" -#include "Common/StringToInt.h" -#include "Common/MyCom.h" - -#include "../../Archive/IArchive.h" - -using namespace NWindows; -using namespace NCOM; - -static void ParseNumberString(const UString &s, NCOM::CPropVariant &prop) -{ - const wchar_t *endPtr; - UInt64 result = ConvertStringToUInt64(s, &endPtr); - if (endPtr - (const wchar_t *)s != s.Length()) - prop = s; - else if (result <= 0xFFFFFFFF) - prop = (UInt32)result; - else - prop = result; -} - -HRESULT SetProperties(IUnknown *unknown, const CObjectVector &properties) -{ - if (properties.IsEmpty()) - return S_OK; - CMyComPtr setProperties; - unknown->QueryInterface(IID_ISetProperties, (void **)&setProperties); - if (!setProperties) - return S_OK; - - UStringVector realNames; - CPropVariant *values = new CPropVariant[properties.Size()]; - try - { - int i; - for(i = 0; i < properties.Size(); i++) - { - const CProperty &property = properties[i]; - NCOM::CPropVariant propVariant; - if (!property.Value.IsEmpty()) - ParseNumberString(property.Value, propVariant); - realNames.Add(property.Name); - values[i] = propVariant; - } - CRecordVector names; - for(i = 0; i < realNames.Size(); i++) - names.Add((const wchar_t *)realNames[i]); - - RINOK(setProperties->SetProperties(&names.Front(), values, names.Size())); - } - catch(...) - { - delete []values; - throw; - } - delete []values; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.h deleted file mode 100644 index 892f1a21..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SetProperties.h +++ /dev/null @@ -1,10 +0,0 @@ -// SetProperties.h - -#ifndef __SETPROPERTIES_H -#define __SETPROPERTIES_H - -#include "Property.h" - -HRESULT SetProperties(IUnknown *unknown, const CObjectVector &properties); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.cpp deleted file mode 100644 index 061e7773..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// SortUtils.cpp - -#include "StdAfx.h" - -#include "SortUtils.h" -#include "Common/Wildcard.h" - -static int CompareStrings(const int *p1, const int *p2, void *param) -{ - const UStringVector &strings = *(const UStringVector *)param; - return CompareFileNames(strings[*p1], strings[*p2]); -} - -void SortFileNames(const UStringVector &strings, CIntVector &indices) -{ - indices.Clear(); - int numItems = strings.Size(); - indices.Reserve(numItems); - for(int i = 0; i < numItems; i++) - indices.Add(i); - indices.Sort(CompareStrings, (void *)&strings); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.h deleted file mode 100644 index e1522461..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/SortUtils.h +++ /dev/null @@ -1,10 +0,0 @@ -// SortUtils.h - -#ifndef __SORTUTLS_H -#define __SORTUTLS_H - -#include "Common/MyString.h" - -void SortFileNames(const UStringVector &strings, CIntVector &indices); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.cpp deleted file mode 100644 index eeaec180..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.cpp +++ /dev/null @@ -1,22 +0,0 @@ -// TempFiles.cpp - -#include "StdAfx.h" - -#include "TempFiles.h" - -#include "Windows/FileDir.h" -#include "Windows/FileIO.h" - -using namespace NWindows; -using namespace NFile; - -void CTempFiles::Clear() -{ - while(!Paths.IsEmpty()) - { - NDirectory::DeleteFileAlways((LPCWSTR)Paths.Back()); - Paths.DeleteBack(); - } -} - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.h deleted file mode 100644 index eb474a76..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/TempFiles.h +++ /dev/null @@ -1,16 +0,0 @@ -// TempFiles.h - -#ifndef __TEMPFILES_H -#define __TEMPFILES_H - -#include "Common/MyString.h" - -class CTempFiles -{ - void Clear(); -public: - UStringVector Paths; - ~CTempFiles() { Clear(); } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.cpp deleted file mode 100644 index ec5ebc80..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.cpp +++ /dev/null @@ -1,852 +0,0 @@ -// Update.cpp - -#include "StdAfx.h" - -#ifdef _WIN32 -#include -#endif - -#include "Update.h" - -#include "Common/IntToString.h" -#include "Common/StringConvert.h" -#include "Common/CommandLineParser.h" - -#ifdef _WIN32 -#include "Windows/DLL.h" -#endif - -#include "Windows/Defs.h" -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/FileName.h" -#include "Windows/PropVariant.h" -#include "Windows/PropVariantConversions.h" -// #include "Windows/Synchronization.h" - -#include "../../Common/FileStreams.h" -#include "../../Compress/Copy/CopyCoder.h" - -#include "../Common/DirItem.h" -#include "../Common/EnumDirItems.h" -#include "../Common/UpdateProduce.h" -#include "../Common/OpenArchive.h" - -#include "TempFiles.h" -#include "UpdateCallback.h" -#include "EnumDirItems.h" -#include "SetProperties.h" - -static const char *kUpdateIsNotSupoorted = - "update operations are not supported for this archive"; - -using namespace NCommandLineParser; -using namespace NWindows; -using namespace NCOM; -using namespace NFile; -using namespace NName; - -static const wchar_t *kTempFolderPrefix = L"7zE"; - -using namespace NUpdateArchive; - -static HRESULT CopyBlock(ISequentialInStream *inStream, ISequentialOutStream *outStream) -{ - CMyComPtr copyCoder = new NCompress::CCopyCoder; - return copyCoder->Code(inStream, outStream, NULL, NULL, NULL); -} - -class COutMultiVolStream: - public IOutStream, - public CMyUnknownImp -{ - int _streamIndex; // required stream - UInt64 _offsetPos; // offset from start of _streamIndex index - UInt64 _absPos; - UInt64 _length; - - struct CSubStreamInfo - { - COutFileStream *StreamSpec; - CMyComPtr Stream; - UString Name; - UInt64 Pos; - UInt64 RealSize; - }; - CObjectVector Streams; -public: - // CMyComPtr VolumeCallback; - CRecordVector Sizes; - UString Prefix; - CTempFiles *TempFiles; - - void Init() - { - _streamIndex = 0; - _offsetPos = 0; - _absPos = 0; - _length = 0; - } - - HRESULT Close(); - - MY_UNKNOWN_IMP1(IOutStream) - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); - STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); -}; - -// static NSynchronization::CCriticalSection g_TempPathsCS; - -HRESULT COutMultiVolStream::Close() -{ - HRESULT res = S_OK; - for (int i = 0; i < Streams.Size(); i++) - { - CSubStreamInfo &s = Streams[i]; - if (s.StreamSpec) - { - HRESULT res2 = s.StreamSpec->Close(); - if (res2 != S_OK) - res = res2; - } - } - return res; -} - -STDMETHODIMP COutMultiVolStream::Write(const void *data, UInt32 size, UInt32 *processedSize) -{ - if(processedSize != NULL) - *processedSize = 0; - while(size > 0) - { - if (_streamIndex >= Streams.Size()) - { - CSubStreamInfo subStream; - - wchar_t temp[32]; - ConvertUInt64ToString(_streamIndex + 1, temp); - UString res = temp; - while (res.Length() < 3) - res = UString(L'0') + res; - UString name = Prefix + res; - subStream.StreamSpec = new COutFileStream; - subStream.Stream = subStream.StreamSpec; - if(!subStream.StreamSpec->Create(name, false)) - return ::GetLastError(); - { - // NSynchronization::CCriticalSectionLock lock(g_TempPathsCS); - TempFiles->Paths.Add(name); - } - - subStream.Pos = 0; - subStream.RealSize = 0; - subStream.Name = name; - Streams.Add(subStream); - continue; - } - CSubStreamInfo &subStream = Streams[_streamIndex]; - - int index = _streamIndex; - if (index >= Sizes.Size()) - index = Sizes.Size() - 1; - UInt64 volSize = Sizes[index]; - - if (_offsetPos >= volSize) - { - _offsetPos -= volSize; - _streamIndex++; - continue; - } - if (_offsetPos != subStream.Pos) - { - // CMyComPtr outStream; - // RINOK(subStream.Stream.QueryInterface(IID_IOutStream, &outStream)); - RINOK(subStream.Stream->Seek(_offsetPos, STREAM_SEEK_SET, NULL)); - subStream.Pos = _offsetPos; - } - - UInt32 curSize = (UInt32)MyMin((UInt64)size, volSize - subStream.Pos); - UInt32 realProcessed; - RINOK(subStream.Stream->Write(data, curSize, &realProcessed)); - data = (void *)((Byte *)data + realProcessed); - size -= realProcessed; - subStream.Pos += realProcessed; - _offsetPos += realProcessed; - _absPos += realProcessed; - if (_absPos > _length) - _length = _absPos; - if (_offsetPos > subStream.RealSize) - subStream.RealSize = _offsetPos; - if(processedSize != NULL) - *processedSize += realProcessed; - if (subStream.Pos == volSize) - { - _streamIndex++; - _offsetPos = 0; - } - if (realProcessed == 0 && curSize != 0) - return E_FAIL; - break; - } - return S_OK; -} - -STDMETHODIMP COutMultiVolStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) -{ - if(seekOrigin >= 3) - return STG_E_INVALIDFUNCTION; - switch(seekOrigin) - { - case STREAM_SEEK_SET: - _absPos = offset; - break; - case STREAM_SEEK_CUR: - _absPos += offset; - break; - case STREAM_SEEK_END: - _absPos = _length + offset; - break; - } - _offsetPos = _absPos; - if (newPosition != NULL) - *newPosition = _absPos; - _streamIndex = 0; - return S_OK; -} - -STDMETHODIMP COutMultiVolStream::SetSize(Int64 newSize) -{ - if (newSize < 0) - return E_INVALIDARG; - int i = 0; - while (i < Streams.Size()) - { - CSubStreamInfo &subStream = Streams[i++]; - if ((UInt64)newSize < subStream.RealSize) - { - RINOK(subStream.Stream->SetSize(newSize)); - subStream.RealSize = newSize; - break; - } - newSize -= subStream.RealSize; - } - while (i < Streams.Size()) - { - { - CSubStreamInfo &subStream = Streams.Back(); - subStream.Stream.Release(); - NDirectory::DeleteFileAlways(subStream.Name); - } - Streams.DeleteBack(); - } - _offsetPos = _absPos; - _streamIndex = 0; - _length = newSize; - return S_OK; -} - -static const wchar_t *kDefaultArchiveType = L"7z"; -static const wchar_t *kSFXExtension = - #ifdef _WIN32 - L"exe"; - #else - L""; - #endif - -bool CUpdateOptions::Init(const CCodecs *codecs, const UString &arcPath, const UString &arcType) -{ - if (!arcType.IsEmpty()) - MethodMode.FormatIndex = codecs->FindFormatForArchiveType(arcType); - else - { - MethodMode.FormatIndex = codecs->FindFormatForArchiveName(arcPath); - if (MethodMode.FormatIndex < 0) - MethodMode.FormatIndex = codecs->FindFormatForArchiveType(kDefaultArchiveType); - } - if (MethodMode.FormatIndex < 0) - return false; - const CArcInfoEx &arcInfo = codecs->Formats[MethodMode.FormatIndex]; - UString typeExt = arcInfo.GetMainExt(); - UString ext = typeExt; - if (SfxMode) - ext = kSFXExtension; - ArchivePath.BaseExtension = ext; - ArchivePath.VolExtension = typeExt; - ArchivePath.ParseFromPath(arcPath); - for (int i = 0; i < Commands.Size(); i++) - { - CUpdateArchiveCommand &uc = Commands[i]; - uc.ArchivePath.BaseExtension = ext; - uc.ArchivePath.VolExtension = typeExt; - uc.ArchivePath.ParseFromPath(uc.UserArchivePath); - } - return true; -} - - -static HRESULT Compress( - CCodecs *codecs, - const CActionSet &actionSet, - IInArchive *archive, - const CCompressionMethodMode &compressionMethod, - CArchivePath &archivePath, - const CObjectVector &archiveItems, - bool shareForWrite, - bool stdInMode, - /* const UString & stdInFileName, */ - bool stdOutMode, - const CObjectVector &dirItems, - bool sfxMode, - const UString &sfxModule, - const CRecordVector &volumesSizes, - CTempFiles &tempFiles, - CUpdateErrorInfo &errorInfo, - IUpdateCallbackUI *callback) -{ - CMyComPtr outArchive; - if(archive != NULL) - { - CMyComPtr archive2 = archive; - HRESULT result = archive2.QueryInterface(IID_IOutArchive, &outArchive); - if(result != S_OK) - throw kUpdateIsNotSupoorted; - } - else - { - RINOK(codecs->CreateOutArchive(compressionMethod.FormatIndex, outArchive)); - - #ifdef EXTERNAL_CODECS - { - CMyComPtr setCompressCodecsInfo; - outArchive.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); - if (setCompressCodecsInfo) - { - RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecs)); - } - } - #endif - } - if (outArchive == 0) - throw kUpdateIsNotSupoorted; - - NFileTimeType::EEnum fileTimeType; - UInt32 value; - RINOK(outArchive->GetFileTimeType(&value)); - - switch(value) - { - case NFileTimeType::kWindows: - case NFileTimeType::kDOS: - case NFileTimeType::kUnix: - fileTimeType = NFileTimeType::EEnum(value); - break; - default: - return E_FAIL; - } - - CObjectVector updatePairs; - GetUpdatePairInfoList(dirItems, archiveItems, fileTimeType, updatePairs); // must be done only once!!! - - CObjectVector updatePairs2; - UpdateProduce(updatePairs, actionSet, updatePairs2); - - UInt32 numFiles = 0; - for (int i = 0; i < updatePairs2.Size(); i++) - if (updatePairs2[i].NewData) - numFiles++; - - RINOK(callback->SetNumFiles(numFiles)); - - - CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback; - CMyComPtr updateCallback(updateCallbackSpec); - - updateCallbackSpec->ShareForWrite = shareForWrite; - updateCallbackSpec->StdInMode = stdInMode; - updateCallbackSpec->Callback = callback; - updateCallbackSpec->DirItems = &dirItems; - updateCallbackSpec->ArchiveItems = &archiveItems; - updateCallbackSpec->UpdatePairs = &updatePairs2; - - CMyComPtr outStream; - - const UString &archiveName = archivePath.GetFinalPath(); - if (!stdOutMode) - { - UString resultPath; - int pos; - if(!NFile::NDirectory::MyGetFullPathName(archiveName, resultPath, pos)) - throw 1417161; - NFile::NDirectory::CreateComplexDirectory(resultPath.Left(pos)); - } - - COutFileStream *outStreamSpec = NULL; - COutMultiVolStream *volStreamSpec = NULL; - - if (volumesSizes.Size() == 0) - { - if (stdOutMode) - outStream = new CStdOutFileStream; - else - { - outStreamSpec = new COutFileStream; - outStream = outStreamSpec; - bool isOK = false; - UString realPath; - for (int i = 0; i < (1 << 16); i++) - { - if (archivePath.Temp) - { - if (i > 0) - { - wchar_t s[32]; - ConvertUInt64ToString(i, s); - archivePath.TempPostfix = s; - } - realPath = archivePath.GetTempPath(); - } - else - realPath = archivePath.GetFinalPath(); - if (outStreamSpec->Create(realPath, false)) - { - tempFiles.Paths.Add(realPath); - isOK = true; - break; - } - if (::GetLastError() != ERROR_FILE_EXISTS) - break; - if (!archivePath.Temp) - break; - } - if (!isOK) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.FileName = realPath; - errorInfo.Message = L"Can not open file"; - return E_FAIL; - } - } - } - else - { - if (stdOutMode) - return E_FAIL; - volStreamSpec = new COutMultiVolStream; - outStream = volStreamSpec; - volStreamSpec->Sizes = volumesSizes; - volStreamSpec->Prefix = archivePath.GetFinalPath() + UString(L"."); - volStreamSpec->TempFiles = &tempFiles; - volStreamSpec->Init(); - - /* - updateCallbackSpec->VolumesSizes = volumesSizes; - updateCallbackSpec->VolName = archivePath.Prefix + archivePath.Name; - if (!archivePath.VolExtension.IsEmpty()) - updateCallbackSpec->VolExt = UString(L'.') + archivePath.VolExtension; - */ - } - - RINOK(SetProperties(outArchive, compressionMethod.Properties)); - - if (sfxMode) - { - CInFileStream *sfxStreamSpec = new CInFileStream; - CMyComPtr sfxStream(sfxStreamSpec); - if (!sfxStreamSpec->Open(sfxModule)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"Can't open sfx module"; - errorInfo.FileName = sfxModule; - return E_FAIL; - } - - CMyComPtr sfxOutStream; - COutFileStream *outStreamSpec = NULL; - if (volumesSizes.Size() == 0) - sfxOutStream = outStream; - else - { - outStreamSpec = new COutFileStream; - sfxOutStream = outStreamSpec; - UString realPath = archivePath.GetFinalPath(); - if (!outStreamSpec->Create(realPath, false)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.FileName = realPath; - errorInfo.Message = L"Can not open file"; - return E_FAIL; - } - } - RINOK(CopyBlock(sfxStream, sfxOutStream)); - if (outStreamSpec) - { - RINOK(outStreamSpec->Close()); - } - } - - HRESULT result = outArchive->UpdateItems(outStream, updatePairs2.Size(), updateCallback); - callback->Finilize(); - RINOK(result); - if (outStreamSpec) - result = outStreamSpec->Close(); - else if (volStreamSpec) - result = volStreamSpec->Close(); - return result; -} - -HRESULT EnumerateInArchiveItems(const NWildcard::CCensor &censor, - IInArchive *archive, - const UString &defaultItemName, - const NWindows::NFile::NFind::CFileInfoW &archiveFileInfo, - CObjectVector &archiveItems) -{ - archiveItems.Clear(); - UInt32 numItems; - RINOK(archive->GetNumberOfItems(&numItems)); - archiveItems.Reserve(numItems); - for(UInt32 i = 0; i < numItems; i++) - { - CArchiveItem ai; - - RINOK(GetArchiveItemPath(archive, i, ai.Name)); - RINOK(IsArchiveItemFolder(archive, i, ai.IsDirectory)); - ai.Censored = censor.CheckPath(ai.Name.IsEmpty() ? defaultItemName : ai.Name, !ai.IsDirectory); - RINOK(GetArchiveItemFileTime(archive, i, - archiveFileInfo.LastWriteTime, ai.LastWriteTime)); - - CPropVariant propertySize; - RINOK(archive->GetProperty(i, kpidSize, &propertySize)); - ai.SizeIsDefined = (propertySize.vt != VT_EMPTY); - if (ai.SizeIsDefined) - ai.Size = ConvertPropVariantToUInt64(propertySize); - - ai.IndexInServer = i; - archiveItems.Add(ai); - } - return S_OK; -} - - -static HRESULT UpdateWithItemLists( - CCodecs *codecs, - CUpdateOptions &options, - IInArchive *archive, - const CObjectVector &archiveItems, - const CObjectVector &dirItems, - CTempFiles &tempFiles, - CUpdateErrorInfo &errorInfo, - IUpdateCallbackUI2 *callback) -{ - for(int i = 0; i < options.Commands.Size(); i++) - { - CUpdateArchiveCommand &command = options.Commands[i]; - if (options.StdOutMode) - { - RINOK(callback->StartArchive(0, archive != 0)); - } - else - { - RINOK(callback->StartArchive(command.ArchivePath.GetFinalPath(), - i == 0 && options.UpdateArchiveItself && archive != 0)); - } - - RINOK(Compress( - codecs, - command.ActionSet, archive, - options.MethodMode, - command.ArchivePath, - archiveItems, - options.OpenShareForWrite, - options.StdInMode, - /* options.StdInFileName, */ - options.StdOutMode, - dirItems, - options.SfxMode, options.SfxModule, - options.VolumesSizes, - tempFiles, - errorInfo, callback)); - - RINOK(callback->FinishArchive()); - } - return S_OK; -} - -#ifdef _WIN32 -class CCurrentDirRestorer -{ - UString m_CurrentDirectory; -public: - CCurrentDirRestorer() - { NFile::NDirectory::MyGetCurrentDirectory(m_CurrentDirectory); } - ~CCurrentDirRestorer() - { RestoreDirectory();} - bool RestoreDirectory() - { return BOOLToBool(NFile::NDirectory::MySetCurrentDirectory(m_CurrentDirectory)); } -}; -#endif - -struct CEnumDirItemUpdateCallback: public IEnumDirItemCallback -{ - IUpdateCallbackUI2 *Callback; - HRESULT CheckBreak() { return Callback->CheckBreak(); } -}; - -HRESULT UpdateArchive( - CCodecs *codecs, - const NWildcard::CCensor &censor, - CUpdateOptions &options, - CUpdateErrorInfo &errorInfo, - IOpenCallbackUI *openCallback, - IUpdateCallbackUI2 *callback) -{ - if (options.StdOutMode && options.EMailMode) - return E_FAIL; - - if (options.VolumesSizes.Size() > 0 && (options.EMailMode || options.SfxMode)) - return E_NOTIMPL; - - if (options.SfxMode) - { - CProperty property; - property.Name = L"rsfx"; - property.Value = L"on"; - options.MethodMode.Properties.Add(property); - if (options.SfxModule.IsEmpty()) - { - errorInfo.Message = L"sfx file is not specified"; - return E_FAIL; - } - UString name = options.SfxModule; - if (!NDirectory::MySearchPath(NULL, name, NULL, options.SfxModule)) - { - errorInfo.Message = L"can't find specified sfx module"; - return E_FAIL; - } - } - - const UString archiveName = options.ArchivePath.GetFinalPath(); - - UString defaultItemName; - NFind::CFileInfoW archiveFileInfo; - - CArchiveLink archiveLink; - IInArchive *archive = 0; - if (NFind::FindFile(archiveName, archiveFileInfo)) - { - if (archiveFileInfo.IsDirectory()) - throw "there is no such archive"; - if (options.VolumesSizes.Size() > 0) - return E_NOTIMPL; - HRESULT result = MyOpenArchive(codecs, archiveName, archiveLink, openCallback); - RINOK(callback->OpenResult(archiveName, result)); - RINOK(result); - if (archiveLink.VolumePaths.Size() > 1) - { - errorInfo.SystemError = (DWORD)E_NOTIMPL; - errorInfo.Message = L"Updating for multivolume archives is not implemented"; - return E_NOTIMPL; - } - archive = archiveLink.GetArchive(); - defaultItemName = archiveLink.GetDefaultItemName(); - } - else - { - /* - if (archiveType.IsEmpty()) - throw "type of archive is not specified"; - */ - } - - CObjectVector dirItems; - if (options.StdInMode) - { - CDirItem item; - item.FullPath = item.Name = options.StdInFileName; - item.Size = (UInt64)(Int64)-1; - item.Attributes = 0; - SYSTEMTIME st; - FILETIME ft; - GetSystemTime(&st); - SystemTimeToFileTime(&st, &ft); - item.CreationTime = item.LastAccessTime = item.LastWriteTime = ft; - dirItems.Add(item); - } - else - { - bool needScanning = false; - for(int i = 0; i < options.Commands.Size(); i++) - if (options.Commands[i].ActionSet.NeedScanning()) - needScanning = true; - if (needScanning) - { - CEnumDirItemUpdateCallback enumCallback; - enumCallback.Callback = callback; - RINOK(callback->StartScanning()); - UStringVector errorPaths; - CRecordVector errorCodes; - HRESULT res = EnumerateItems(censor, dirItems, &enumCallback, errorPaths, errorCodes); - for (int i = 0; i < errorPaths.Size(); i++) - { - RINOK(callback->CanNotFindError(errorPaths[i], errorCodes[i])); - } - if(res != S_OK) - { - errorInfo.Message = L"Scanning error"; - // errorInfo.FileName = errorPath; - return res; - } - RINOK(callback->FinishScanning()); - } - } - - UString tempDirPrefix; - bool usesTempDir = false; - - #ifdef _WIN32 - NDirectory::CTempDirectoryW tempDirectory; - if (options.EMailMode && options.EMailRemoveAfter) - { - tempDirectory.Create(kTempFolderPrefix); - tempDirPrefix = tempDirectory.GetPath(); - NormalizeDirPathPrefix(tempDirPrefix); - usesTempDir = true; - } - #endif - - CTempFiles tempFiles; - - bool createTempFile = false; - if(!options.StdOutMode && options.UpdateArchiveItself) - { - CArchivePath &ap = options.Commands[0].ArchivePath; - ap = options.ArchivePath; - // if ((archive != 0 && !usesTempDir) || !options.WorkingDir.IsEmpty()) - if ((archive != 0 || !options.WorkingDir.IsEmpty()) && !usesTempDir && options.VolumesSizes.Size() == 0) - { - createTempFile = true; - ap.Temp = true; - if (!options.WorkingDir.IsEmpty()) - { - ap.TempPrefix = options.WorkingDir; - NormalizeDirPathPrefix(ap.TempPrefix); - } - } - } - - for(int i = 0; i < options.Commands.Size(); i++) - { - CArchivePath &ap = options.Commands[i].ArchivePath; - if (usesTempDir) - { - // Check it - ap.Prefix = tempDirPrefix; - // ap.Temp = true; - // ap.TempPrefix = tempDirPrefix; - } - if (i > 0 || !createTempFile) - { - const UString &path = ap.GetFinalPath(); - if (NFind::DoesFileExist(path)) - { - errorInfo.SystemError = 0; - errorInfo.Message = L"File already exists"; - errorInfo.FileName = path; - return E_FAIL; - } - } - } - - CObjectVector archiveItems; - if (archive != NULL) - { - RINOK(EnumerateInArchiveItems(censor, - archive, defaultItemName, archiveFileInfo, archiveItems)); - } - - RINOK(UpdateWithItemLists(codecs, options, archive, archiveItems, dirItems, - tempFiles, errorInfo, callback)); - - if (archive != NULL) - { - RINOK(archiveLink.Close()); - archiveLink.Release(); - } - - tempFiles.Paths.Clear(); - if(createTempFile) - { - try - { - CArchivePath &ap = options.Commands[0].ArchivePath; - const UString &tempPath = ap.GetTempPath(); - if (archive != NULL) - if (!NDirectory::DeleteFileAlways(archiveName)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"delete file error"; - errorInfo.FileName = archiveName; - return E_FAIL; - } - if (!NDirectory::MyMoveFile(tempPath, archiveName)) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"move file error"; - errorInfo.FileName = tempPath; - errorInfo.FileName2 = archiveName; - return E_FAIL; - } - } - catch(...) - { - throw; - } - } - - #ifdef _WIN32 - if (options.EMailMode) - { - NDLL::CLibrary mapiLib; - if (!mapiLib.Load(TEXT("Mapi32.dll"))) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"can not load Mapi32.dll"; - return E_FAIL; - } - LPMAPISENDDOCUMENTS fnSend = (LPMAPISENDDOCUMENTS) - mapiLib.GetProcAddress("MAPISendDocuments"); - if (fnSend == 0) - { - errorInfo.SystemError = ::GetLastError(); - errorInfo.Message = L"can not find MAPISendDocuments function"; - return E_FAIL; - } - UStringVector fullPaths; - int i; - for(i = 0; i < options.Commands.Size(); i++) - { - CArchivePath &ap = options.Commands[i].ArchivePath; - UString arcPath; - if(!NFile::NDirectory::MyGetFullPathName(ap.GetFinalPath(), arcPath)) - { - errorInfo.SystemError = ::GetLastError(); - return E_FAIL; - } - fullPaths.Add(arcPath); - } - CCurrentDirRestorer curDirRestorer; - for(i = 0; i < fullPaths.Size(); i++) - { - UString arcPath = fullPaths[i]; - UString fileName = ExtractFileNameFromPath(arcPath); - AString path = GetAnsiString(arcPath); - AString name = GetAnsiString(fileName); - // Warning!!! MAPISendDocuments function changes Current directory - fnSend(0, ";", (LPSTR)(LPCSTR)path, (LPSTR)(LPCSTR)name, 0); - } - } - #endif - return S_OK; -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.h deleted file mode 100644 index 49e4be81..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/Update.h +++ /dev/null @@ -1,165 +0,0 @@ -// Update.h - -#ifndef __UPDATE_H -#define __UPDATE_H - -#include "Common/Wildcard.h" -#include "Windows/FileFind.h" -#include "../../Archive/IArchive.h" - -#include "UpdateAction.h" -#include "ArchiveOpenCallback.h" -#include "UpdateCallback.h" -#include "Property.h" -#include "LoadCodecs.h" - -struct CArchivePath -{ - UString Prefix; // path(folder) prefix including slash - UString Name; // base name - UString BaseExtension; // archive type extension or "exe" extension - UString VolExtension; // archive type extension for volumes - - bool Temp; - UString TempPrefix; // path(folder) for temp location - UString TempPostfix; - - CArchivePath(): Temp(false) {}; - - void ParseFromPath(const UString &path) - { - SplitPathToParts(path, Prefix, Name); - if (Name.IsEmpty()) - return; - int dotPos = Name.ReverseFind(L'.'); - if (dotPos <= 0) - return; - if (dotPos == Name.Length() - 1) - { - Name = Name.Left(dotPos); - BaseExtension.Empty(); - return; - } - if (BaseExtension.CompareNoCase(Name.Mid(dotPos + 1)) == 0) - { - BaseExtension = Name.Mid(dotPos + 1); - Name = Name.Left(dotPos); - } - else - BaseExtension.Empty(); - } - - UString GetPathWithoutExt() const - { - return Prefix + Name; - } - - UString GetFinalPath() const - { - UString path = GetPathWithoutExt(); - if (!BaseExtension.IsEmpty()) - path += UString(L'.') + BaseExtension; - return path; - } - - - UString GetTempPath() const - { - UString path = TempPrefix + Name; - if (!BaseExtension.IsEmpty()) - path += UString(L'.') + BaseExtension; - path += L".tmp"; - path += TempPostfix; - return path; - } -}; - -struct CUpdateArchiveCommand -{ - UString UserArchivePath; - CArchivePath ArchivePath; - NUpdateArchive::CActionSet ActionSet; -}; - -struct CCompressionMethodMode -{ - int FormatIndex; - CObjectVector Properties; - CCompressionMethodMode(): FormatIndex(-1) {} -}; - -struct CUpdateOptions -{ - CCompressionMethodMode MethodMode; - - CObjectVector Commands; - bool UpdateArchiveItself; - CArchivePath ArchivePath; - - bool SfxMode; - UString SfxModule; - - bool OpenShareForWrite; - - bool StdInMode; - UString StdInFileName; - bool StdOutMode; - - bool EMailMode; - bool EMailRemoveAfter; - UString EMailAddress; - - UString WorkingDir; - - bool Init(const CCodecs *codecs, const UString &arcPath, const UString &arcType); - - CUpdateOptions(): - UpdateArchiveItself(true), - SfxMode(false), - StdInMode(false), - StdOutMode(false), - EMailMode(false), - EMailRemoveAfter(false), - OpenShareForWrite(false) - {}; - CRecordVector VolumesSizes; -}; - -struct CErrorInfo -{ - DWORD SystemError; - UString FileName; - UString FileName2; - UString Message; - // UStringVector ErrorPaths; - // CRecordVector ErrorCodes; - CErrorInfo(): SystemError(0) {}; -}; - -struct CUpdateErrorInfo: public CErrorInfo -{ -}; - -#define INTERFACE_IUpdateCallbackUI2(x) \ - INTERFACE_IUpdateCallbackUI(x) \ - virtual HRESULT OpenResult(const wchar_t *name, HRESULT result) x; \ - virtual HRESULT StartScanning() x; \ - virtual HRESULT CanNotFindError(const wchar_t *name, DWORD systemError) x; \ - virtual HRESULT FinishScanning() x; \ - virtual HRESULT StartArchive(const wchar_t *name, bool updating) x; \ - virtual HRESULT FinishArchive() x; \ - -struct IUpdateCallbackUI2: public IUpdateCallbackUI -{ - INTERFACE_IUpdateCallbackUI2(=0) -}; - -HRESULT UpdateArchive( - CCodecs *codecs, - const NWildcard::CCensor &censor, - CUpdateOptions &options, - CUpdateErrorInfo &errorInfo, - IOpenCallbackUI *openCallback, - IUpdateCallbackUI2 *callback); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.cpp deleted file mode 100644 index 5e3b5a10..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// UpdateAction.cpp - -#include "StdAfx.h" - -#include "UpdateAction.h" - -namespace NUpdateArchive { - -const CActionSet kAddActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress, - NPairAction::kCompress -}; - -const CActionSet kUpdateActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress -}; - -const CActionSet kFreshActionSet = -{ - NPairAction::kCopy, - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress -}; - -const CActionSet kSynchronizeActionSet = -{ - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, - NPairAction::kCopy, - NPairAction::kCompress, -}; - -const CActionSet kDeleteActionSet = -{ - NPairAction::kCopy, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore, - NPairAction::kIgnore -}; - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.h deleted file mode 100644 index aa050975..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateAction.h +++ /dev/null @@ -1,57 +0,0 @@ -// UpdateAction.h - -#ifndef __UPDATE_ACTION_H -#define __UPDATE_ACTION_H - -namespace NUpdateArchive { - - namespace NPairState - { - const int kNumValues = 7; - enum EEnum - { - kNotMasked = 0, - kOnlyInArchive, - kOnlyOnDisk, - kNewInArchive, - kOldInArchive, - kSameFiles, - kUnknowNewerFiles - }; - } - namespace NPairAction - { - enum EEnum - { - kIgnore = 0, - kCopy, - kCompress, - kCompressAsAnti - }; - } - struct CActionSet - { - NPairAction::EEnum StateActions[NPairState::kNumValues]; - bool NeedScanning() const - { - int i; - for (i = 0; i < NPairState::kNumValues; i++) - if (StateActions[i] == NPairAction::kCompress) - return true; - for (i = 1; i < NPairState::kNumValues; i++) - if (StateActions[i] != NPairAction::kIgnore) - return true; - return false; - } - }; - extern const CActionSet kAddActionSet; - extern const CActionSet kUpdateActionSet; - extern const CActionSet kFreshActionSet; - extern const CActionSet kSynchronizeActionSet; - extern const CActionSet kDeleteActionSet; -}; - - -#endif - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp deleted file mode 100644 index a5f0a54f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +++ /dev/null @@ -1,267 +0,0 @@ -// UpdateCallback.cpp - -#include "StdAfx.h" - -#include "UpdateCallback.h" - -#include "Common/StringConvert.h" -#include "Common/IntToString.h" -#include "Common/Defs.h" -#include "Common/ComTry.h" - -#include "Windows/PropVariant.h" - -#include "../../Common/FileStreams.h" - -using namespace NWindows; - -CArchiveUpdateCallback::CArchiveUpdateCallback(): - Callback(0), - ShareForWrite(false), - StdInMode(false), - DirItems(0), - ArchiveItems(0), - UpdatePairs(0) - {} - - -STDMETHODIMP CArchiveUpdateCallback::SetTotal(UInt64 size) -{ - COM_TRY_BEGIN - return Callback->SetTotal(size); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetCompleted(const UInt64 *completeValue) -{ - COM_TRY_BEGIN - return Callback->SetCompleted(completeValue); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) -{ - COM_TRY_BEGIN - return Callback->SetRatioInfo(inSize, outSize); - COM_TRY_END -} - - -/* -STATPROPSTG kProperties[] = -{ - { NULL, kpidPath, VT_BSTR}, - { NULL, kpidIsFolder, VT_BOOL}, - { NULL, kpidSize, VT_UI8}, - { NULL, kpidLastAccessTime, VT_FILETIME}, - { NULL, kpidCreationTime, VT_FILETIME}, - { NULL, kpidLastWriteTime, VT_FILETIME}, - { NULL, kpidAttributes, VT_UI4}, - { NULL, kpidIsAnti, VT_BOOL} -}; -*/ - -STDMETHODIMP CArchiveUpdateCallback::EnumProperties(IEnumSTATPROPSTG **) -{ - return E_NOTIMPL; - /* - return CStatPropEnumerator::CreateEnumerator(kProperties, - sizeof(kProperties) / sizeof(kProperties[0]), enumerator); - */ -} - -STDMETHODIMP CArchiveUpdateCallback::GetUpdateItemInfo(UInt32 index, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive) -{ - COM_TRY_BEGIN - RINOK(Callback->CheckBreak()); - const CUpdatePair2 &updatePair = (*UpdatePairs)[index]; - if(newData != NULL) - *newData = BoolToInt(updatePair.NewData); - if(newProperties != NULL) - *newProperties = BoolToInt(updatePair.NewProperties); - if(indexInArchive != NULL) - { - if (updatePair.ExistInArchive) - { - if (ArchiveItems == 0) - *indexInArchive = updatePair.ArchiveItemIndex; - else - *indexInArchive = (*ArchiveItems)[updatePair.ArchiveItemIndex].IndexInServer; - } - else - *indexInArchive = UInt32(-1); - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) -{ - COM_TRY_BEGIN - const CUpdatePair2 &updatePair = (*UpdatePairs)[index]; - NWindows::NCOM::CPropVariant propVariant; - - if (propID == kpidIsAnti) - { - propVariant = updatePair.IsAnti; - propVariant.Detach(value); - return S_OK; - } - - if (updatePair.IsAnti) - { - switch(propID) - { - case kpidIsFolder: - case kpidPath: - break; - case kpidSize: - propVariant = (UInt64)0; - propVariant.Detach(value); - return S_OK; - default: - propVariant.Detach(value); - return S_OK; - } - } - - if(updatePair.ExistOnDisk) - { - const CDirItem &dirItem = (*DirItems)[updatePair.DirItemIndex]; - switch(propID) - { - case kpidPath: - propVariant = dirItem.Name; - break; - case kpidIsFolder: - propVariant = dirItem.IsDirectory(); - break; - case kpidSize: - propVariant = dirItem.Size; - break; - case kpidAttributes: - propVariant = dirItem.Attributes; - break; - case kpidLastAccessTime: - propVariant = dirItem.LastAccessTime; - break; - case kpidCreationTime: - propVariant = dirItem.CreationTime; - break; - case kpidLastWriteTime: - propVariant = dirItem.LastWriteTime; - break; - } - } - else - { - if (propID == kpidPath) - { - if (updatePair.NewNameIsDefined) - { - propVariant = updatePair.NewName; - propVariant.Detach(value); - return S_OK; - } - } - if (updatePair.ExistInArchive && Archive) - { - UInt32 indexInArchive; - if (ArchiveItems == 0) - indexInArchive = updatePair.ArchiveItemIndex; - else - indexInArchive = (*ArchiveItems)[updatePair.ArchiveItemIndex].IndexInServer; - return Archive->GetProperty(indexInArchive, propID, value); - } - } - propVariant.Detach(value); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetStream(UInt32 index, ISequentialInStream **inStream) -{ - COM_TRY_BEGIN - const CUpdatePair2 &updatePair = (*UpdatePairs)[index]; - if(!updatePair.NewData) - return E_FAIL; - - RINOK(Callback->CheckBreak()); - RINOK(Callback->Finilize()); - - if(updatePair.IsAnti) - { - return Callback->GetStream((*ArchiveItems)[updatePair.ArchiveItemIndex].Name, true); - } - const CDirItem &dirItem = (*DirItems)[updatePair.DirItemIndex]; - RINOK(Callback->GetStream(dirItem.Name, false)); - - if(dirItem.IsDirectory()) - return S_OK; - - if (StdInMode) - { - CStdInFileStream *inStreamSpec = new CStdInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - *inStream = inStreamLoc.Detach(); - } - else - { - CInFileStream *inStreamSpec = new CInFileStream; - CMyComPtr inStreamLoc(inStreamSpec); - UString path = DirPrefix + dirItem.FullPath; - if(!inStreamSpec->OpenShared(path, ShareForWrite)) - { - return Callback->OpenFileError(path, ::GetLastError()); - } - *inStream = inStreamLoc.Detach(); - } - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::SetOperationResult(Int32 operationResult) -{ - COM_TRY_BEGIN - return Callback->SetOperationResult(operationResult); - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeSize(UInt32 index, UInt64 *size) -{ - if (VolumesSizes.Size() == 0) - return S_FALSE; - if (index >= (UInt32)VolumesSizes.Size()) - index = VolumesSizes.Size() - 1; - *size = VolumesSizes[index]; - return S_OK; -} - -STDMETHODIMP CArchiveUpdateCallback::GetVolumeStream(UInt32 index, ISequentialOutStream **volumeStream) -{ - COM_TRY_BEGIN - wchar_t temp[32]; - ConvertUInt64ToString(index + 1, temp); - UString res = temp; - while (res.Length() < 2) - res = UString(L'0') + res; - UString fileName = VolName; - fileName += L'.'; - fileName += res; - fileName += VolExt; - COutFileStream *streamSpec = new COutFileStream; - CMyComPtr streamLoc(streamSpec); - if(!streamSpec->Create(fileName, false)) - return ::GetLastError(); - *volumeStream = streamLoc.Detach(); - return S_OK; - COM_TRY_END -} - -STDMETHODIMP CArchiveUpdateCallback::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - COM_TRY_BEGIN - return Callback->CryptoGetTextPassword2(passwordIsDefined, password); - COM_TRY_END -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.h deleted file mode 100644 index bf90ff9e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateCallback.h +++ /dev/null @@ -1,82 +0,0 @@ -// UpdateCallback.h - -#ifndef __UPDATECALLBACK_H -#define __UPDATECALLBACK_H - -#include "Common/MyCom.h" -#include "Common/MyString.h" - -#include "../../IPassword.h" -#include "../../ICoder.h" - -#include "../Common/UpdatePair.h" -#include "../Common/UpdateProduce.h" - -#define INTERFACE_IUpdateCallbackUI(x) \ - virtual HRESULT SetTotal(UInt64 size) x; \ - virtual HRESULT SetCompleted(const UInt64 *completeValue) x; \ - virtual HRESULT SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) x; \ - virtual HRESULT CheckBreak() x; \ - virtual HRESULT Finilize() x; \ - virtual HRESULT SetNumFiles(UInt64 numFiles) x; \ - virtual HRESULT GetStream(const wchar_t *name, bool isAnti) x; \ - virtual HRESULT OpenFileError(const wchar_t *name, DWORD systemError) x; \ - virtual HRESULT SetOperationResult(Int32 operationResult) x; \ - virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x; \ - - // virtual HRESULT CloseProgress() { return S_OK; }; - -struct IUpdateCallbackUI -{ - INTERFACE_IUpdateCallbackUI(=0) -}; - -class CArchiveUpdateCallback: - public IArchiveUpdateCallback2, - public ICryptoGetTextPassword2, - public ICompressProgressInfo, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP3( - IArchiveUpdateCallback2, - ICryptoGetTextPassword2, - ICompressProgressInfo) - - // IProgress - STDMETHOD(SetTotal)(UInt64 size); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); - - // IUpdateCallback - STDMETHOD(EnumProperties)(IEnumSTATPROPSTG **enumerator); - STDMETHOD(GetUpdateItemInfo)(UInt32 index, - Int32 *newData, Int32 *newProperties, UInt32 *indexInArchive); - STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); - STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream); - STDMETHOD(SetOperationResult)(Int32 operationResult); - - STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size); - STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream); - - STDMETHOD(CryptoGetTextPassword2)(Int32 *passwordIsDefined, BSTR *password); - -public: - CRecordVector VolumesSizes; - UString VolName; - UString VolExt; - - IUpdateCallbackUI *Callback; - - UString DirPrefix; - bool ShareForWrite; - bool StdInMode; - const CObjectVector *DirItems; - const CObjectVector *ArchiveItems; - const CObjectVector *UpdatePairs; - CMyComPtr Archive; - - CArchiveUpdateCallback(); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.cpp deleted file mode 100644 index b4fb2a15..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +++ /dev/null @@ -1,166 +0,0 @@ -// UpdatePair.cpp - -#include "StdAfx.h" - -#include - -#include "Common/Defs.h" -#include "Common/Wildcard.h" -#include "Windows/Time.h" - -#include "UpdatePair.h" -#include "SortUtils.h" - -using namespace NWindows; -using namespace NTime; - -static int MyCompareTime(NFileTimeType::EEnum fileTimeType, - const FILETIME &time1, const FILETIME &time2) -{ - switch(fileTimeType) - { - case NFileTimeType::kWindows: - return ::CompareFileTime(&time1, &time2); - case NFileTimeType::kUnix: - { - UInt32 unixTime1, unixTime2; - if (!FileTimeToUnixTime(time1, unixTime1)) - { - unixTime1 = 0; - // throw 4191614; - } - if (!FileTimeToUnixTime(time2, unixTime2)) - { - unixTime2 = 0; - // throw 4191615; - } - return MyCompare(unixTime1, unixTime2); - } - case NFileTimeType::kDOS: - { - UInt32 dosTime1, dosTime2; - FileTimeToDosTime(time1, dosTime1); - FileTimeToDosTime(time2, dosTime2); - /* - if (!FileTimeToDosTime(time1, dosTime1)) - throw 4191616; - if (!FileTimeToDosTime(time2, dosTime2)) - throw 4191617; - */ - return MyCompare(dosTime1, dosTime2); - } - } - throw 4191618; -} - -static const wchar_t *kDuplicateFileNameMessage = L"Duplicate filename:"; - -/* -static const char *kNotCensoredCollisionMessaged = "Internal file name collision:\n"; -static const char *kSameTimeChangedSizeCollisionMessaged = - "Collision between files with same date/time and different sizes:\n"; -*/ - -static void TestDuplicateString(const UStringVector &strings, const CIntVector &indices) -{ - for(int i = 0; i + 1 < indices.Size(); i++) - if (CompareFileNames(strings[indices[i]], strings[indices[i + 1]]) == 0) - { - UString message = kDuplicateFileNameMessage; - message += L"\n"; - message += strings[indices[i]]; - message += L"\n"; - message += strings[indices[i + 1]]; - throw message; - } -} - -void GetUpdatePairInfoList( - const CObjectVector &dirItems, - const CObjectVector &archiveItems, - NFileTimeType::EEnum fileTimeType, - CObjectVector &updatePairs) -{ - CIntVector dirIndices, archiveIndices; - UStringVector dirNames, archiveNames; - - int numDirItems = dirItems.Size(); - int i; - for(i = 0; i < numDirItems; i++) - dirNames.Add(dirItems[i].Name); - SortFileNames(dirNames, dirIndices); - TestDuplicateString(dirNames, dirIndices); - - int numArchiveItems = archiveItems.Size(); - for(i = 0; i < numArchiveItems; i++) - archiveNames.Add(archiveItems[i].Name); - SortFileNames(archiveNames, archiveIndices); - TestDuplicateString(archiveNames, archiveIndices); - - int dirItemIndex = 0, archiveItemIndex = 0; - CUpdatePair pair; - while(dirItemIndex < numDirItems && archiveItemIndex < numArchiveItems) - { - int dirItemIndex2 = dirIndices[dirItemIndex], - archiveItemIndex2 = archiveIndices[archiveItemIndex]; - const CDirItem &dirItem = dirItems[dirItemIndex2]; - const CArchiveItem &archiveItem = archiveItems[archiveItemIndex2]; - int compareResult = CompareFileNames(dirItem.Name, archiveItem.Name); - if (compareResult < 0) - { - pair.State = NUpdateArchive::NPairState::kOnlyOnDisk; - pair.DirItemIndex = dirItemIndex2; - dirItemIndex++; - } - else if (compareResult > 0) - { - pair.State = archiveItem.Censored ? - NUpdateArchive::NPairState::kOnlyInArchive: NUpdateArchive::NPairState::kNotMasked; - pair.ArchiveItemIndex = archiveItemIndex2; - archiveItemIndex++; - } - else - { - if (!archiveItem.Censored) - throw 1082022;; // TTString(kNotCensoredCollisionMessaged + dirItem.Name); - pair.DirItemIndex = dirItemIndex2; - pair.ArchiveItemIndex = archiveItemIndex2; - switch (MyCompareTime(fileTimeType, dirItem.LastWriteTime, archiveItem.LastWriteTime)) - { - case -1: - pair.State = NUpdateArchive::NPairState::kNewInArchive; - break; - case 1: - pair.State = NUpdateArchive::NPairState::kOldInArchive; - break; - default: - if (archiveItem.SizeIsDefined) - if (dirItem.Size != archiveItem.Size) - // throw 1082034; // kSameTimeChangedSizeCollisionMessaged; - pair.State = NUpdateArchive::NPairState::kUnknowNewerFiles; - else - pair.State = NUpdateArchive::NPairState::kSameFiles; - else - pair.State = NUpdateArchive::NPairState::kUnknowNewerFiles; - } - dirItemIndex++; - archiveItemIndex++; - } - updatePairs.Add(pair); - } - for(;dirItemIndex < numDirItems; dirItemIndex++) - { - pair.State = NUpdateArchive::NPairState::kOnlyOnDisk; - pair.DirItemIndex = dirIndices[dirItemIndex]; - updatePairs.Add(pair); - } - for(;archiveItemIndex < numArchiveItems; archiveItemIndex++) - { - int archiveItemIndex2 = archiveIndices[archiveItemIndex]; - const CArchiveItem &archiveItem = archiveItems[archiveItemIndex2]; - pair.State = archiveItem.Censored ? - NUpdateArchive::NPairState::kOnlyInArchive: NUpdateArchive::NPairState::kNotMasked; - pair.ArchiveItemIndex = archiveItemIndex2; - updatePairs.Add(pair); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.h deleted file mode 100644 index f50a23f8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdatePair.h +++ /dev/null @@ -1,24 +0,0 @@ -// UpdatePair.h - -#ifndef __UPDATE_PAIR_H -#define __UPDATE_PAIR_H - -#include "DirItem.h" -#include "UpdateAction.h" - -#include "../../Archive/IArchive.h" - -struct CUpdatePair -{ - NUpdateArchive::NPairState::EEnum State; - int ArchiveItemIndex; - int DirItemIndex; -}; - -void GetUpdatePairInfoList( - const CObjectVector &dirItems, - const CObjectVector &archiveItems, - NFileTimeType::EEnum fileTimeType, - CObjectVector &updatePairs); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp deleted file mode 100644 index 5552161a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// UpdateProduce.cpp - -#include "StdAfx.h" - -#include "UpdateProduce.h" - -using namespace NUpdateArchive; - -static const char *kUpdateActionSetCollision = - "Internal collision in update action set"; - -void UpdateProduce( - const CObjectVector &updatePairs, - const NUpdateArchive::CActionSet &actionSet, - CObjectVector &operationChain) -{ - for(int i = 0; i < updatePairs.Size(); i++) - { - // CUpdateArchiveRange aRange; - const CUpdatePair &pair = updatePairs[i]; - - CUpdatePair2 pair2; - pair2.IsAnti = false; - pair2.ArchiveItemIndex = pair.ArchiveItemIndex; - pair2.DirItemIndex = pair.DirItemIndex; - pair2.ExistInArchive = (pair.State != NPairState::kOnlyOnDisk); - pair2.ExistOnDisk = (pair.State != NPairState::kOnlyInArchive && pair.State != NPairState::kNotMasked); - switch(actionSet.StateActions[pair.State]) - { - case NPairAction::kIgnore: - /* - if (pair.State != NPairState::kOnlyOnDisk) - IgnoreArchiveItem(m_ArchiveItems[pair.ArchiveItemIndex]); - // cout << "deleting"; - */ - break; - case NPairAction::kCopy: - { - if (pair.State == NPairState::kOnlyOnDisk) - throw kUpdateActionSetCollision; - pair2.NewData = pair2.NewProperties = false; - operationChain.Add(pair2); - break; - } - case NPairAction::kCompress: - { - if (pair.State == NPairState::kOnlyInArchive || - pair.State == NPairState::kNotMasked) - throw kUpdateActionSetCollision; - pair2.NewData = pair2.NewProperties = true; - operationChain.Add(pair2); - break; - } - case NPairAction::kCompressAsAnti: - { - pair2.IsAnti = true; - pair2.NewData = pair2.NewProperties = true; - operationChain.Add(pair2); - break; - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.h deleted file mode 100644 index 8f58dab9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/UpdateProduce.h +++ /dev/null @@ -1,31 +0,0 @@ -// UpdateProduce.h - -#ifndef __UPDATE_PRODUCE_H -#define __UPDATE_PRODUCE_H - -#include "UpdatePair.h" - -struct CUpdatePair2 -{ - // bool OperationIsCompress; - bool NewData; - bool NewProperties; - - bool ExistInArchive; - bool ExistOnDisk; - bool IsAnti; - int ArchiveItemIndex; - int DirItemIndex; - - bool NewNameIsDefined; - UString NewName; - - CUpdatePair2(): NewNameIsDefined(false) {} -}; - -void UpdateProduce( - const CObjectVector &updatePairs, - const NUpdateArchive::CActionSet &actionSet, - CObjectVector &operationChain); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.cpp deleted file mode 100644 index 8db6f4f1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// WorkDir.cpp - -#include "StdAfx.h" - -#include "WorkDir.h" - -#include "Common/StringConvert.h" -#include "Common/Wildcard.h" - -#include "Windows/FileName.h" -#include "Windows/FileDir.h" - -static inline UINT GetCurrentCodePage() - { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } - -using namespace NWindows; -using namespace NFile; -using namespace NName; - -UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path) -{ - NWorkDir::NMode::EEnum mode = workDirInfo.Mode; - if (workDirInfo.ForRemovableOnly) - { - mode = NWorkDir::NMode::kCurrent; - UString prefix = path.Left(3); - if (prefix[1] == L':' && prefix[2] == L'\\') - { - UINT driveType = GetDriveType(GetSystemString(prefix, GetCurrentCodePage())); - if (driveType == DRIVE_CDROM || driveType == DRIVE_REMOVABLE) - mode = workDirInfo.Mode; - } - /* - CParsedPath parsedPath; - parsedPath.ParsePath(archiveName); - UINT driveType = GetDriveType(parsedPath.Prefix); - if ((driveType != DRIVE_CDROM) && (driveType != DRIVE_REMOVABLE)) - mode = NZipSettings::NWorkDir::NMode::kCurrent; - */ - } - switch(mode) - { - case NWorkDir::NMode::kCurrent: - { - return ExtractDirPrefixFromPath(path); - } - case NWorkDir::NMode::kSpecified: - { - UString tempDir = workDirInfo.Path; - NormalizeDirPathPrefix(tempDir); - return tempDir; - } - default: - { - UString tempDir; - if(!NFile::NDirectory::MyGetTempPath(tempDir)) - throw 141717; - return tempDir; - } - } -} - - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.h deleted file mode 100644 index 0643d67a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/WorkDir.h +++ /dev/null @@ -1,10 +0,0 @@ -// WorkDir.h - -#ifndef __WORKDIR_H -#define __WORKDIR_H - -#include "ZipRegistry.h" - -UString GetWorkDir(const NWorkDir::CInfo &workDirInfo, const UString &path); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ZipRegistry.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ZipRegistry.h deleted file mode 100644 index 753287d9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Common/ZipRegistry.h +++ /dev/null @@ -1,98 +0,0 @@ -// ZipRegistry.h - -#ifndef __ZIPREGISTRY_H -#define __ZIPREGISTRY_H - -#include "Common/MyString.h" -#include "Common/Types.h" -#include "ExtractMode.h" - -namespace NExtract -{ - struct CInfo - { - NPathMode::EEnum PathMode; - NOverwriteMode::EEnum OverwriteMode; - UStringVector Paths; - bool ShowPassword; - }; -} - -namespace NCompression { - - struct CFormatOptions - { - CSysString FormatID; - UString Options; - UString Method; - UString EncryptionMethod; - UInt32 Level; - UInt32 Dictionary; - UInt32 Order; - UInt32 BlockLogSize; - UInt32 NumThreads; - void ResetForLevelChange() - { - BlockLogSize = NumThreads = Level = Dictionary = Order = UInt32(-1); - Method.Empty(); - // EncryptionMethod.Empty(); - // Options.Empty(); - } - CFormatOptions() { ResetForLevelChange(); } - }; - - struct CInfo - { - UStringVector HistoryArchives; - UInt32 Level; - UString ArchiveType; - - CObjectVector FormatOptionsVector; - - bool ShowPassword; - bool EncryptHeaders; - }; -} - -namespace NWorkDir{ - - namespace NMode - { - enum EEnum - { - kSystem, - kCurrent, - kSpecified - }; - } - struct CInfo - { - NMode::EEnum Mode; - UString Path; - bool ForRemovableOnly; - void SetForRemovableOnlyDefault() { ForRemovableOnly = true; } - void SetDefault() - { - Mode = NMode::kSystem; - Path.Empty(); - SetForRemovableOnlyDefault(); - } - }; -} - -void SaveExtractionInfo(const NExtract::CInfo &info); -void ReadExtractionInfo(NExtract::CInfo &info); - -void SaveCompressionInfo(const NCompression::CInfo &info); -void ReadCompressionInfo(NCompression::CInfo &info); - -void SaveWorkDirInfo(const NWorkDir::CInfo &info); -void ReadWorkDirInfo(NWorkDir::CInfo &info); - -void SaveCascadedMenu(bool enabled); -bool ReadCascadedMenu(); - -void SaveContextMenuStatus(UInt32 value); -bool ReadContextMenuStatus(UInt32 &value); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp deleted file mode 100644 index d18b39e6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// ConsoleClose.cpp - -#include "StdAfx.h" - -#include "ConsoleClose.h" - -static int g_BreakCounter = 0; -static const int kBreakAbortThreshold = 2; - -namespace NConsoleClose { - -static BOOL WINAPI HandlerRoutine(DWORD ctrlType) -{ - if (ctrlType == CTRL_LOGOFF_EVENT) - { - // printf("\nCTRL_LOGOFF_EVENT\n"); - return TRUE; - } - - g_BreakCounter++; - if (g_BreakCounter < kBreakAbortThreshold) - return TRUE; - return FALSE; - /* - switch(ctrlType) - { - case CTRL_C_EVENT: - case CTRL_BREAK_EVENT: - if (g_BreakCounter < kBreakAbortThreshold) - return TRUE; - } - return FALSE; - */ -} - -bool TestBreakSignal() -{ - /* - if (g_BreakCounter > 0) - return true; - */ - return (g_BreakCounter > 0); -} - -void CheckCtrlBreak() -{ - if (TestBreakSignal()) - throw CCtrlBreakException(); -} - -CCtrlHandlerSetter::CCtrlHandlerSetter() -{ - if(!SetConsoleCtrlHandler(HandlerRoutine, TRUE)) - throw "SetConsoleCtrlHandler fails"; -} - -CCtrlHandlerSetter::~CCtrlHandlerSetter() -{ - if(!SetConsoleCtrlHandler(HandlerRoutine, FALSE)) - throw "SetConsoleCtrlHandler fails"; -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.h deleted file mode 100644 index 3c5fd55d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ConsoleClose.h +++ /dev/null @@ -1,24 +0,0 @@ -// ConsoleCloseUtils.h - -#ifndef __CONSOLECLOSEUTILS_H -#define __CONSOLECLOSEUTILS_H - -namespace NConsoleClose { - -bool TestBreakSignal(); - -class CCtrlHandlerSetter -{ -public: - CCtrlHandlerSetter(); - virtual ~CCtrlHandlerSetter(); -}; - -class CCtrlBreakException -{}; - -void CheckCtrlBreak(); - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp deleted file mode 100644 index d693cb4b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// ExtractCallbackConsole.h - -#include "StdAfx.h" - -#include "ExtractCallbackConsole.h" -#include "UserInputUtils.h" -#include "ConsoleClose.h" - -#include "Common/Wildcard.h" - -#include "Windows/FileDir.h" -#include "Windows/FileFind.h" -#include "Windows/Time.h" -#include "Windows/Defs.h" -#include "Windows/PropVariant.h" -#include "Windows/Error.h" -#include "Windows/PropVariantConversions.h" - -#include "../../Common/FilePathAutoRename.h" - -#include "../Common/ExtractingFilePath.h" - -using namespace NWindows; -using namespace NFile; -using namespace NDirectory; - -static const char *kTestingString = "Testing "; -static const char *kExtractingString = "Extracting "; -static const char *kSkippingString = "Skipping "; - -// static const char *kCantAutoRename = "can not create file with auto name\n"; -// static const char *kCantRenameFile = "can not rename existing file\n"; -// static const char *kCantDeleteOutputFile = "can not delete output file "; -static const char *kError = "ERROR: "; -static const char *kMemoryExceptionMessage = "Can't allocate required memory!"; - -static const char *kProcessing = "Processing archive: "; -static const char *kEverythingIsOk = "Everything is Ok"; -static const char *kNoFiles = "No files to process"; - -static const char *kUnsupportedMethod = "Unsupported Method"; -static const char *kCrcFailed = "CRC Failed"; -static const char *kCrcFailedEncrypted = "CRC Failed in encrypted file. Wrong password?"; -static const char *kDataError = "Data Error"; -static const char *kDataErrorEncrypted = "Data Error in encrypted file. Wrong password?"; -static const char *kUnknownError = "Unknown Error"; - -STDMETHODIMP CExtractCallbackConsole::SetTotal(UInt64) -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::SetCompleted(const UInt64 *) -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::AskOverwrite( - const wchar_t *existName, const FILETIME *, const UInt64 *, - const wchar_t *newName, const FILETIME *, const UInt64 *, - Int32 *answer) -{ - (*OutStream) << "file " << existName << - "\nalready exists. Overwrite with " << endl; - (*OutStream) << newName; - - NUserAnswerMode::EEnum overwriteAnswer = ScanUserYesNoAllQuit(OutStream); - - switch(overwriteAnswer) - { - case NUserAnswerMode::kQuit: - return E_ABORT; - case NUserAnswerMode::kNo: - *answer = NOverwriteAnswer::kNo; - break; - case NUserAnswerMode::kNoAll: - *answer = NOverwriteAnswer::kNoToAll; - break; - case NUserAnswerMode::kYesAll: - *answer = NOverwriteAnswer::kYesToAll; - break; - case NUserAnswerMode::kYes: - *answer = NOverwriteAnswer::kYes; - break; - case NUserAnswerMode::kAutoRename: - *answer = NOverwriteAnswer::kAutoRename; - break; - default: - return E_FAIL; - } - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::PrepareOperation(const wchar_t *name, bool /* isFolder */, Int32 askExtractMode, const UInt64 *position) -{ - switch (askExtractMode) - { - case NArchive::NExtract::NAskMode::kExtract: - (*OutStream) << kExtractingString; - break; - case NArchive::NExtract::NAskMode::kTest: - (*OutStream) << kTestingString; - break; - case NArchive::NExtract::NAskMode::kSkip: - (*OutStream) << kSkippingString; - break; - }; - (*OutStream) << name; - if (position != 0) - (*OutStream) << " <" << *position << ">"; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::MessageError(const wchar_t *message) -{ - (*OutStream) << message << endl; - NumFileErrorsInCurrentArchive++; - NumFileErrors++; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::SetOperationResult(Int32 operationResult, bool encrypted) -{ - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kOK: - break; - default: - { - NumFileErrorsInCurrentArchive++; - NumFileErrors++; - (*OutStream) << " "; - switch(operationResult) - { - case NArchive::NExtract::NOperationResult::kUnSupportedMethod: - (*OutStream) << kUnsupportedMethod; - break; - case NArchive::NExtract::NOperationResult::kCRCError: - (*OutStream) << (encrypted ? kCrcFailedEncrypted: kCrcFailed); - break; - case NArchive::NExtract::NOperationResult::kDataError: - (*OutStream) << (encrypted ? kDataErrorEncrypted : kDataError); - break; - default: - (*OutStream) << kUnknownError; - } - } - } - (*OutStream) << endl; - return S_OK; -} - -STDMETHODIMP CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password) -{ - if (!PasswordIsDefined) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - CMyComBSTR tempName(Password); - *password = tempName.Detach(); - return S_OK; -} - -HRESULT CExtractCallbackConsole::BeforeOpen(const wchar_t *name) -{ - NumArchives++; - NumFileErrorsInCurrentArchive = 0; - (*OutStream) << endl << kProcessing << name << endl; - return S_OK; -} - -HRESULT CExtractCallbackConsole::OpenResult(const wchar_t * /* name */, HRESULT result, bool encrypted) -{ - (*OutStream) << endl; - if (result != S_OK) - { - (*OutStream) << "Error: "; - if (encrypted) - (*OutStream) << "Can not open encrypted archive. Wrong password?"; - else - (*OutStream) << "Can not open file as archive"; - (*OutStream) << endl; - NumArchiveErrors++; - } - return S_OK; -} - -HRESULT CExtractCallbackConsole::ThereAreNoFiles() -{ - (*OutStream) << endl << kNoFiles << endl; - return S_OK; -} - -HRESULT CExtractCallbackConsole::ExtractResult(HRESULT result) -{ - if (result == S_OK) - { - (*OutStream) << endl; - if (NumFileErrorsInCurrentArchive == 0) - (*OutStream) << kEverythingIsOk << endl; - else - { - NumArchiveErrors++; - (*OutStream) << "Sub items Errors: " << NumFileErrorsInCurrentArchive << endl; - } - } - if (result == S_OK) - return result; - NumArchiveErrors++; - if (result == E_ABORT || result == ERROR_DISK_FULL) - return result; - (*OutStream) << endl << kError; - if (result == E_OUTOFMEMORY) - (*OutStream) << kMemoryExceptionMessage; - else - { - UString message; - NError::MyFormatMessage(result, message); - (*OutStream) << message; - } - (*OutStream) << endl; - return S_OK; -} - -HRESULT CExtractCallbackConsole::SetPassword(const UString &password) -{ - PasswordIsDefined = true; - Password = password; - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h deleted file mode 100644 index 7e5d9c5d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +++ /dev/null @@ -1,65 +0,0 @@ -// ExtractCallbackConsole.h - -#ifndef __EXTRACTCALLBACKCONSOLE_H -#define __EXTRACTCALLBACKCONSOLE_H - -#include "Common/MyString.h" -#include "Common/StdOutStream.h" -#include "../../Common/FileStreams.h" -#include "../../IPassword.h" -#include "../../Archive/IArchive.h" -#include "../Common/ArchiveExtractCallback.h" - -class CExtractCallbackConsole: - public IExtractCallbackUI, - public ICryptoGetTextPassword, - public CMyUnknownImp -{ -public: - MY_UNKNOWN_IMP2(IFolderArchiveExtractCallback, ICryptoGetTextPassword) - - STDMETHOD(SetTotal)(UInt64 total); - STDMETHOD(SetCompleted)(const UInt64 *completeValue); - - // IFolderArchiveExtractCallback - STDMETHOD(AskOverwrite)( - const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize, - const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize, - Int32 *answer); - STDMETHOD (PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position); - - STDMETHOD(MessageError)(const wchar_t *message); - STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted); - - // ICryptoGetTextPassword - STDMETHOD(CryptoGetTextPassword)(BSTR *password); - - HRESULT BeforeOpen(const wchar_t *name); - HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted); - HRESULT ThereAreNoFiles(); - HRESULT ExtractResult(HRESULT result); - - HRESULT SetPassword(const UString &password); - -public: - bool PasswordIsDefined; - UString Password; - - UInt64 NumArchives; - UInt64 NumArchiveErrors; - UInt64 NumFileErrors; - UInt64 NumFileErrorsInCurrentArchive; - - CStdOutStream *OutStream; - - void Init() - { - NumArchives = 0; - NumArchiveErrors = 0; - NumFileErrors = 0; - NumFileErrorsInCurrentArchive = 0; - } - -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.cpp deleted file mode 100644 index 7a2b9628..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.cpp +++ /dev/null @@ -1,579 +0,0 @@ -// List.cpp - -#include "StdAfx.h" - -#include "List.h" -#include "ConsoleClose.h" - -#include "Common/StringConvert.h" -#include "Common/StdOutStream.h" -#include "Common/IntToString.h" -#include "Common/MyCom.h" - -#include "Windows/PropVariant.h" -#include "Windows/Defs.h" -#include "Windows/PropVariantConversions.h" -#include "Windows/FileDir.h" - -#include "../../Archive/IArchive.h" - -#include "../Common/PropIDUtils.h" -#include "../Common/OpenArchive.h" - -#include "OpenCallbackConsole.h" - -using namespace NWindows; - -struct CPropIdToName -{ - PROPID PropID; - const wchar_t *Name; -}; - -static CPropIdToName kPropIdToName[] = -{ - { kpidPath, L"Path" }, - { kpidName, L"Name" }, - { kpidIsFolder, L"Folder" }, - { kpidSize, L"Size" }, - { kpidPackedSize, L"Packed Size" }, - { kpidAttributes, L"Attributes" }, - { kpidCreationTime, L"Created" }, - { kpidLastAccessTime, L"Accessed" }, - { kpidLastWriteTime, L"Modified" }, - { kpidSolid, L"Solid" }, - { kpidCommented, L"Commented" }, - { kpidEncrypted, L"Encrypted" }, - { kpidSplitBefore, L"Split Before" }, - { kpidSplitAfter, L"Split After" }, - { kpidDictionarySize, L"Dictionary Size" }, - { kpidCRC, L"CRC" }, - { kpidType, L"Type" }, - { kpidIsAnti, L"Anti" }, - { kpidMethod, L"Method" }, - { kpidHostOS, L"Host OS" }, - { kpidFileSystem, L"File System" }, - { kpidUser, L"User" }, - { kpidGroup, L"Group" }, - { kpidBlock, L"Block" }, - { kpidComment, L"Comment" }, - { kpidPosition, L"Position" }, - { kpidPrefix, L"Prefix" }, - { kpidNumSubFolders, L"Folders" }, - { kpidNumSubFiles, L"Files" }, - { kpidUnpackVer, L"Version" }, - { kpidVolume, L"Volume" }, - { kpidIsVolume, L"Multivolume" }, - { kpidOffset, L"Offset" }, - { kpidLinks, L"Links" }, - { kpidNumBlocks, L"Blocks" }, - { kpidNumVolumes, L"Volumes" } -}; - -static const char kEmptyAttributeChar = '.'; -static const char kDirectoryAttributeChar = 'D'; -static const char kReadonlyAttributeChar = 'R'; -static const char kHiddenAttributeChar = 'H'; -static const char kSystemAttributeChar = 'S'; -static const char kArchiveAttributeChar = 'A'; - -static const char *kListing = "Listing archive: "; -static const wchar_t *kFilesMessage = L"files"; -static const wchar_t *kDirsMessage = L"folders"; - -static void GetAttributesString(DWORD wa, bool directory, char *s) -{ - s[0] = ((wa & FILE_ATTRIBUTE_DIRECTORY) != 0 || directory) ? - kDirectoryAttributeChar: kEmptyAttributeChar; - s[1] = ((wa & FILE_ATTRIBUTE_READONLY) != 0)? - kReadonlyAttributeChar: kEmptyAttributeChar; - s[2] = ((wa & FILE_ATTRIBUTE_HIDDEN) != 0) ? - kHiddenAttributeChar: kEmptyAttributeChar; - s[3] = ((wa & FILE_ATTRIBUTE_SYSTEM) != 0) ? - kSystemAttributeChar: kEmptyAttributeChar; - s[4] = ((wa & FILE_ATTRIBUTE_ARCHIVE) != 0) ? - kArchiveAttributeChar: kEmptyAttributeChar; - s[5] = '\0'; -} - -enum EAdjustment -{ - kLeft, - kCenter, - kRight -}; - -struct CFieldInfo -{ - PROPID PropID; - UString Name; - EAdjustment TitleAdjustment; - EAdjustment TextAdjustment; - int PrefixSpacesWidth; - int Width; -}; - -struct CFieldInfoInit -{ - PROPID PropID; - const wchar_t *Name; - EAdjustment TitleAdjustment; - EAdjustment TextAdjustment; - int PrefixSpacesWidth; - int Width; -}; - -CFieldInfoInit kStandardFieldTable[] = -{ - { kpidLastWriteTime, L" Date Time", kLeft, kLeft, 0, 19 }, - { kpidAttributes, L"Attr", kRight, kCenter, 1, 5 }, - { kpidSize, L"Size", kRight, kRight, 1, 12 }, - { kpidPackedSize, L"Compressed", kRight, kRight, 1, 12 }, - { kpidPath, L"Name", kLeft, kLeft, 2, 24 } -}; - -void PrintSpaces(int numSpaces) -{ - for (int i = 0; i < numSpaces; i++) - g_StdOut << ' '; -} - -void PrintString(EAdjustment adjustment, int width, const UString &textString) -{ - const int numSpaces = width - textString.Length(); - int numLeftSpaces = 0; - switch (adjustment) - { - case kLeft: - numLeftSpaces = 0; - break; - case kCenter: - numLeftSpaces = numSpaces / 2; - break; - case kRight: - numLeftSpaces = numSpaces; - break; - } - PrintSpaces(numLeftSpaces); - g_StdOut << textString; - PrintSpaces(numSpaces - numLeftSpaces); -} - -class CFieldPrinter -{ - CObjectVector _fields; -public: - void Clear() { _fields.Clear(); } - void Init(const CFieldInfoInit *standardFieldTable, int numItems); - HRESULT Init(IInArchive *archive); - void PrintTitle(); - void PrintTitleLines(); - HRESULT PrintItemInfo(IInArchive *archive, - const UString &defaultItemName, - const NWindows::NFile::NFind::CFileInfoW &archiveFileInfo, - UInt32 index, - bool techMode); - HRESULT PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, - const UInt64 *size, const UInt64 *compressedSize); -}; - -void CFieldPrinter::Init(const CFieldInfoInit *standardFieldTable, int numItems) -{ - Clear(); - for (int i = 0; i < numItems; i++) - { - CFieldInfo fieldInfo; - const CFieldInfoInit &fieldInfoInit = standardFieldTable[i]; - fieldInfo.PropID = fieldInfoInit.PropID; - fieldInfo.Name = fieldInfoInit.Name; - fieldInfo.TitleAdjustment = fieldInfoInit.TitleAdjustment; - fieldInfo.TextAdjustment = fieldInfoInit.TextAdjustment; - fieldInfo.PrefixSpacesWidth = fieldInfoInit.PrefixSpacesWidth; - fieldInfo.Width = fieldInfoInit.Width; - _fields.Add(fieldInfo); - } -} - -static UString GetPropName(PROPID propID, BSTR name) -{ - for (int i = 0; i < sizeof(kPropIdToName) / sizeof(kPropIdToName[0]); i++) - { - const CPropIdToName &propIdToName = kPropIdToName[i]; - if (propIdToName.PropID == propID) - return propIdToName.Name; - } - if (name) - return name; - return L"?"; -} - -HRESULT CFieldPrinter::Init(IInArchive *archive) -{ - Clear(); - UInt32 numProps; - RINOK(archive->GetNumberOfProperties(&numProps)); - for (UInt32 i = 0; i < numProps; i++) - { - CMyComBSTR name; - PROPID propID; - VARTYPE vt; - RINOK(archive->GetPropertyInfo(i, &name, &propID, &vt)); - CFieldInfo fieldInfo; - fieldInfo.PropID = propID; - fieldInfo.Name = GetPropName(propID, name); - _fields.Add(fieldInfo); - } - return S_OK; -} - -void CFieldPrinter::PrintTitle() -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - PrintString(fieldInfo.TitleAdjustment, - ((fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width), fieldInfo.Name); - } -} - -void CFieldPrinter::PrintTitleLines() -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - for (int i = 0; i < fieldInfo.Width; i++) - g_StdOut << '-'; - } -} - - -BOOL IsFileTimeZero(CONST FILETIME *lpFileTime) -{ - return (lpFileTime->dwLowDateTime == 0) && (lpFileTime->dwHighDateTime == 0); -} - -static const char *kEmptyTimeString = " "; -void PrintTime(const NCOM::CPropVariant &propVariant) -{ - if (propVariant.vt != VT_FILETIME) - throw "incorrect item"; - if (IsFileTimeZero(&propVariant.filetime)) - g_StdOut << kEmptyTimeString; - else - { - FILETIME localFileTime; - if (!FileTimeToLocalFileTime(&propVariant.filetime, &localFileTime)) - throw "FileTimeToLocalFileTime error"; - char s[32]; - if (ConvertFileTimeToString(localFileTime, s, true, true)) - g_StdOut << s; - else - g_StdOut << kEmptyTimeString; - } -} - -HRESULT CFieldPrinter::PrintItemInfo(IInArchive *archive, - const UString &defaultItemName, - const NWindows::NFile::NFind::CFileInfoW &archiveFileInfo, - UInt32 index, - bool techMode) -{ - /* - if (techMode) - { - g_StdOut << "Index = "; - g_StdOut << (UInt64)index; - g_StdOut << endl; - } - */ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - if (!techMode) - PrintSpaces(fieldInfo.PrefixSpacesWidth); - - NCOM::CPropVariant propVariant; - RINOK(archive->GetProperty(index, fieldInfo.PropID, &propVariant)); - if (techMode) - { - g_StdOut << fieldInfo.Name << " = "; - } - int width = (fieldInfo.PropID == kpidPath) ? 0: fieldInfo.Width; - if (propVariant.vt == VT_EMPTY) - { - switch(fieldInfo.PropID) - { - case kpidPath: - propVariant = defaultItemName; - break; - case kpidLastWriteTime: - propVariant = archiveFileInfo.LastWriteTime; - break; - default: - if (techMode) - g_StdOut << endl; - else - PrintSpaces(width); - continue; - } - } - if (fieldInfo.PropID == kpidLastWriteTime) - { - PrintTime(propVariant); - } - else if (fieldInfo.PropID == kpidAttributes) - { - if (propVariant.vt != VT_UI4) - throw "incorrect item"; - UInt32 attributes = propVariant.ulVal; - bool isFolder; - RINOK(IsArchiveItemFolder(archive, index, isFolder)); - char s[8]; - GetAttributesString(attributes, isFolder, s); - g_StdOut << s; - } - else if (propVariant.vt == VT_BSTR) - { - if (techMode) - g_StdOut << propVariant.bstrVal; - else - PrintString(fieldInfo.TextAdjustment, width, propVariant.bstrVal); - } - else - { - UString s = ConvertPropertyToString(propVariant, fieldInfo.PropID); - s.Replace(wchar_t(0xA), L' '); - s.Replace(wchar_t(0xD), L' '); - - if (techMode) - g_StdOut << s; - else - PrintString(fieldInfo.TextAdjustment, width, s); - } - if (techMode) - g_StdOut << endl; - } - return S_OK; -} - -void PrintNumberString(EAdjustment adjustment, int width, const UInt64 *value) -{ - wchar_t textString[32] = { 0 }; - if (value != NULL) - ConvertUInt64ToString(*value, textString); - PrintString(adjustment, width, textString); -} - - -HRESULT CFieldPrinter::PrintSummaryInfo(UInt64 numFiles, UInt64 numDirs, - const UInt64 *size, const UInt64 *compressedSize) -{ - for (int i = 0; i < _fields.Size(); i++) - { - const CFieldInfo &fieldInfo = _fields[i]; - PrintSpaces(fieldInfo.PrefixSpacesWidth); - NCOM::CPropVariant propVariant; - if (fieldInfo.PropID == kpidSize) - PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, size); - else if (fieldInfo.PropID == kpidPackedSize) - PrintNumberString(fieldInfo.TextAdjustment, fieldInfo.Width, compressedSize); - else if (fieldInfo.PropID == kpidPath) - { - wchar_t textString[32]; - ConvertUInt64ToString(numFiles, textString); - UString temp = textString; - temp += L" "; - temp += kFilesMessage; - temp += L", "; - ConvertUInt64ToString(numDirs, textString); - temp += textString; - temp += L" "; - temp += kDirsMessage; - PrintString(fieldInfo.TextAdjustment, 0, temp); - } - else - PrintString(fieldInfo.TextAdjustment, fieldInfo.Width, L""); - } - return S_OK; -} - -bool GetUInt64Value(IInArchive *archive, UInt32 index, PROPID propID, UInt64 &value) -{ - NCOM::CPropVariant propVariant; - if (archive->GetProperty(index, propID, &propVariant) != S_OK) - throw "GetPropertyValue error"; - if (propVariant.vt == VT_EMPTY) - return false; - value = ConvertPropVariantToUInt64(propVariant); - return true; -} - -HRESULT ListArchives( - CCodecs *codecs, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - bool enableHeaders, bool techMode, bool &passwordEnabled, UString &password, UInt64 &numErrors) -{ - numErrors = 0; - CFieldPrinter fieldPrinter; - if (!techMode) - fieldPrinter.Init(kStandardFieldTable, sizeof(kStandardFieldTable) / sizeof(kStandardFieldTable[0])); - - UInt64 numFiles2 = 0, numDirs2 = 0, totalPackSize2 = 0, totalUnPackSize2 = 0; - UInt64 *totalPackSizePointer2 = 0, *totalUnPackSizePointer2 = 0; - for (int i = 0; i < archivePaths.Size(); i++) - { - const UString &archiveName = archivePaths[i]; - NFile::NFind::CFileInfoW archiveFileInfo; - if (!NFile::NFind::FindFile(archiveName, archiveFileInfo) || archiveFileInfo.IsDirectory()) - { - g_StdOut << endl << "Error: " << archiveName << " is not archive" << endl; - numErrors++; - continue; - } - if (archiveFileInfo.IsDirectory()) - { - g_StdOut << endl << "Error: " << archiveName << " is not file" << endl; - numErrors++; - continue; - } - - CArchiveLink archiveLink; - - COpenCallbackConsole openCallback; - openCallback.OutStream = &g_StdOut; - openCallback.PasswordIsDefined = passwordEnabled; - openCallback.Password = password; - - HRESULT result = MyOpenArchive(codecs, archiveName, archiveLink, &openCallback); - if (result != S_OK) - { - g_StdOut << endl << "Error: " << archiveName << " is not supported archive" << endl; - numErrors++; - continue; - } - - for (int v = 0; v < archiveLink.VolumePaths.Size(); v++) - { - int index = archivePathsFull.FindInSorted(archiveLink.VolumePaths[v]); - if (index >= 0 && index > i) - { - archivePaths.Delete(index); - archivePathsFull.Delete(index); - } - } - - IInArchive *archive = archiveLink.GetArchive(); - const UString defaultItemName = archiveLink.GetDefaultItemName(); - - if (enableHeaders) - { - g_StdOut << endl << kListing << archiveName << endl << endl; - - UInt32 numProps; - if (archive->GetNumberOfArchiveProperties(&numProps) == S_OK) - { - for (UInt32 i = 0; i < numProps; i++) - { - CMyComBSTR name; - PROPID propID; - VARTYPE vt; - if (archive->GetArchivePropertyInfo(i, &name, &propID, &vt) != S_OK) - continue; - NCOM::CPropVariant prop; - if (archive->GetArchiveProperty(propID, &prop) != S_OK) - continue; - UString s = ConvertPropertyToString(prop, propID); - if (!s.IsEmpty()) - g_StdOut << GetPropName(propID, name) << " = " << s << endl; - } - } - if (techMode) - g_StdOut << "----------\n"; - if (numProps > 0) - g_StdOut << endl; - } - - if (enableHeaders && !techMode) - { - fieldPrinter.PrintTitle(); - g_StdOut << endl; - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - } - - if (techMode) - { - RINOK(fieldPrinter.Init(archive)); - } - UInt64 numFiles = 0, numDirs = 0, totalPackSize = 0, totalUnPackSize = 0; - UInt64 *totalPackSizePointer = 0, *totalUnPackSizePointer = 0; - UInt32 numItems; - RINOK(archive->GetNumberOfItems(&numItems)); - for(UInt32 i = 0; i < numItems; i++) - { - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - - UString filePath; - RINOK(GetArchiveItemPath(archive, i, defaultItemName, filePath)); - - bool isFolder; - RINOK(IsArchiveItemFolder(archive, i, isFolder)); - if (!wildcardCensor.CheckPath(filePath, !isFolder)) - continue; - - fieldPrinter.PrintItemInfo(archive, defaultItemName, archiveFileInfo, i, techMode); - - UInt64 packSize, unpackSize; - if (!GetUInt64Value(archive, i, kpidSize, unpackSize)) - unpackSize = 0; - else - totalUnPackSizePointer = &totalUnPackSize; - if (!GetUInt64Value(archive, i, kpidPackedSize, packSize)) - packSize = 0; - else - totalPackSizePointer = &totalPackSize; - - g_StdOut << endl; - - if (isFolder) - numDirs++; - else - numFiles++; - totalPackSize += packSize; - totalUnPackSize += unpackSize; - } - if (enableHeaders && !techMode) - { - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - fieldPrinter.PrintSummaryInfo(numFiles, numDirs, totalUnPackSizePointer, totalPackSizePointer); - g_StdOut << endl; - } - if (totalPackSizePointer != 0) - { - totalPackSizePointer2 = &totalPackSize2; - totalPackSize2 += totalPackSize; - } - if (totalUnPackSizePointer != 0) - { - totalUnPackSizePointer2 = &totalUnPackSize2; - totalUnPackSize2 += totalUnPackSize; - } - numFiles2 += numFiles; - numDirs2 += numDirs; - } - if (enableHeaders && !techMode && archivePaths.Size() > 1) - { - g_StdOut << endl; - fieldPrinter.PrintTitleLines(); - g_StdOut << endl; - fieldPrinter.PrintSummaryInfo(numFiles2, numDirs2, totalUnPackSizePointer2, totalPackSizePointer2); - g_StdOut << endl; - g_StdOut << "Archives: " << archivePaths.Size() << endl; - } - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.h deleted file mode 100644 index 6e9fa240..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/List.h +++ /dev/null @@ -1,16 +0,0 @@ -// List.h - -#ifndef __LIST_H -#define __LIST_H - -#include "Common/Wildcard.h" -#include "../Common/LoadCodecs.h" - -HRESULT ListArchives( - CCodecs *codecs, - UStringVector &archivePaths, UStringVector &archivePathsFull, - const NWildcard::CCensorNode &wildcardCensor, - bool enableHeaders, bool techMode, bool &passwordEnabled, UString &password, UInt64 &errors); - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/Main.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/Main.cpp deleted file mode 100644 index 980f60d8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/Main.cpp +++ /dev/null @@ -1,563 +0,0 @@ -// Main.cpp - -#include "StdAfx.h" - -#include "Common/MyInitGuid.h" - -#include "Common/CommandLineParser.h" -#include "Common/MyException.h" -#include "Common/IntToString.h" -#include "Common/StdOutStream.h" -#include "Common/StringConvert.h" -#include "Common/StringToInt.h" - -#include "Windows/FileDir.h" -#include "Windows/FileName.h" -#include "Windows/Defs.h" -#include "Windows/Error.h" -#ifdef _WIN32 -#include "Windows/MemoryLock.h" -#endif - -#include "../../IPassword.h" -#include "../../ICoder.h" -#include "../Common/UpdateAction.h" -#include "../Common/Update.h" -#include "../Common/Extract.h" -#include "../Common/ArchiveCommandLine.h" -#include "../Common/ExitCode.h" -#ifdef EXTERNAL_CODECS -#include "../Common/LoadCodecs.h" -#endif - -#include "../../Compress/LZMA_Alone/LzmaBenchCon.h" - -#include "List.h" -#include "OpenCallbackConsole.h" -#include "ExtractCallbackConsole.h" -#include "UpdateCallbackConsole.h" - -#include "../../MyVersion.h" - -#if defined( _WIN32) && defined( _7ZIP_LARGE_PAGES) -extern "C" -{ -#include "../../../../C/Alloc.h" -} -#endif - -using namespace NWindows; -using namespace NFile; -using namespace NCommandLineParser; - -HINSTANCE g_hInstance = 0; -extern CStdOutStream *g_StdStream; - -static const char *kCopyrightString = "\n7-Zip" -#ifndef EXTERNAL_CODECS -" (A)" -#endif - -#ifdef _WIN64 -" [64]" -#endif - -" " MY_VERSION_COPYRIGHT_DATE "\n"; - -static const char *kHelpString = - "\nUsage: 7z" -#ifdef _NO_CRYPTO - "r" -#else -#ifndef EXTERNAL_CODECS - "a" -#endif -#endif - " [...] [...]\n" - " [<@listfiles...>]\n" - "\n" - "\n" - " a: Add files to archive\n" - " b: Benchmark\n" - " d: Delete files from archive\n" - " e: Extract files from archive (without using directory names)\n" - " l: List contents of archive\n" -// " l[a|t][f]: List contents of archive\n" -// " a - with Additional fields\n" -// " t - with all fields\n" -// " f - with Full pathnames\n" - " t: Test integrity of archive\n" - " u: Update files to archive\n" - " x: eXtract files with full paths\n" - "\n" - " -ai[r[-|0]]{@listfile|!wildcard}: Include archives\n" - " -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives\n" - " -bd: Disable percentage indicator\n" - " -i[r[-|0]]{@listfile|!wildcard}: Include filenames\n" - " -m{Parameters}: set compression Method\n" - " -o{Directory}: set Output directory\n" - " -p{Password}: set Password\n" - " -r[-|0]: Recurse subdirectories\n" - " -scs{UTF-8 | WIN | DOS}: set charset for list files\n" - " -sfx[{name}]: Create SFX archive\n" - " -si[{name}]: read data from stdin\n" - " -slt: show technical information for l (List) command\n" - " -so: write data to stdout\n" - " -ssc[-]: set sensitive case mode\n" - " -ssw: compress shared files\n" - " -t{Type}: Set type of archive\n" - " -v{Size}[b|k|m|g]: Create volumes\n" - " -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options\n" - " -w[{path}]: assign Work directory. Empty path means a temporary directory\n" - " -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames\n" - " -y: assume Yes on all queries\n"; - -// --------------------------- -// exception messages - -static const char *kEverythingIsOk = "Everything is Ok"; -static const char *kUserErrorMessage = "Incorrect command line"; // NExitCode::kUserError - -static const wchar_t *kDefaultSfxModule = L"7zCon.sfx"; - -static void ShowMessageAndThrowException(CStdOutStream &s, LPCSTR message, NExitCode::EEnum code) -{ - s << message << endl; - throw code; -} - -static void PrintHelpAndExit(CStdOutStream &s) // yyy -{ - s << kHelpString; - ShowMessageAndThrowException(s, kUserErrorMessage, NExitCode::kUserError); -} - -#ifndef _WIN32 -static void GetArguments(int numArguments, const char *arguments[], UStringVector &parts) -{ - parts.Clear(); - for(int i = 0; i < numArguments; i++) - { - UString s = MultiByteToUnicodeString(arguments[i]); - parts.Add(s); - } -} -#endif - -static void ShowCopyrightAndHelp(CStdOutStream &s, bool needHelp) -{ - s << kCopyrightString; - // s << "# CPUs: " << (UInt64)NWindows::NSystem::GetNumberOfProcessors() << "\n"; - if (needHelp) - s << kHelpString; -} - -#ifdef EXTERNAL_CODECS -static void PrintString(CStdOutStream &stdStream, const AString &s, int size) -{ - int len = s.Length(); - stdStream << s; - for (int i = len; i < size; i++) - stdStream << ' '; -} -#endif - -static void PrintString(CStdOutStream &stdStream, const UString &s, int size) -{ - int len = s.Length(); - stdStream << s; - for (int i = len; i < size; i++) - stdStream << ' '; -} - -static inline char GetHex(Byte value) -{ - return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10))); -} - -int Main2( - #ifndef _WIN32 - int numArguments, const char *arguments[] - #endif -) -{ - #ifdef _WIN32 - SetFileApisToOEM(); - #endif - - UStringVector commandStrings; - #ifdef _WIN32 - NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings); - #else - GetArguments(numArguments, arguments, commandStrings); - #endif - - if(commandStrings.Size() == 1) - { - ShowCopyrightAndHelp(g_StdOut, true); - return 0; - } - commandStrings.Delete(0); - - CArchiveCommandLineOptions options; - - CArchiveCommandLineParser parser; - - parser.Parse1(commandStrings, options); - - if(options.HelpMode) - { - ShowCopyrightAndHelp(g_StdOut, true); - return 0; - } - - #if defined(_WIN32) && defined(_7ZIP_LARGE_PAGES) - if (options.LargePages) - { - SetLargePageSize(); - NSecurity::EnableLockMemoryPrivilege(); - } - #endif - - CStdOutStream &stdStream = options.StdOutMode ? g_StdErr : g_StdOut; - g_StdStream = &stdStream; - - if (options.EnableHeaders) - ShowCopyrightAndHelp(stdStream, false); - - parser.Parse2(options); - - CCodecs *codecs = new CCodecs; - CMyComPtr< - #ifdef EXTERNAL_CODECS - ICompressCodecsInfo - #else - IUnknown - #endif - > compressCodecsInfo = codecs; - HRESULT result = codecs->Load(); - if (result != S_OK) - throw CSystemException(result); - - bool isExtractGroupCommand = options.Command.IsFromExtractGroup(); - if (options.Command.CommandType == NCommandType::kInfo) - { - stdStream << endl << "Formats:" << endl; - int i; - for (i = 0; i < codecs->Formats.Size(); i++) - { - const CArcInfoEx &arc = codecs->Formats[i]; - #ifdef EXTERNAL_CODECS - if (arc.LibIndex >= 0) - { - char s[32]; - ConvertUInt64ToString(arc.LibIndex, s); - PrintString(stdStream, s, 2); - } - else - #endif - stdStream << " "; - stdStream << ' '; - stdStream << (char)(arc.UpdateEnabled ? 'C' : ' '); - stdStream << (char)(arc.KeepName ? 'K' : ' '); - stdStream << " "; - PrintString(stdStream, arc.Name, 6); - stdStream << " "; - UString s; - for (int t = 0; t < arc.Exts.Size(); t++) - { - const CArcExtInfo &ext = arc.Exts[t]; - s += ext.Ext; - if (!ext.AddExt.IsEmpty()) - { - s += L" ("; - s += ext.AddExt; - s += L')'; - } - s += L' '; - } - PrintString(stdStream, s, 14); - stdStream << " "; - const CByteBuffer &sig = arc.StartSignature; - for (size_t j = 0; j < sig.GetCapacity(); j++) - { - Byte b = sig[j]; - if (b > 0x20 && b < 0x80) - { - stdStream << (char)b; - } - else - { - stdStream << GetHex((Byte)((b >> 4) & 0xF)); - stdStream << GetHex((Byte)(b & 0xF)); - } - stdStream << ' '; - } - stdStream << endl; - } - stdStream << endl << "Codecs:" << endl; - - #ifdef EXTERNAL_CODECS - UINT32 numMethods; - if (codecs->GetNumberOfMethods(&numMethods) == S_OK) - for (UInt32 j = 0; j < numMethods; j++) - { - int libIndex = codecs->GetCodecLibIndex(j); - if (libIndex >= 0) - { - char s[32]; - ConvertUInt64ToString(libIndex, s); - PrintString(stdStream, s, 2); - } - else - stdStream << " "; - stdStream << ' '; - stdStream << (char)(codecs->GetCodecEncoderIsAssigned(j) ? 'C' : ' '); - UInt64 id; - stdStream << " "; - HRESULT res = codecs->GetCodecId(j, id); - if (res != S_OK) - id = (UInt64)(Int64)-1; - char s[32]; - ConvertUInt64ToString(id, s, 16); - PrintString(stdStream, s, 8); - stdStream << " "; - PrintString(stdStream, codecs->GetCodecName(j), 11); - stdStream << endl; - /* - if (res != S_OK) - throw "incorrect Codec ID"; - */ - } - #endif - return S_OK; - } - else if (options.Command.CommandType == NCommandType::kBenchmark) - { - if (options.Method.CompareNoCase(L"CRC") == 0) - { - HRESULT res = CrcBenchCon((FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); - if (res != S_OK) - { - if (res == S_FALSE) - { - stdStream << "\nCRC Error\n"; - return NExitCode::kFatalError; - } - throw CSystemException(res); - } - } - else - { - HRESULT res = LzmaBenchCon( - #ifdef EXTERNAL_LZMA - codecs, - #endif - (FILE *)stdStream, options.NumIterations, options.NumThreads, options.DictionarySize); - if (res != S_OK) - { - if (res == S_FALSE) - { - stdStream << "\nDecoding Error\n"; - return NExitCode::kFatalError; - } - throw CSystemException(res); - } - } - } - else if (isExtractGroupCommand || options.Command.CommandType == NCommandType::kList) - { - if(isExtractGroupCommand) - { - CExtractCallbackConsole *ecs = new CExtractCallbackConsole; - CMyComPtr extractCallback = ecs; - - ecs->OutStream = &stdStream; - ecs->PasswordIsDefined = options.PasswordEnabled; - ecs->Password = options.Password; - ecs->Init(); - - COpenCallbackConsole openCallback; - openCallback.OutStream = &stdStream; - openCallback.PasswordIsDefined = options.PasswordEnabled; - openCallback.Password = options.Password; - - CExtractOptions eo; - eo.StdOutMode = options.StdOutMode; - eo.PathMode = options.Command.GetPathMode(); - eo.TestMode = options.Command.IsTestMode(); - eo.OverwriteMode = options.OverwriteMode; - eo.OutputDir = options.OutputDir; - eo.YesToAll = options.YesToAll; - #ifdef COMPRESS_MT - eo.Properties = options.ExtractProperties; - #endif - UString errorMessage; - CDecompressStat stat; - HRESULT result = DecompressArchives( - codecs, - options.ArchivePathsSorted, - options.ArchivePathsFullSorted, - options.WildcardCensor.Pairs.Front().Head, - eo, &openCallback, ecs, errorMessage, stat); - if (!errorMessage.IsEmpty()) - { - stdStream << endl << "Error: " << errorMessage; - if (result == S_OK) - result = E_FAIL; - } - - stdStream << endl; - if (ecs->NumArchives > 1) - stdStream << "Archives: " << ecs->NumArchives << endl; - if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0) - { - if (ecs->NumArchives > 1) - { - stdStream << endl; - if (ecs->NumArchiveErrors != 0) - stdStream << "Archive Errors: " << ecs->NumArchiveErrors << endl; - if (ecs->NumFileErrors != 0) - stdStream << "Sub items Errors: " << ecs->NumFileErrors << endl; - } - if (result != S_OK) - throw CSystemException(result); - return NExitCode::kFatalError; - } - if (result != S_OK) - throw CSystemException(result); - if (stat.NumFolders != 0) - stdStream << "Folders: " << stat.NumFolders << endl; - if (stat.NumFiles != 1 || stat.NumFolders != 0) - stdStream << "Files: " << stat.NumFiles << endl; - stdStream - << "Size: " << stat.UnpackSize << endl - << "Compressed: " << stat.PackSize << endl; - } - else - { - UInt64 numErrors = 0; - HRESULT result = ListArchives( - codecs, - options.ArchivePathsSorted, - options.ArchivePathsFullSorted, - options.WildcardCensor.Pairs.Front().Head, - options.EnableHeaders, - options.TechMode, - options.PasswordEnabled, - options.Password, numErrors); - if (numErrors > 0) - { - g_StdOut << endl << "Errors: " << numErrors; - return NExitCode::kFatalError; - } - if (result != S_OK) - throw CSystemException(result); - } - } - else if(options.Command.IsFromUpdateGroup()) - { - UString workingDir; - - CUpdateOptions &uo = options.UpdateOptions; - if (uo.SfxMode && uo.SfxModule.IsEmpty()) - uo.SfxModule = kDefaultSfxModule; - - bool passwordIsDefined = - options.PasswordEnabled && !options.Password.IsEmpty(); - - COpenCallbackConsole openCallback; - openCallback.OutStream = &stdStream; - openCallback.PasswordIsDefined = passwordIsDefined; - openCallback.Password = options.Password; - - CUpdateCallbackConsole callback; - callback.EnablePercents = options.EnablePercents; - callback.PasswordIsDefined = passwordIsDefined; - callback.AskPassword = options.PasswordEnabled && options.Password.IsEmpty(); - callback.Password = options.Password; - callback.StdOutMode = uo.StdOutMode; - callback.Init(&stdStream); - - CUpdateErrorInfo errorInfo; - - if (!uo.Init(codecs, options.ArchiveName, options.ArcType)) - throw "Unsupported archive type"; - HRESULT result = UpdateArchive(codecs, - options.WildcardCensor, uo, - errorInfo, &openCallback, &callback); - - int exitCode = NExitCode::kSuccess; - if (callback.CantFindFiles.Size() > 0) - { - stdStream << endl; - stdStream << "WARNINGS for files:" << endl << endl; - int numErrors = callback.CantFindFiles.Size(); - for (int i = 0; i < numErrors; i++) - { - stdStream << callback.CantFindFiles[i] << " : "; - stdStream << NError::MyFormatMessageW(callback.CantFindCodes[i]) << endl; - } - stdStream << "----------------" << endl; - stdStream << "WARNING: Cannot find " << numErrors << " file"; - if (numErrors > 1) - stdStream << "s"; - stdStream << endl; - exitCode = NExitCode::kWarning; - } - - if (result != S_OK) - { - UString message; - if (!errorInfo.Message.IsEmpty()) - { - message += errorInfo.Message; - message += L"\n"; - } - if (!errorInfo.FileName.IsEmpty()) - { - message += errorInfo.FileName; - message += L"\n"; - } - if (!errorInfo.FileName2.IsEmpty()) - { - message += errorInfo.FileName2; - message += L"\n"; - } - if (errorInfo.SystemError != 0) - { - message += NError::MyFormatMessageW(errorInfo.SystemError); - message += L"\n"; - } - if (!message.IsEmpty()) - stdStream << L"\nError:\n" << message; - throw CSystemException(result); - } - int numErrors = callback.FailedFiles.Size(); - if (numErrors == 0) - { - if (callback.CantFindFiles.Size() == 0) - stdStream << kEverythingIsOk << endl; - } - else - { - stdStream << endl; - stdStream << "WARNINGS for files:" << endl << endl; - for (int i = 0; i < numErrors; i++) - { - stdStream << callback.FailedFiles[i] << " : "; - stdStream << NError::MyFormatMessageW(callback.FailedCodes[i]) << endl; - } - stdStream << "----------------" << endl; - stdStream << "WARNING: Cannot open " << numErrors << " file"; - if (numErrors > 1) - stdStream << "s"; - stdStream << endl; - exitCode = NExitCode::kWarning; - } - return exitCode; - } - else - PrintHelpAndExit(stdStream); - return 0; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/MainAr.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/MainAr.cpp deleted file mode 100644 index fd42e4f6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/MainAr.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// MainAr.cpp - -#include "StdAfx.h" - -// #include - -#include "Windows/Error.h" - -#include "Common/StdOutStream.h" -#include "Common/NewHandler.h" -#include "Common/MyException.h" -#include "Common/StringConvert.h" - -#include "../Common/ExitCode.h" -#include "../Common/ArchiveCommandLine.h" -#include "ConsoleClose.h" - -using namespace NWindows; - -CStdOutStream *g_StdStream = 0; - -#ifdef _WIN32 -#ifndef _UNICODE -bool g_IsNT = false; -#endif -#if !defined(_UNICODE) || !defined(_WIN64) -static inline bool IsItWindowsNT() -{ - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if (!::GetVersionEx(&versionInfo)) - return false; - return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT); -} -#endif -#endif - -extern int Main2( - #ifndef _WIN32 - int numArguments, const char *arguments[] - #endif -); - -static const char *kExceptionErrorMessage = "\n\nError:\n"; -static const char *kUserBreak = "\nBreak signaled\n"; - -static const char *kMemoryExceptionMessage = "\n\nERROR: Can't allocate required memory!\n"; -static const char *kUnknownExceptionMessage = "\n\nUnknown Error\n"; -static const char *kInternalExceptionMessage = "\n\nInternal Error #"; - -int -#ifdef _MSC_VER -__cdecl -#endif -main -( -#ifndef _WIN32 -int numArguments, const char *arguments[] -#endif -) -{ - g_StdStream = &g_StdOut; - #ifdef _WIN32 - - #ifdef _UNICODE - #ifndef _WIN64 - if (!IsItWindowsNT()) - { - (*g_StdStream) << "This program requires Windows NT/2000/XP/2003/Vista"; - return NExitCode::kFatalError; - } - #endif - #else - g_IsNT = IsItWindowsNT(); - #endif - - #endif - - // setlocale(LC_COLLATE, ".OCP"); - NConsoleClose::CCtrlHandlerSetter ctrlHandlerSetter; - int res = 0; - try - { - res = Main2( -#ifndef _WIN32 - numArguments, arguments -#endif - ); - } - catch(const CNewException &) - { - (*g_StdStream) << kMemoryExceptionMessage; - return (NExitCode::kMemoryError); - } - catch(const NConsoleClose::CCtrlBreakException &) - { - (*g_StdStream) << endl << kUserBreak; - return (NExitCode::kUserBreak); - } - catch(const CArchiveCommandLineException &e) - { - (*g_StdStream) << kExceptionErrorMessage << e << endl; - return (NExitCode::kUserError); - } - catch(const CSystemException &systemError) - { - if (systemError.ErrorCode == E_OUTOFMEMORY) - { - (*g_StdStream) << kMemoryExceptionMessage; - return (NExitCode::kMemoryError); - } - if (systemError.ErrorCode == E_ABORT) - { - (*g_StdStream) << endl << kUserBreak; - return (NExitCode::kUserBreak); - } - UString message; - NError::MyFormatMessage(systemError.ErrorCode, message); - (*g_StdStream) << endl << endl << "System error:" << endl << - message << endl; - return (NExitCode::kFatalError); - } - catch(NExitCode::EEnum &exitCode) - { - (*g_StdStream) << kInternalExceptionMessage << exitCode << endl; - return (exitCode); - } - /* - catch(const NExitCode::CMultipleErrors &multipleErrors) - { - (*g_StdStream) << endl << multipleErrors.NumErrors << " errors" << endl; - return (NExitCode::kFatalError); - } - */ - catch(const UString &s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(const AString &s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(const char *s) - { - (*g_StdStream) << kExceptionErrorMessage << s << endl; - return (NExitCode::kFatalError); - } - catch(int t) - { - (*g_StdStream) << kInternalExceptionMessage << t << endl; - return (NExitCode::kFatalError); - } - catch(...) - { - (*g_StdStream) << kUnknownExceptionMessage; - return (NExitCode::kFatalError); - } - return res; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp deleted file mode 100644 index 06ff165f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// OpenCallbackConsole.cpp - -#include "StdAfx.h" - -#include "OpenCallbackConsole.h" - -#include "ConsoleClose.h" -#include "UserInputUtils.h" - -HRESULT COpenCallbackConsole::CheckBreak() -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT COpenCallbackConsole::SetTotal(const UInt64 *, const UInt64 *) -{ - return CheckBreak(); -} - -HRESULT COpenCallbackConsole::SetCompleted(const UInt64 *, const UInt64 *) -{ - return CheckBreak(); -} - -HRESULT COpenCallbackConsole::CryptoGetTextPassword(BSTR *password) -{ - PasswordWasAsked = true; - RINOK(CheckBreak()); - if (!PasswordIsDefined) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - CMyComBSTR temp(Password); - *password = temp.Detach(); - return S_OK; -} - -HRESULT COpenCallbackConsole::GetPasswordIfAny(UString &password) -{ - if (PasswordIsDefined) - password = Password; - return S_OK; -} - -bool COpenCallbackConsole::WasPasswordAsked() -{ - return PasswordWasAsked; -} - -void COpenCallbackConsole::ClearPasswordWasAskedFlag() -{ - PasswordWasAsked = false; -} - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h deleted file mode 100644 index db0e9bd8..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +++ /dev/null @@ -1,27 +0,0 @@ -// OpenCallbackConsole.h - -#ifndef __OPENCALLBACKCONSOLE_H -#define __OPENCALLBACKCONSOLE_H - -#include "Common/StdOutStream.h" -#include "../Common/ArchiveOpenCallback.h" - -class COpenCallbackConsole: public IOpenCallbackUI -{ -public: - HRESULT CheckBreak(); - HRESULT SetTotal(const UInt64 *files, const UInt64 *bytes); - HRESULT SetCompleted(const UInt64 *files, const UInt64 *bytes); - HRESULT CryptoGetTextPassword(BSTR *password); - HRESULT GetPasswordIfAny(UString &password); - bool WasPasswordAsked(); - void ClearPasswordWasAskedFlag(); - - CStdOutStream *OutStream; - bool PasswordIsDefined; - UString Password; - bool PasswordWasAsked; - COpenCallbackConsole(): PasswordIsDefined(false), PasswordWasAsked(false) {} -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp deleted file mode 100644 index 47aafd73..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// PercentPrinter.cpp - -#include "StdAfx.h" - -#include "Common/IntToString.h" -#include "Common/MyString.h" - -#include "PercentPrinter.h" - -const int kPaddingSize = 2; -const int kPercentsSize = 4; -const int kMaxExtraSize = kPaddingSize + 32 + kPercentsSize; - -static void ClearPrev(char *p, int num) -{ - int i; - for (i = 0; i < num; i++) *p++ = '\b'; - for (i = 0; i < num; i++) *p++ = ' '; - for (i = 0; i < num; i++) *p++ = '\b'; - *p = '\0'; -} - -void CPercentPrinter::ClosePrint() -{ - if (m_NumExtraChars == 0) - return; - char s[kMaxExtraSize * 3 + 1]; - ClearPrev(s, m_NumExtraChars); - (*OutStream) << s; - m_NumExtraChars = 0; -} - -void CPercentPrinter::PrintString(const char *s) -{ - ClosePrint(); - (*OutStream) << s; -} - -void CPercentPrinter::PrintString(const wchar_t *s) -{ - ClosePrint(); - (*OutStream) << s; -} - -void CPercentPrinter::PrintNewLine() -{ - ClosePrint(); - (*OutStream) << "\n"; -} - -void CPercentPrinter::RePrintRatio() -{ - char s[32]; - ConvertUInt64ToString(((m_Total == 0) ? 0 : (m_CurValue * 100 / m_Total)), s); - int size = (int)strlen(s); - s[size++] = '%'; - s[size] = '\0'; - - int extraSize = kPaddingSize + MyMax(size, kPercentsSize); - if (extraSize < m_NumExtraChars) - extraSize = m_NumExtraChars; - - char fullString[kMaxExtraSize * 3]; - char *p = fullString; - int i; - if (m_NumExtraChars == 0) - { - for (i = 0; i < extraSize; i++) - *p++ = ' '; - m_NumExtraChars = extraSize; - } - - for (i = 0; i < m_NumExtraChars; i++) - *p++ = '\b'; - m_NumExtraChars = extraSize; - for (; size < m_NumExtraChars; size++) - *p++ = ' '; - MyStringCopy(p, s); - (*OutStream) << fullString; - OutStream->Flush(); - m_PrevValue = m_CurValue; -} - -void CPercentPrinter::PrintRatio() -{ - if (m_CurValue < m_PrevValue + m_MinStepSize && - m_CurValue + m_MinStepSize > m_PrevValue && m_NumExtraChars != 0) - return; - RePrintRatio(); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.h deleted file mode 100644 index e8b40916..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/PercentPrinter.h +++ /dev/null @@ -1,31 +0,0 @@ -// PercentPrinter.h - -#ifndef __PERCENTPRINTER_H -#define __PERCENTPRINTER_H - -#include "Common/Types.h" -#include "Common/StdOutStream.h" - -class CPercentPrinter -{ - UInt64 m_MinStepSize; - UInt64 m_PrevValue; - UInt64 m_CurValue; - UInt64 m_Total; - int m_NumExtraChars; -public: - CStdOutStream *OutStream; - - CPercentPrinter(UInt64 minStepSize = 1): m_MinStepSize(minStepSize), - m_PrevValue(0), m_CurValue(0), m_Total(1), m_NumExtraChars(0) {} - void SetTotal(UInt64 total) { m_Total = total; m_PrevValue = 0; } - void SetRatio(UInt64 doneValue) { m_CurValue = doneValue; } - void PrintString(const char *s); - void PrintString(const wchar_t *s); - void PrintNewLine(); - void ClosePrint(); - void RePrintRatio(); - void PrintRatio(); -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.cpp deleted file mode 100644 index d0feea85..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.h deleted file mode 100644 index 8531cc9c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../../../Common/MyWindows.h" -#include "../../../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp deleted file mode 100644 index 1d4420da..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +++ /dev/null @@ -1,208 +0,0 @@ -// UpdateCallbackConsole.cpp - -#include "StdAfx.h" - -#include "UpdateCallbackConsole.h" - -#include "Windows/Error.h" -#ifdef COMPRESS_MT -#include "Windows/Synchronization.h" -#endif - -#include "ConsoleClose.h" -#include "UserInputUtils.h" - -using namespace NWindows; - -#ifdef COMPRESS_MT -static NSynchronization::CCriticalSection g_CriticalSection; -#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection); -#else -#define MT_LOCK -#endif - -static const wchar_t *kEmptyFileAlias = L"[Content]"; - -static const char *kCreatingArchiveMessage = "Creating archive "; -static const char *kUpdatingArchiveMessage = "Updating archive "; -static const char *kScanningMessage = "Scanning"; - - -HRESULT CUpdateCallbackConsole::OpenResult(const wchar_t *name, HRESULT result) -{ - (*OutStream) << endl; - if (result != S_OK) - (*OutStream) << "Error: " << name << " is not supported archive" << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::StartScanning() -{ - (*OutStream) << kScanningMessage; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::CanNotFindError(const wchar_t *name, DWORD systemError) -{ - CantFindFiles.Add(name); - CantFindCodes.Add(systemError); - // m_PercentPrinter.ClosePrint(); - if (!m_WarningsMode) - { - (*OutStream) << endl << endl; - m_PercentPrinter.PrintNewLine(); - m_WarningsMode = true; - } - m_PercentPrinter.PrintString(name); - m_PercentPrinter.PrintString(": WARNING: "); - m_PercentPrinter.PrintString(NError::MyFormatMessageW(systemError)); - m_PercentPrinter.PrintNewLine(); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::FinishScanning() -{ - (*OutStream) << endl << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::StartArchive(const wchar_t *name, bool updating) -{ - if(updating) - (*OutStream) << kUpdatingArchiveMessage; - else - (*OutStream) << kCreatingArchiveMessage; - if (name != 0) - (*OutStream) << name; - else - (*OutStream) << "StdOut"; - (*OutStream) << endl << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::FinishArchive() -{ - (*OutStream) << endl; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::CheckBreak() -{ - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::Finilize() -{ - MT_LOCK - if (m_NeedBeClosed) - { - if (EnablePercents) - { - m_PercentPrinter.ClosePrint(); - } - if (!StdOutMode && m_NeedNewLine) - { - m_PercentPrinter.PrintNewLine(); - m_NeedNewLine = false; - } - m_NeedBeClosed = false; - } - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetNumFiles(UInt64 /* numFiles */) -{ - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetTotal(UInt64 size) -{ - MT_LOCK - if (EnablePercents) - m_PercentPrinter.SetTotal(size); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetCompleted(const UInt64 *completeValue) -{ - MT_LOCK - if (completeValue != NULL) - { - if (EnablePercents) - { - m_PercentPrinter.SetRatio(*completeValue); - m_PercentPrinter.PrintRatio(); - m_NeedBeClosed = true; - } - } - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 * /* outSize */) -{ - /* - if (NConsoleClose::TestBreakSignal()) - return E_ABORT; - */ - return S_OK; -} - -HRESULT CUpdateCallbackConsole::GetStream(const wchar_t *name, bool isAnti) -{ - MT_LOCK - if (StdOutMode) - return S_OK; - if(isAnti) - m_PercentPrinter.PrintString("Anti item "); - else - m_PercentPrinter.PrintString("Compressing "); - if (name[0] == 0) - name = kEmptyFileAlias; - m_PercentPrinter.PrintString(name); - if (EnablePercents) - m_PercentPrinter.RePrintRatio(); - return S_OK; -} - -HRESULT CUpdateCallbackConsole::OpenFileError(const wchar_t *name, DWORD systemError) -{ - MT_LOCK - FailedCodes.Add(systemError); - FailedFiles.Add(name); - // if (systemError == ERROR_SHARING_VIOLATION) - { - m_PercentPrinter.ClosePrint(); - m_PercentPrinter.PrintNewLine(); - m_PercentPrinter.PrintString("WARNING: "); - m_PercentPrinter.PrintString(NError::MyFormatMessageW(systemError)); - return S_FALSE; - } - // return systemError; -} - -HRESULT CUpdateCallbackConsole::SetOperationResult(Int32 ) -{ - m_NeedBeClosed = true; - m_NeedNewLine = true; - return S_OK; -} - -HRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) -{ - if (!PasswordIsDefined) - { - if (AskPassword) - { - Password = GetPassword(OutStream); - PasswordIsDefined = true; - } - } - *passwordIsDefined = BoolToInt(PasswordIsDefined); - CMyComBSTR tempName(Password); - *password = tempName.Detach(); - return S_OK; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h deleted file mode 100644 index d04e1ad4..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +++ /dev/null @@ -1,58 +0,0 @@ -// UpdateCallbackConsole.h - -#ifndef __UPDATECALLBACKCONSOLE_H -#define __UPDATECALLBACKCONSOLE_H - -#include "Common/MyString.h" -#include "Common/StdOutStream.h" -#include "PercentPrinter.h" -#include "../Common/Update.h" - -class CUpdateCallbackConsole: public IUpdateCallbackUI2 -{ - CPercentPrinter m_PercentPrinter; - bool m_NeedBeClosed; - bool m_NeedNewLine; - - bool m_WarningsMode; - - CStdOutStream *OutStream; -public: - bool EnablePercents; - bool StdOutMode; - - bool PasswordIsDefined; - UString Password; - bool AskPassword; - - - CUpdateCallbackConsole(): - m_PercentPrinter(1 << 16), - PasswordIsDefined(false), - AskPassword(false), - StdOutMode(false), - EnablePercents(true), - m_WarningsMode(false) - {} - - ~CUpdateCallbackConsole() { Finilize(); } - void Init(CStdOutStream *outStream) - { - m_NeedBeClosed = false; - m_NeedNewLine = false; - FailedFiles.Clear(); - FailedCodes.Clear(); - OutStream = outStream; - m_PercentPrinter.OutStream = outStream; - } - - INTERFACE_IUpdateCallbackUI2(;) - - UStringVector FailedFiles; - CRecordVector FailedCodes; - - UStringVector CantFindFiles; - CRecordVector CantFindCodes; -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp deleted file mode 100644 index 164af99c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// UserInputUtils.cpp - -#include "StdAfx.h" - -#include "Common/StdInStream.h" -#include "Common/StringConvert.h" - -#include "UserInputUtils.h" - -static const char kYes = 'Y'; -static const char kNo = 'N'; -static const char kYesAll = 'A'; -static const char kNoAll = 'S'; -static const char kAutoRename = 'U'; -static const char kQuit = 'Q'; - -static const char *kFirstQuestionMessage = "?\n"; -static const char *kHelpQuestionMessage = - "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename / (Q)uit? "; - -// return true if pressed Quite; -// in: anAll -// out: anAll, anYes; - -NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream) -{ - (*outStream) << kFirstQuestionMessage; - for(;;) - { - (*outStream) << kHelpQuestionMessage; - AString scannedString = g_StdIn.ScanStringUntilNewLine(); - scannedString.Trim(); - if(!scannedString.IsEmpty()) - switch(::MyCharUpper(scannedString[0])) - { - case kYes: - return NUserAnswerMode::kYes; - case kNo: - return NUserAnswerMode::kNo; - case kYesAll: - return NUserAnswerMode::kYesAll; - case kNoAll: - return NUserAnswerMode::kNoAll; - case kAutoRename: - return NUserAnswerMode::kAutoRename; - case kQuit: - return NUserAnswerMode::kQuit; - } - } -} - -UString GetPassword(CStdOutStream *outStream) -{ - (*outStream) << "\nEnter password:"; - outStream->Flush(); - AString oemPassword = g_StdIn.ScanStringUntilNewLine(); - return MultiByteToUnicodeString(oemPassword, CP_OEMCP); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.h deleted file mode 100644 index 408e93e6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/UserInputUtils.h +++ /dev/null @@ -1,24 +0,0 @@ -// UserInputUtils.h - -#ifndef __USERINPUTUTILS_H -#define __USERINPUTUTILS_H - -#include "Common/StdOutStream.h" - -namespace NUserAnswerMode { - -enum EEnum -{ - kYes, - kNo, - kYesAll, - kNoAll, - kAutoRename, - kQuit -}; -} - -NUserAnswerMode::EEnum ScanUserYesNoAllQuit(CStdOutStream *outStream); -UString GetPassword(CStdOutStream *outStream); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/afxres.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/afxres.h deleted file mode 100644 index c2fadd4a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/7zip/UI/Console/afxres.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Build.mak b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Build.mak deleted file mode 100644 index d2595560..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Build.mak +++ /dev/null @@ -1,68 +0,0 @@ -!IFDEF CPU -LIBS = $(LIBS) bufferoverflowU.lib -CFLAGS = $(CFLAGS) -GS- -Zc:forScope -!ENDIF - -!IFNDEF O -!IFDEF CPU -O=$(CPU) -!ELSE -O=O -!ENDIF -!ENDIF - -!IF "$(CPU)" != "IA64" -!IF "$(CPU)" != "AMD64" -MY_ML = ml -!ELSE -MY_ML = ml64 -!ENDIF -!ENDIF - -COMPL_ASM = $(MY_ML) -c -Fo$O/ $** - -CFLAGS = $(CFLAGS) -nologo -c -Fo$O/ -EHsc -Gz -WX -Gy - -!IFDEF MY_STATIC_LINK -!IFNDEF MY_SINGLE_THREAD -CFLAGS = $(CFLAGS) -MT -!ENDIF -!ELSE -CFLAGS = $(CFLAGS) -MD -!ENDIF - -!IFDEF NEW_COMPILER -CFLAGS_O1 = $(CFLAGS) -O1 -W4 -Wp64 -CFLAGS_O2 = $(CFLAGS) -O2 -W4 -Wp64 -!ELSE -CFLAGS_O1 = $(CFLAGS) -O1 -W3 -CFLAGS_O2 = $(CFLAGS) -O2 -W3 -!ENDIF - -LFLAGS = $(LFLAGS) -nologo -OPT:NOWIN98 -OPT:REF - -!IFDEF DEF_FILE -LFLAGS = $(LFLAGS) -DLL -DEF:$(DEF_FILE) -!ENDIF - -PROGPATH = $O\$(PROG) - -COMPL_O1 = $(CPP) $(CFLAGS_O1) $** -COMPL_O2 = $(CPP) $(CFLAGS_O2) $** -COMPL_PCH = $(CPP) $(CFLAGS_O1) -Yc"StdAfx.h" -Fp$O/a.pch $** -COMPL = $(CPP) $(CFLAGS_O1) -Yu"StdAfx.h" -Fp$O/a.pch $** - -all: $(PROGPATH) - -clean: - -del /Q $(PROGPATH) $O\*.exe $O\*.dll $O\*.obj $O\*.lib $O\*.exp $O\*.res $O\*.pch - -$O: - if not exist "$O" mkdir "$O" - -$(PROGPATH): $O $(OBJS) $(DEF_FILE) - link $(LFLAGS) -out:$(PROGPATH) $(OBJS) $(LIBS) -$O\resource.res: $(*B).rc - rc -fo$@ $** -$O\StdAfx.obj: $(*B).cpp - $(COMPL_PCH) diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/AutoPtr.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/AutoPtr.h deleted file mode 100644 index c5808cb0..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/AutoPtr.h +++ /dev/null @@ -1,35 +0,0 @@ -// Common/AutoPtr.h - -#ifndef __COMMON_AUTOPTR_H -#define __COMMON_AUTOPTR_H - -template class CMyAutoPtr -{ - T *_p; -public: - CMyAutoPtr(T *p = 0) : _p(p) {} - CMyAutoPtr(CMyAutoPtr& p): _p(p.release()) {} - CMyAutoPtr& operator=(CMyAutoPtr& p) - { - reset(p.release()); - return (*this); - } - ~CMyAutoPtr() { delete _p; } - T& operator*() const { return *_p; } - // T* operator->() const { return (&**this); } - T* get() const { return _p; } - T* release() - { - T *tmp = _p; - _p = 0; - return tmp; - } - void reset(T* p = 0) - { - if (p != _p) - delete _p; - _p = p; - } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Buffer.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Buffer.h deleted file mode 100644 index 78a68a6d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Buffer.h +++ /dev/null @@ -1,77 +0,0 @@ -// Common/Buffer.h - -#ifndef __COMMON_BUFFER_H -#define __COMMON_BUFFER_H - -#include "Defs.h" - -template class CBuffer -{ -protected: - size_t _capacity; - T *_items; -public: - void Free() - { - delete []_items; - _items = 0; - _capacity = 0; - } - CBuffer(): _capacity(0), _items(0) {}; - CBuffer(const CBuffer &buffer): _capacity(0), _items(0) { *this = buffer; } - CBuffer(size_t size): _items(0), _capacity(0) { SetCapacity(size); } - virtual ~CBuffer() { delete []_items; } - operator T *() { return _items; }; - operator const T *() const { return _items; }; - size_t GetCapacity() const { return _capacity; } - void SetCapacity(size_t newCapacity) - { - if (newCapacity == _capacity) - return; - T *newBuffer; - if (newCapacity > 0) - { - newBuffer = new T[newCapacity]; - if(_capacity > 0) - memmove(newBuffer, _items, MyMin(_capacity, newCapacity) * sizeof(T)); - } - else - newBuffer = 0; - delete []_items; - _items = newBuffer; - _capacity = newCapacity; - } - CBuffer& operator=(const CBuffer &buffer) - { - Free(); - if(buffer._capacity > 0) - { - SetCapacity(buffer._capacity); - memmove(_items, buffer._items, buffer._capacity * sizeof(T)); - } - return *this; - } -}; - -template -bool operator==(const CBuffer& b1, const CBuffer& b2) -{ - if (b1.GetCapacity() != b2.GetCapacity()) - return false; - for (size_t i = 0; i < b1.GetCapacity(); i++) - if (b1[i] != b2[i]) - return false; - return true; -} - -template -bool operator!=(const CBuffer& b1, const CBuffer& b2) -{ - return !(b1 == b2); -} - -typedef CBuffer CCharBuffer; -typedef CBuffer CWCharBuffer; -typedef CBuffer CByteBuffer; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CRC.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CRC.cpp deleted file mode 100644 index b768128c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CRC.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Common/CRC.cpp - -#include "StdAfx.h" - -extern "C" -{ -#include "../../C/7zCrc.h" -} - -class CCRCTableInit -{ -public: - CCRCTableInit() { CrcGenerateTable(); } -} g_CRCTableInit; diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.cpp deleted file mode 100644 index 3c7f82d9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// Common/C_FileIO.h - -#include "C_FileIO.h" - -#include -#include - -namespace NC { -namespace NFile { -namespace NIO { - -bool CFileBase::OpenBinary(const char *name, int flags) -{ - #ifdef O_BINARY - flags |= O_BINARY; - #endif - Close(); - _handle = ::open(name, flags, 0666); - return _handle != -1; -} - -bool CFileBase::Close() -{ - if(_handle == -1) - return true; - if (close(_handle) != 0) - return false; - _handle = -1; - return true; -} - -bool CFileBase::GetLength(UInt64 &length) const -{ - off_t curPos = Seek(0, SEEK_CUR); - off_t lengthTemp = Seek(0, SEEK_END); - Seek(curPos, SEEK_SET); - length = (UInt64)lengthTemp; - return true; -} - -off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const -{ - return ::lseek(_handle, distanceToMove, moveMethod); -} - -///////////////////////// -// CInFile - -bool CInFile::Open(const char *name) -{ - return CFileBase::OpenBinary(name, O_RDONLY); -} - -bool CInFile::OpenShared(const char *name, bool) -{ - return Open(name); -} - -ssize_t CInFile::Read(void *data, size_t size) -{ - return read(_handle, data, size); -} - -///////////////////////// -// COutFile - -bool COutFile::Create(const char *name, bool createAlways) -{ - if (createAlways) - { - Close(); - _handle = ::creat(name, 0666); - return _handle != -1; - } - return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY); -} - -bool COutFile::Open(const char *name, DWORD creationDisposition) -{ - return Create(name, false); -} - -ssize_t COutFile::Write(const void *data, size_t size) -{ - return write(_handle, data, size); -} - -}}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.h deleted file mode 100644 index 27aa5686..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/C_FileIO.h +++ /dev/null @@ -1,47 +0,0 @@ -// Common/C_FileIO.h - -#ifndef __COMMON_C_FILEIO_H -#define __COMMON_C_FILEIO_H - -#include -#include - -#include "Types.h" -#include "MyWindows.h" - -namespace NC { -namespace NFile { -namespace NIO { - -class CFileBase -{ -protected: - int _handle; - bool OpenBinary(const char *name, int flags); -public: - CFileBase(): _handle(-1) {}; - ~CFileBase() { Close(); } - bool Close(); - bool GetLength(UInt64 &length) const; - off_t Seek(off_t distanceToMove, int moveMethod) const; -}; - -class CInFile: public CFileBase -{ -public: - bool Open(const char *name); - bool OpenShared(const char *name, bool shareForWrite); - ssize_t Read(void *data, size_t size); -}; - -class COutFile: public CFileBase -{ -public: - bool Create(const char *name, bool createAlways); - bool Open(const char *name, DWORD creationDisposition); - ssize_t Write(const void *data, size_t size); -}; - -}}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ComTry.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ComTry.h deleted file mode 100644 index 5153362f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ComTry.h +++ /dev/null @@ -1,17 +0,0 @@ -// ComTry.h - -#ifndef __COM_TRY_H -#define __COM_TRY_H - -#include "MyWindows.h" -// #include "Exception.h" -// #include "NewHandler.h" - -#define COM_TRY_BEGIN try { -#define COM_TRY_END } catch(...) { return E_OUTOFMEMORY; } - - // catch(const CNewException &) { return E_OUTOFMEMORY; }\ - // catch(const CSystemException &e) { return e.ErrorCode; }\ - // catch(...) { return E_FAIL; } - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.cpp deleted file mode 100644 index 67f72675..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.cpp +++ /dev/null @@ -1,232 +0,0 @@ -// CommandLineParser.cpp - -#include "StdAfx.h" - -#include "CommandLineParser.h" - -namespace NCommandLineParser { - -void SplitCommandLine(const UString &src, UString &dest1, UString &dest2) -{ - dest1.Empty(); - dest2.Empty(); - bool quoteMode = false; - int i; - for (i = 0; i < src.Length(); i++) - { - wchar_t c = src[i]; - if (c == L'\"') - quoteMode = !quoteMode; - else if (c == L' ' && !quoteMode) - { - i++; - break; - } - else - dest1 += c; - } - dest2 = src.Mid(i); -} - -void SplitCommandLine(const UString &s, UStringVector &parts) -{ - UString sTemp = s; - sTemp.Trim(); - parts.Clear(); - for (;;) - { - UString s1, s2; - SplitCommandLine(sTemp, s1, s2); - // s1.Trim(); - // s2.Trim(); - if (!s1.IsEmpty()) - parts.Add(s1); - if (s2.IsEmpty()) - break; - sTemp = s2; - } -} - - -static const wchar_t kSwitchID1 = '-'; -// static const wchar_t kSwitchID2 = '/'; - -static const wchar_t kSwitchMinus = '-'; -static const wchar_t *kStopSwitchParsing = L"--"; - -static bool IsItSwitchChar(wchar_t c) -{ - return (c == kSwitchID1 /*|| c == kSwitchID2 */); -} - -CParser::CParser(int numSwitches): - _numSwitches(numSwitches) -{ - _switches = new CSwitchResult[_numSwitches]; -} - -CParser::~CParser() -{ - delete []_switches; -} - -void CParser::ParseStrings(const CSwitchForm *switchForms, - const UStringVector &commandStrings) -{ - int numCommandStrings = commandStrings.Size(); - bool stopSwitch = false; - for (int i = 0; i < numCommandStrings; i++) - { - const UString &s = commandStrings[i]; - if (stopSwitch) - NonSwitchStrings.Add(s); - else - if (s == kStopSwitchParsing) - stopSwitch = true; - else - if (!ParseString(s, switchForms)) - NonSwitchStrings.Add(s); - } -} - -// if string contains switch then function updates switch structures -// out: (string is a switch) -bool CParser::ParseString(const UString &s, const CSwitchForm *switchForms) -{ - int len = s.Length(); - if (len == 0) - return false; - int pos = 0; - if (!IsItSwitchChar(s[pos])) - return false; - while(pos < len) - { - if (IsItSwitchChar(s[pos])) - pos++; - const int kNoLen = -1; - int matchedSwitchIndex = 0; // GCC Warning - int maxLen = kNoLen; - for(int switchIndex = 0; switchIndex < _numSwitches; switchIndex++) - { - int switchLen = MyStringLen(switchForms[switchIndex].IDString); - if (switchLen <= maxLen || pos + switchLen > len) - continue; - - UString temp = s + pos; - temp = temp.Left(switchLen); - if(temp.CompareNoCase(switchForms[switchIndex].IDString) == 0) - // if(_strnicmp(switchForms[switchIndex].IDString, LPCSTR(s) + pos, switchLen) == 0) - { - matchedSwitchIndex = switchIndex; - maxLen = switchLen; - } - } - if (maxLen == kNoLen) - throw "maxLen == kNoLen"; - CSwitchResult &matchedSwitch = _switches[matchedSwitchIndex]; - const CSwitchForm &switchForm = switchForms[matchedSwitchIndex]; - if ((!switchForm.Multi) && matchedSwitch.ThereIs) - throw "switch must be single"; - matchedSwitch.ThereIs = true; - pos += maxLen; - int tailSize = len - pos; - NSwitchType::EEnum type = switchForm.Type; - switch(type) - { - case NSwitchType::kPostMinus: - { - if (tailSize == 0) - matchedSwitch.WithMinus = false; - else - { - matchedSwitch.WithMinus = (s[pos] == kSwitchMinus); - if (matchedSwitch.WithMinus) - pos++; - } - break; - } - case NSwitchType::kPostChar: - { - if (tailSize < switchForm.MinLen) - throw "switch is not full"; - UString set = switchForm.PostCharSet; - const int kEmptyCharValue = -1; - if (tailSize == 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - int index = set.Find(s[pos]); - if (index < 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - matchedSwitch.PostCharIndex = index; - pos++; - } - } - break; - } - case NSwitchType::kLimitedPostString: - case NSwitchType::kUnLimitedPostString: - { - int minLen = switchForm.MinLen; - if (tailSize < minLen) - throw "switch is not full"; - if (type == NSwitchType::kUnLimitedPostString) - { - matchedSwitch.PostStrings.Add(s.Mid(pos)); - return true; - } - int maxLen = switchForm.MaxLen; - UString stringSwitch = s.Mid(pos, minLen); - pos += minLen; - for(int i = minLen; i < maxLen && pos < len; i++, pos++) - { - wchar_t c = s[pos]; - if (IsItSwitchChar(c)) - break; - stringSwitch += c; - } - matchedSwitch.PostStrings.Add(stringSwitch); - break; - } - case NSwitchType::kSimple: - break; - } - } - return true; -} - -const CSwitchResult& CParser::operator[](size_t index) const -{ - return _switches[index]; -} - -///////////////////////////////// -// Command parsing procedures - -int ParseCommand(int numCommandForms, const CCommandForm *commandForms, - const UString &commandString, UString &postString) -{ - for(int i = 0; i < numCommandForms; i++) - { - const UString id = commandForms[i].IDString; - if (commandForms[i].PostStringMode) - { - if(commandString.Find(id) == 0) - { - postString = commandString.Mid(id.Length()); - return i; - } - } - else - if (commandString == id) - { - postString.Empty(); - return i; - } - } - return -1; -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.h deleted file mode 100644 index a97f58a5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/CommandLineParser.h +++ /dev/null @@ -1,72 +0,0 @@ -// Common/CommandLineParser.h - -#ifndef __COMMON_COMMANDLINEPARSER_H -#define __COMMON_COMMANDLINEPARSER_H - -#include "MyString.h" - -namespace NCommandLineParser { - -void SplitCommandLine(const UString &src, UString &dest1, UString &dest2); -void SplitCommandLine(const UString &s, UStringVector &parts); - -namespace NSwitchType { - enum EEnum - { - kSimple, - kPostMinus, - kLimitedPostString, - kUnLimitedPostString, - kPostChar - }; -} - -struct CSwitchForm -{ - const wchar_t *IDString; - NSwitchType::EEnum Type; - bool Multi; - int MinLen; - int MaxLen; - const wchar_t *PostCharSet; -}; - -struct CSwitchResult -{ - bool ThereIs; - bool WithMinus; - UStringVector PostStrings; - int PostCharIndex; - CSwitchResult(): ThereIs(false) {}; -}; - -class CParser -{ - int _numSwitches; - CSwitchResult *_switches; - bool ParseString(const UString &s, const CSwitchForm *switchForms); -public: - UStringVector NonSwitchStrings; - CParser(int numSwitches); - ~CParser(); - void ParseStrings(const CSwitchForm *switchForms, - const UStringVector &commandStrings); - const CSwitchResult& operator[](size_t index) const; -}; - -///////////////////////////////// -// Command parsing procedures - -struct CCommandForm -{ - wchar_t *IDString; - bool PostStringMode; -}; - -// Returns: Index of form and postString; -1, if there is no match -int ParseCommand(int numCommandForms, const CCommandForm *commandForms, - const UString &commandString, UString &postString); - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Defs.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Defs.h deleted file mode 100644 index dad3ae8f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Defs.h +++ /dev/null @@ -1,20 +0,0 @@ -// Common/Defs.h - -#ifndef __COMMON_DEFS_H -#define __COMMON_DEFS_H - -template inline T MyMin(T a, T b) - { return a < b ? a : b; } -template inline T MyMax(T a, T b) - { return a > b ? a : b; } - -template inline int MyCompare(T a, T b) - { return a < b ? -1 : (a == b ? 0 : 1); } - -inline int BoolToInt(bool value) - { return (value ? 1: 0); } - -inline bool IntToBool(int value) - { return (value != 0); } - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/DynamicBuffer.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/DynamicBuffer.h deleted file mode 100644 index 1709657d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/DynamicBuffer.h +++ /dev/null @@ -1,47 +0,0 @@ -// Common/DynamicBuffer.h - -#ifndef __COMMON_DYNAMICBUFFER_H -#define __COMMON_DYNAMICBUFFER_H - -#include "Buffer.h" - -template class CDynamicBuffer: public CBuffer -{ - void GrowLength(size_t size) - { - size_t delta; - if (this->_capacity > 64) - delta = this->_capacity / 4; - else if (this->_capacity > 8) - delta = 16; - else - delta = 4; - delta = MyMax(delta, size); - SetCapacity(this->_capacity + delta); - } -public: - CDynamicBuffer(): CBuffer() {}; - CDynamicBuffer(const CDynamicBuffer &buffer): CBuffer(buffer) {}; - CDynamicBuffer(size_t size): CBuffer(size) {}; - CDynamicBuffer& operator=(const CDynamicBuffer &buffer) - { - this->Free(); - if(buffer._capacity > 0) - { - SetCapacity(buffer._capacity); - memmove(this->_items, buffer._items, buffer._capacity * sizeof(T)); - } - return *this; - } - void EnsureCapacity(size_t capacity) - { - if (this->_capacity < capacity) - GrowLength(capacity - this->_capacity); - } -}; - -typedef CDynamicBuffer CCharDynamicBuffer; -typedef CDynamicBuffer CWCharDynamicBuffer; -typedef CDynamicBuffer CByteDynamicBuffer; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.cpp deleted file mode 100644 index 340d8655..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// Common/IntToString.cpp - -#include "StdAfx.h" - -#include "IntToString.h" - -void ConvertUInt64ToString(UInt64 value, char *s, UInt32 base) -{ - if (base < 2 || base > 36) - { - *s = '\0'; - return; - } - char temp[72]; - int pos = 0; - do - { - int delta = (int)(value % base); - temp[pos++] = (char)((delta < 10) ? ('0' + delta) : ('a' + (delta - 10))); - value /= base; - } - while (value != 0); - do - *s++ = temp[--pos]; - while(pos > 0); - *s = '\0'; -} - -void ConvertUInt64ToString(UInt64 value, wchar_t *s) -{ - wchar_t temp[32]; - int pos = 0; - do - { - temp[pos++] = (wchar_t)(L'0' + (int)(value % 10)); - value /= 10; - } - while (value != 0); - do - *s++ = temp[--pos]; - while(pos > 0); - *s = L'\0'; -} - -void ConvertInt64ToString(Int64 value, char *s) -{ - if (value < 0) - { - *s++ = '-'; - value = -value; - } - ConvertUInt64ToString(value, s); -} - -void ConvertInt64ToString(Int64 value, wchar_t *s) -{ - if (value < 0) - { - *s++ = L'-'; - value = -value; - } - ConvertUInt64ToString(value, s); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.h deleted file mode 100644 index cf86090f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/IntToString.h +++ /dev/null @@ -1,15 +0,0 @@ -// Common/IntToString.h - -#ifndef __COMMON_INTTOSTRING_H -#define __COMMON_INTTOSTRING_H - -#include -#include "Types.h" - -void ConvertUInt64ToString(UInt64 value, char *s, UInt32 base = 10); -void ConvertUInt64ToString(UInt64 value, wchar_t *s); - -void ConvertInt64ToString(Int64 value, char *s); -void ConvertInt64ToString(Int64 value, wchar_t *s); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.cpp deleted file mode 100644 index 4f8a9e59..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// Common/ListFileUtils.cpp - -#include "StdAfx.h" - -#include "../Windows/FileIO.h" - -#include "ListFileUtils.h" -#include "StringConvert.h" -#include "UTFConvert.h" - -static const char kQuoteChar = '\"'; -static void RemoveQuote(UString &s) -{ - if (s.Length() >= 2) - if (s[0] == kQuoteChar && s[s.Length() - 1] == kQuoteChar) - s = s.Mid(1, s.Length() - 2); -} - -bool ReadNamesFromListFile(LPCWSTR fileName, UStringVector &resultStrings, UINT codePage) -{ - NWindows::NFile::NIO::CInFile file; - if (!file.Open(fileName)) - return false; - UInt64 length; - if (!file.GetLength(length)) - return false; - if (length > ((UInt32)1 << 31)) - return false; - AString s; - char *p = s.GetBuffer((int)length + 1); - UInt32 processed; - if (!file.Read(p, (UInt32)length, processed)) - return false; - p[(UInt32)length] = 0; - s.ReleaseBuffer(); - file.Close(); - - UString u; - #ifdef CP_UTF8 - if (codePage == CP_UTF8) - { - if (!ConvertUTF8ToUnicode(s, u)) - return false; - } - else - #endif - u = MultiByteToUnicodeString(s, codePage); - if (!u.IsEmpty()) - { - if (u[0] == 0xFEFF) - u.Delete(0); - } - - UString t; - for(int i = 0; i < u.Length(); i++) - { - wchar_t c = u[i]; - if (c == L'\n' || c == 0xD) - { - t.Trim(); - RemoveQuote(t); - if (!t.IsEmpty()) - resultStrings.Add(t); - t.Empty(); - } - else - t += c; - } - t.Trim(); - RemoveQuote(t); - if (!t.IsEmpty()) - resultStrings.Add(t); - return true; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.h deleted file mode 100644 index c58a8bd4..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/ListFileUtils.h +++ /dev/null @@ -1,11 +0,0 @@ -// Common/ListFileUtils.h - -#ifndef __COMMON_LISTFILEUTILS_H -#define __COMMON_LISTFILEUTILS_H - -#include "MyString.h" -#include "Types.h" - -bool ReadNamesFromListFile(LPCWSTR fileName, UStringVector &strings, UINT codePage = CP_OEMCP); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyCom.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyCom.h deleted file mode 100644 index dcc94f14..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyCom.h +++ /dev/null @@ -1,218 +0,0 @@ -// MyCom.h - -#ifndef __MYCOM_H -#define __MYCOM_H - -#include "MyWindows.h" - -#ifndef RINOK -#define RINOK(x) { HRESULT __result_ = (x); if(__result_ != S_OK) return __result_; } -#endif - -template -class CMyComPtr -{ - T* _p; -public: - // typedef T _PtrClass; - CMyComPtr() { _p = NULL;} - CMyComPtr(T* p) {if ((_p = p) != NULL) p->AddRef(); } - CMyComPtr(const CMyComPtr& lp) - { - if ((_p = lp._p) != NULL) - _p->AddRef(); - } - ~CMyComPtr() { if (_p) _p->Release(); } - void Release() { if (_p) { _p->Release(); _p = NULL; } } - operator T*() const { return (T*)_p; } - // T& operator*() const { return *_p; } - T** operator&() { return &_p; } - T* operator->() const { return _p; } - T* operator=(T* p) - { - if (p != 0) - p->AddRef(); - if (_p) - _p->Release(); - _p = p; - return p; - } - T* operator=(const CMyComPtr& lp) { return (*this = lp._p); } - bool operator!() const { return (_p == NULL); } - // bool operator==(T* pT) const { return _p == pT; } - // Compare two objects for equivalence - void Attach(T* p2) - { - Release(); - _p = p2; - } - T* Detach() - { - T* pt = _p; - _p = NULL; - return pt; - } - #ifdef _WIN32 - HRESULT CoCreateInstance(REFCLSID rclsid, REFIID iid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) - { - return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, (void**)&_p); - } - #endif - /* - HRESULT CoCreateInstance(LPCOLESTR szProgID, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) - { - CLSID clsid; - HRESULT hr = CLSIDFromProgID(szProgID, &clsid); - ATLASSERT(_p == NULL); - if (SUCCEEDED(hr)) - hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&_p); - return hr; - } - */ - template - HRESULT QueryInterface(REFGUID iid, Q** pp) const - { - return _p->QueryInterface(iid, (void**)pp); - } -}; - -////////////////////////////////////////////////////////// - -class CMyComBSTR -{ -public: - BSTR m_str; - CMyComBSTR() { m_str = NULL; } - CMyComBSTR(LPCOLESTR pSrc) { m_str = ::SysAllocString(pSrc); } - // CMyComBSTR(int nSize) { m_str = ::SysAllocStringLen(NULL, nSize); } - // CMyComBSTR(int nSize, LPCOLESTR sz) { m_str = ::SysAllocStringLen(sz, nSize); } - CMyComBSTR(const CMyComBSTR& src) { m_str = src.MyCopy(); } - /* - CMyComBSTR(REFGUID src) - { - LPOLESTR szGuid; - StringFromCLSID(src, &szGuid); - m_str = ::SysAllocString(szGuid); - CoTaskMemFree(szGuid); - } - */ - ~CMyComBSTR() { ::SysFreeString(m_str); } - CMyComBSTR& operator=(const CMyComBSTR& src) - { - if (m_str != src.m_str) - { - if (m_str) - ::SysFreeString(m_str); - m_str = src.MyCopy(); - } - return *this; - } - CMyComBSTR& operator=(LPCOLESTR pSrc) - { - ::SysFreeString(m_str); - m_str = ::SysAllocString(pSrc); - return *this; - } - unsigned int Length() const { return ::SysStringLen(m_str); } - operator BSTR() const { return m_str; } - BSTR* operator&() { return &m_str; } - BSTR MyCopy() const - { - int byteLen = ::SysStringByteLen(m_str); - BSTR res = ::SysAllocStringByteLen(NULL, byteLen); - memmove(res, m_str, byteLen); - return res; - } - void Attach(BSTR src) { m_str = src; } - BSTR Detach() - { - BSTR s = m_str; - m_str = NULL; - return s; - } - void Empty() - { - ::SysFreeString(m_str); - m_str = NULL; - } - bool operator!() const { return (m_str == NULL); } -}; - - -////////////////////////////////////////////////////////// - -class CMyUnknownImp -{ -public: - ULONG __m_RefCount; - CMyUnknownImp(): __m_RefCount(0) {} -}; - -#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \ - (REFGUID iid, void **outObject) { - -#define MY_QUERYINTERFACE_ENTRY(i) if (iid == IID_ ## i) \ - { *outObject = (void *)(i *)this; AddRef(); return S_OK; } - -#define MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) if (iid == IID_IUnknown) \ - { *outObject = (void *)(IUnknown *)(i *)this; AddRef(); return S_OK; } - -#define MY_QUERYINTERFACE_BEGIN2(i) MY_QUERYINTERFACE_BEGIN \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \ - MY_QUERYINTERFACE_ENTRY(i) - -#define MY_QUERYINTERFACE_END return E_NOINTERFACE; } - -#define MY_ADDREF_RELEASE \ -STDMETHOD_(ULONG, AddRef)() { return ++__m_RefCount; } \ -STDMETHOD_(ULONG, Release)() { if (--__m_RefCount != 0) \ - return __m_RefCount; delete this; return 0; } - -#define MY_UNKNOWN_IMP_SPEC(i) \ - MY_QUERYINTERFACE_BEGIN \ - i \ - MY_QUERYINTERFACE_END \ - MY_ADDREF_RELEASE - - -#define MY_UNKNOWN_IMP MY_QUERYINTERFACE_BEGIN \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(IUnknown) \ - MY_QUERYINTERFACE_END \ - MY_ADDREF_RELEASE - -#define MY_UNKNOWN_IMP1(i) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i) \ - MY_QUERYINTERFACE_ENTRY(i) \ - ) - -#define MY_UNKNOWN_IMP2(i1, i2) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - ) - -#define MY_UNKNOWN_IMP3(i1, i2, i3) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - ) - -#define MY_UNKNOWN_IMP4(i1, i2, i3, i4) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - MY_QUERYINTERFACE_ENTRY(i4) \ - ) - -#define MY_UNKNOWN_IMP5(i1, i2, i3, i4, i5) MY_UNKNOWN_IMP_SPEC( \ - MY_QUERYINTERFACE_ENTRY_UNKNOWN(i1) \ - MY_QUERYINTERFACE_ENTRY(i1) \ - MY_QUERYINTERFACE_ENTRY(i2) \ - MY_QUERYINTERFACE_ENTRY(i3) \ - MY_QUERYINTERFACE_ENTRY(i4) \ - MY_QUERYINTERFACE_ENTRY(i5) \ - ) - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyException.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyException.h deleted file mode 100644 index f0ad1115..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyException.h +++ /dev/null @@ -1,14 +0,0 @@ -// Common/Exception.h - -#ifndef __COMMON_EXCEPTION_H -#define __COMMON_EXCEPTION_H - -#include "MyWindows.h" - -struct CSystemException -{ - HRESULT ErrorCode; - CSystemException(HRESULT errorCode): ErrorCode(errorCode) {} -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyGuidDef.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyGuidDef.h deleted file mode 100644 index 19562696..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyGuidDef.h +++ /dev/null @@ -1,54 +0,0 @@ -// Common/MyGuidDef.h - -#ifndef GUID_DEFINED -#define GUID_DEFINED - -#include "Types.h" - -typedef struct { - UInt32 Data1; - UInt16 Data2; - UInt16 Data3; - unsigned char Data4[8]; -} GUID; - -#ifdef __cplusplus -#define REFGUID const GUID & -#else -#define REFGUID const GUID * -#endif - -#define REFCLSID REFGUID -#define REFIID REFGUID - -#ifdef __cplusplus -inline int operator==(REFGUID g1, REFGUID g2) -{ - for (int i = 0; i < (int)sizeof(g1); i++) - if (((unsigned char *)&g1)[i] != ((unsigned char *)&g2)[i]) - return 0; - return 1; -} -inline int operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); } -#endif - -#ifdef __cplusplus - #define MY_EXTERN_C extern "C" -#else - #define MY_EXTERN_C extern -#endif - -#endif // GUID_DEFINED - - -#ifdef DEFINE_GUID -#undef DEFINE_GUID -#endif - -#ifdef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - MY_EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } -#else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - MY_EXTERN_C const GUID name -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyInitGuid.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyInitGuid.h deleted file mode 100644 index 4fc15565..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyInitGuid.h +++ /dev/null @@ -1,15 +0,0 @@ -// Common/MyInitGuid.h - -#ifndef __COMMON_MYINITGUID_H -#define __COMMON_MYINITGUID_H - -#ifdef _WIN32 -#include -#else -#define INITGUID -#include "MyGuidDef.h" -DEFINE_GUID(IID_IUnknown, -0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.cpp deleted file mode 100644 index affdcb0b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// Common/MyString.cpp - -#include "StdAfx.h" - -#ifdef _WIN32 -#include "StringConvert.h" -#else -#include -#endif - -#include "MyString.h" - - -#ifdef _WIN32 - -#ifndef _UNICODE - -wchar_t MyCharUpper(wchar_t c) -{ - if (c == 0) - return 0; - wchar_t *res = CharUpperW((LPWSTR)(UINT_PTR)(unsigned int)c); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return (wchar_t)(unsigned int)(UINT_PTR)res; - const int kBufferSize = 4; - char s[kBufferSize + 1]; - int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0); - if (numChars == 0 || numChars > kBufferSize) - return c; - s[numChars] = 0; - ::CharUpperA(s); - ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1); - return c; -} - -wchar_t MyCharLower(wchar_t c) -{ - if (c == 0) - return 0; - wchar_t *res = CharLowerW((LPWSTR)(UINT_PTR)(unsigned int)c); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return (wchar_t)(unsigned int)(UINT_PTR)res; - const int kBufferSize = 4; - char s[kBufferSize + 1]; - int numChars = ::WideCharToMultiByte(CP_ACP, 0, &c, 1, s, kBufferSize, 0, 0); - if (numChars == 0 || numChars > kBufferSize) - return c; - s[numChars] = 0; - ::CharLowerA(s); - ::MultiByteToWideChar(CP_ACP, 0, s, numChars, &c, 1); - return c; -} - -wchar_t * MyStringUpper(wchar_t *s) -{ - if (s == 0) - return 0; - wchar_t *res = CharUpperW(s); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return res; - AString a = UnicodeStringToMultiByte(s); - a.MakeUpper(); - return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); -} - -wchar_t * MyStringLower(wchar_t *s) -{ - if (s == 0) - return 0; - wchar_t *res = CharLowerW(s); - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return res; - AString a = UnicodeStringToMultiByte(s); - a.MakeLower(); - return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); -} - -#endif - -/* -inline int ConvertCompareResult(int r) { return r - 2; } - -int MyStringCollate(const wchar_t *s1, const wchar_t *s2) -{ - int res = CompareStringW( - LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1); - #ifdef _UNICODE - return ConvertCompareResult(res); - #else - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return ConvertCompareResult(res); - return MyStringCollate(UnicodeStringToMultiByte(s1), - UnicodeStringToMultiByte(s2)); - #endif -} - -#ifndef _WIN32_WCE -int MyStringCollate(const char *s1, const char *s2) -{ - return ConvertCompareResult(CompareStringA( - LOCALE_USER_DEFAULT, SORT_STRINGSORT, s1, -1, s2, -1)); -} - -int MyStringCollateNoCase(const char *s1, const char *s2) -{ - return ConvertCompareResult(CompareStringA( - LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1)); -} -#endif - -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2) -{ - int res = CompareStringW( - LOCALE_USER_DEFAULT, NORM_IGNORECASE | SORT_STRINGSORT, s1, -1, s2, -1); - #ifdef _UNICODE - return ConvertCompareResult(res); - #else - if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return ConvertCompareResult(res); - return MyStringCollateNoCase(UnicodeStringToMultiByte(s1), - UnicodeStringToMultiByte(s2)); - #endif -} -*/ - -#else - -wchar_t MyCharUpper(wchar_t c) -{ - return toupper(c); -} - -/* -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - wchar_t u1 = MyCharUpper(c1); - wchar_t u2 = MyCharUpper(c2); - - if (u1 < u2) return -1; - if (u1 > u2) return 1; - if (u1 == 0) return 0; - } -} -*/ - -#endif - -int MyStringCompare(const char *s1, const char *s2) -{ - for (;;) - { - unsigned char c1 = (unsigned char)*s1++; - unsigned char c2 = (unsigned char)*s2++; - if (c1 < c2) return -1; - if (c1 > c2) return 1; - if (c1 == 0) return 0; - } -} - -int MyStringCompare(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - if (c1 < c2) return -1; - if (c1 > c2) return 1; - if (c1 == 0) return 0; - } -} - -int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2) -{ - for (;;) - { - wchar_t c1 = *s1++; - wchar_t c2 = *s2++; - if (c1 != c2) - { - wchar_t u1 = MyCharUpper(c1); - wchar_t u2 = MyCharUpper(c2); - if (u1 < u2) return -1; - if (u1 > u2) return 1; - } - if (c1 == 0) return 0; - } -} - -#ifdef _WIN32 -int MyStringCompareNoCase(const char *s1, const char *s2) -{ - return MyStringCompareNoCase(MultiByteToUnicodeString(s1), MultiByteToUnicodeString(s2)); -} -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.h deleted file mode 100644 index c46ca545..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyString.h +++ /dev/null @@ -1,636 +0,0 @@ -// Common/String.h - -#ifndef __COMMON_STRING_H -#define __COMMON_STRING_H - -#include -// #include - -#include "MyVector.h" - -#ifdef _WIN32 -#include "MyWindows.h" -#endif - -template -inline int MyStringLen(const T *s) -{ - int i; - for (i = 0; s[i] != '\0'; i++); - return i; -} - -template -inline T * MyStringCopy(T *dest, const T *src) -{ - T *destStart = dest; - while((*dest++ = *src++) != 0); - return destStart; -} - -inline wchar_t* MyStringGetNextCharPointer(wchar_t *p) - { return (p + 1); } -inline const wchar_t* MyStringGetNextCharPointer(const wchar_t *p) - { return (p + 1); } -inline wchar_t* MyStringGetPrevCharPointer(const wchar_t *, wchar_t *p) - { return (p - 1); } -inline const wchar_t* MyStringGetPrevCharPointer(const wchar_t *, const wchar_t *p) - { return (p - 1); } - -#ifdef _WIN32 - -inline char* MyStringGetNextCharPointer(char *p) - { return CharNextA(p); } -inline const char* MyStringGetNextCharPointer(const char *p) - { return CharNextA(p); } - -inline char* MyStringGetPrevCharPointer(char *base, char *p) - { return CharPrevA(base, p); } -inline const char* MyStringGetPrevCharPointer(const char *base, const char *p) - { return CharPrevA(base, p); } - -inline char MyCharUpper(char c) - { return (char)(unsigned int)(UINT_PTR)CharUpperA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); } -#ifdef _UNICODE -inline wchar_t MyCharUpper(wchar_t c) - { return (wchar_t)(unsigned int)(UINT_PTR)CharUpperW((LPWSTR)(UINT_PTR)(unsigned int)c); } -#else -wchar_t MyCharUpper(wchar_t c); -#endif - -inline char MyCharLower(char c) - { return (char)(unsigned int)(UINT_PTR)CharLowerA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); } -#ifdef _UNICODE -inline wchar_t MyCharLower(wchar_t c) - { return (wchar_t)(unsigned int)(UINT_PTR)CharLowerW((LPWSTR)(UINT_PTR)(unsigned int)c); } -#else -wchar_t MyCharLower(wchar_t c); -#endif - -inline char * MyStringUpper(char *s) { return CharUpperA(s); } -#ifdef _UNICODE -inline wchar_t * MyStringUpper(wchar_t *s) { return CharUpperW(s); } -#else -wchar_t * MyStringUpper(wchar_t *s); -#endif - -inline char * MyStringLower(char *s) { return CharLowerA(s); } -#ifdef _UNICODE -inline wchar_t * MyStringLower(wchar_t *s) { return CharLowerW(s); } -#else -wchar_t * MyStringLower(wchar_t *s); -#endif - -#else // Standard-C -wchar_t MyCharUpper(wchar_t c); -#endif - -////////////////////////////////////// -// Compare - -/* -#ifndef _WIN32_WCE -int MyStringCollate(const char *s1, const char *s2); -int MyStringCollateNoCase(const char *s1, const char *s2); -#endif -int MyStringCollate(const wchar_t *s1, const wchar_t *s2); -int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2); -*/ - -int MyStringCompare(const char *s1, const char *s2); -int MyStringCompare(const wchar_t *s1, const wchar_t *s2); - -#ifdef _WIN32 -int MyStringCompareNoCase(const char *s1, const char *s2); -#endif - -int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2); - -template -class CStringBase -{ - void TrimLeftWithCharSet(const CStringBase &charSet) - { - const T *p = _chars; - while (charSet.Find(*p) >= 0 && (*p != 0)) - p = GetNextCharPointer(p); - Delete(0, (int)(p - _chars)); - } - void TrimRightWithCharSet(const CStringBase &charSet) - { - const T *p = _chars; - const T *pLast = NULL; - while (*p != 0) - { - if (charSet.Find(*p) >= 0) - { - if (pLast == NULL) - pLast = p; - } - else - pLast = NULL; - p = GetNextCharPointer(p); - } - if(pLast != NULL) - { - int i = (int)(pLast - _chars); - Delete(i, _length - i); - } - - } - void MoveItems(int destIndex, int srcIndex) - { - memmove(_chars + destIndex, _chars + srcIndex, - sizeof(T) * (_length - srcIndex + 1)); - } - - void InsertSpace(int &index, int size) - { - CorrectIndex(index); - GrowLength(size); - MoveItems(index + size, index); - } - - static T *GetNextCharPointer(T *p) - { return MyStringGetNextCharPointer(p); } - static const T *GetNextCharPointer(const T *p) - { return MyStringGetNextCharPointer(p); } - static T *GetPrevCharPointer(T *base, T *p) - { return MyStringGetPrevCharPointer(base, p); } - static const T *GetPrevCharPointer(const T *base, const T *p) - { return MyStringGetPrevCharPointer(base, p); } -protected: - T *_chars; - int _length; - int _capacity; - - void SetCapacity(int newCapacity) - { - int realCapacity = newCapacity + 1; - if(realCapacity == _capacity) - return; - /* - const int kMaxStringSize = 0x20000000; - #ifndef _WIN32_WCE - if(newCapacity > kMaxStringSize || newCapacity < _length) - throw 1052337; - #endif - */ - T *newBuffer = new T[realCapacity]; - if(_capacity > 0) - { - for (int i = 0; i < (_length + 1); i++) - newBuffer[i] = _chars[i]; - delete []_chars; - _chars = newBuffer; - } - else - { - _chars = newBuffer; - _chars[0] = 0; - } - _capacity = realCapacity; - } - - void GrowLength(int n) - { - int freeSize = _capacity - _length - 1; - if (n <= freeSize) - return; - int delta; - if (_capacity > 64) - delta = _capacity / 2; - else if (_capacity > 8) - delta = 16; - else - delta = 4; - if (freeSize + delta < n) - delta = n - freeSize; - SetCapacity(_capacity + delta); - } - - void CorrectIndex(int &index) const - { - if (index > _length) - index = _length; - } - -public: - CStringBase(): _chars(0), _length(0), _capacity(0) - { SetCapacity(16 - 1); } - CStringBase(T c): _chars(0), _length(0), _capacity(0) - { - SetCapacity(1); - _chars[0] = c; - _chars[1] = 0; - _length = 1; - } - CStringBase(const T *chars): _chars(0), _length(0), _capacity(0) - { - int length = MyStringLen(chars); - SetCapacity(length); - MyStringCopy(_chars, chars); // can be optimized by memove() - _length = length; - } - CStringBase(const CStringBase &s): _chars(0), _length(0), _capacity(0) - { - SetCapacity(s._length); - MyStringCopy(_chars, s._chars); - _length = s._length; - } - ~CStringBase() { delete []_chars; } - - operator const T*() const { return _chars;} - - // The minimum size of the character buffer in characters. - // This value does not include space for a null terminator. - T* GetBuffer(int minBufLength) - { - if(minBufLength >= _capacity) - SetCapacity(minBufLength + 1); - return _chars; - } - void ReleaseBuffer() { ReleaseBuffer(MyStringLen(_chars)); } - void ReleaseBuffer(int newLength) - { - /* - #ifndef _WIN32_WCE - if(newLength >= _capacity) - throw 282217; - #endif - */ - _chars[newLength] = 0; - _length = newLength; - } - - CStringBase& operator=(T c) - { - Empty(); - SetCapacity(1); - _chars[0] = c; - _chars[1] = 0; - _length = 1; - return *this; - } - CStringBase& operator=(const T *chars) - { - Empty(); - int length = MyStringLen(chars); - SetCapacity(length); - MyStringCopy(_chars, chars); - _length = length; - return *this; - } - CStringBase& operator=(const CStringBase& s) - { - if(&s == this) - return *this; - Empty(); - SetCapacity(s._length); - MyStringCopy(_chars, s._chars); - _length = s._length; - return *this; - } - - CStringBase& operator+=(T c) - { - GrowLength(1); - _chars[_length] = c; - _chars[++_length] = 0; - return *this; - } - CStringBase& operator+=(const T *s) - { - int len = MyStringLen(s); - GrowLength(len); - MyStringCopy(_chars + _length, s); - _length += len; - return *this; - } - CStringBase& operator+=(const CStringBase &s) - { - GrowLength(s._length); - MyStringCopy(_chars + _length, s._chars); - _length += s._length; - return *this; - } - void Empty() - { - _length = 0; - _chars[0] = 0; - } - int Length() const { return _length; } - bool IsEmpty() const { return (_length == 0); } - - CStringBase Mid(int startIndex) const - { return Mid(startIndex, _length - startIndex); } - CStringBase Mid(int startIndex, int count ) const - { - if (startIndex + count > _length) - count = _length - startIndex; - - if (startIndex == 0 && startIndex + count == _length) - return *this; - - CStringBase result; - result.SetCapacity(count); - // MyStringNCopy(result._chars, _chars + startIndex, count); - for (int i = 0; i < count; i++) - result._chars[i] = _chars[startIndex + i]; - result._chars[count] = 0; - result._length = count; - return result; - } - CStringBase Left(int count) const - { return Mid(0, count); } - CStringBase Right(int count) const - { - if (count > _length) - count = _length; - return Mid(_length - count, count); - } - - void MakeUpper() - { MyStringUpper(_chars); } - void MakeLower() - { MyStringLower(_chars); } - - int Compare(const CStringBase& s) const - { return MyStringCompare(_chars, s._chars); } - - int Compare(const T *s) const - { return MyStringCompare(_chars, s); } - - int CompareNoCase(const CStringBase& s) const - { return MyStringCompareNoCase(_chars, s._chars); } - - int CompareNoCase(const T *s) const - { return MyStringCompareNoCase(_chars, s); } - - /* - int Collate(const CStringBase& s) const - { return MyStringCollate(_chars, s._chars); } - int CollateNoCase(const CStringBase& s) const - { return MyStringCollateNoCase(_chars, s._chars); } - */ - - int Find(T c) const { return Find(c, 0); } - int Find(T c, int startIndex) const - { - T *p = _chars + startIndex; - for (;;) - { - if (*p == c) - return (int)(p - _chars); - if (*p == 0) - return -1; - p = GetNextCharPointer(p); - } - } - int Find(const CStringBase &s) const { return Find(s, 0); } - int Find(const CStringBase &s, int startIndex) const - { - if (s.IsEmpty()) - return startIndex; - for (; startIndex < _length; startIndex++) - { - int j; - for (j = 0; j < s._length && startIndex + j < _length; j++) - if (_chars[startIndex+j] != s._chars[j]) - break; - if (j == s._length) - return startIndex; - } - return -1; - } - int ReverseFind(T c) const - { - if (_length == 0) - return -1; - T *p = _chars + _length - 1; - for (;;) - { - if (*p == c) - return (int)(p - _chars); - if (p == _chars) - return -1; - p = GetPrevCharPointer(_chars, p); - } - } - int FindOneOf(const CStringBase &s) const - { - for(int i = 0; i < _length; i++) - if (s.Find(_chars[i]) >= 0) - return i; - return -1; - } - - void TrimLeft(T c) - { - const T *p = _chars; - while (c == *p) - p = GetNextCharPointer(p); - Delete(0, p - _chars); - } - private: - CStringBase GetTrimDefaultCharSet() - { - CStringBase charSet; - charSet += (T)' '; - charSet += (T)'\n'; - charSet += (T)'\t'; - return charSet; - } - public: - - void TrimLeft() - { - TrimLeftWithCharSet(GetTrimDefaultCharSet()); - } - void TrimRight() - { - TrimRightWithCharSet(GetTrimDefaultCharSet()); - } - void TrimRight(T c) - { - const T *p = _chars; - const T *pLast = NULL; - while (*p != 0) - { - if (*p == c) - { - if (pLast == NULL) - pLast = p; - } - else - pLast = NULL; - p = GetNextCharPointer(p); - } - if(pLast != NULL) - { - int i = pLast - _chars; - Delete(i, _length - i); - } - } - void Trim() - { - TrimRight(); - TrimLeft(); - } - - int Insert(int index, T c) - { - InsertSpace(index, 1); - _chars[index] = c; - _length++; - return _length; - } - int Insert(int index, const CStringBase &s) - { - CorrectIndex(index); - if (s.IsEmpty()) - return _length; - int numInsertChars = s.Length(); - InsertSpace(index, numInsertChars); - for(int i = 0; i < numInsertChars; i++) - _chars[index + i] = s[i]; - _length += numInsertChars; - return _length; - } - - // !!!!!!!!!!!!!!! test it if newChar = '\0' - int Replace(T oldChar, T newChar) - { - if (oldChar == newChar) - return 0; - int number = 0; - int pos = 0; - while (pos < Length()) - { - pos = Find(oldChar, pos); - if (pos < 0) - break; - _chars[pos] = newChar; - pos++; - number++; - } - return number; - } - int Replace(const CStringBase &oldString, const CStringBase &newString) - { - if (oldString.IsEmpty()) - return 0; - if (oldString == newString) - return 0; - int oldStringLength = oldString.Length(); - int newStringLength = newString.Length(); - int number = 0; - int pos = 0; - while (pos < _length) - { - pos = Find(oldString, pos); - if (pos < 0) - break; - Delete(pos, oldStringLength); - Insert(pos, newString); - pos += newStringLength; - number++; - } - return number; - } - int Delete(int index, int count = 1 ) - { - if (index + count > _length) - count = _length - index; - if (count > 0) - { - MoveItems(index, index + count); - _length -= count; - } - return _length; - } -}; - -template -CStringBase operator+(const CStringBase& s1, const CStringBase& s2) -{ - CStringBase result(s1); - result += s2; - return result; -} - -template -CStringBase operator+(const CStringBase& s, T c) -{ - CStringBase result(s); - result += c; - return result; -} - -template -CStringBase operator+(T c, const CStringBase& s) -{ - CStringBase result(c); - result += s; - return result; -} - -template -CStringBase operator+(const CStringBase& s, const T * chars) -{ - CStringBase result(s); - result += chars; - return result; -} - -template -CStringBase operator+(const T * chars, const CStringBase& s) -{ - CStringBase result(chars); - result += s; - return result; -} - -template -bool operator==(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) == 0); } - -template -bool operator<(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) < 0); } - -template -bool operator==(const T *s1, const CStringBase& s2) - { return (s2.Compare(s1) == 0); } - -template -bool operator==(const CStringBase& s1, const T *s2) - { return (s1.Compare(s2) == 0); } - -template -bool operator!=(const CStringBase& s1, const CStringBase& s2) - { return (s1.Compare(s2) != 0); } - -template -bool operator!=(const T *s1, const CStringBase& s2) - { return (s2.Compare(s1) != 0); } - -template -bool operator!=(const CStringBase& s1, const T *s2) - { return (s1.Compare(s2) != 0); } - -typedef CStringBase AString; -typedef CStringBase UString; - -typedef CObjectVector AStringVector; -typedef CObjectVector UStringVector; - -#ifdef _UNICODE - typedef UString CSysString; -#else - typedef AString CSysString; -#endif - -typedef CObjectVector CSysStringVector; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyUnknown.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyUnknown.h deleted file mode 100644 index d28d8542..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyUnknown.h +++ /dev/null @@ -1,24 +0,0 @@ -// MyUnknown.h - -#ifndef __MYUNKNOWN_H -#define __MYUNKNOWN_H - -#ifdef _WIN32 - -#ifdef _WIN32_WCE -#if (_WIN32_WCE > 300) -#include -#else -#define MIDL_INTERFACE(x) struct -#endif -#else -#include -#endif - -#include - -#else -#include "MyWindows.h" -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.cpp deleted file mode 100644 index def2a581..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// Common/MyVector.cpp - -#include "StdAfx.h" - -#include - -#include "MyVector.h" - -CBaseRecordVector::~CBaseRecordVector() { Free(); } - -void CBaseRecordVector::Free() -{ - delete []((unsigned char *)_items); - _capacity = 0; - _size = 0; - _items = 0; -} - -void CBaseRecordVector::Clear() { DeleteFrom(0); } -void CBaseRecordVector::DeleteBack() { Delete(_size - 1); } -void CBaseRecordVector::DeleteFrom(int index) { Delete(index, _size - index); } - -void CBaseRecordVector::ReserveOnePosition() -{ - if (_size != _capacity) - return; - int delta; - if (_capacity > 64) - delta = _capacity / 2; - else if (_capacity > 8) - delta = 8; - else - delta = 4; - Reserve(_capacity + delta); -} - -void CBaseRecordVector::Reserve(int newCapacity) -{ - if (newCapacity <= _capacity) - return; - if ((unsigned)newCapacity >= ((unsigned)1 << (sizeof(unsigned) * 8 - 1))) - throw 1052353; - size_t newSize = (size_t)(unsigned)newCapacity * _itemSize; - if (newSize / _itemSize != (size_t)(unsigned)newCapacity) - throw 1052354; - unsigned char *p = new unsigned char[newSize]; - if (p == 0) - throw 1052355; - int numRecordsToMove = _capacity; - memmove(p, _items, _itemSize * numRecordsToMove); - delete [](unsigned char *)_items; - _items = p; - _capacity = newCapacity; -} - -void CBaseRecordVector::MoveItems(int destIndex, int srcIndex) -{ - memmove(((unsigned char *)_items) + destIndex * _itemSize, - ((unsigned char *)_items) + srcIndex * _itemSize, - _itemSize * (_size - srcIndex)); -} - -void CBaseRecordVector::InsertOneItem(int index) -{ - ReserveOnePosition(); - MoveItems(index + 1, index); - _size++; -} - -void CBaseRecordVector::Delete(int index, int num) -{ - TestIndexAndCorrectNum(index, num); - if (num > 0) - { - MoveItems(index, index + num); - _size -= num; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.h deleted file mode 100644 index ce370a53..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyVector.h +++ /dev/null @@ -1,254 +0,0 @@ -// Common/Vector.h - -#ifndef __COMMON_VECTOR_H -#define __COMMON_VECTOR_H - -#include "Defs.h" - -class CBaseRecordVector -{ - void MoveItems(int destIndex, int srcIndex); -protected: - int _capacity; - int _size; - void *_items; - size_t _itemSize; - - void ReserveOnePosition(); - void InsertOneItem(int index); - void TestIndexAndCorrectNum(int index, int &num) const - { if (index + num > _size) num = _size - index; } -public: - CBaseRecordVector(size_t itemSize): - _capacity(0), _size(0), _items(0), _itemSize(itemSize) {} - virtual ~CBaseRecordVector(); - void Free(); - int Size() const { return _size; } - bool IsEmpty() const { return (_size == 0); } - void Reserve(int newCapacity); - virtual void Delete(int index, int num = 1); - void Clear(); - void DeleteFrom(int index); - void DeleteBack(); -}; - -template -class CRecordVector: public CBaseRecordVector -{ -public: - CRecordVector():CBaseRecordVector(sizeof(T)){}; - CRecordVector(const CRecordVector &v): - CBaseRecordVector(sizeof(T)) { *this = v;} - CRecordVector& operator=(const CRecordVector &v) - { - Clear(); - return (*this += v); - } - CRecordVector& operator+=(const CRecordVector &v) - { - int size = v.Size(); - Reserve(Size() + size); - for(int i = 0; i < size; i++) - Add(v[i]); - return *this; - } - int Add(T item) - { - ReserveOnePosition(); - ((T *)_items)[_size] = item; - return _size++; - } - void Insert(int index, T item) - { - InsertOneItem(index); - ((T *)_items)[index] = item; - } - // T* GetPointer() const { return (T*)_items; } - // operator const T *() const { return _items; }; - const T& operator[](int index) const { return ((T *)_items)[index]; } - T& operator[](int index) { return ((T *)_items)[index]; } - const T& Front() const { return operator[](0); } - T& Front() { return operator[](0); } - const T& Back() const { return operator[](_size - 1); } - T& Back() { return operator[](_size - 1); } - - void Swap(int i, int j) - { - T temp = operator[](i); - operator[](i) = operator[](j); - operator[](j) = temp; - } - - int FindInSorted(const T& item) const - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - return -1; - } - - int AddToUniqueSorted(const T& item) - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - Insert(right, item); - return right; - } - - static void SortRefDown(T* p, int k, int size, int (*compare)(const T*, const T*, void *), void *param) - { - T temp = p[k]; - for (;;) - { - int s = (k << 1); - if (s > size) - break; - if (s < size && compare(p + s + 1, p + s, param) > 0) - s++; - if (compare(&temp, p + s, param) >= 0) - break; - p[k] = p[s]; - k = s; - } - p[k] = temp; - } - - void Sort(int (*compare)(const T*, const T*, void *), void *param) - { - int size = _size; - if (size <= 1) - return; - T* p = (&Front()) - 1; - { - int i = size / 2; - do - SortRefDown(p, i, size, compare, param); - while(--i != 0); - } - do - { - T temp = p[size]; - p[size--] = p[1]; - p[1] = temp; - SortRefDown(p, 1, size, compare, param); - } - while (size > 1); - } -}; - -typedef CRecordVector CIntVector; -typedef CRecordVector CUIntVector; -typedef CRecordVector CBoolVector; -typedef CRecordVector CByteVector; -typedef CRecordVector CPointerVector; - -template -class CObjectVector: public CPointerVector -{ -public: - CObjectVector(){}; - ~CObjectVector() { Clear(); } - CObjectVector(const CObjectVector &objectVector) - { *this = objectVector; } - CObjectVector& operator=(const CObjectVector &objectVector) - { - Clear(); - return (*this += objectVector); - } - CObjectVector& operator+=(const CObjectVector &objectVector) - { - int size = objectVector.Size(); - Reserve(Size() + size); - for(int i = 0; i < size; i++) - Add(objectVector[i]); - return *this; - } - const T& operator[](int index) const { return *((T *)CPointerVector::operator[](index)); } - T& operator[](int index) { return *((T *)CPointerVector::operator[](index)); } - T& Front() { return operator[](0); } - const T& Front() const { return operator[](0); } - T& Back() { return operator[](_size - 1); } - const T& Back() const { return operator[](_size - 1); } - int Add(const T& item) - { return CPointerVector::Add(new T(item)); } - void Insert(int index, const T& item) - { CPointerVector::Insert(index, new T(item)); } - virtual void Delete(int index, int num = 1) - { - TestIndexAndCorrectNum(index, num); - for(int i = 0; i < num; i++) - delete (T *)(((void **)_items)[index + i]); - CPointerVector::Delete(index, num); - } - int Find(const T& item) const - { - for(int i = 0; i < Size(); i++) - if (item == (*this)[i]) - return i; - return -1; - } - int FindInSorted(const T& item) const - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - return mid; - if (item < midValue) - right = mid; - else - left = mid + 1; - } - return -1; - } - int AddToSorted(const T& item) - { - int left = 0, right = Size(); - while (left != right) - { - int mid = (left + right) / 2; - const T& midValue = (*this)[mid]; - if (item == midValue) - { - right = mid + 1; - break; - } - if (item < midValue) - right = mid; - else - left = mid + 1; - } - Insert(right, item); - return right; - } - - void Sort(int (*compare)(void *const *, void *const *, void *), void *param) - { CPointerVector::Sort(compare, param); } - - static int CompareObjectItems(void *const *a1, void *const *a2, void * /* param */) - { return MyCompare(*(*((const T **)a1)), *(*((const T **)a2))); } - void Sort() { CPointerVector::Sort(CompareObjectItems, 0); } -}; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyWindows.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyWindows.h deleted file mode 100644 index e388fb02..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/MyWindows.h +++ /dev/null @@ -1,214 +0,0 @@ -// MyWindows.h - -#ifndef __MYWINDOWS_H -#define __MYWINDOWS_H - -#ifdef _WIN32 - -#include - -#define CHAR_PATH_SEPARATOR '\\' -#define WCHAR_PATH_SEPARATOR L'\\' -#define STRING_PATH_SEPARATOR "\\" -#define WSTRING_PATH_SEPARATOR L"\\" - -#else - -#define CHAR_PATH_SEPARATOR '/' -#define WCHAR_PATH_SEPARATOR L'/' -#define STRING_PATH_SEPARATOR "/" -#define WSTRING_PATH_SEPARATOR L"/" - -#include // for wchar_t -#include - -#include "MyGuidDef.h" - -typedef char CHAR; -typedef unsigned char UCHAR; - -#undef BYTE -typedef unsigned char BYTE; - -typedef short SHORT; -typedef unsigned short USHORT; - -#undef WORD -typedef unsigned short WORD; -typedef short VARIANT_BOOL; - -typedef int INT; -typedef Int32 INT32; -typedef unsigned int UINT; -typedef UInt32 UINT32; -typedef INT32 LONG; // LONG, ULONG and DWORD must be 32-bit -typedef UINT32 ULONG; - -#undef DWORD -typedef UINT32 DWORD; - -typedef Int64 LONGLONG; -typedef UInt64 ULONGLONG; - -typedef struct LARGE_INTEGER { LONGLONG QuadPart; }LARGE_INTEGER; -typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER; - -typedef const CHAR *LPCSTR; -typedef CHAR TCHAR; -typedef const TCHAR *LPCTSTR; -typedef wchar_t WCHAR; -typedef WCHAR OLECHAR; -typedef const WCHAR *LPCWSTR; -typedef OLECHAR *BSTR; -typedef const OLECHAR *LPCOLESTR; -typedef OLECHAR *LPOLESTR; - -typedef struct _FILETIME -{ - DWORD dwLowDateTime; - DWORD dwHighDateTime; -}FILETIME; - -#define HRESULT LONG -#define FAILED(Status) ((HRESULT)(Status)<0) -typedef ULONG PROPID; -typedef LONG SCODE; - -#define S_OK ((HRESULT)0x00000000L) -#define S_FALSE ((HRESULT)0x00000001L) -#define E_NOTIMPL ((HRESULT)0x80004001L) -#define E_NOINTERFACE ((HRESULT)0x80004002L) -#define E_ABORT ((HRESULT)0x80004004L) -#define E_FAIL ((HRESULT)0x80004005L) -#define STG_E_INVALIDFUNCTION ((HRESULT)0x80030001L) -#define E_OUTOFMEMORY ((HRESULT)0x8007000EL) -#define E_INVALIDARG ((HRESULT)0x80070057L) - -#ifdef _MSC_VER -#define STDMETHODCALLTYPE __stdcall -#else -#define STDMETHODCALLTYPE -#endif - -#define STDMETHOD_(t, f) virtual t STDMETHODCALLTYPE f -#define STDMETHOD(f) STDMETHOD_(HRESULT, f) -#define STDMETHODIMP_(type) type STDMETHODCALLTYPE -#define STDMETHODIMP STDMETHODIMP_(HRESULT) - -#define PURE = 0 - -#define MIDL_INTERFACE(x) struct - -#ifdef __cplusplus - -DEFINE_GUID(IID_IUnknown, -0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); -struct IUnknown -{ - STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE; - STDMETHOD_(ULONG, AddRef)() PURE; - STDMETHOD_(ULONG, Release)() PURE; - #ifndef _WIN32 - virtual ~IUnknown() {} - #endif -}; - -typedef IUnknown *LPUNKNOWN; - -#endif - -#define VARIANT_TRUE ((VARIANT_BOOL)-1) -#define VARIANT_FALSE ((VARIANT_BOOL)0) - -enum VARENUM -{ - VT_EMPTY = 0, - VT_NULL = 1, - VT_I2 = 2, - VT_I4 = 3, - VT_R4 = 4, - VT_R8 = 5, - VT_CY = 6, - VT_DATE = 7, - VT_BSTR = 8, - VT_DISPATCH = 9, - VT_ERROR = 10, - VT_BOOL = 11, - VT_VARIANT = 12, - VT_UNKNOWN = 13, - VT_DECIMAL = 14, - VT_I1 = 16, - VT_UI1 = 17, - VT_UI2 = 18, - VT_UI4 = 19, - VT_I8 = 20, - VT_UI8 = 21, - VT_INT = 22, - VT_UINT = 23, - VT_VOID = 24, - VT_HRESULT = 25, - VT_FILETIME = 64 -}; - -typedef unsigned short VARTYPE; -typedef WORD PROPVAR_PAD1; -typedef WORD PROPVAR_PAD2; -typedef WORD PROPVAR_PAD3; - -#ifdef __cplusplus - -typedef struct tagPROPVARIANT -{ - VARTYPE vt; - PROPVAR_PAD1 wReserved1; - PROPVAR_PAD2 wReserved2; - PROPVAR_PAD3 wReserved3; - union - { - CHAR cVal; - UCHAR bVal; - SHORT iVal; - USHORT uiVal; - LONG lVal; - ULONG ulVal; - INT intVal; - UINT uintVal; - LARGE_INTEGER hVal; - ULARGE_INTEGER uhVal; - VARIANT_BOOL boolVal; - SCODE scode; - FILETIME filetime; - BSTR bstrVal; - }; -} PROPVARIANT; - -typedef PROPVARIANT tagVARIANT; -typedef tagVARIANT VARIANT; -typedef VARIANT VARIANTARG; - -MY_EXTERN_C HRESULT VariantClear(VARIANTARG *prop); -MY_EXTERN_C HRESULT VariantCopy(VARIANTARG *dest, VARIANTARG *src); - -#endif - -MY_EXTERN_C BSTR SysAllocStringByteLen(LPCSTR psz, UINT len); -MY_EXTERN_C BSTR SysAllocString(const OLECHAR *sz); -MY_EXTERN_C void SysFreeString(BSTR bstr); -MY_EXTERN_C UINT SysStringByteLen(BSTR bstr); -MY_EXTERN_C UINT SysStringLen(BSTR bstr); - -MY_EXTERN_C DWORD GetLastError(); -MY_EXTERN_C LONG CompareFileTime(const FILETIME* ft1, const FILETIME* ft2); - -#define CP_ACP 0 -#define CP_OEMCP 1 - -typedef enum tagSTREAM_SEEK -{ - STREAM_SEEK_SET = 0, - STREAM_SEEK_CUR = 1, - STREAM_SEEK_END = 2 -} STREAM_SEEK; - -#endif -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.cpp deleted file mode 100644 index 094eb642..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// NewHandler.cpp - -#include "StdAfx.h" - -#include - -#include "NewHandler.h" - -// #define DEBUG_MEMORY_LEAK - -#ifndef DEBUG_MEMORY_LEAK - -#ifdef _WIN32 -void * -#ifdef _MSC_VER -__cdecl -#endif -operator new(size_t size) -{ - // void *p = ::HeapAlloc(::GetProcessHeap(), 0, size); - void *p = ::malloc(size); - if (p == 0) - throw CNewException(); - return p; -} - -void -#ifdef _MSC_VER -__cdecl -#endif -operator delete(void *p) throw() -{ - /* - if (p == 0) - return; - ::HeapFree(::GetProcessHeap(), 0, p); - */ - ::free(p); -} -#endif - -#else - -#pragma init_seg(lib) -const int kDebugSize = 1000000; -static void *a[kDebugSize]; -static int index = 0; - -static int numAllocs = 0; -void * __cdecl operator new(size_t size) -{ - numAllocs++; - void *p = HeapAlloc(GetProcessHeap(), 0, size); - if (index == 40) - { - int t = 1; - } - if (index < kDebugSize) - { - a[index] = p; - index++; - } - if (p == 0) - throw CNewException(); - printf("Alloc %6d, size = %8d\n", numAllocs, size); - return p; -} - -class CC -{ -public: - CC() - { - for (int i = 0; i < kDebugSize; i++) - a[i] = 0; - } - ~CC() - { - for (int i = 0; i < kDebugSize; i++) - if (a[i] != 0) - return; - } -} g_CC; - - -void __cdecl operator delete(void *p) -{ - if (p == 0) - return; - /* - for (int i = 0; i < index; i++) - if (a[i] == p) - a[i] = 0; - */ - HeapFree(GetProcessHeap(), 0, p); - numAllocs--; - printf("Free %d\n", numAllocs); -} - -#endif - -/* -int MemErrorVC(size_t) -{ - throw CNewException(); - // return 1; -} -CNewHandlerSetter::CNewHandlerSetter() -{ - // MemErrorOldVCFunction = _set_new_handler(MemErrorVC); -} -CNewHandlerSetter::~CNewHandlerSetter() -{ - // _set_new_handler(MemErrorOldVCFunction); -} -*/ diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.h deleted file mode 100644 index 0619fc69..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/NewHandler.h +++ /dev/null @@ -1,16 +0,0 @@ -// Common/NewHandler.h - -#ifndef __COMMON_NEWHANDLER_H -#define __COMMON_NEWHANDLER_H - -class CNewException {}; - -#ifdef _WIN32 -void -#ifdef _MSC_VER -__cdecl -#endif -operator delete(void *p) throw(); -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdAfx.h deleted file mode 100644 index 681ee935..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -// #include "MyWindows.h" -#include "NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.cpp deleted file mode 100644 index 8fed7bc0..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// Common/StdInStream.cpp - -#include "StdAfx.h" - -#include -#include "StdInStream.h" - -#ifdef _MSC_VER -// "was declared deprecated" disabling -#pragma warning(disable : 4996 ) -#endif - -static const char kIllegalChar = '\0'; -static const char kNewLineChar = '\n'; - -static const char *kEOFMessage = "Unexpected end of input stream"; -static const char *kReadErrorMessage ="Error reading input stream"; -static const char *kIllegalCharMessage = "Illegal character in input stream"; - -static LPCTSTR kFileOpenMode = TEXT("r"); - -CStdInStream g_StdIn(stdin); - -bool CStdInStream::Open(LPCTSTR fileName) -{ - Close(); - _stream = _tfopen(fileName, kFileOpenMode); - _streamIsOpen = (_stream != 0); - return _streamIsOpen; -} - -bool CStdInStream::Close() -{ - if(!_streamIsOpen) - return true; - _streamIsOpen = (fclose(_stream) != 0); - return !_streamIsOpen; -} - -CStdInStream::~CStdInStream() -{ - Close(); -} - -AString CStdInStream::ScanStringUntilNewLine() -{ - AString s; - for (;;) - { - int intChar = GetChar(); - if(intChar == EOF) - throw kEOFMessage; - char c = char(intChar); - if (c == kIllegalChar) - throw kIllegalCharMessage; - if(c == kNewLineChar) - break; - s += c; - } - return s; -} - -void CStdInStream::ReadToString(AString &resultString) -{ - resultString.Empty(); - int c; - while((c = GetChar()) != EOF) - resultString += char(c); -} - -bool CStdInStream::Eof() -{ - return (feof(_stream) != 0); -} - -int CStdInStream::GetChar() -{ - int c = fgetc(_stream); // getc() doesn't work in BeOS? - if(c == EOF && !Eof()) - throw kReadErrorMessage; - return c; -} - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.h deleted file mode 100644 index e0fb3dfa..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdInStream.h +++ /dev/null @@ -1,31 +0,0 @@ -// Common/StdInStream.h - -#ifndef __COMMON_STDINSTREAM_H -#define __COMMON_STDINSTREAM_H - -#include - -#include "MyString.h" -#include "Types.h" - -class CStdInStream -{ - bool _streamIsOpen; - FILE *_stream; -public: - CStdInStream(): _streamIsOpen(false) {}; - CStdInStream(FILE *stream): _streamIsOpen(false), _stream(stream) {}; - ~CStdInStream(); - bool Open(LPCTSTR fileName); - bool Close(); - - AString ScanStringUntilNewLine(); - void ReadToString(AString &resultString); - - bool Eof(); - int GetChar(); -}; - -extern CStdInStream g_StdIn; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.cpp deleted file mode 100644 index 5498c0cc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// Common/StdOutStream.cpp - -#include "StdAfx.h" - -#include - -#include "StdOutStream.h" -#include "IntToString.h" -#include "StringConvert.h" - -#ifdef _MSC_VER -// "was declared deprecated" disabling -#pragma warning(disable : 4996 ) -#endif - -static const char kNewLineChar = '\n'; - -static const char *kFileOpenMode = "wt"; - -CStdOutStream g_StdOut(stdout); -CStdOutStream g_StdErr(stderr); - -bool CStdOutStream::Open(const char *fileName) -{ - Close(); - _stream = fopen(fileName, kFileOpenMode); - _streamIsOpen = (_stream != 0); - return _streamIsOpen; -} - -bool CStdOutStream::Close() -{ - if(!_streamIsOpen) - return true; - if (fclose(_stream) != 0) - return false; - _stream = 0; - _streamIsOpen = false; - return true; -} - -bool CStdOutStream::Flush() -{ - return (fflush(_stream) == 0); -} - -CStdOutStream::~CStdOutStream () -{ - Close(); -} - -CStdOutStream & CStdOutStream::operator<<(CStdOutStream & (*aFunction)(CStdOutStream &)) -{ - (*aFunction)(*this); - return *this; -} - -CStdOutStream & endl(CStdOutStream & outStream) -{ - return outStream << kNewLineChar; -} - -CStdOutStream & CStdOutStream::operator<<(const char *string) -{ - fputs(string, _stream); - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(const wchar_t *string) -{ - *this << (const char *)UnicodeStringToMultiByte(string, CP_OEMCP); - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(char c) -{ - fputc(c, _stream); - return *this; -} - -CStdOutStream & CStdOutStream::operator<<(int number) -{ - char textString[32]; - ConvertInt64ToString(number, textString); - return operator<<(textString); -} - -CStdOutStream & CStdOutStream::operator<<(UInt64 number) -{ - char textString[32]; - ConvertUInt64ToString(number, textString); - return operator<<(textString); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.h deleted file mode 100644 index 84907365..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StdOutStream.h +++ /dev/null @@ -1,35 +0,0 @@ -// Common/StdOutStream.h - -#ifndef __COMMON_STDOUTSTREAM_H -#define __COMMON_STDOUTSTREAM_H - -#include - -#include "Types.h" - -class CStdOutStream -{ - bool _streamIsOpen; - FILE *_stream; -public: - CStdOutStream (): _streamIsOpen(false), _stream(0) {}; - CStdOutStream (FILE *stream): _streamIsOpen(false), _stream(stream) {}; - ~CStdOutStream (); - operator FILE *() { return _stream; } - bool Open(const char *fileName); - bool Close(); - bool Flush(); - CStdOutStream & operator<<(CStdOutStream & (* aFunction)(CStdOutStream &)); - CStdOutStream & operator<<(const char *string); - CStdOutStream & operator<<(const wchar_t *string); - CStdOutStream & operator<<(char c); - CStdOutStream & operator<<(int number); - CStdOutStream & operator<<(UInt64 number); -}; - -CStdOutStream & endl(CStdOutStream & outStream); - -extern CStdOutStream g_StdOut; -extern CStdOutStream g_StdErr; - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.cpp deleted file mode 100644 index c0b19e16..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Common/StringConvert.cpp - -#include "StdAfx.h" - -#include "StringConvert.h" - -#ifndef _WIN32 -#include -#endif - -#ifdef _WIN32 -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) -{ - UString resultString; - if(!srcString.IsEmpty()) - { - int numChars = MultiByteToWideChar(codePage, 0, srcString, - srcString.Length(), resultString.GetBuffer(srcString.Length()), - srcString.Length() + 1); - #ifndef _WIN32_WCE - if(numChars == 0) - throw 282228; - #endif - resultString.ReleaseBuffer(numChars); - } - return resultString; -} - -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) -{ - AString resultString; - if(!srcString.IsEmpty()) - { - int numRequiredBytes = srcString.Length() * 2; - char defaultChar = '_'; - int numChars = WideCharToMultiByte(codePage, 0, srcString, - srcString.Length(), resultString.GetBuffer(numRequiredBytes), - numRequiredBytes + 1, &defaultChar, NULL); - #ifndef _WIN32_WCE - if(numChars == 0) - throw 282229; - #endif - resultString.ReleaseBuffer(numChars); - } - return resultString; -} - -#ifndef _WIN32_WCE -AString SystemStringToOemString(const CSysString &srcString) -{ - AString result; - CharToOem(srcString, result.GetBuffer(srcString.Length() * 2)); - result.ReleaseBuffer(); - return result; -} -#endif - -#else - -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage) -{ - UString resultString; - for (int i = 0; i < srcString.Length(); i++) - resultString += wchar_t(srcString[i]); - /* - if(!srcString.IsEmpty()) - { - int numChars = mbstowcs(resultString.GetBuffer(srcString.Length()), srcString, srcString.Length() + 1); - if (numChars < 0) throw "Your environment does not support UNICODE"; - resultString.ReleaseBuffer(numChars); - } - */ - return resultString; -} - -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage) -{ - AString resultString; - for (int i = 0; i < srcString.Length(); i++) - resultString += char(srcString[i]); - /* - if(!srcString.IsEmpty()) - { - int numRequiredBytes = srcString.Length() * 6 + 1; - int numChars = wcstombs(resultString.GetBuffer(numRequiredBytes), srcString, numRequiredBytes); - if (numChars < 0) throw "Your environment does not support UNICODE"; - resultString.ReleaseBuffer(numChars); - } - */ - return resultString; -} - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.h deleted file mode 100644 index 32d8a3a1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringConvert.h +++ /dev/null @@ -1,71 +0,0 @@ -// Common/StringConvert.h - -#ifndef __COMMON_STRINGCONVERT_H -#define __COMMON_STRINGCONVERT_H - -#include "MyWindows.h" -#include "MyString.h" -#include "Types.h" - -UString MultiByteToUnicodeString(const AString &srcString, UINT codePage = CP_ACP); -AString UnicodeStringToMultiByte(const UString &srcString, UINT codePage = CP_ACP); - -inline const wchar_t* GetUnicodeString(const wchar_t* unicodeString) - { return unicodeString; } -inline const UString& GetUnicodeString(const UString &unicodeString) - { return unicodeString; } -inline UString GetUnicodeString(const AString &ansiString) - { return MultiByteToUnicodeString(ansiString); } -inline UString GetUnicodeString(const AString &multiByteString, UINT codePage) - { return MultiByteToUnicodeString(multiByteString, codePage); } -inline const wchar_t* GetUnicodeString(const wchar_t* unicodeString, UINT) - { return unicodeString; } -inline const UString& GetUnicodeString(const UString &unicodeString, UINT) - { return unicodeString; } - -inline const char* GetAnsiString(const char* ansiString) - { return ansiString; } -inline const AString& GetAnsiString(const AString &ansiString) - { return ansiString; } -inline AString GetAnsiString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString); } - -inline const char* GetOemString(const char* oemString) - { return oemString; } -inline const AString& GetOemString(const AString &oemString) - { return oemString; } -inline AString GetOemString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString, CP_OEMCP); } - - -#ifdef _UNICODE - inline const wchar_t* GetSystemString(const wchar_t* unicodeString) - { return unicodeString;} - inline const UString& GetSystemString(const UString &unicodeString) - { return unicodeString;} - inline const wchar_t* GetSystemString(const wchar_t* unicodeString, UINT /* codePage */) - { return unicodeString;} - inline const UString& GetSystemString(const UString &unicodeString, UINT /* codePage */) - { return unicodeString;} - inline UString GetSystemString(const AString &multiByteString, UINT codePage) - { return MultiByteToUnicodeString(multiByteString, codePage);} - inline UString GetSystemString(const AString &multiByteString) - { return MultiByteToUnicodeString(multiByteString);} -#else - inline const char* GetSystemString(const char *ansiString) - { return ansiString; } - inline const AString& GetSystemString(const AString &multiByteString, UINT) - { return multiByteString; } - inline const char * GetSystemString(const char *multiByteString, UINT) - { return multiByteString; } - inline AString GetSystemString(const UString &unicodeString) - { return UnicodeStringToMultiByte(unicodeString); } - inline AString GetSystemString(const UString &unicodeString, UINT codePage) - { return UnicodeStringToMultiByte(unicodeString, codePage); } -#endif - -#ifndef _WIN32_WCE -AString SystemStringToOemString(const CSysString &srcString); -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.cpp deleted file mode 100644 index ec6733e3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// Common/StringToInt.cpp - -#include "StdAfx.h" - -#include "StringToInt.h" - -UInt64 ConvertStringToUInt64(const char *s, const char **end) -{ - UInt64 result = 0; - for (;;) - { - char c = *s; - if (c < '0' || c > '9') - { - if (end != NULL) - *end = s; - return result; - } - result *= 10; - result += (c - '0'); - s++; - } -} - -UInt64 ConvertOctStringToUInt64(const char *s, const char **end) -{ - UInt64 result = 0; - for (;;) - { - char c = *s; - if (c < '0' || c > '7') - { - if (end != NULL) - *end = s; - return result; - } - result <<= 3; - result += (c - '0'); - s++; - } -} - - -UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end) -{ - UInt64 result = 0; - for (;;) - { - wchar_t c = *s; - if (c < '0' || c > '9') - { - if (end != NULL) - *end = s; - return result; - } - result *= 10; - result += (c - '0'); - s++; - } -} - - -Int64 ConvertStringToInt64(const char *s, const char **end) -{ - if (*s == '-') - return -(Int64)ConvertStringToUInt64(s + 1, end); - return ConvertStringToUInt64(s, end); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.h deleted file mode 100644 index bb971f62..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/StringToInt.h +++ /dev/null @@ -1,17 +0,0 @@ -// Common/StringToInt.h - -#ifndef __COMMON_STRINGTOINT_H -#define __COMMON_STRINGTOINT_H - -#include -#include "Types.h" - -UInt64 ConvertStringToUInt64(const char *s, const char **end); -UInt64 ConvertOctStringToUInt64(const char *s, const char **end); -UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end); - -Int64 ConvertStringToInt64(const char *s, const char **end); - -#endif - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Types.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Types.h deleted file mode 100644 index 41d785e9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Types.h +++ /dev/null @@ -1,57 +0,0 @@ -// Common/Types.h - -#ifndef __COMMON_TYPES_H -#define __COMMON_TYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -typedef unsigned char Byte; -#endif - -#ifndef _7ZIP_INT16_DEFINED -#define _7ZIP_INT16_DEFINED -typedef short Int16; -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_INT32_DEFINED -#define _7ZIP_INT32_DEFINED -typedef int Int32; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -typedef unsigned int UInt32; -#endif - -#ifdef _MSC_VER - -#ifndef _7ZIP_INT64_DEFINED -#define _7ZIP_INT64_DEFINED -typedef __int64 Int64; -#endif - -#ifndef _7ZIP_UINT64_DEFINED -#define _7ZIP_UINT64_DEFINED -typedef unsigned __int64 UInt64; -#endif - -#else - -#ifndef _7ZIP_INT64_DEFINED -#define _7ZIP_INT64_DEFINED -typedef long long int Int64; -#endif - -#ifndef _7ZIP_UINT64_DEFINED -#define _7ZIP_UINT64_DEFINED -typedef unsigned long long int UInt64; -#endif - -#endif - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.cpp deleted file mode 100644 index e15695bb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// UTFConvert.cpp - -#include "StdAfx.h" - -#include "UTFConvert.h" -#include "Types.h" - -static Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - -// These functions are for UTF8 <-> UTF16 conversion. - -bool ConvertUTF8ToUnicode(const AString &src, UString &dest) -{ - dest.Empty(); - for(int i = 0; i < src.Length();) - { - Byte c = (Byte)src[i++]; - if (c < 0x80) - { - dest += (wchar_t)c; - continue; - } - if(c < 0xC0) - return false; - int numAdds; - for (numAdds = 1; numAdds < 5; numAdds++) - if (c < kUtf8Limits[numAdds]) - break; - UInt32 value = (c - kUtf8Limits[numAdds - 1]); - do - { - if (i >= src.Length()) - return false; - Byte c2 = (Byte)src[i++]; - if (c2 < 0x80 || c2 >= 0xC0) - return false; - value <<= 6; - value |= (c2 - 0x80); - numAdds--; - } - while(numAdds > 0); - if (value < 0x10000) - dest += (wchar_t)(value); - else - { - value -= 0x10000; - if (value >= 0x100000) - return false; - dest += (wchar_t)(0xD800 + (value >> 10)); - dest += (wchar_t)(0xDC00 + (value & 0x3FF)); - } - } - return true; -} - -bool ConvertUnicodeToUTF8(const UString &src, AString &dest) -{ - dest.Empty(); - for(int i = 0; i < src.Length();) - { - UInt32 value = (UInt32)src[i++]; - if (value < 0x80) - { - dest += (char)value; - continue; - } - if (value >= 0xD800 && value < 0xE000) - { - if (value >= 0xDC00) - return false; - if (i >= src.Length()) - return false; - UInt32 c2 = (UInt32)src[i++]; - if (c2 < 0xDC00 || c2 >= 0xE000) - return false; - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - int numAdds; - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - dest += (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); - do - { - numAdds--; - dest += (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); - } - while(numAdds > 0); - } - return true; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.h deleted file mode 100644 index 2a14600d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/UTFConvert.h +++ /dev/null @@ -1,11 +0,0 @@ -// Common/UTFConvert.h - -#ifndef __COMMON_UTFCONVERT_H -#define __COMMON_UTFCONVERT_H - -#include "MyString.h" - -bool ConvertUTF8ToUnicode(const AString &utfString, UString &resultString); -bool ConvertUnicodeToUTF8(const UString &unicodeString, AString &resultString); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.cpp deleted file mode 100644 index 9feebbec..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.cpp +++ /dev/null @@ -1,458 +0,0 @@ -// Common/Wildcard.cpp - -#include "StdAfx.h" - -#include "Wildcard.h" - -bool g_CaseSensitive = - #ifdef _WIN32 - false; - #else - true; - #endif - -static const wchar_t kAnyCharsChar = L'*'; -static const wchar_t kAnyCharChar = L'?'; - -#ifdef _WIN32 -static const wchar_t kDirDelimiter1 = L'\\'; -#endif -static const wchar_t kDirDelimiter2 = L'/'; - -static const UString kWildCardCharSet = L"?*"; - -static const UString kIllegalWildCardFileNameChars= - L"\x1\x2\x3\x4\x5\x6\x7\x8\x9\xA\xB\xC\xD\xE\xF" - L"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" - L"\"/:<>\\|"; - - -static inline bool IsCharDirLimiter(wchar_t c) -{ - return ( - #ifdef _WIN32 - c == kDirDelimiter1 || - #endif - c == kDirDelimiter2); -} - -int CompareFileNames(const UString &s1, const UString &s2) -{ - if (g_CaseSensitive) - return s1.Compare(s2); - return s1.CompareNoCase(s2); -} - -// ----------------------------------------- -// this function compares name with mask -// ? - any char -// * - any char or empty - -static bool EnhancedMaskTest(const wchar_t *mask, const wchar_t *name) -{ - for (;;) - { - wchar_t m = *mask; - wchar_t c = *name; - if (m == 0) - return (c == 0); - if (m == kAnyCharsChar) - { - if (EnhancedMaskTest(mask + 1, name)) - return true; - if (c == 0) - return false; - } - else - { - if (m == kAnyCharChar) - { - if (c == 0) - return false; - } - else if (m != c) - if (g_CaseSensitive || MyCharUpper(m) != MyCharUpper(c)) - return false; - mask++; - } - name++; - } -} - -// -------------------------------------------------- -// Splits path to strings - -void SplitPathToParts(const UString &path, UStringVector &pathParts) -{ - pathParts.Clear(); - UString name; - int len = path.Length(); - if (len == 0) - return; - for (int i = 0; i < len; i++) - { - wchar_t c = path[i]; - if (IsCharDirLimiter(c)) - { - pathParts.Add(name); - name.Empty(); - } - else - name += c; - } - pathParts.Add(name); -} - -void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name) -{ - int i; - for(i = path.Length() - 1; i >= 0; i--) - if(IsCharDirLimiter(path[i])) - break; - dirPrefix = path.Left(i + 1); - name = path.Mid(i + 1); -} - -UString ExtractDirPrefixFromPath(const UString &path) -{ - int i; - for(i = path.Length() - 1; i >= 0; i--) - if(IsCharDirLimiter(path[i])) - break; - return path.Left(i + 1); -} - -UString ExtractFileNameFromPath(const UString &path) -{ - int i; - for(i = path.Length() - 1; i >= 0; i--) - if(IsCharDirLimiter(path[i])) - break; - return path.Mid(i + 1); -} - - -bool CompareWildCardWithName(const UString &mask, const UString &name) -{ - return EnhancedMaskTest(mask, name); -} - -bool DoesNameContainWildCard(const UString &path) -{ - return (path.FindOneOf(kWildCardCharSet) >= 0); -} - - -// ----------------------------------------------------------' -// NWildcard - -namespace NWildcard { - - -/* -M = MaskParts.Size(); -N = TestNameParts.Size(); - - File Dir -ForFile req M<=N [N-M, N) - - nonreq M=N [0, M) - - -ForDir req M 1) - return true; - } - return false; -} - -bool CCensorNode::AreThereIncludeItems() const -{ - if (IncludeItems.Size() > 0) - return true; - for (int i = 0; i < SubNodes.Size(); i++) - if (SubNodes[i].AreThereIncludeItems()) - return true; - return false; -} - -bool CCensorNode::CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const -{ - const CObjectVector &items = include ? IncludeItems : ExcludeItems; - for (int i = 0; i < items.Size(); i++) - if (items[i].CheckPath(pathParts, isFile)) - return true; - return false; -} - -bool CCensorNode::CheckPath(UStringVector &pathParts, bool isFile, bool &include) const -{ - if (CheckPathCurrent(false, pathParts, isFile)) - { - include = false; - return true; - } - include = true; - bool finded = CheckPathCurrent(true, pathParts, isFile); - if (pathParts.Size() == 1) - return finded; - int index = FindSubNode(pathParts.Front()); - if (index >= 0) - { - UStringVector pathParts2 = pathParts; - pathParts2.Delete(0); - if (SubNodes[index].CheckPath(pathParts2, isFile, include)) - return true; - } - return finded; -} - -bool CCensorNode::CheckPath(const UString &path, bool isFile, bool &include) const -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - return CheckPath(pathParts, isFile, include); -} - -bool CCensorNode::CheckPath(const UString &path, bool isFile) const -{ - bool include; - if(CheckPath(path, isFile, include)) - return include; - return false; -} - -bool CCensorNode::CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const -{ - if (CheckPathCurrent(include, pathParts, isFile)) - return true; - if (Parent == 0) - return false; - pathParts.Insert(0, Name); - return Parent->CheckPathToRoot(include, pathParts, isFile); -} - -/* -bool CCensorNode::CheckPathToRoot(bool include, const UString &path, bool isFile) const -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - return CheckPathToRoot(include, pathParts, isFile); -} -*/ - -void CCensorNode::AddItem2(bool include, const UString &path, bool recursive) -{ - if (path.IsEmpty()) - return; - bool forFile = true; - bool forFolder = true; - UString path2 = path; - if (IsCharDirLimiter(path[path.Length() - 1])) - { - path2.Delete(path.Length() - 1); - forFile = false; - } - AddItem(include, path2, recursive, forFile, forFolder); -} - -void CCensorNode::ExtendExclude(const CCensorNode &fromNodes) -{ - ExcludeItems += fromNodes.ExcludeItems; - for (int i = 0; i < fromNodes.SubNodes.Size(); i++) - { - const CCensorNode &node = fromNodes.SubNodes[i]; - int subNodeIndex = FindSubNode(node.Name); - if (subNodeIndex < 0) - subNodeIndex = SubNodes.Add(CCensorNode(node.Name, this)); - SubNodes[subNodeIndex].ExtendExclude(node); - } -} - -int CCensor::FindPrefix(const UString &prefix) const -{ - for (int i = 0; i < Pairs.Size(); i++) - if (CompareFileNames(Pairs[i].Prefix, prefix) == 0) - return i; - return -1; -} - -void CCensor::AddItem(bool include, const UString &path, bool recursive) -{ - UStringVector pathParts; - SplitPathToParts(path, pathParts); - bool forFile = true; - if (pathParts.Back().IsEmpty()) - { - forFile = false; - pathParts.DeleteBack(); - } - const UString &front = pathParts.Front(); - bool isAbs = false; - if (front.IsEmpty()) - isAbs = true; - else if (front.Length() == 2 && front[1] == L':') - isAbs = true; - else - { - for (int i = 0; i < pathParts.Size(); i++) - { - const UString &part = pathParts[i]; - if (part == L".." || part == L".") - { - isAbs = true; - break; - } - } - } - int numAbsParts = 0; - if (isAbs) - if (pathParts.Size() > 1) - numAbsParts = pathParts.Size() - 1; - else - numAbsParts = 1; - UString prefix; - for (int i = 0; i < numAbsParts; i++) - { - const UString &front = pathParts.Front(); - if (DoesNameContainWildCard(front)) - break; - prefix += front; - prefix += WCHAR_PATH_SEPARATOR; - pathParts.Delete(0); - } - int index = FindPrefix(prefix); - if (index < 0) - index = Pairs.Add(CPair(prefix)); - - CItem item; - item.PathParts = pathParts; - item.ForDir = true; - item.ForFile = forFile; - item.Recursive = recursive; - Pairs[index].Head.AddItem(include, item); -} - -bool CCensor::CheckPath(const UString &path, bool isFile) const -{ - bool finded = false; - for (int i = 0; i < Pairs.Size(); i++) - { - bool include; - if (Pairs[i].Head.CheckPath(path, isFile, include)) - { - if (!include) - return false; - finded = true; - } - } - return finded; -} - -void CCensor::ExtendExclude() -{ - int i; - for (i = 0; i < Pairs.Size(); i++) - if (Pairs[i].Prefix.IsEmpty()) - break; - if (i == Pairs.Size()) - return; - int index = i; - for (i = 0; i < Pairs.Size(); i++) - if (index != i) - Pairs[i].Head.ExtendExclude(Pairs[index].Head); -} - -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.h deleted file mode 100644 index 6d4cbcec..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Common/Wildcard.h +++ /dev/null @@ -1,80 +0,0 @@ -// Common/Wildcard.h - -#ifndef __COMMON_WILDCARD_H -#define __COMMON_WILDCARD_H - -#include "MyString.h" - -int CompareFileNames(const UString &s1, const UString &s2); - -void SplitPathToParts(const UString &path, UStringVector &pathParts); -void SplitPathToParts(const UString &path, UString &dirPrefix, UString &name); -UString ExtractDirPrefixFromPath(const UString &path); -UString ExtractFileNameFromPath(const UString &path); -bool DoesNameContainWildCard(const UString &path); -bool CompareWildCardWithName(const UString &mask, const UString &name); - -namespace NWildcard { - -struct CItem -{ - UStringVector PathParts; - bool Recursive; - bool ForFile; - bool ForDir; - bool CheckPath(const UStringVector &pathParts, bool isFile) const; -}; - -class CCensorNode -{ - CCensorNode *Parent; - bool CheckPathCurrent(bool include, const UStringVector &pathParts, bool isFile) const; - void AddItemSimple(bool include, CItem &item); - bool CheckPath(UStringVector &pathParts, bool isFile, bool &include) const; -public: - CCensorNode(): Parent(0) { }; - CCensorNode(const UString &name, CCensorNode *parent): Name(name), Parent(parent) { }; - UString Name; - CObjectVector SubNodes; - CObjectVector IncludeItems; - CObjectVector ExcludeItems; - - int FindSubNode(const UString &path) const; - - void AddItem(bool include, CItem &item); - void AddItem(bool include, const UString &path, bool recursive, bool forFile, bool forDir); - void AddItem2(bool include, const UString &path, bool recursive); - - bool NeedCheckSubDirs() const; - bool AreThereIncludeItems() const; - - bool CheckPath(const UString &path, bool isFile, bool &include) const; - bool CheckPath(const UString &path, bool isFile) const; - - bool CheckPathToRoot(bool include, UStringVector &pathParts, bool isFile) const; - // bool CheckPathToRoot(const UString &path, bool isFile, bool include) const; - void ExtendExclude(const CCensorNode &fromNodes); -}; - -struct CPair -{ - UString Prefix; - CCensorNode Head; - CPair(const UString &prefix): Prefix(prefix) { }; -}; - -class CCensor -{ - int FindPrefix(const UString &prefix) const; -public: - CObjectVector Pairs; - bool AllAreRelative() const - { return (Pairs.Size() == 1 && Pairs.Front().Prefix.IsEmpty()); } - void AddItem(bool include, const UString &path, bool recursive); - bool CheckPath(const UString &path, bool isFile) const; - void ExtendExclude(); -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.cpp deleted file mode 100644 index 9e92dc26..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// Windows/DLL.cpp - -#include "StdAfx.h" - -#include "DLL.h" -#include "Defs.h" -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NDLL { - -CLibrary::~CLibrary() -{ - Free(); -} - -bool CLibrary::Free() -{ - if (_module == 0) - return true; - // MessageBox(0, TEXT(""), TEXT("Free"), 0); - // Sleep(5000); - if (!::FreeLibrary(_module)) - return false; - _module = 0; - return true; -} - -bool CLibrary::LoadOperations(HMODULE newModule) -{ - if (newModule == NULL) - return false; - if(!Free()) - return false; - _module = newModule; - return true; -} - -bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags) -{ - // MessageBox(0, fileName, TEXT("LoadEx"), 0); - return LoadOperations(::LoadLibraryEx(fileName, NULL, flags)); -} - -bool CLibrary::Load(LPCTSTR fileName) -{ - // MessageBox(0, fileName, TEXT("Load"), 0); - // Sleep(5000); - // OutputDebugString(fileName); - // OutputDebugString(TEXT("\n")); - return LoadOperations(::LoadLibrary(fileName)); -} - -#ifndef _UNICODE -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } -CSysString GetSysPath(LPCWSTR sysPath) - { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); } - -bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags) -{ - if (g_IsNT) - return LoadOperations(::LoadLibraryExW(fileName, NULL, flags)); - return LoadEx(GetSysPath(fileName), flags); -} -bool CLibrary::Load(LPCWSTR fileName) -{ - if (g_IsNT) - return LoadOperations(::LoadLibraryW(fileName)); - return Load(GetSysPath(fileName)); -} -#endif - -bool MyGetModuleFileName(HMODULE hModule, CSysString &result) -{ - result.Empty(); - TCHAR fullPath[MAX_PATH + 2]; - DWORD size = ::GetModuleFileName(hModule, fullPath, MAX_PATH + 1); - if (size <= MAX_PATH && size != 0) - { - result = fullPath; - return true; - } - return false; -} - -#ifndef _UNICODE -bool MyGetModuleFileName(HMODULE hModule, UString &result) -{ - result.Empty(); - if (g_IsNT) - { - wchar_t fullPath[MAX_PATH + 2]; - DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1); - if (size <= MAX_PATH && size != 0) - { - result = fullPath; - return true; - } - return false; - } - CSysString resultSys; - if (!MyGetModuleFileName(hModule, resultSys)) - return false; - result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage()); - return true; -} -#endif - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.h deleted file mode 100644 index 4c2ffa2b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/DLL.h +++ /dev/null @@ -1,54 +0,0 @@ -// Windows/DLL.h - -#ifndef __WINDOWS_DLL_H -#define __WINDOWS_DLL_H - -#include "../Common/MyString.h" - -namespace NWindows { -namespace NDLL { - -class CLibrary -{ - bool LoadOperations(HMODULE newModule); -protected: - HMODULE _module; -public: - operator HMODULE() const { return _module; } - HMODULE* operator&() { return &_module; } - - CLibrary():_module(NULL) {}; - ~CLibrary(); - void Attach(HMODULE m) - { - Free(); - _module = m; - } - HMODULE Detach() - { - HMODULE m = _module; - _module = NULL; - return m; - } - - // operator HMODULE() const { return _module; }; - bool IsLoaded() const { return (_module != NULL); }; - bool Free(); - bool LoadEx(LPCTSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE); - bool Load(LPCTSTR fileName); - #ifndef _UNICODE - bool LoadEx(LPCWSTR fileName, DWORD flags = LOAD_LIBRARY_AS_DATAFILE); - bool Load(LPCWSTR fileName); - #endif - FARPROC GetProcAddress(LPCSTR procName) const - { return ::GetProcAddress(_module, procName); } -}; - -bool MyGetModuleFileName(HMODULE hModule, CSysString &result); -#ifndef _UNICODE -bool MyGetModuleFileName(HMODULE hModule, UString &result); -#endif - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Defs.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Defs.h deleted file mode 100644 index 898be8d7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Defs.h +++ /dev/null @@ -1,23 +0,0 @@ -// Windows/Defs.h - -#ifndef __WINDOWS_DEFS_H -#define __WINDOWS_DEFS_H - -inline bool BOOLToBool(BOOL value) - { return (value != FALSE); } - -#ifdef _WIN32 -inline bool LRESULTToBool(LRESULT value) - { return (value != FALSE); } -#endif - -inline BOOL BoolToBOOL(bool value) - { return (value ? TRUE: FALSE); } - -inline VARIANT_BOOL BoolToVARIANT_BOOL(bool value) - { return (value ? VARIANT_TRUE: VARIANT_FALSE); } - -inline bool VARIANT_BOOLToBool(VARIANT_BOOL value) - { return (value != VARIANT_FALSE); } - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.cpp deleted file mode 100644 index e559c4cc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Windows/Error.h - -#include "StdAfx.h" - -#include "Windows/Error.h" -#ifndef _UNICODE -#include "Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NError { - -bool MyFormatMessage(DWORD messageID, CSysString &message) -{ - LPVOID msgBuf; - if(::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL,messageID, 0, (LPTSTR) &msgBuf,0, NULL) == 0) - return false; - message = (LPCTSTR)msgBuf; - ::LocalFree(msgBuf); - return true; -} - -#ifndef _UNICODE -bool MyFormatMessage(DWORD messageID, UString &message) -{ - if (g_IsNT) - { - LPVOID msgBuf; - if(::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, messageID, 0, (LPWSTR) &msgBuf, 0, NULL) == 0) - return false; - message = (LPCWSTR)msgBuf; - ::LocalFree(msgBuf); - return true; - } - CSysString messageSys; - bool result = MyFormatMessage(messageID, messageSys); - message = GetUnicodeString(messageSys); - return result; -} -#endif - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.h deleted file mode 100644 index 05b5cd0e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Error.h +++ /dev/null @@ -1,33 +0,0 @@ -// Windows/Error.h - -#ifndef __WINDOWS_ERROR_H -#define __WINDOWS_ERROR_H - -#include "Common/MyString.h" - -namespace NWindows { -namespace NError { - -bool MyFormatMessage(DWORD messageID, CSysString &message); -inline CSysString MyFormatMessage(DWORD messageID) -{ - CSysString message; - MyFormatMessage(messageID, message); - return message; -} -#ifdef _UNICODE -inline UString MyFormatMessageW(DWORD messageID) - { return MyFormatMessage(messageID); } -#else -bool MyFormatMessage(DWORD messageID, UString &message); -inline UString MyFormatMessageW(DWORD messageID) -{ - UString message; - MyFormatMessage(messageID, message); - return message; -} -#endif - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.cpp deleted file mode 100644 index 6d561701..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.cpp +++ /dev/null @@ -1,841 +0,0 @@ -// Windows/FileDir.cpp - -#include "StdAfx.h" - -#include "FileDir.h" -#include "FileName.h" -#include "FileFind.h" -#include "Defs.h" -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -// SetCurrentDirectory doesn't support \\?\ prefix - -#ifdef WIN_LONG_PATH -bool GetLongPathBase(LPCWSTR fileName, UString &res); -bool GetLongPath(LPCWSTR fileName, UString &res); -#endif - -namespace NDirectory { - -#ifndef _UNICODE -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } -static UString GetUnicodePath(const CSysString &sysPath) - { return MultiByteToUnicodeString(sysPath, GetCurrentCodePage()); } -static CSysString GetSysPath(LPCWSTR sysPath) - { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); } -#endif - -bool MyGetWindowsDirectory(CSysString &path) -{ - UINT needLength = ::GetWindowsDirectory(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -bool MyGetSystemDirectory(CSysString &path) -{ - UINT needLength = ::GetSystemDirectory(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#ifndef _UNICODE -bool MyGetWindowsDirectory(UString &path) -{ - if (g_IsNT) - { - UINT needLength = ::GetWindowsDirectoryW(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetWindowsDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} - -bool MyGetSystemDirectory(UString &path) -{ - if (g_IsNT) - { - UINT needLength = ::GetSystemDirectoryW(path.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetSystemDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif - -bool SetDirTime(LPCWSTR fileName, const FILETIME *creationTime, const FILETIME *lastAccessTime, const FILETIME *lastWriteTime) -{ - #ifndef _UNICODE - if (!g_IsNT) - { - ::SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return false; - } - #endif - HANDLE hDir = ::CreateFileW(fileName, GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - #ifdef WIN_LONG_PATH - if (hDir == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - hDir = ::CreateFileW(longPath, GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - } - #endif - - bool res = false; - if (hDir != INVALID_HANDLE_VALUE) - { - res = BOOLToBool(::SetFileTime(hDir, creationTime, lastAccessTime, lastWriteTime)); - ::CloseHandle(hDir); - } - return res; -} - -bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes) -{ - if (::SetFileAttributes(fileName, fileAttributes)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(fileName, longPath)) - return BOOLToBool(::SetFileAttributesW(longPath, fileAttributes)); - #endif - return false; -} - -bool MyRemoveDirectory(LPCTSTR pathName) -{ - if (::RemoveDirectory(pathName)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::RemoveDirectoryW(longPath)); - #endif - return false; -} - -#ifdef WIN_LONG_PATH -bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2) -{ - if (!GetLongPathBase(s1, d1) || !GetLongPathBase(s2, d2)) - return false; - if (d1.IsEmpty() && d2.IsEmpty()) return false; - if (d1.IsEmpty()) d1 = s1; - if (d2.IsEmpty()) d2 = s2; - return true; -} -#endif - -bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName) -{ - if (::MoveFile(existFileName, newFileName)) - return true; - #ifdef WIN_LONG_PATH2 - UString d1, d2; - if (GetLongPaths(existFileName, newFileName, d1, d2)) - return BOOLToBool(::MoveFileW(d1, d2)); - #endif - return false; -} - -#ifndef _UNICODE -bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes) -{ - if (!g_IsNT) - return MySetFileAttributes(GetSysPath(fileName), fileAttributes); - if (::SetFileAttributesW(fileName, fileAttributes)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(fileName, longPath)) - return BOOLToBool(::SetFileAttributesW(longPath, fileAttributes)); - #endif - return false; -} - - -bool MyRemoveDirectory(LPCWSTR pathName) -{ - if (!g_IsNT) - return MyRemoveDirectory(GetSysPath(pathName)); - if (::RemoveDirectoryW(pathName)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::RemoveDirectoryW(longPath)); - #endif - return false; -} - -bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName) -{ - if (!g_IsNT) - return MyMoveFile(GetSysPath(existFileName), GetSysPath(newFileName)); - if (::MoveFileW(existFileName, newFileName)) - return true; - #ifdef WIN_LONG_PATH - UString d1, d2; - if (GetLongPaths(existFileName, newFileName, d1, d2)) - return BOOLToBool(::MoveFileW(d1, d2)); - #endif - return false; -} -#endif - -bool MyCreateDirectory(LPCTSTR pathName) -{ - if (::CreateDirectory(pathName, NULL)) - return true; - #ifdef WIN_LONG_PATH2 - if (::GetLastError() != ERROR_ALREADY_EXISTS) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::CreateDirectoryW(longPath, NULL)); - } - #endif - return false; -} - -#ifndef _UNICODE -bool MyCreateDirectory(LPCWSTR pathName) -{ - if (!g_IsNT) - return MyCreateDirectory(GetSysPath(pathName)); - if (::CreateDirectoryW(pathName, NULL)) - return true; - #ifdef WIN_LONG_PATH - if (::GetLastError() != ERROR_ALREADY_EXISTS) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - return BOOLToBool(::CreateDirectoryW(longPath, NULL)); - } - #endif - return false; -} -#endif - -/* -bool CreateComplexDirectory(LPCTSTR pathName) -{ - NName::CParsedPath path; - path.ParsePath(pathName); - CSysString fullPath = path.Prefix; - DWORD errorCode = ERROR_SUCCESS; - for(int i = 0; i < path.PathParts.Size(); i++) - { - const CSysString &string = path.PathParts[i]; - if(string.IsEmpty()) - { - if(i != path.PathParts.Size() - 1) - return false; - return true; - } - fullPath += path.PathParts[i]; - if (!MyCreateDirectory(fullPath)) - { - DWORD errorCode = GetLastError(); - if(errorCode != ERROR_ALREADY_EXISTS) - return false; - } - fullPath += NName::kDirDelimiter; - } - return true; -} -*/ - -bool CreateComplexDirectory(LPCTSTR _aPathName) -{ - CSysString pathName = _aPathName; - int pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - if (pos > 0 && pos == pathName.Length() - 1) - { - if (pathName.Length() == 3 && pathName[1] == ':') - return true; // Disk folder; - pathName.Delete(pos); - } - CSysString pathName2 = pathName; - pos = pathName.Length(); - for (;;) - { - if(MyCreateDirectory(pathName)) - break; - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - NFind::CFileInfo fileInfo; - if (!NFind::FindFile(pathName, fileInfo)) // For network folders - return true; - if (!fileInfo.IsDirectory()) - return false; - break; - } - pos = pathName.ReverseFind(TEXT(CHAR_PATH_SEPARATOR)); - if (pos < 0 || pos == 0) - return false; - if (pathName[pos - 1] == ':') - return false; - pathName = pathName.Left(pos); - } - pathName = pathName2; - while(pos < pathName.Length()) - { - pos = pathName.Find(TEXT(CHAR_PATH_SEPARATOR), pos + 1); - if (pos < 0) - pos = pathName.Length(); - if (!MyCreateDirectory(pathName.Left(pos))) - return false; - } - return true; -} - -#ifndef _UNICODE - -bool CreateComplexDirectory(LPCWSTR _aPathName) -{ - UString pathName = _aPathName; - int pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR); - if (pos > 0 && pos == pathName.Length() - 1) - { - if (pathName.Length() == 3 && pathName[1] == L':') - return true; // Disk folder; - pathName.Delete(pos); - } - UString pathName2 = pathName; - pos = pathName.Length(); - for (;;) - { - if(MyCreateDirectory(pathName)) - break; - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - NFind::CFileInfoW fileInfo; - if (!NFind::FindFile(pathName, fileInfo)) // For network folders - return true; - if (!fileInfo.IsDirectory()) - return false; - break; - } - pos = pathName.ReverseFind(WCHAR_PATH_SEPARATOR); - if (pos < 0 || pos == 0) - return false; - if (pathName[pos - 1] == L':') - return false; - pathName = pathName.Left(pos); - } - pathName = pathName2; - while(pos < pathName.Length()) - { - pos = pathName.Find(WCHAR_PATH_SEPARATOR, pos + 1); - if (pos < 0) - pos = pathName.Length(); - if (!MyCreateDirectory(pathName.Left(pos))) - return false; - } - return true; -} - -#endif - -bool DeleteFileAlways(LPCTSTR name) -{ - if (!MySetFileAttributes(name, 0)) - return false; - if (::DeleteFile(name)) - return true; - #ifdef WIN_LONG_PATH2 - UString longPath; - if (GetLongPath(name, longPath)) - return BOOLToBool(::DeleteFileW(longPath)); - #endif - return false; -} - -#ifndef _UNICODE -bool DeleteFileAlways(LPCWSTR name) -{ - if (!g_IsNT) - return DeleteFileAlways(GetSysPath(name)); - if (!MySetFileAttributes(name, 0)) - return false; - if (::DeleteFileW(name)) - return true; - #ifdef WIN_LONG_PATH - UString longPath; - if (GetLongPath(name, longPath)) - return BOOLToBool(::DeleteFileW(longPath)); - #endif - return false; -} -#endif - -static bool RemoveDirectorySubItems2(const CSysString pathPrefix, const NFind::CFileInfo &fileInfo) -{ - if(fileInfo.IsDirectory()) - return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name); - return DeleteFileAlways(pathPrefix + fileInfo.Name); -} - -bool RemoveDirectoryWithSubItems(const CSysString &path) -{ - NFind::CFileInfo fileInfo; - CSysString pathPrefix = path + NName::kDirDelimiter; - { - NFind::CEnumerator enumerator(pathPrefix + TCHAR(NName::kAnyStringWildcard)); - while(enumerator.Next(fileInfo)) - if (!RemoveDirectorySubItems2(pathPrefix, fileInfo)) - return false; - } - if (!MySetFileAttributes(path, 0)) - return false; - return MyRemoveDirectory(path); -} - -#ifndef _UNICODE -static bool RemoveDirectorySubItems2(const UString pathPrefix, const NFind::CFileInfoW &fileInfo) -{ - if(fileInfo.IsDirectory()) - return RemoveDirectoryWithSubItems(pathPrefix + fileInfo.Name); - return DeleteFileAlways(pathPrefix + fileInfo.Name); -} -bool RemoveDirectoryWithSubItems(const UString &path) -{ - NFind::CFileInfoW fileInfo; - UString pathPrefix = path + UString(NName::kDirDelimiter); - { - NFind::CEnumeratorW enumerator(pathPrefix + UString(NName::kAnyStringWildcard)); - while(enumerator.Next(fileInfo)) - if (!RemoveDirectorySubItems2(pathPrefix, fileInfo)) - return false; - } - if (!MySetFileAttributes(path, 0)) - return false; - return MyRemoveDirectory(path); -} -#endif - -#ifndef _WIN32_WCE - -bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath) -{ - DWORD needLength = ::GetShortPathName(longPath, shortPath.GetBuffer(MAX_PATH + 1), MAX_PATH + 1); - shortPath.ReleaseBuffer(); - return (needLength > 0 && needLength < MAX_PATH); -} - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, int &fileNamePartStartIndex) -{ - resultPath.Empty(); - LPTSTR fileNamePointer = 0; - LPTSTR buffer = resultPath.GetBuffer(MAX_PATH); - DWORD needLength = ::GetFullPathName(fileName, MAX_PATH + 1, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength == 0) - return false; - if (needLength >= MAX_PATH) - { - #ifdef WIN_LONG_PATH2 - needLength++; - buffer = resultPath.GetBuffer(needLength + 1); - DWORD needLength2 = ::GetFullPathNameW(fileName, needLength, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength2 == 0 || needLength2 > needLength) - #endif - return false; - } - if (fileNamePointer == 0) - fileNamePartStartIndex = lstrlen(fileName); - else - fileNamePartStartIndex = (int)(fileNamePointer - buffer); - return true; -} - -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, int &fileNamePartStartIndex) -{ - resultPath.Empty(); - if (g_IsNT) - { - LPWSTR fileNamePointer = 0; - LPWSTR buffer = resultPath.GetBuffer(MAX_PATH); - DWORD needLength = ::GetFullPathNameW(fileName, MAX_PATH + 1, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength == 0) - return false; - if (needLength >= MAX_PATH) - { - #ifdef WIN_LONG_PATH - needLength++; - buffer = resultPath.GetBuffer(needLength + 1); - DWORD needLength2 = ::GetFullPathNameW(fileName, needLength, buffer, &fileNamePointer); - resultPath.ReleaseBuffer(); - if (needLength2 == 0 || needLength2 > needLength) - #endif - return false; - } - if (fileNamePointer == 0) - fileNamePartStartIndex = MyStringLen(fileName); - else - fileNamePartStartIndex = (int)(fileNamePointer - buffer); - } - else - { - CSysString sysPath; - if (!MyGetFullPathName(GetSysPath(fileName), sysPath, fileNamePartStartIndex)) - return false; - UString resultPath1 = GetUnicodePath(sysPath.Left(fileNamePartStartIndex)); - UString resultPath2 = GetUnicodePath(sysPath.Mid(fileNamePartStartIndex)); - fileNamePartStartIndex = resultPath1.Length(); - resultPath = resultPath1 + resultPath2; - } - return true; -} -#endif - - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &path) -{ - int index; - return MyGetFullPathName(fileName, path, index); -} - -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &path) -{ - int index; - return MyGetFullPathName(fileName, path, index); -} -#endif - -bool GetOnlyName(LPCTSTR fileName, CSysString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Mid(index); - return true; -} - -#ifndef _UNICODE -bool GetOnlyName(LPCWSTR fileName, UString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Mid(index); - return true; -} -#endif - -bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Left(index); - return true; -} - -#ifndef _UNICODE -bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName) -{ - int index; - if (!MyGetFullPathName(fileName, resultName, index)) - return false; - resultName = resultName.Left(index); - return true; -} -#endif - -bool MyGetCurrentDirectory(CSysString &path) -{ - DWORD needLength = ::GetCurrentDirectory(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#ifndef _UNICODE -bool MySetCurrentDirectory(LPCWSTR path) -{ - if (g_IsNT) - return BOOLToBool(::SetCurrentDirectoryW(path)); - return MySetCurrentDirectory(GetSysPath(path)); -} -bool MyGetCurrentDirectory(UString &path) -{ - if (g_IsNT) - { - DWORD needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetCurrentDirectory(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif -#endif - -bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, - CSysString &resultPath, UINT32 &filePart) -{ - LPTSTR filePartPointer; - DWORD value = ::SearchPath(path, fileName, extension, - MAX_PATH, resultPath.GetBuffer(MAX_PATH + 1), &filePartPointer); - filePart = (UINT32)(filePartPointer - (LPCTSTR)resultPath); - resultPath.ReleaseBuffer(); - return (value > 0 && value <= MAX_PATH); -} - -#ifndef _UNICODE -bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, - UString &resultPath, UINT32 &filePart) -{ - if (g_IsNT) - { - LPWSTR filePartPointer = 0; - DWORD value = ::SearchPathW(path, fileName, extension, - MAX_PATH, resultPath.GetBuffer(MAX_PATH + 1), &filePartPointer); - filePart = (UINT32)(filePartPointer - (LPCWSTR)resultPath); - resultPath.ReleaseBuffer(); - return (value > 0 && value <= MAX_PATH); - } - - CSysString sysPath; - if (!MySearchPath( - path != 0 ? (LPCTSTR)GetSysPath(path): 0, - fileName != 0 ? (LPCTSTR)GetSysPath(fileName): 0, - extension != 0 ? (LPCTSTR)GetSysPath(extension): 0, - sysPath, filePart)) - return false; - UString resultPath1 = GetUnicodePath(sysPath.Left(filePart)); - UString resultPath2 = GetUnicodePath(sysPath.Mid(filePart)); - filePart = resultPath1.Length(); - resultPath = resultPath1 + resultPath2; - return true; -} -#endif - -bool MyGetTempPath(CSysString &path) -{ - DWORD needLength = ::GetTempPath(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); -} - -#ifndef _UNICODE -bool MyGetTempPath(UString &path) -{ - path.Empty(); - if (g_IsNT) - { - DWORD needLength = ::GetTempPathW(MAX_PATH + 1, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return (needLength > 0 && needLength <= MAX_PATH); - } - CSysString sysPath; - if (!MyGetTempPath(sysPath)) - return false; - path = GetUnicodePath(sysPath); - return true; -} -#endif - -UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &path) -{ - UINT number = ::GetTempFileName(dirPath, prefix, 0, path.GetBuffer(MAX_PATH + 1)); - path.ReleaseBuffer(); - return number; -} - -#ifndef _UNICODE -UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &path) -{ - if (g_IsNT) - { - UINT number = ::GetTempFileNameW(dirPath, prefix, 0, path.GetBuffer(MAX_PATH)); - path.ReleaseBuffer(); - return number; - } - CSysString sysPath; - UINT number = MyGetTempFileName( - dirPath ? (LPCTSTR)GetSysPath(dirPath): 0, - prefix ? (LPCTSTR)GetSysPath(prefix): 0, - sysPath); - path = GetUnicodePath(sysPath); - return number; -} -#endif - -UINT CTempFile::Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath) -{ - Remove(); - UINT number = MyGetTempFileName(dirPath, prefix, resultPath); - if(number != 0) - { - _fileName = resultPath; - _mustBeDeleted = true; - } - return number; -} - -bool CTempFile::Create(LPCTSTR prefix, CSysString &resultPath) -{ - CSysString tempPath; - if (!MyGetTempPath(tempPath)) - return false; - if (Create(tempPath, prefix, resultPath) != 0) - return true; - if (!MyGetWindowsDirectory(tempPath)) - return false; - return (Create(tempPath, prefix, resultPath) != 0); -} - -bool CTempFile::Remove() -{ - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !DeleteFileAlways(_fileName); - return !_mustBeDeleted; -} - -#ifndef _UNICODE - -UINT CTempFileW::Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath) -{ - Remove(); - UINT number = MyGetTempFileName(dirPath, prefix, resultPath); - if(number != 0) - { - _fileName = resultPath; - _mustBeDeleted = true; - } - return number; -} - -bool CTempFileW::Create(LPCWSTR prefix, UString &resultPath) -{ - UString tempPath; - if (!MyGetTempPath(tempPath)) - return false; - if (Create(tempPath, prefix, resultPath) != 0) - return true; - if (!MyGetWindowsDirectory(tempPath)) - return false; - return (Create(tempPath, prefix, resultPath) != 0); -} - -bool CTempFileW::Remove() -{ - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !DeleteFileAlways(_fileName); - return !_mustBeDeleted; -} - -#endif - -bool CreateTempDirectory(LPCTSTR prefix, CSysString &dirName) -{ - /* - CSysString prefix = tempPath + prefixChars; - CRandom random; - random.Init(); - */ - for (;;) - { - CTempFile tempFile; - if (!tempFile.Create(prefix, dirName)) - return false; - if (!::DeleteFile(dirName)) - return false; - /* - UINT32 randomNumber = random.Generate(); - TCHAR randomNumberString[32]; - _stprintf(randomNumberString, _T("%04X"), randomNumber); - dirName = prefix + randomNumberString; - */ - if(NFind::DoesFileExist(dirName)) - continue; - if (MyCreateDirectory(dirName)) - return true; - if (::GetLastError() != ERROR_ALREADY_EXISTS) - return false; - } -} - -bool CTempDirectory::Create(LPCTSTR prefix) -{ - Remove(); - return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir)); -} - -#ifndef _UNICODE - -bool CreateTempDirectory(LPCWSTR prefix, UString &dirName) -{ - /* - CSysString prefix = tempPath + prefixChars; - CRandom random; - random.Init(); - */ - for (;;) - { - CTempFileW tempFile; - if (!tempFile.Create(prefix, dirName)) - return false; - if (!DeleteFileAlways(dirName)) - return false; - /* - UINT32 randomNumber = random.Generate(); - TCHAR randomNumberString[32]; - _stprintf(randomNumberString, _T("%04X"), randomNumber); - dirName = prefix + randomNumberString; - */ - if(NFind::DoesFileExist(dirName)) - continue; - if (MyCreateDirectory(dirName)) - return true; - if (::GetLastError() != ERROR_ALREADY_EXISTS) - return false; - } -} - -bool CTempDirectoryW::Create(LPCWSTR prefix) -{ - Remove(); - return (_mustBeDeleted = CreateTempDirectory(prefix, _tempDir)); -} - -#endif - -}}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.h deleted file mode 100644 index b6f81351..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileDir.h +++ /dev/null @@ -1,178 +0,0 @@ -// Windows/FileDir.h - -#ifndef __WINDOWS_FILEDIR_H -#define __WINDOWS_FILEDIR_H - -#include "../Common/MyString.h" -#include "Defs.h" - -namespace NWindows { -namespace NFile { -namespace NDirectory { - -#ifdef WIN_LONG_PATH -bool GetLongPaths(LPCWSTR s1, LPCWSTR s2, UString &d1, UString &d2); -#endif - -bool MyGetWindowsDirectory(CSysString &path); -bool MyGetSystemDirectory(CSysString &path); -#ifndef _UNICODE -bool MyGetWindowsDirectory(UString &path); -bool MyGetSystemDirectory(UString &path); -#endif - -bool SetDirTime(LPCWSTR fileName, const FILETIME *creationTime, const FILETIME *lastAccessTime, const FILETIME *lastWriteTime); - -bool MySetFileAttributes(LPCTSTR fileName, DWORD fileAttributes); -bool MyMoveFile(LPCTSTR existFileName, LPCTSTR newFileName); -bool MyRemoveDirectory(LPCTSTR pathName); -bool MyCreateDirectory(LPCTSTR pathName); -bool CreateComplexDirectory(LPCTSTR pathName); -bool DeleteFileAlways(LPCTSTR name); -bool RemoveDirectoryWithSubItems(const CSysString &path); - -#ifndef _UNICODE -bool MySetFileAttributes(LPCWSTR fileName, DWORD fileAttributes); -bool MyMoveFile(LPCWSTR existFileName, LPCWSTR newFileName); -bool MyRemoveDirectory(LPCWSTR pathName); -bool MyCreateDirectory(LPCWSTR pathName); -bool CreateComplexDirectory(LPCWSTR pathName); -bool DeleteFileAlways(LPCWSTR name); -bool RemoveDirectoryWithSubItems(const UString &path); -#endif - -#ifndef _WIN32_WCE -bool MyGetShortPathName(LPCTSTR longPath, CSysString &shortPath); - -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath, - int &fileNamePartStartIndex); -bool MyGetFullPathName(LPCTSTR fileName, CSysString &resultPath); -bool GetOnlyName(LPCTSTR fileName, CSysString &resultName); -bool GetOnlyDirPrefix(LPCTSTR fileName, CSysString &resultName); -#ifndef _UNICODE -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath, - int &fileNamePartStartIndex); -bool MyGetFullPathName(LPCWSTR fileName, UString &resultPath); -bool GetOnlyName(LPCWSTR fileName, UString &resultName); -bool GetOnlyDirPrefix(LPCWSTR fileName, UString &resultName); -#endif - -inline bool MySetCurrentDirectory(LPCTSTR path) - { return BOOLToBool(::SetCurrentDirectory(path)); } -bool MyGetCurrentDirectory(CSysString &resultPath); -#ifndef _UNICODE -bool MySetCurrentDirectory(LPCWSTR path); -bool MyGetCurrentDirectory(UString &resultPath); -#endif -#endif - -bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, - CSysString &resultPath, UINT32 &filePart); -#ifndef _UNICODE -bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, - UString &resultPath, UINT32 &filePart); -#endif - -inline bool MySearchPath(LPCTSTR path, LPCTSTR fileName, LPCTSTR extension, - CSysString &resultPath) -{ - UINT32 value; - return MySearchPath(path, fileName, extension, resultPath, value); -} - -#ifndef _UNICODE -inline bool MySearchPath(LPCWSTR path, LPCWSTR fileName, LPCWSTR extension, - UString &resultPath) -{ - UINT32 value; - return MySearchPath(path, fileName, extension, resultPath, value); -} -#endif - -bool MyGetTempPath(CSysString &resultPath); -#ifndef _UNICODE -bool MyGetTempPath(UString &resultPath); -#endif - -UINT MyGetTempFileName(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); -#ifndef _UNICODE -UINT MyGetTempFileName(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); -#endif - -class CTempFile -{ - bool _mustBeDeleted; - CSysString _fileName; -public: - CTempFile(): _mustBeDeleted(false) {} - ~CTempFile() { Remove(); } - void DisableDeleting() { _mustBeDeleted = false; } - UINT Create(LPCTSTR dirPath, LPCTSTR prefix, CSysString &resultPath); - bool Create(LPCTSTR prefix, CSysString &resultPath); - bool Remove(); -}; - -#ifdef _UNICODE -typedef CTempFile CTempFileW; -#else -class CTempFileW -{ - bool _mustBeDeleted; - UString _fileName; -public: - CTempFileW(): _mustBeDeleted(false) {} - ~CTempFileW() { Remove(); } - void DisableDeleting() { _mustBeDeleted = false; } - UINT Create(LPCWSTR dirPath, LPCWSTR prefix, UString &resultPath); - bool Create(LPCWSTR prefix, UString &resultPath); - bool Remove(); -}; -#endif - -bool CreateTempDirectory(LPCTSTR prefixChars, CSysString &dirName); - -class CTempDirectory -{ - bool _mustBeDeleted; - CSysString _tempDir; -public: - const CSysString &GetPath() const { return _tempDir; } - CTempDirectory(): _mustBeDeleted(false) {} - ~CTempDirectory() { Remove(); } - bool Create(LPCTSTR prefix) ; - bool Remove() - { - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); - return (!_mustBeDeleted); - } - void DisableDeleting() { _mustBeDeleted = false; } -}; - -#ifdef _UNICODE -typedef CTempDirectory CTempDirectoryW; -#else -class CTempDirectoryW -{ - bool _mustBeDeleted; - UString _tempDir; -public: - const UString &GetPath() const { return _tempDir; } - CTempDirectoryW(): _mustBeDeleted(false) {} - ~CTempDirectoryW() { Remove(); } - bool Create(LPCWSTR prefix) ; - bool Remove() - { - if (!_mustBeDeleted) - return true; - _mustBeDeleted = !RemoveDirectoryWithSubItems(_tempDir); - return (!_mustBeDeleted); - } - void DisableDeleting() { _mustBeDeleted = false; } -}; -#endif - -}}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.cpp deleted file mode 100644 index 3b5bdf70..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.cpp +++ /dev/null @@ -1,408 +0,0 @@ -// Windows/FileFind.cpp - -#include "StdAfx.h" - -#include "FileFind.h" -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -bool GetLongPath(LPCWSTR fileName, UString &res); - -namespace NFind { - -static const TCHAR kDot = TEXT('.'); - -bool CFileInfo::IsDots() const -{ - if (!IsDirectory() || Name.IsEmpty()) - return false; - if (Name[0] != kDot) - return false; - return Name.Length() == 1 || (Name[1] == kDot && Name.Length() == 2); -} - -#ifndef _UNICODE -bool CFileInfoW::IsDots() const -{ - if (!IsDirectory() || Name.IsEmpty()) - return false; - if (Name[0] != kDot) - return false; - return Name.Length() == 1 || (Name[1] == kDot && Name.Length() == 2); -} -#endif - -static void ConvertWIN32_FIND_DATA_To_FileInfo( - const WIN32_FIND_DATA &findData, - CFileInfo &fileInfo) -{ - fileInfo.Attributes = findData.dwFileAttributes; - fileInfo.CreationTime = findData.ftCreationTime; - fileInfo.LastAccessTime = findData.ftLastAccessTime; - fileInfo.LastWriteTime = findData.ftLastWriteTime; - fileInfo.Size = (((UInt64)findData.nFileSizeHigh) << 32) + findData.nFileSizeLow; - fileInfo.Name = findData.cFileName; - #ifndef _WIN32_WCE - fileInfo.ReparseTag = findData.dwReserved0; - #else - fileInfo.ObjectID = findData.dwOID; - #endif -} - -#ifndef _UNICODE - -static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } - -static void ConvertWIN32_FIND_DATA_To_FileInfo( - const WIN32_FIND_DATAW &findData, - CFileInfoW &fileInfo) -{ - fileInfo.Attributes = findData.dwFileAttributes; - fileInfo.CreationTime = findData.ftCreationTime; - fileInfo.LastAccessTime = findData.ftLastAccessTime; - fileInfo.LastWriteTime = findData.ftLastWriteTime; - fileInfo.Size = (((UInt64)findData.nFileSizeHigh) << 32) + findData.nFileSizeLow; - fileInfo.Name = findData.cFileName; - #ifndef _WIN32_WCE - fileInfo.ReparseTag = findData.dwReserved0; - #else - fileInfo.ObjectID = findData.dwOID; - #endif -} - -static void ConvertWIN32_FIND_DATA_To_FileInfo( - const WIN32_FIND_DATA &findData, - CFileInfoW &fileInfo) -{ - fileInfo.Attributes = findData.dwFileAttributes; - fileInfo.CreationTime = findData.ftCreationTime; - fileInfo.LastAccessTime = findData.ftLastAccessTime; - fileInfo.LastWriteTime = findData.ftLastWriteTime; - fileInfo.Size = (((UInt64)findData.nFileSizeHigh) << 32) + findData.nFileSizeLow; - fileInfo.Name = GetUnicodeString(findData.cFileName, GetCurrentCodePage()); - #ifndef _WIN32_WCE - fileInfo.ReparseTag = findData.dwReserved0; - #else - fileInfo.ObjectID = findData.dwOID; - #endif -} -#endif - -//////////////////////////////// -// CFindFile - -bool CFindFile::Close() -{ - if (_handle == INVALID_HANDLE_VALUE) - return true; - if (!::FindClose(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - - -bool CFindFile::FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo) -{ - if (!Close()) - return false; - WIN32_FIND_DATA findData; - _handle = ::FindFirstFile(wildcard, &findData); - #ifdef WIN_LONG_PATH2 - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(wildcard, longPath)) - _handle = ::FindFirstFileW(longPath, &findData); - } - #endif - if (_handle == INVALID_HANDLE_VALUE) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - return true; -} - -#ifndef _UNICODE -bool CFindFile::FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo) -{ - if (!Close()) - return false; - if (g_IsNT) - { - WIN32_FIND_DATAW findData; - _handle = ::FindFirstFileW(wildcard, &findData); - #ifdef WIN_LONG_PATH - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(wildcard, longPath)) - _handle = ::FindFirstFileW(longPath, &findData); - } - #endif - if (_handle != INVALID_HANDLE_VALUE) - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - } - else - { - WIN32_FIND_DATAA findData; - _handle = ::FindFirstFileA(UnicodeStringToMultiByte(wildcard, - GetCurrentCodePage()), &findData); - if (_handle != INVALID_HANDLE_VALUE) - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - } - return (_handle != INVALID_HANDLE_VALUE); -} -#endif - -bool CFindFile::FindNext(CFileInfo &fileInfo) -{ - WIN32_FIND_DATA findData; - bool result = BOOLToBool(::FindNextFile(_handle, &findData)); - if (result) - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - return result; -} - -#ifndef _UNICODE -bool CFindFile::FindNext(CFileInfoW &fileInfo) -{ - if (g_IsNT) - { - WIN32_FIND_DATAW findData; - if (!::FindNextFileW(_handle, &findData)) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - } - else - { - WIN32_FIND_DATAA findData; - if (!::FindNextFileA(_handle, &findData)) - return false; - ConvertWIN32_FIND_DATA_To_FileInfo(findData, fileInfo); - } - return true; -} -#endif - -bool FindFile(LPCTSTR wildcard, CFileInfo &fileInfo) -{ - CFindFile finder; - return finder.FindFirst(wildcard, fileInfo); -} - -#ifndef _UNICODE -bool FindFile(LPCWSTR wildcard, CFileInfoW &fileInfo) -{ - CFindFile finder; - return finder.FindFirst(wildcard, fileInfo); -} -#endif - -bool DoesFileExist(LPCTSTR name) -{ - CFileInfo fileInfo; - return FindFile(name, fileInfo); -} - -#ifndef _UNICODE -bool DoesFileExist(LPCWSTR name) -{ - CFileInfoW fileInfo; - return FindFile(name, fileInfo); -} -#endif - -///////////////////////////////////// -// CEnumerator - -bool CEnumerator::NextAny(CFileInfo &fileInfo) -{ - if (_findFile.IsHandleAllocated()) - return _findFile.FindNext(fileInfo); - else - return _findFile.FindFirst(_wildcard, fileInfo); -} - -bool CEnumerator::Next(CFileInfo &fileInfo) -{ - for (;;) - { - if (!NextAny(fileInfo)) - return false; - if (!fileInfo.IsDots()) - return true; - } -} - -bool CEnumerator::Next(CFileInfo &fileInfo, bool &found) -{ - if (Next(fileInfo)) - { - found = true; - return true; - } - found = false; - return (::GetLastError() == ERROR_NO_MORE_FILES); -} - -#ifndef _UNICODE -bool CEnumeratorW::NextAny(CFileInfoW &fileInfo) -{ - if (_findFile.IsHandleAllocated()) - return _findFile.FindNext(fileInfo); - else - return _findFile.FindFirst(_wildcard, fileInfo); -} - -bool CEnumeratorW::Next(CFileInfoW &fileInfo) -{ - for (;;) - { - if (!NextAny(fileInfo)) - return false; - if (!fileInfo.IsDots()) - return true; - } -} - -bool CEnumeratorW::Next(CFileInfoW &fileInfo, bool &found) -{ - if (Next(fileInfo)) - { - found = true; - return true; - } - found = false; - return (::GetLastError() == ERROR_NO_MORE_FILES); -} - -#endif - -//////////////////////////////// -// CFindChangeNotification -// FindFirstChangeNotification can return 0. MSDN doesn't tell about it. - -bool CFindChangeNotification::Close() -{ - if (!IsHandleAllocated()) - return true; - if (!::FindCloseChangeNotification(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - -HANDLE CFindChangeNotification::FindFirst(LPCTSTR pathName, bool watchSubtree, DWORD notifyFilter) -{ - _handle = ::FindFirstChangeNotification(pathName, BoolToBOOL(watchSubtree), notifyFilter); - #ifdef WIN_LONG_PATH2 - if (!IsHandleAllocated()) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter); - } - #endif - return _handle; -} - -#ifndef _UNICODE -HANDLE CFindChangeNotification::FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter) -{ - if (!g_IsNT) - return FindFirst(UnicodeStringToMultiByte(pathName, GetCurrentCodePage()), watchSubtree, notifyFilter); - _handle = ::FindFirstChangeNotificationW(pathName, BoolToBOOL(watchSubtree), notifyFilter); - #ifdef WIN_LONG_PATH - if (!IsHandleAllocated()) - { - UString longPath; - if (GetLongPath(pathName, longPath)) - _handle = ::FindFirstChangeNotificationW(longPath, BoolToBOOL(watchSubtree), notifyFilter); - } - #endif - return _handle; -} -#endif - -#ifndef _WIN32_WCE -bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings) -{ - driveStrings.Clear(); - UINT32 size = GetLogicalDriveStrings(0, NULL); - if (size == 0) - return false; - CSysString buffer; - UINT32 newSize = GetLogicalDriveStrings(size, buffer.GetBuffer(size)); - if (newSize == 0) - return false; - if (newSize > size) - return false; - CSysString string; - for(UINT32 i = 0; i < newSize; i++) - { - TCHAR c = buffer[i]; - if (c == TEXT('\0')) - { - driveStrings.Add(string); - string.Empty(); - } - else - string += c; - } - if (!string.IsEmpty()) - return false; - return true; -} - -#ifndef _UNICODE -bool MyGetLogicalDriveStrings(UStringVector &driveStrings) -{ - driveStrings.Clear(); - if (g_IsNT) - { - UINT32 size = GetLogicalDriveStringsW(0, NULL); - if (size == 0) - return false; - UString buffer; - UINT32 newSize = GetLogicalDriveStringsW(size, buffer.GetBuffer(size)); - if (newSize == 0) - return false; - if (newSize > size) - return false; - UString string; - for(UINT32 i = 0; i < newSize; i++) - { - WCHAR c = buffer[i]; - if (c == L'\0') - { - driveStrings.Add(string); - string.Empty(); - } - else - string += c; - } - return string.IsEmpty(); - } - CSysStringVector driveStringsA; - bool res = MyGetLogicalDriveStrings(driveStringsA); - for (int i = 0; i < driveStringsA.Size(); i++) - driveStrings.Add(GetUnicodeString(driveStringsA[i])); - return res; -} -#endif - -#endif - -}}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.h deleted file mode 100644 index 87846fde..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileFind.h +++ /dev/null @@ -1,153 +0,0 @@ -// Windows/FileFind.h - -#ifndef __WINDOWS_FILEFIND_H -#define __WINDOWS_FILEFIND_H - -#include "../Common/MyString.h" -#include "../Common/Types.h" -#include "FileName.h" -#include "Defs.h" - -namespace NWindows { -namespace NFile { -namespace NFind { - -namespace NAttributes -{ - inline bool IsReadOnly(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_READONLY) != 0; } - inline bool IsHidden(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_HIDDEN) != 0; } - inline bool IsSystem(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_SYSTEM) != 0; } - inline bool IsDirectory(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } - inline bool IsArchived(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_ARCHIVE) != 0; } - inline bool IsCompressed(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_COMPRESSED) != 0; } - inline bool IsEncrypted(DWORD attributes) { return (attributes & FILE_ATTRIBUTE_ENCRYPTED) != 0; } -} - -class CFileInfoBase -{ - bool MatchesMask(UINT32 mask) const { return ((Attributes & mask) != 0); } -public: - DWORD Attributes; - FILETIME CreationTime; - FILETIME LastAccessTime; - FILETIME LastWriteTime; - UInt64 Size; - - #ifndef _WIN32_WCE - UINT32 ReparseTag; - #else - DWORD ObjectID; - #endif - - bool IsArchived() const { return MatchesMask(FILE_ATTRIBUTE_ARCHIVE); } - bool IsCompressed() const { return MatchesMask(FILE_ATTRIBUTE_COMPRESSED); } - bool IsDirectory() const { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); } - bool IsEncrypted() const { return MatchesMask(FILE_ATTRIBUTE_ENCRYPTED); } - bool IsHidden() const { return MatchesMask(FILE_ATTRIBUTE_HIDDEN); } - bool IsNormal() const { return MatchesMask(FILE_ATTRIBUTE_NORMAL); } - bool IsOffline() const { return MatchesMask(FILE_ATTRIBUTE_OFFLINE); } - bool IsReadOnly() const { return MatchesMask(FILE_ATTRIBUTE_READONLY); } - bool HasReparsePoint() const { return MatchesMask(FILE_ATTRIBUTE_REPARSE_POINT); } - bool IsSparse() const { return MatchesMask(FILE_ATTRIBUTE_SPARSE_FILE); } - bool IsSystem() const { return MatchesMask(FILE_ATTRIBUTE_SYSTEM); } - bool IsTemporary() const { return MatchesMask(FILE_ATTRIBUTE_TEMPORARY); } -}; - -class CFileInfo: public CFileInfoBase -{ -public: - CSysString Name; - bool IsDots() const; -}; - -#ifdef _UNICODE -typedef CFileInfo CFileInfoW; -#else -class CFileInfoW: public CFileInfoBase -{ -public: - UString Name; - bool IsDots() const; -}; -#endif - -class CFindFile -{ - friend class CEnumerator; - HANDLE _handle; -public: - bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE; } - CFindFile(): _handle(INVALID_HANDLE_VALUE) {} - ~CFindFile() { Close(); } - bool FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo); - bool FindNext(CFileInfo &fileInfo); - #ifndef _UNICODE - bool FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo); - bool FindNext(CFileInfoW &fileInfo); - #endif - bool Close(); -}; - -bool FindFile(LPCTSTR wildcard, CFileInfo &fileInfo); - -bool DoesFileExist(LPCTSTR name); -#ifndef _UNICODE -bool FindFile(LPCWSTR wildcard, CFileInfoW &fileInfo); -bool DoesFileExist(LPCWSTR name); -#endif - -class CEnumerator -{ - CFindFile _findFile; - CSysString _wildcard; - bool NextAny(CFileInfo &fileInfo); -public: - CEnumerator(): _wildcard(NName::kAnyStringWildcard) {} - CEnumerator(const CSysString &wildcard): _wildcard(wildcard) {} - bool Next(CFileInfo &fileInfo); - bool Next(CFileInfo &fileInfo, bool &found); -}; - -#ifdef _UNICODE -typedef CEnumerator CEnumeratorW; -#else -class CEnumeratorW -{ - CFindFile _findFile; - UString _wildcard; - bool NextAny(CFileInfoW &fileInfo); -public: - CEnumeratorW(): _wildcard(NName::kAnyStringWildcard) {} - CEnumeratorW(const UString &wildcard): _wildcard(wildcard) {} - bool Next(CFileInfoW &fileInfo); - bool Next(CFileInfoW &fileInfo, bool &found); -}; -#endif - -class CFindChangeNotification -{ - HANDLE _handle; -public: - operator HANDLE () { return _handle; } - bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE && _handle != 0; } - CFindChangeNotification(): _handle(INVALID_HANDLE_VALUE) {} - ~CFindChangeNotification() { Close(); } - bool Close(); - HANDLE FindFirst(LPCTSTR pathName, bool watchSubtree, DWORD notifyFilter); - #ifndef _UNICODE - HANDLE FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter); - #endif - bool FindNext() { return BOOLToBool(::FindNextChangeNotification(_handle)); } -}; - -#ifndef _WIN32_WCE -bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings); -#ifndef _UNICODE -bool MyGetLogicalDriveStrings(UStringVector &driveStrings); -#endif -#endif - -}}} - -#endif - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.cpp deleted file mode 100644 index effd4862..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.cpp +++ /dev/null @@ -1,318 +0,0 @@ -// Windows/FileIO.cpp - -#include "StdAfx.h" - -#include "FileIO.h" -#include "Defs.h" -#ifdef WIN_LONG_PATH -#include "../Common/MyString.h" -#endif -#ifndef _UNICODE -#include "../Common/StringConvert.h" -#endif - -#ifndef _UNICODE -extern bool g_IsNT; -#endif - -namespace NWindows { -namespace NFile { - -#if defined(WIN_LONG_PATH) && defined(_UNICODE) -#define WIN_LONG_PATH2 -#endif - -#ifdef WIN_LONG_PATH -bool GetLongPathBase(LPCWSTR s, UString &res) -{ - res.Empty(); - int len = MyStringLen(s); - wchar_t c = s[0]; - if (len < 1 || c == L'\\' || c == L'.' && (len == 1 || len == 2 && s[1] == L'.')) - return true; - UString curDir; - bool isAbs = false; - if (len > 3) - isAbs = (s[1] == L':' && s[2] == L'\\' && (c >= L'a' && c <= L'z' || c >= L'A' && c <= L'Z')); - - if (!isAbs) - { - DWORD needLength = ::GetCurrentDirectoryW(MAX_PATH + 1, curDir.GetBuffer(MAX_PATH + 1)); - curDir.ReleaseBuffer(); - if (needLength == 0 || needLength > MAX_PATH) - return false; - if (curDir[curDir.Length() - 1] != L'\\') - curDir += L'\\'; - } - res = UString(L"\\\\?\\") + curDir + s; - return true; -} - -bool GetLongPath(LPCWSTR path, UString &longPath) -{ - if (GetLongPathBase(path, longPath)) - return !longPath.IsEmpty(); - return false; -} -#endif - -namespace NIO { - -CFileBase::~CFileBase() { Close(); } - -bool CFileBase::Create(LPCTSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - if (!Close()) - return false; - _handle = ::CreateFile(fileName, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - #ifdef WIN_LONG_PATH2 - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - _handle = ::CreateFileW(longPath, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - } - #endif - return (_handle != INVALID_HANDLE_VALUE); -} - -#ifndef _UNICODE -bool CFileBase::Create(LPCWSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) -{ - if (!g_IsNT) - return Create(UnicodeStringToMultiByte(fileName, ::AreFileApisANSI() ? CP_ACP : CP_OEMCP), - desiredAccess, shareMode, creationDisposition, flagsAndAttributes); - if (!Close()) - return false; - _handle = ::CreateFileW(fileName, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - #ifdef WIN_LONG_PATH - if (_handle == INVALID_HANDLE_VALUE) - { - UString longPath; - if (GetLongPath(fileName, longPath)) - _handle = ::CreateFileW(longPath, desiredAccess, shareMode, - (LPSECURITY_ATTRIBUTES)NULL, creationDisposition, - flagsAndAttributes, (HANDLE)NULL); - } - #endif - return (_handle != INVALID_HANDLE_VALUE); -} -#endif - -bool CFileBase::Close() -{ - if (_handle == INVALID_HANDLE_VALUE) - return true; - if (!::CloseHandle(_handle)) - return false; - _handle = INVALID_HANDLE_VALUE; - return true; -} - -bool CFileBase::GetPosition(UInt64 &position) const -{ - return Seek(0, FILE_CURRENT, position); -} - -bool CFileBase::GetLength(UInt64 &length) const -{ - DWORD sizeHigh; - DWORD sizeLow = ::GetFileSize(_handle, &sizeHigh); - if(sizeLow == 0xFFFFFFFF) - if(::GetLastError() != NO_ERROR) - return false; - length = (((UInt64)sizeHigh) << 32) + sizeLow; - return true; -} - -bool CFileBase::Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const -{ - LARGE_INTEGER value; - value.QuadPart = distanceToMove; - value.LowPart = ::SetFilePointer(_handle, value.LowPart, &value.HighPart, moveMethod); - if (value.LowPart == 0xFFFFFFFF) - if(::GetLastError() != NO_ERROR) - return false; - newPosition = value.QuadPart; - return true; -} - -bool CFileBase::Seek(UInt64 position, UInt64 &newPosition) -{ - return Seek(position, FILE_BEGIN, newPosition); -} - -bool CFileBase::SeekToBegin() -{ - UInt64 newPosition; - return Seek(0, newPosition); -} - -bool CFileBase::SeekToEnd(UInt64 &newPosition) -{ - return Seek(0, FILE_END, newPosition); -} - -bool CFileBase::GetFileInformation(CByHandleFileInfo &fileInfo) const -{ - BY_HANDLE_FILE_INFORMATION winFileInfo; - if(!::GetFileInformationByHandle(_handle, &winFileInfo)) - return false; - fileInfo.Attributes = winFileInfo.dwFileAttributes; - fileInfo.CreationTime = winFileInfo.ftCreationTime; - fileInfo.LastAccessTime = winFileInfo.ftLastAccessTime; - fileInfo.LastWriteTime = winFileInfo.ftLastWriteTime; - fileInfo.VolumeSerialNumber = winFileInfo.dwFileAttributes; - fileInfo.Size = (((UInt64)winFileInfo.nFileSizeHigh) << 32) + winFileInfo.nFileSizeLow; - fileInfo.NumberOfLinks = winFileInfo.nNumberOfLinks; - fileInfo.FileIndex = (((UInt64)winFileInfo.nFileIndexHigh) << 32) + winFileInfo.nFileIndexLow; - return true; -} - -///////////////////////// -// CInFile - -bool CInFile::Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return Create(fileName, GENERIC_READ, shareMode, creationDisposition, flagsAndAttributes); } - -bool CInFile::OpenShared(LPCTSTR fileName, bool shareForWrite) -{ return Open(fileName, FILE_SHARE_READ | (shareForWrite ? FILE_SHARE_WRITE : 0), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); } - -bool CInFile::Open(LPCTSTR fileName) - { return OpenShared(fileName, false); } - -#ifndef _UNICODE -bool CInFile::Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return Create(fileName, GENERIC_READ, shareMode, creationDisposition, flagsAndAttributes); } - -bool CInFile::OpenShared(LPCWSTR fileName, bool shareForWrite) -{ return Open(fileName, FILE_SHARE_READ | (shareForWrite ? FILE_SHARE_WRITE : 0), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); } - -bool CInFile::Open(LPCWSTR fileName) - { return OpenShared(fileName, false); } -#endif - -// ReadFile and WriteFile functions in Windows have BUG: -// If you Read or Write 64MB or more (probably min_failure_size = 64MB - 32KB + 1) -// from/to Network file, it returns ERROR_NO_SYSTEM_RESOURCES -// (Insufficient system resources exist to complete the requested service). - -// Probably in some version of Windows there are problems with other sizes: -// for 32 MB (maybe also for 16 MB). -// And message can be "Network connection was lost" - -static UInt32 kChunkSizeMax = (1 << 22); - -bool CInFile::ReadPart(void *data, UInt32 size, UInt32 &processedSize) -{ - if (size > kChunkSizeMax) - size = kChunkSizeMax; - DWORD processedLoc = 0; - bool res = BOOLToBool(::ReadFile(_handle, data, size, &processedLoc, NULL)); - processedSize = (UInt32)processedLoc; - return res; -} - -bool CInFile::Read(void *data, UInt32 size, UInt32 &processedSize) -{ - processedSize = 0; - do - { - UInt32 processedLoc = 0; - bool res = ReadPart(data, size, processedLoc); - processedSize += processedLoc; - if (!res) - return false; - if (processedLoc == 0) - return true; - data = (void *)((unsigned char *)data + processedLoc); - size -= processedLoc; - } - while (size > 0); - return true; -} - -///////////////////////// -// COutFile - -bool COutFile::Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return CFileBase::Create(fileName, GENERIC_WRITE, shareMode, creationDisposition, flagsAndAttributes); } - -static inline DWORD GetCreationDisposition(bool createAlways) - { return createAlways? CREATE_ALWAYS: CREATE_NEW; } - -bool COutFile::Open(LPCTSTR fileName, DWORD creationDisposition) - { return Open(fileName, FILE_SHARE_READ, creationDisposition, FILE_ATTRIBUTE_NORMAL); } - -bool COutFile::Create(LPCTSTR fileName, bool createAlways) - { return Open(fileName, GetCreationDisposition(createAlways)); } - -#ifndef _UNICODE - -bool COutFile::Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes) - { return CFileBase::Create(fileName, GENERIC_WRITE, shareMode, creationDisposition, flagsAndAttributes); } - -bool COutFile::Open(LPCWSTR fileName, DWORD creationDisposition) - { return Open(fileName, FILE_SHARE_READ, creationDisposition, FILE_ATTRIBUTE_NORMAL); } - -bool COutFile::Create(LPCWSTR fileName, bool createAlways) - { return Open(fileName, GetCreationDisposition(createAlways)); } - -#endif - -bool COutFile::SetTime(const FILETIME *creationTime, const FILETIME *lastAccessTime, const FILETIME *lastWriteTime) - { return BOOLToBool(::SetFileTime(_handle, creationTime, lastAccessTime, lastWriteTime)); } - -bool COutFile::SetLastWriteTime(const FILETIME *lastWriteTime) - { return SetTime(NULL, NULL, lastWriteTime); } - -bool COutFile::WritePart(const void *data, UInt32 size, UInt32 &processedSize) -{ - if (size > kChunkSizeMax) - size = kChunkSizeMax; - DWORD processedLoc = 0; - bool res = BOOLToBool(::WriteFile(_handle, data, size, &processedLoc, NULL)); - processedSize = (UInt32)processedLoc; - return res; -} - -bool COutFile::Write(const void *data, UInt32 size, UInt32 &processedSize) -{ - processedSize = 0; - do - { - UInt32 processedLoc = 0; - bool res = WritePart(data, size, processedLoc); - processedSize += processedLoc; - if (!res) - return false; - if (processedLoc == 0) - return true; - data = (const void *)((const unsigned char *)data + processedLoc); - size -= processedLoc; - } - while (size > 0); - return true; -} - -bool COutFile::SetEndOfFile() { return BOOLToBool(::SetEndOfFile(_handle)); } - -bool COutFile::SetLength(UInt64 length) -{ - UInt64 newPosition; - if(!Seek(length, newPosition)) - return false; - if(newPosition != length) - return false; - return SetEndOfFile(); -} - -}}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.h deleted file mode 100644 index a7ee8808..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileIO.h +++ /dev/null @@ -1,99 +0,0 @@ -// Windows/FileIO.h - -#ifndef __WINDOWS_FILEIO_H -#define __WINDOWS_FILEIO_H - -#include "../Common/Types.h" - -namespace NWindows { -namespace NFile { -namespace NIO { - -struct CByHandleFileInfo -{ - DWORD Attributes; - FILETIME CreationTime; - FILETIME LastAccessTime; - FILETIME LastWriteTime; - DWORD VolumeSerialNumber; - UInt64 Size; - DWORD NumberOfLinks; - UInt64 FileIndex; -}; - -class CFileBase -{ -protected: - HANDLE _handle; - bool Create(LPCTSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - #ifndef _UNICODE - bool Create(LPCWSTR fileName, DWORD desiredAccess, - DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - #endif - -public: - CFileBase(): _handle(INVALID_HANDLE_VALUE){}; - ~CFileBase(); - - bool Close(); - - bool GetPosition(UInt64 &position) const; - bool GetLength(UInt64 &length) const; - - bool Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const; - bool Seek(UInt64 position, UInt64 &newPosition); - bool SeekToBegin(); - bool SeekToEnd(UInt64 &newPosition); - - bool GetFileInformation(CByHandleFileInfo &fileInfo) const; -}; - -class CInFile: public CFileBase -{ -public: - bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool OpenShared(LPCTSTR fileName, bool shareForWrite); - bool Open(LPCTSTR fileName); - #ifndef _UNICODE - bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool OpenShared(LPCWSTR fileName, bool shareForWrite); - bool Open(LPCWSTR fileName); - #endif - bool ReadPart(void *data, UInt32 size, UInt32 &processedSize); - bool Read(void *data, UInt32 size, UInt32 &processedSize); -}; - -class COutFile: public CFileBase -{ - // DWORD m_CreationDisposition; -public: - // COutFile(): m_CreationDisposition(CREATE_NEW){}; - bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool Open(LPCTSTR fileName, DWORD creationDisposition); - bool Create(LPCTSTR fileName, bool createAlways); - - #ifndef _UNICODE - bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); - bool Open(LPCWSTR fileName, DWORD creationDisposition); - bool Create(LPCWSTR fileName, bool createAlways); - #endif - - /* - void SetOpenCreationDisposition(DWORD creationDisposition) - { m_CreationDisposition = creationDisposition; } - void SetOpenCreationDispositionCreateAlways() - { m_CreationDisposition = CREATE_ALWAYS; } - */ - - bool SetTime(const FILETIME *creationTime, const FILETIME *lastAccessTime, const FILETIME *lastWriteTime); - bool SetLastWriteTime(const FILETIME *lastWriteTime); - bool WritePart(const void *data, UInt32 size, UInt32 &processedSize); - bool Write(const void *data, UInt32 size, UInt32 &processedSize); - bool SetEndOfFile(); - bool SetLength(UInt64 length); -}; - -}}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.cpp deleted file mode 100644 index d884afb1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Windows/FileMapping.cpp - -#include "StdAfx.h" - -#include "Windows/FileMapping.h" - -namespace NWindows { -namespace NFile { -namespace NMapping { - - - - -}}} \ No newline at end of file diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.h deleted file mode 100644 index 22db8f17..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileMapping.h +++ /dev/null @@ -1,50 +0,0 @@ -// Windows/FileMapping.h - -#ifndef __WINDOWS_FILEMAPPING_H -#define __WINDOWS_FILEMAPPING_H - -#include "Windows/Handle.h" -#include "Windows/Defs.h" - -namespace NWindows { -// namespace NFile { -// namespace NMapping { - -class CFileMapping: public CHandle -{ -public: - bool Create(HANDLE file, LPSECURITY_ATTRIBUTES attributes, - DWORD protect, UINT64 maximumSize, LPCTSTR name) - { - _handle = ::CreateFileMapping(file, attributes, - protect, DWORD(maximumSize >> 32), DWORD(maximumSize), name); - return (_handle != NULL); - } - - bool Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name) - { - _handle = ::OpenFileMapping(desiredAccess, BoolToBOOL(inheritHandle), name); - return (_handle != NULL); - } - - LPVOID MapViewOfFile(DWORD desiredAccess, UINT64 fileOffset, - SIZE_T numberOfBytesToMap) - { - return ::MapViewOfFile(_handle, desiredAccess, - DWORD(fileOffset >> 32), DWORD(fileOffset), numberOfBytesToMap); - } - - LPVOID MapViewOfFileEx(DWORD desiredAccess, UINT64 fileOffset, - SIZE_T numberOfBytesToMap, LPVOID baseAddress) - { - return ::MapViewOfFileEx(_handle, desiredAccess, - DWORD(fileOffset >> 32), DWORD(fileOffset), - numberOfBytesToMap, baseAddress); - } - - -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.cpp deleted file mode 100644 index 57c357ff..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// Windows/FileName.cpp - -#include "StdAfx.h" - -#include "Windows/FileName.h" -#include "Common/Wildcard.h" - -namespace NWindows { -namespace NFile { -namespace NName { - -void NormalizeDirPathPrefix(CSysString &dirPath) -{ - if (dirPath.IsEmpty()) - return; - if (dirPath.ReverseFind(kDirDelimiter) != dirPath.Length() - 1) - dirPath += kDirDelimiter; -} - -#ifndef _UNICODE -void NormalizeDirPathPrefix(UString &dirPath) -{ - if (dirPath.IsEmpty()) - return; - if (dirPath.ReverseFind(wchar_t(kDirDelimiter)) != dirPath.Length() - 1) - dirPath += wchar_t(kDirDelimiter); -} -#endif - -#ifdef _WIN32 - -const wchar_t kExtensionDelimiter = L'.'; - -void SplitNameToPureNameAndExtension(const UString &fullName, - UString &pureName, UString &extensionDelimiter, UString &extension) -{ - int index = fullName.ReverseFind(kExtensionDelimiter); - if (index < 0) - { - pureName = fullName; - extensionDelimiter.Empty(); - extension.Empty(); - } - else - { - pureName = fullName.Left(index); - extensionDelimiter = kExtensionDelimiter; - extension = fullName.Mid(index + 1); - } -} - -#endif - -}}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.h deleted file mode 100644 index 2eab2679..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/FileName.h +++ /dev/null @@ -1,27 +0,0 @@ -// Windows/FileName.h - -#ifndef __WINDOWS_FILENAME_H -#define __WINDOWS_FILENAME_H - -#include "../Common/MyString.h" - -namespace NWindows { -namespace NFile { -namespace NName { - -const TCHAR kDirDelimiter = CHAR_PATH_SEPARATOR; -const TCHAR kAnyStringWildcard = '*'; - -void NormalizeDirPathPrefix(CSysString &dirPath); // ensures that it ended with '\\' -#ifndef _UNICODE -void NormalizeDirPathPrefix(UString &dirPath); // ensures that it ended with '\\' -#endif - -#ifdef _WIN32 -void SplitNameToPureNameAndExtension(const UString &fullName, - UString &pureName, UString &extensionDelimiter, UString &extension); -#endif - -}}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Handle.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Handle.h deleted file mode 100644 index d4d8aae5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Handle.h +++ /dev/null @@ -1,37 +0,0 @@ -// Windows/Handle.h - -#ifndef __WINDOWS_HANDLE_H -#define __WINDOWS_HANDLE_H - -namespace NWindows { - -class CHandle -{ -protected: - HANDLE _handle; -public: - operator HANDLE() { return _handle; } - CHandle(): _handle(NULL) {} - ~CHandle() { Close(); } - bool Close() - { - if (_handle == NULL) - return true; - if (!::CloseHandle(_handle)) - return false; - _handle = NULL; - return true; - } - void Attach(HANDLE handle) - { _handle = handle; } - HANDLE Detach() - { - HANDLE handle = _handle; - _handle = NULL; - return handle; - } -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.cpp deleted file mode 100644 index b468e528..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// Common/MemoryLock.cpp - -#include "StdAfx.h" - -namespace NWindows { -namespace NSecurity { - -#ifndef _UNICODE -typedef BOOL (WINAPI * OpenProcessTokenP)(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle); -typedef BOOL (WINAPI * LookupPrivilegeValueP)(LPCTSTR lpSystemName, LPCTSTR lpName, PLUID lpLuid); -typedef BOOL (WINAPI * AdjustTokenPrivilegesP)(HANDLE TokenHandle, BOOL DisableAllPrivileges, - PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState,PDWORD ReturnLength); -#endif - -#ifdef _UNICODE -bool EnableLockMemoryPrivilege( -#else -static bool EnableLockMemoryPrivilege2(HMODULE hModule, -#endif -bool enable) -{ - #ifndef _UNICODE - if (hModule == NULL) - return false; - OpenProcessTokenP openProcessToken = (OpenProcessTokenP)GetProcAddress(hModule, "OpenProcessToken"); - LookupPrivilegeValueP lookupPrivilegeValue = (LookupPrivilegeValueP)GetProcAddress(hModule, "LookupPrivilegeValueA" ); - AdjustTokenPrivilegesP adjustTokenPrivileges = (AdjustTokenPrivilegesP)GetProcAddress(hModule, "AdjustTokenPrivileges"); - if (openProcessToken == NULL || adjustTokenPrivileges == NULL || lookupPrivilegeValue == NULL) - return false; - #endif - - HANDLE token; - if (! - #ifdef _UNICODE - ::OpenProcessToken - #else - openProcessToken - #endif - (::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) - return false; - TOKEN_PRIVILEGES tp; - bool res = false; - if ( - #ifdef _UNICODE - ::LookupPrivilegeValue - #else - lookupPrivilegeValue - #endif - (NULL, SE_LOCK_MEMORY_NAME, &(tp.Privileges[0].Luid))) - { - tp.PrivilegeCount = 1; - tp.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED: 0; - if ( - #ifdef _UNICODE - ::AdjustTokenPrivileges - #else - adjustTokenPrivileges - #endif - (token, FALSE, &tp, 0, NULL, NULL)) - res = (GetLastError() == ERROR_SUCCESS); - } - ::CloseHandle(token); - return res; -} - -#ifndef _UNICODE -bool EnableLockMemoryPrivilege(bool enable) -{ - HMODULE hModule = LoadLibrary(TEXT("Advapi32.dll")); - if(hModule == NULL) - return false; - bool res = EnableLockMemoryPrivilege2(hModule, enable); - ::FreeLibrary(hModule); - return res; -} -#endif - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.h deleted file mode 100644 index 03a88b41..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/MemoryLock.h +++ /dev/null @@ -1,13 +0,0 @@ -// Windows/MemoryLock.h - -#ifndef __WINDOWS_MEMORYLOCK_H -#define __WINDOWS_MEMORYLOCK_H - -namespace NWindows { -namespace NSecurity { - -bool EnableLockMemoryPrivilege(bool enable = true); - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.cpp deleted file mode 100644 index 690e2b6c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.cpp +++ /dev/null @@ -1,312 +0,0 @@ -// Windows/PropVariant.cpp - -#include "StdAfx.h" - -#include "PropVariant.h" - -#include "../Common/Defs.h" - -namespace NWindows { -namespace NCOM { - -CPropVariant::CPropVariant(const PROPVARIANT& varSrc) -{ - vt = VT_EMPTY; - InternalCopy(&varSrc); -} - -CPropVariant::CPropVariant(const CPropVariant& varSrc) -{ - vt = VT_EMPTY; - InternalCopy(&varSrc); -} - -CPropVariant::CPropVariant(BSTR bstrSrc) -{ - vt = VT_EMPTY; - *this = bstrSrc; -} - -CPropVariant::CPropVariant(LPCOLESTR lpszSrc) -{ - vt = VT_EMPTY; - *this = lpszSrc; -} - -CPropVariant& CPropVariant::operator=(const CPropVariant& varSrc) -{ - InternalCopy(&varSrc); - return *this; -} -CPropVariant& CPropVariant::operator=(const PROPVARIANT& varSrc) -{ - InternalCopy(&varSrc); - return *this; -} - -CPropVariant& CPropVariant::operator=(BSTR bstrSrc) -{ - *this = (LPCOLESTR)bstrSrc; - return *this; -} - -CPropVariant& CPropVariant::operator=(LPCOLESTR lpszSrc) -{ - InternalClear(); - vt = VT_BSTR; - wReserved1 = 0; - bstrVal = ::SysAllocString(lpszSrc); - if (bstrVal == NULL && lpszSrc != NULL) - { - vt = VT_ERROR; - scode = E_OUTOFMEMORY; - } - return *this; -} - - -CPropVariant& CPropVariant::operator=(bool bSrc) -{ - if (vt != VT_BOOL) - { - InternalClear(); - vt = VT_BOOL; - } - boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE; - return *this; -} - -CPropVariant& CPropVariant::operator=(UInt32 value) -{ - if (vt != VT_UI4) - { - InternalClear(); - vt = VT_UI4; - } - ulVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(UInt64 value) -{ - if (vt != VT_UI8) - { - InternalClear(); - vt = VT_UI8; - } - uhVal.QuadPart = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(const FILETIME &value) -{ - if (vt != VT_FILETIME) - { - InternalClear(); - vt = VT_FILETIME; - } - filetime = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int32 value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - - return *this; -} - -CPropVariant& CPropVariant::operator=(Byte value) -{ - if (vt != VT_UI1) - { - InternalClear(); - vt = VT_UI1; - } - bVal = value; - return *this; -} - -CPropVariant& CPropVariant::operator=(Int16 value) -{ - if (vt != VT_I2) - { - InternalClear(); - vt = VT_I2; - } - iVal = value; - return *this; -} - -/* -CPropVariant& CPropVariant::operator=(LONG value) -{ - if (vt != VT_I4) - { - InternalClear(); - vt = VT_I4; - } - lVal = value; - return *this; -} -*/ - -static HRESULT MyPropVariantClear(PROPVARIANT *propVariant) -{ - switch(propVariant->vt) - { - case VT_UI1: - case VT_I1: - case VT_I2: - case VT_UI2: - case VT_BOOL: - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_INT: - case VT_UINT: - case VT_ERROR: - case VT_FILETIME: - case VT_UI8: - case VT_R8: - case VT_CY: - case VT_DATE: - propVariant->vt = VT_EMPTY; - propVariant->wReserved1 = 0; - return S_OK; - } - return ::VariantClear((VARIANTARG *)propVariant); -} - -HRESULT CPropVariant::Clear() -{ - return MyPropVariantClear(this); -} - -HRESULT CPropVariant::Copy(const PROPVARIANT* pSrc) -{ - ::VariantClear((tagVARIANT *)this); - switch(pSrc->vt) - { - case VT_UI1: - case VT_I1: - case VT_I2: - case VT_UI2: - case VT_BOOL: - case VT_I4: - case VT_UI4: - case VT_R4: - case VT_INT: - case VT_UINT: - case VT_ERROR: - case VT_FILETIME: - case VT_UI8: - case VT_R8: - case VT_CY: - case VT_DATE: - memmove((PROPVARIANT*)this, pSrc, sizeof(PROPVARIANT)); - return S_OK; - } - return ::VariantCopy((tagVARIANT *)this, (tagVARIANT *)(pSrc)); -} - - -HRESULT CPropVariant::Attach(PROPVARIANT* pSrc) -{ - HRESULT hr = Clear(); - if (FAILED(hr)) - return hr; - memcpy(this, pSrc, sizeof(PROPVARIANT)); - pSrc->vt = VT_EMPTY; - return S_OK; -} - -HRESULT CPropVariant::Detach(PROPVARIANT* pDest) -{ - HRESULT hr = MyPropVariantClear(pDest); - if (FAILED(hr)) - return hr; - memcpy(pDest, this, sizeof(PROPVARIANT)); - vt = VT_EMPTY; - return S_OK; -} - -HRESULT CPropVariant::InternalClear() -{ - HRESULT hr = Clear(); - if (FAILED(hr)) - { - vt = VT_ERROR; - scode = hr; - } - return hr; -} - -void CPropVariant::InternalCopy(const PROPVARIANT* pSrc) -{ - HRESULT hr = Copy(pSrc); - if (FAILED(hr)) - { - vt = VT_ERROR; - scode = hr; - } -} - -int CPropVariant::Compare(const CPropVariant &a) -{ - if(vt != a.vt) - return 0; // it's mean some bug - switch (vt) - { - case VT_EMPTY: - return 0; - - /* - case VT_I1: - return MyCompare(cVal, a.cVal); - */ - case VT_UI1: - return MyCompare(bVal, a.bVal); - - case VT_I2: - return MyCompare(iVal, a.iVal); - case VT_UI2: - return MyCompare(uiVal, a.uiVal); - - case VT_I4: - return MyCompare(lVal, a.lVal); - /* - case VT_INT: - return MyCompare(intVal, a.intVal); - */ - case VT_UI4: - return MyCompare(ulVal, a.ulVal); - /* - case VT_UINT: - return MyCompare(uintVal, a.uintVal); - */ - case VT_I8: - return MyCompare(hVal.QuadPart, a.hVal.QuadPart); - case VT_UI8: - return MyCompare(uhVal.QuadPart, a.uhVal.QuadPart); - - case VT_BOOL: - return -MyCompare(boolVal, a.boolVal); - - case VT_FILETIME: - return ::CompareFileTime(&filetime, &a.filetime); - case VT_BSTR: - return 0; // Not implemented - // return MyCompare(aPropVarint.cVal); - - default: - return 0; - } -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.h deleted file mode 100644 index d44215f0..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariant.h +++ /dev/null @@ -1,57 +0,0 @@ -// Windows/PropVariant.h - -#ifndef __WINDOWS_PROPVARIANT_H -#define __WINDOWS_PROPVARIANT_H - -#include "../Common/MyWindows.h" -#include "../Common/Types.h" - -namespace NWindows { -namespace NCOM { - -class CPropVariant : public tagPROPVARIANT -{ -public: - CPropVariant() { vt = VT_EMPTY; wReserved1 = 0; } - ~CPropVariant() { Clear(); } - CPropVariant(const PROPVARIANT& varSrc); - CPropVariant(const CPropVariant& varSrc); - CPropVariant(BSTR bstrSrc); - CPropVariant(LPCOLESTR lpszSrc); - CPropVariant(bool bSrc) { vt = VT_BOOL; wReserved1 = 0; boolVal = (bSrc ? VARIANT_TRUE : VARIANT_FALSE); }; - CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; } - CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal = *(ULARGE_INTEGER*)&value; } - CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; } - CPropVariant(Int32 value) { vt = VT_I4; wReserved1 = 0; lVal = value; } - CPropVariant(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; } - CPropVariant(Int16 value) { vt = VT_I2; wReserved1 = 0; iVal = value; } - // CPropVariant(LONG value, VARTYPE vtSrc = VT_I4) { vt = vtSrc; lVal = value; } - - CPropVariant& operator=(const CPropVariant& varSrc); - CPropVariant& operator=(const PROPVARIANT& varSrc); - CPropVariant& operator=(BSTR bstrSrc); - CPropVariant& operator=(LPCOLESTR lpszSrc); - CPropVariant& operator=(bool bSrc); - CPropVariant& operator=(UInt32 value); - CPropVariant& operator=(UInt64 value); - CPropVariant& operator=(const FILETIME &value); - - CPropVariant& operator=(Int32 value); - CPropVariant& operator=(Byte value); - CPropVariant& operator=(Int16 value); - // CPropVariant& operator=(LONG value); - - HRESULT Clear(); - HRESULT Copy(const PROPVARIANT* pSrc); - HRESULT Attach(PROPVARIANT* pSrc); - HRESULT Detach(PROPVARIANT* pDest); - - HRESULT InternalClear(); - void InternalCopy(const PROPVARIANT* pSrc); - - int Compare(const CPropVariant &a1); -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.cpp deleted file mode 100644 index 993dac76..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// PropVariantConversions.cpp - -#include "StdAfx.h" - -// #include - -#include "PropVariantConversions.h" - -#include "Windows/Defs.h" - -#include "Common/StringConvert.h" -#include "Common/IntToString.h" - -static UString ConvertUInt64ToString(UInt64 value) -{ - wchar_t buffer[32]; - ConvertUInt64ToString(value, buffer); - return buffer; -} - -static UString ConvertInt64ToString(Int64 value) -{ - wchar_t buffer[32]; - ConvertInt64ToString(value, buffer); - return buffer; -} - -static char *UIntToStringSpec(UInt32 value, char *s, int numPos) -{ - char temp[16]; - int pos = 0; - do - { - temp[pos++] = (char)('0' + value % 10); - value /= 10; - } - while (value != 0); - int i; - for (i = 0; i < numPos - pos; i++) - *s++ = '0'; - do - *s++ = temp[--pos]; - while (pos > 0); - *s = '\0'; - return s; -} - -bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime, bool includeSeconds) -{ - s[0] = '\0'; - SYSTEMTIME st; - if(!BOOLToBool(FileTimeToSystemTime(&ft, &st))) - return false; - s = UIntToStringSpec(st.wYear, s, 4); - *s++ = '-'; - s = UIntToStringSpec(st.wMonth, s, 2); - *s++ = '-'; - s = UIntToStringSpec(st.wDay, s, 2); - if (includeTime) - { - *s++ = ' '; - s = UIntToStringSpec(st.wHour, s, 2); - *s++ = ':'; - s = UIntToStringSpec(st.wMinute, s, 2); - if (includeSeconds) - { - *s++ = ':'; - UIntToStringSpec(st.wSecond, s, 2); - } - } - /* - sprintf(s, "%04d-%02d-%02d", st.wYear, st.wMonth, st.wDay); - if (includeTime) - { - sprintf(s + strlen(s), " %02d:%02d", st.wHour, st.wMinute); - if (includeSeconds) - sprintf(s + strlen(s), ":%02d", st.wSecond); - } - */ - return true; -} - -UString ConvertFileTimeToString(const FILETIME &fileTime, bool includeTime, bool includeSeconds) -{ - char s[32]; - ConvertFileTimeToString(fileTime, s, includeTime, includeSeconds); - return GetUnicodeString(s); -} - - -UString ConvertPropVariantToString(const PROPVARIANT &propVariant) -{ - switch (propVariant.vt) - { - case VT_EMPTY: - return UString(); - case VT_BSTR: - return propVariant.bstrVal; - case VT_UI1: - return ConvertUInt64ToString(propVariant.bVal); - case VT_UI2: - return ConvertUInt64ToString(propVariant.uiVal); - case VT_UI4: - return ConvertUInt64ToString(propVariant.ulVal); - case VT_UI8: - return ConvertUInt64ToString(propVariant.uhVal.QuadPart); - case VT_FILETIME: - return ConvertFileTimeToString(propVariant.filetime, true, true); - /* - case VT_I1: - return ConvertInt64ToString(propVariant.cVal); - */ - case VT_I2: - return ConvertInt64ToString(propVariant.iVal); - case VT_I4: - return ConvertInt64ToString(propVariant.lVal); - case VT_I8: - return ConvertInt64ToString(propVariant.hVal.QuadPart); - - case VT_BOOL: - return VARIANT_BOOLToBool(propVariant.boolVal) ? L"+" : L"-"; - default: - #ifndef _WIN32_WCE - throw 150245; - #else - return UString(); - #endif - } -} - -UInt64 ConvertPropVariantToUInt64(const PROPVARIANT &propVariant) -{ - switch (propVariant.vt) - { - case VT_UI1: - return propVariant.bVal; - case VT_UI2: - return propVariant.uiVal; - case VT_UI4: - return propVariant.ulVal; - case VT_UI8: - return (UInt64)propVariant.uhVal.QuadPart; - default: - #ifndef _WIN32_WCE - throw 151199; - #else - return 0; - #endif - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.h deleted file mode 100644 index 68ad9612..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/PropVariantConversions.h +++ /dev/null @@ -1,14 +0,0 @@ -// Windows/PropVariantConversions.h - -#ifndef __PROPVARIANTCONVERSIONS_H -#define __PROPVARIANTCONVERSIONS_H - -#include "Common/Types.h" -#include "Common/MyString.h" - -bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime = true, bool includeSeconds = true); -UString ConvertFileTimeToString(const FILETIME &ft, bool includeTime = true, bool includeSeconds = true); -UString ConvertPropVariantToString(const PROPVARIANT &propVariant); -UInt64 ConvertPropVariantToUInt64(const PROPVARIANT &propVariant); - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/StdAfx.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/StdAfx.h deleted file mode 100644 index e7924c8f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/StdAfx.h +++ /dev/null @@ -1,9 +0,0 @@ -// StdAfx.h - -#ifndef __STDAFX_H -#define __STDAFX_H - -#include "../Common/MyWindows.h" -#include "../Common/NewHandler.h" - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.cpp deleted file mode 100644 index 5f86d1eb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// Windows/Synchronization.cpp - -#include "StdAfx.h" - -#include "Synchronization.h" - -namespace NWindows { -namespace NSynchronization { - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.h deleted file mode 100644 index c16f7b4d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Synchronization.h +++ /dev/null @@ -1,168 +0,0 @@ -// Windows/Synchronization.h - -#ifndef __WINDOWS_SYNCHRONIZATION_H -#define __WINDOWS_SYNCHRONIZATION_H - -#include "Defs.h" - -extern "C" -{ -#include "../../C/Threads.h" -} - -#ifdef _WIN32 -#include "Handle.h" -#endif - -namespace NWindows { -namespace NSynchronization { - -class CBaseEvent -{ -protected: - ::CEvent _object; -public: - bool IsCreated() { return Event_IsCreated(&_object) != 0; } - operator HANDLE() { return _object.handle; } - CBaseEvent() { Event_Construct(&_object); } - ~CBaseEvent() { Close(); } - HRes Close() { return Event_Close(&_object); } - #ifdef _WIN32 - HRes Create(bool manualReset, bool initiallyOwn, LPCTSTR name = NULL, - LPSECURITY_ATTRIBUTES securityAttributes = NULL) - { - _object.handle = ::CreateEvent(securityAttributes, BoolToBOOL(manualReset), - BoolToBOOL(initiallyOwn), name); - if (_object.handle != 0) - return 0; - return ::GetLastError(); - } - HRes Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name) - { - _object.handle = ::OpenEvent(desiredAccess, BoolToBOOL(inheritHandle), name); - if (_object.handle != 0) - return 0; - return ::GetLastError(); - } - #endif - - HRes Set() { return Event_Set(&_object); } - // bool Pulse() { return BOOLToBool(::PulseEvent(_handle)); } - HRes Reset() { return Event_Reset(&_object); } - HRes Lock() { return Event_Wait(&_object); } -}; - -class CManualResetEvent: public CBaseEvent -{ -public: - HRes Create(bool initiallyOwn = false) - { - return ManualResetEvent_Create(&_object, initiallyOwn ? 1: 0); - } - HRes CreateIfNotCreated() - { - if (IsCreated()) - return 0; - return ManualResetEvent_CreateNotSignaled(&_object); - } - #ifdef _WIN32 - HRes CreateWithName(bool initiallyOwn, LPCTSTR name) - { - return CBaseEvent::Create(true, initiallyOwn, name); - } - #endif -}; - -class CAutoResetEvent: public CBaseEvent -{ -public: - HRes Create() - { - return AutoResetEvent_CreateNotSignaled(&_object); - } - HRes CreateIfNotCreated() - { - if (IsCreated()) - return 0; - return AutoResetEvent_CreateNotSignaled(&_object); - } -}; - -#ifdef _WIN32 -class CObject: public CHandle -{ -public: - HRes Lock(DWORD timeoutInterval = INFINITE) - { return (::WaitForSingleObject(_handle, timeoutInterval) == WAIT_OBJECT_0 ? 0 : ::GetLastError()); } -}; -class CMutex: public CObject -{ -public: - HRes Create(bool initiallyOwn, LPCTSTR name = NULL, - LPSECURITY_ATTRIBUTES securityAttributes = NULL) - { - _handle = ::CreateMutex(securityAttributes, BoolToBOOL(initiallyOwn), name); - if (_handle != 0) - return 0; - return ::GetLastError(); - } - HRes Open(DWORD desiredAccess, bool inheritHandle, LPCTSTR name) - { - _handle = ::OpenMutex(desiredAccess, BoolToBOOL(inheritHandle), name); - if (_handle != 0) - return 0; - return ::GetLastError(); - } - HRes Release() - { - return ::ReleaseMutex(_handle) ? 0 : ::GetLastError(); - } -}; -class CMutexLock -{ - CMutex *_object; -public: - CMutexLock(CMutex &object): _object(&object) { _object->Lock(); } - ~CMutexLock() { _object->Release(); } -}; -#endif - -class CSemaphore -{ - ::CSemaphore _object; -public: - CSemaphore() { Semaphore_Construct(&_object); } - ~CSemaphore() { Close(); } - HRes Close() { return Semaphore_Close(&_object); } - operator HANDLE() { return _object.handle; } - HRes Create(UInt32 initiallyCount, UInt32 maxCount) - { - return Semaphore_Create(&_object, initiallyCount, maxCount); - } - HRes Release() { return Semaphore_Release1(&_object); } - HRes Release(UInt32 releaseCount) { return Semaphore_ReleaseN(&_object, releaseCount); } - HRes Lock() { return Semaphore_Wait(&_object); } -}; - -class CCriticalSection -{ - ::CCriticalSection _object; -public: - CCriticalSection() { CriticalSection_Init(&_object); } - ~CCriticalSection() { CriticalSection_Delete(&_object); } - void Enter() { CriticalSection_Enter(&_object); } - void Leave() { CriticalSection_Leave(&_object); } -}; - -class CCriticalSectionLock -{ - CCriticalSection *_object; - void Unlock() { _object->Leave(); } -public: - CCriticalSectionLock(CCriticalSection &object): _object(&object) {_object->Enter(); } - ~CCriticalSectionLock() { Unlock(); } -}; - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.cpp b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.cpp deleted file mode 100644 index 8e4069c2..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Windows/System.cpp - -#include "StdAfx.h" - -#include "System.h" - -namespace NWindows { -namespace NSystem { - -UInt32 GetNumberOfProcessors() -{ - SYSTEM_INFO systemInfo; - GetSystemInfo(&systemInfo); - return (UInt32)systemInfo.dwNumberOfProcessors; -} - -#if !defined(_WIN64) && defined(__GNUC__) - -typedef struct _MY_MEMORYSTATUSEX { - DWORD dwLength; - DWORD dwMemoryLoad; - DWORDLONG ullTotalPhys; - DWORDLONG ullAvailPhys; - DWORDLONG ullTotalPageFile; - DWORDLONG ullAvailPageFile; - DWORDLONG ullTotalVirtual; - DWORDLONG ullAvailVirtual; - DWORDLONG ullAvailExtendedVirtual; -} MY_MEMORYSTATUSEX, *MY_LPMEMORYSTATUSEX; - -#else - -#define MY_MEMORYSTATUSEX MEMORYSTATUSEX -#define MY_LPMEMORYSTATUSEX LPMEMORYSTATUSEX - -#endif - -typedef BOOL (WINAPI *GlobalMemoryStatusExP)(MY_LPMEMORYSTATUSEX lpBuffer); - -UInt64 GetRamSize() -{ - MY_MEMORYSTATUSEX stat; - stat.dwLength = sizeof(stat); - #ifdef _WIN64 - if (!::GlobalMemoryStatusEx(&stat)) - return 0; - return stat.ullTotalPhys; - #else - GlobalMemoryStatusExP globalMemoryStatusEx = (GlobalMemoryStatusExP) - ::GetProcAddress(::GetModuleHandle(TEXT("kernel32.dll")), - "GlobalMemoryStatusEx"); - if (globalMemoryStatusEx != 0) - if (globalMemoryStatusEx(&stat)) - return stat.ullTotalPhys; - { - MEMORYSTATUS stat; - stat.dwLength = sizeof(stat); - GlobalMemoryStatus(&stat); - return stat.dwTotalPhys; - } - #endif -} - -}} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.h deleted file mode 100644 index e0067158..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/System.h +++ /dev/null @@ -1,16 +0,0 @@ -// Windows/System.h - -#ifndef __WINDOWS_SYSTEM_H -#define __WINDOWS_SYSTEM_H - -#include "../Common/Types.h" - -namespace NWindows { -namespace NSystem { - -UInt32 GetNumberOfProcessors(); -UInt64 GetRamSize(); - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Thread.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Thread.h deleted file mode 100644 index a46a5688..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Thread.h +++ /dev/null @@ -1,38 +0,0 @@ -// Windows/Thread.h - -#ifndef __WINDOWS_THREAD_H -#define __WINDOWS_THREAD_H - -#include "Defs.h" - -extern "C" -{ -#include "../../C/Threads.h" -} - -namespace NWindows { - -class CThread -{ - ::CThread thread; -public: - CThread() { Thread_Construct(&thread); } - ~CThread() { Close(); } - bool IsCreated() { return Thread_WasCreated(&thread) != 0; } - HRes Close() { return Thread_Close(&thread); } - HRes Create(THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter) - { return Thread_Create(&thread, startAddress, parameter); } - HRes Wait() { return Thread_Wait(&thread); } - - #ifdef _WIN32 - DWORD Resume() { return ::ResumeThread(thread.handle); } - DWORD Suspend() { return ::SuspendThread(thread.handle); } - bool Terminate(DWORD exitCode) { return BOOLToBool(::TerminateThread(thread.handle, exitCode)); } - int GetPriority() { return ::GetThreadPriority(thread.handle); } - bool SetPriority(int priority) { return BOOLToBool(::SetThreadPriority(thread.handle, priority)); } - #endif -}; - -} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Time.h b/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Time.h deleted file mode 100644 index fbba2ddb..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CPP/Windows/Time.h +++ /dev/null @@ -1,66 +0,0 @@ -// Windows/Time.h - -#ifndef __WINDOWS_TIME_H -#define __WINDOWS_TIME_H - -#include "Common/Types.h" -#include "Windows/Defs.h" - -namespace NWindows { -namespace NTime { - -inline bool DosTimeToFileTime(UInt32 dosTime, FILETIME &fileTime) -{ - return BOOLToBool(::DosDateTimeToFileTime(UInt16(dosTime >> 16), - UInt16(dosTime & 0xFFFF), &fileTime)); -} - -const UInt32 kHighDosTime = 0xFF9FBF7D; -const UInt32 kLowDosTime = 0x210000; - -inline bool FileTimeToDosTime(const FILETIME &fileTime, UInt32 &dosTime) -{ - WORD datePart, timePart; - if (!::FileTimeToDosDateTime(&fileTime, &datePart, &timePart)) - { - if (fileTime.dwHighDateTime >= 0x01C00000) // 2000 - dosTime = kHighDosTime; - else - dosTime = kLowDosTime; - return false; - } - dosTime = (((UInt32)datePart) << 16) + timePart; - return true; -} - -const UInt32 kNumTimeQuantumsInSecond = 10000000; -const UInt64 kUnixTimeStartValue = ((UInt64)kNumTimeQuantumsInSecond) * 60 * 60 * 24 * 134774; - -inline void UnixTimeToFileTime(UInt32 unixTime, FILETIME &fileTime) -{ - UInt64 v = kUnixTimeStartValue + ((UInt64)unixTime) * kNumTimeQuantumsInSecond; - fileTime.dwLowDateTime = (DWORD)v; - fileTime.dwHighDateTime = (DWORD)(v >> 32); -} - -inline bool FileTimeToUnixTime(const FILETIME &fileTime, UInt32 &unixTime) -{ - UInt64 winTime = (((UInt64)fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime; - if (winTime < kUnixTimeStartValue) - { - unixTime = 0; - return false; - } - winTime = (winTime - kUnixTimeStartValue) / kNumTimeQuantumsInSecond; - if (winTime > 0xFFFFFFFF) - { - unixTime = 0xFFFFFFFF; - return false; - } - unixTime = (UInt32)winTime; - return true; -} - -}} - -#endif diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CRC.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CRC.cs deleted file mode 100644 index 82cc857e..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CRC.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Common/CRC.cs - -namespace SevenZip -{ - class CRC - { - public static readonly uint[] Table; - - static CRC() - { - Table = new uint[256]; - const uint kPoly = 0xEDB88320; - for (uint i = 0; i < 256; i++) - { - uint r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >> 1) ^ kPoly; - else - r >>= 1; - Table[i] = r; - } - } - - uint _value = 0xFFFFFFFF; - - public void Init() { _value = 0xFFFFFFFF; } - - public void UpdateByte(byte b) - { - _value = Table[(((byte)(_value)) ^ b)] ^ (_value >> 8); - } - - public void Update(byte[] data, uint offset, uint size) - { - for (uint i = 0; i < size; i++) - _value = Table[(((byte)(_value)) ^ data[offset + i])] ^ (_value >> 8); - } - - public uint GetDigest() { return _value ^ 0xFFFFFFFF; } - - static uint CalculateDigest(byte[] data, uint offset, uint size) - { - CRC crc = new CRC(); - // crc.Init(); - crc.Update(data, offset, size); - return crc.GetDigest(); - } - - static bool VerifyDigest(uint digest, byte[] data, uint offset, uint size) - { - return (CalculateDigest(data, offset, size) == digest); - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CommandLineParser.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CommandLineParser.cs deleted file mode 100644 index 8eabf59d..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/CommandLineParser.cs +++ /dev/null @@ -1,274 +0,0 @@ -// CommandLineParser.cs - -using System; -using System.Collections; - -namespace SevenZip.CommandLineParser -{ - public enum SwitchType - { - Simple, - PostMinus, - LimitedPostString, - UnLimitedPostString, - PostChar - } - - public class SwitchForm - { - public string IDString; - public SwitchType Type; - public bool Multi; - public int MinLen; - public int MaxLen; - public string PostCharSet; - - public SwitchForm(string idString, SwitchType type, bool multi, - int minLen, int maxLen, string postCharSet) - { - IDString = idString; - Type = type; - Multi = multi; - MinLen = minLen; - MaxLen = maxLen; - PostCharSet = postCharSet; - } - public SwitchForm(string idString, SwitchType type, bool multi, int minLen): - this(idString, type, multi, minLen, 0, "") - { - } - public SwitchForm(string idString, SwitchType type, bool multi): - this(idString, type, multi, 0) - { - } - } - - public class SwitchResult - { - public bool ThereIs; - public bool WithMinus; - public ArrayList PostStrings = new ArrayList(); - public int PostCharIndex; - public SwitchResult() - { - ThereIs = false; - } - } - - public class Parser - { - public ArrayList NonSwitchStrings = new ArrayList(); - SwitchResult[] _switches; - - public Parser(int numSwitches) - { - _switches = new SwitchResult[numSwitches]; - for (int i = 0; i < numSwitches; i++) - _switches[i] = new SwitchResult(); - } - - bool ParseString(string srcString, SwitchForm[] switchForms) - { - int len = srcString.Length; - if (len == 0) - return false; - int pos = 0; - if (!IsItSwitchChar(srcString[pos])) - return false; - while (pos < len) - { - if (IsItSwitchChar(srcString[pos])) - pos++; - const int kNoLen = -1; - int matchedSwitchIndex = 0; - int maxLen = kNoLen; - for (int switchIndex = 0; switchIndex < _switches.Length; switchIndex++) - { - int switchLen = switchForms[switchIndex].IDString.Length; - if (switchLen <= maxLen || pos + switchLen > len) - continue; - if (String.Compare(switchForms[switchIndex].IDString, 0, - srcString, pos, switchLen, true) == 0) - { - matchedSwitchIndex = switchIndex; - maxLen = switchLen; - } - } - if (maxLen == kNoLen) - throw new Exception("maxLen == kNoLen"); - SwitchResult matchedSwitch = _switches[matchedSwitchIndex]; - SwitchForm switchForm = switchForms[matchedSwitchIndex]; - if ((!switchForm.Multi) && matchedSwitch.ThereIs) - throw new Exception("switch must be single"); - matchedSwitch.ThereIs = true; - pos += maxLen; - int tailSize = len - pos; - SwitchType type = switchForm.Type; - switch (type) - { - case SwitchType.PostMinus: - { - if (tailSize == 0) - matchedSwitch.WithMinus = false; - else - { - matchedSwitch.WithMinus = (srcString[pos] == kSwitchMinus); - if (matchedSwitch.WithMinus) - pos++; - } - break; - } - case SwitchType.PostChar: - { - if (tailSize < switchForm.MinLen) - throw new Exception("switch is not full"); - string charSet = switchForm.PostCharSet; - const int kEmptyCharValue = -1; - if (tailSize == 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - int index = charSet.IndexOf(srcString[pos]); - if (index < 0) - matchedSwitch.PostCharIndex = kEmptyCharValue; - else - { - matchedSwitch.PostCharIndex = index; - pos++; - } - } - break; - } - case SwitchType.LimitedPostString: - case SwitchType.UnLimitedPostString: - { - int minLen = switchForm.MinLen; - if (tailSize < minLen) - throw new Exception("switch is not full"); - if (type == SwitchType.UnLimitedPostString) - { - matchedSwitch.PostStrings.Add(srcString.Substring(pos)); - return true; - } - String stringSwitch = srcString.Substring(pos, minLen); - pos += minLen; - for (int i = minLen; i < switchForm.MaxLen && pos < len; i++, pos++) - { - char c = srcString[pos]; - if (IsItSwitchChar(c)) - break; - stringSwitch += c; - } - matchedSwitch.PostStrings.Add(stringSwitch); - break; - } - } - } - return true; - - } - - public void ParseStrings(SwitchForm[] switchForms, string[] commandStrings) - { - int numCommandStrings = commandStrings.Length; - bool stopSwitch = false; - for (int i = 0; i < numCommandStrings; i++) - { - string s = commandStrings[i]; - if (stopSwitch) - NonSwitchStrings.Add(s); - else - if (s == kStopSwitchParsing) - stopSwitch = true; - else - if (!ParseString(s, switchForms)) - NonSwitchStrings.Add(s); - } - } - - public SwitchResult this[int index] { get { return _switches[index]; } } - - public static int ParseCommand(CommandForm[] commandForms, string commandString, - out string postString) - { - for (int i = 0; i < commandForms.Length; i++) - { - string id = commandForms[i].IDString; - if (commandForms[i].PostStringMode) - { - if (commandString.IndexOf(id) == 0) - { - postString = commandString.Substring(id.Length); - return i; - } - } - else - if (commandString == id) - { - postString = ""; - return i; - } - } - postString = ""; - return -1; - } - - static bool ParseSubCharsCommand(int numForms, CommandSubCharsSet[] forms, - string commandString, ArrayList indices) - { - indices.Clear(); - int numUsedChars = 0; - for (int i = 0; i < numForms; i++) - { - CommandSubCharsSet charsSet = forms[i]; - int currentIndex = -1; - int len = charsSet.Chars.Length; - for (int j = 0; j < len; j++) - { - char c = charsSet.Chars[j]; - int newIndex = commandString.IndexOf(c); - if (newIndex >= 0) - { - if (currentIndex >= 0) - return false; - if (commandString.IndexOf(c, newIndex + 1) >= 0) - return false; - currentIndex = j; - numUsedChars++; - } - } - if (currentIndex == -1 && !charsSet.EmptyAllowed) - return false; - indices.Add(currentIndex); - } - return (numUsedChars == commandString.Length); - } - const char kSwitchID1 = '-'; - const char kSwitchID2 = '/'; - - const char kSwitchMinus = '-'; - const string kStopSwitchParsing = "--"; - - static bool IsItSwitchChar(char c) - { - return (c == kSwitchID1 || c == kSwitchID2); - } - } - - public class CommandForm - { - public string IDString = ""; - public bool PostStringMode = false; - public CommandForm(string idString, bool postStringMode) - { - IDString = idString; - PostStringMode = postStringMode; - } - } - - class CommandSubCharsSet - { - public string Chars = ""; - public bool EmptyAllowed = false; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/InBuffer.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/InBuffer.cs deleted file mode 100644 index 7c51f0bc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/InBuffer.cs +++ /dev/null @@ -1,72 +0,0 @@ -// InBuffer.cs - -namespace SevenZip.Buffer -{ - public class InBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_Limit; - uint m_BufferSize; - System.IO.Stream m_Stream; - bool m_StreamWasExhausted; - ulong m_ProcessedSize; - - public InBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void Init(System.IO.Stream stream) - { - m_Stream = stream; - m_ProcessedSize = 0; - m_Limit = 0; - m_Pos = 0; - m_StreamWasExhausted = false; - } - - public bool ReadBlock() - { - if (m_StreamWasExhausted) - return false; - m_ProcessedSize += m_Pos; - int aNumProcessedBytes = m_Stream.Read(m_Buffer, 0, (int)m_BufferSize); - m_Pos = 0; - m_Limit = (uint)aNumProcessedBytes; - m_StreamWasExhausted = (aNumProcessedBytes == 0); - return (!m_StreamWasExhausted); - } - - - public void ReleaseStream() - { - // m_Stream.Close(); - m_Stream = null; - } - - public bool ReadByte(byte b) // check it - { - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return false; - b = m_Buffer[m_Pos++]; - return true; - } - - public byte ReadByte() - { - // return (byte)m_Stream.ReadByte(); - if (m_Pos >= m_Limit) - if (!ReadBlock()) - return 0xFF; - return m_Buffer[m_Pos++]; - } - - public ulong GetProcessedSize() - { - return m_ProcessedSize + m_Pos; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/OutBuffer.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/OutBuffer.cs deleted file mode 100644 index 2da16e16..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Common/OutBuffer.cs +++ /dev/null @@ -1,47 +0,0 @@ -// OutBuffer.cs - -namespace SevenZip.Buffer -{ - public class OutBuffer - { - byte[] m_Buffer; - uint m_Pos; - uint m_BufferSize; - System.IO.Stream m_Stream; - ulong m_ProcessedSize; - - public OutBuffer(uint bufferSize) - { - m_Buffer = new byte[bufferSize]; - m_BufferSize = bufferSize; - } - - public void SetStream(System.IO.Stream stream) { m_Stream = stream; } - public void FlushStream() { m_Stream.Flush(); } - public void CloseStream() { m_Stream.Close(); } - public void ReleaseStream() { m_Stream = null; } - - public void Init() - { - m_ProcessedSize = 0; - m_Pos = 0; - } - - public void WriteByte(byte b) - { - m_Buffer[m_Pos++] = b; - if (m_Pos >= m_BufferSize) - FlushData(); - } - - public void FlushData() - { - if (m_Pos == 0) - return; - m_Stream.Write(m_Buffer, 0, (int)m_Pos); - m_Pos = 0; - } - - public ulong GetProcessedSize() { return m_ProcessedSize + m_Pos; } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs deleted file mode 100644 index 10ca2b37..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +++ /dev/null @@ -1,24 +0,0 @@ -// IMatchFinder.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - interface IInWindowStream - { - void SetStream(System.IO.Stream inStream); - void Init(); - void ReleaseStream(); - Byte GetIndexByte(Int32 index); - UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit); - UInt32 GetNumAvailableBytes(); - } - - interface IMatchFinder : IInWindowStream - { - void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter); - UInt32 GetMatches(UInt32[] distances); - void Skip(UInt32 num); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzBinTree.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzBinTree.cs deleted file mode 100644 index c1c006b6..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +++ /dev/null @@ -1,367 +0,0 @@ -// LzBinTree.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class BinTree : InWindow, IMatchFinder - { - UInt32 _cyclicBufferPos; - UInt32 _cyclicBufferSize = 0; - UInt32 _matchMaxLen; - - UInt32[] _son; - UInt32[] _hash; - - UInt32 _cutValue = 0xFF; - UInt32 _hashMask; - UInt32 _hashSizeSum = 0; - - bool HASH_ARRAY = true; - - const UInt32 kHash2Size = 1 << 10; - const UInt32 kHash3Size = 1 << 16; - const UInt32 kBT2HashSize = 1 << 16; - const UInt32 kStartMaxLen = 1; - const UInt32 kHash3Offset = kHash2Size; - const UInt32 kEmptyHashValue = 0; - const UInt32 kMaxValForNormalize = ((UInt32)1 << 31) - 1; - - UInt32 kNumHashDirectBytes = 0; - UInt32 kMinMatchCheck = 4; - UInt32 kFixHashSize = kHash2Size + kHash3Size; - - public void SetType(int numHashBytes) - { - HASH_ARRAY = (numHashBytes > 2); - if (HASH_ARRAY) - { - kNumHashDirectBytes = 0; - kMinMatchCheck = 4; - kFixHashSize = kHash2Size + kHash3Size; - } - else - { - kNumHashDirectBytes = 2; - kMinMatchCheck = 2 + 1; - kFixHashSize = 0; - } - } - - public new void SetStream(System.IO.Stream stream) { base.SetStream(stream); } - public new void ReleaseStream() { base.ReleaseStream(); } - - public new void Init() - { - base.Init(); - for (UInt32 i = 0; i < _hashSizeSum; i++) - _hash[i] = kEmptyHashValue; - _cyclicBufferPos = 0; - ReduceOffsets(-1); - } - - public new void MovePos() - { - if (++_cyclicBufferPos >= _cyclicBufferSize) - _cyclicBufferPos = 0; - base.MovePos(); - if (_pos == kMaxValForNormalize) - Normalize(); - } - - public new Byte GetIndexByte(Int32 index) { return base.GetIndexByte(index); } - - public new UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { return base.GetMatchLen(index, distance, limit); } - - public new UInt32 GetNumAvailableBytes() { return base.GetNumAvailableBytes(); } - - public void Create(UInt32 historySize, UInt32 keepAddBufferBefore, - UInt32 matchMaxLen, UInt32 keepAddBufferAfter) - { - if (historySize > kMaxValForNormalize - 256) - throw new Exception(); - _cutValue = 16 + (matchMaxLen >> 1); - - UInt32 windowReservSize = (historySize + keepAddBufferBefore + - matchMaxLen + keepAddBufferAfter) / 2 + 256; - - base.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); - - _matchMaxLen = matchMaxLen; - - UInt32 cyclicBufferSize = historySize + 1; - if (_cyclicBufferSize != cyclicBufferSize) - _son = new UInt32[(_cyclicBufferSize = cyclicBufferSize) * 2]; - - UInt32 hs = kBT2HashSize; - - if (HASH_ARRAY) - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - _hashMask = hs; - hs++; - hs += kFixHashSize; - } - if (hs != _hashSizeSum) - _hash = new UInt32[_hashSizeSum = hs]; - } - - public UInt32 GetMatches(UInt32[] distances) - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - return 0; - } - } - - UInt32 offset = 0; - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - UInt32 maxLen = kStartMaxLen; // to avoid items for len < hashSize; - UInt32 hashValue, hash2Value = 0, hash3Value = 0; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - hash2Value = temp & (kHash2Size - 1); - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - hash3Value = temp & (kHash3Size - 1); - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - if (HASH_ARRAY) - { - UInt32 curMatch2 = _hash[hash2Value]; - UInt32 curMatch3 = _hash[kHash3Offset + hash3Value]; - _hash[hash2Value] = _pos; - _hash[kHash3Offset + hash3Value] = _pos; - if (curMatch2 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur]) - { - distances[offset++] = maxLen = 2; - distances[offset++] = _pos - curMatch2 - 1; - } - if (curMatch3 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur]) - { - if (curMatch3 == curMatch2) - offset -= 2; - distances[offset++] = maxLen = 3; - distances[offset++] = _pos - curMatch3 - 1; - curMatch2 = curMatch3; - } - if (offset != 0 && curMatch2 == curMatch) - { - offset -= 2; - maxLen = kStartMaxLen; - } - } - - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - if (kNumHashDirectBytes != 0) - { - if (curMatch > matchMinPos) - { - if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] != - _bufferBase[cur + kNumHashDirectBytes]) - { - distances[offset++] = maxLen = kNumHashDirectBytes; - distances[offset++] = _pos - curMatch - 1; - } - } - } - - UInt32 count = _cutValue; - - while(true) - { - if(curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while(++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (maxLen < len) - { - distances[offset++] = maxLen = len; - distances[offset++] = delta - 1; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - return offset; - } - - public void Skip(UInt32 num) - { - do - { - UInt32 lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - continue; - } - } - - UInt32 matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - UInt32 cur = _bufferOffset + _pos; - - UInt32 hashValue; - - if (HASH_ARRAY) - { - UInt32 temp = CRC.Table[_bufferBase[cur]] ^ _bufferBase[cur + 1]; - UInt32 hash2Value = temp & (kHash2Size - 1); - _hash[hash2Value] = _pos; - temp ^= ((UInt32)(_bufferBase[cur + 2]) << 8); - UInt32 hash3Value = temp & (kHash3Size - 1); - _hash[kHash3Offset + hash3Value] = _pos; - hashValue = (temp ^ (CRC.Table[_bufferBase[cur + 3]] << 5)) & _hashMask; - } - else - hashValue = _bufferBase[cur] ^ ((UInt32)(_bufferBase[cur + 1]) << 8); - - UInt32 curMatch = _hash[kFixHashSize + hashValue]; - _hash[kFixHashSize + hashValue] = _pos; - - UInt32 ptr0 = (_cyclicBufferPos << 1) + 1; - UInt32 ptr1 = (_cyclicBufferPos << 1); - - UInt32 len0, len1; - len0 = len1 = kNumHashDirectBytes; - - UInt32 count = _cutValue; - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - - UInt32 delta = _pos - curMatch; - UInt32 cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - UInt32 pby1 = _bufferOffset + curMatch; - UInt32 len = Math.Min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while (++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - if (_bufferBase[pby1 + len] < _bufferBase[cur + len]) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - } - while (--num != 0); - } - - void NormalizeLinks(UInt32[] items, UInt32 numItems, UInt32 subValue) - { - for (UInt32 i = 0; i < numItems; i++) - { - UInt32 value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } - } - - void Normalize() - { - UInt32 subValue = _pos - _cyclicBufferSize; - NormalizeLinks(_son, _cyclicBufferSize * 2, subValue); - NormalizeLinks(_hash, _hashSizeSum, subValue); - ReduceOffsets((Int32)subValue); - } - - public void SetCutValue(UInt32 cutValue) { _cutValue = cutValue; } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzInWindow.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzInWindow.cs deleted file mode 100644 index 52d23ce3..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +++ /dev/null @@ -1,132 +0,0 @@ -// LzInWindow.cs - -using System; - -namespace SevenZip.Compression.LZ -{ - public class InWindow - { - public Byte[] _bufferBase = null; // pointer to buffer with data - System.IO.Stream _stream; - UInt32 _posLimit; // offset (from _buffer) of first byte when new block reading must be done - bool _streamEndWasReached; // if (true) then _streamPos shows real end of stream - - UInt32 _pointerToLastSafePosition; - - public UInt32 _bufferOffset; - - public UInt32 _blockSize; // Size of Allocated memory block - public UInt32 _pos; // offset (from _buffer) of curent byte - UInt32 _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos - UInt32 _keepSizeAfter; // how many BYTEs must be kept buffer after _pos - public UInt32 _streamPos; // offset (from _buffer) of first not read byte from Stream - - public void MoveBlock() - { - UInt32 offset = (UInt32)(_bufferOffset) + _pos - _keepSizeBefore; - // we need one additional byte, since MovePos moves on 1 byte. - if (offset > 0) - offset--; - - UInt32 numBytes = (UInt32)(_bufferOffset) + _streamPos - offset; - - // check negative offset ???? - for (UInt32 i = 0; i < numBytes; i++) - _bufferBase[i] = _bufferBase[offset + i]; - _bufferOffset -= offset; - } - - public virtual void ReadBlock() - { - if (_streamEndWasReached) - return; - while (true) - { - int size = (int)((0 - _bufferOffset) + _blockSize - _streamPos); - if (size == 0) - return; - int numReadBytes = _stream.Read(_bufferBase, (int)(_bufferOffset + _streamPos), size); - if (numReadBytes == 0) - { - _posLimit = _streamPos; - UInt32 pointerToPostion = _bufferOffset + _posLimit; - if (pointerToPostion > _pointerToLastSafePosition) - _posLimit = (UInt32)(_pointerToLastSafePosition - _bufferOffset); - - _streamEndWasReached = true; - return; - } - _streamPos += (UInt32)numReadBytes; - if (_streamPos >= _pos + _keepSizeAfter) - _posLimit = _streamPos - _keepSizeAfter; - } - } - - void Free() { _bufferBase = null; } - - public void Create(UInt32 keepSizeBefore, UInt32 keepSizeAfter, UInt32 keepSizeReserv) - { - _keepSizeBefore = keepSizeBefore; - _keepSizeAfter = keepSizeAfter; - UInt32 blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv; - if (_bufferBase == null || _blockSize != blockSize) - { - Free(); - _blockSize = blockSize; - _bufferBase = new Byte[_blockSize]; - } - _pointerToLastSafePosition = _blockSize - keepSizeAfter; - } - - public void SetStream(System.IO.Stream stream) { _stream = stream; } - public void ReleaseStream() { _stream = null; } - - public void Init() - { - _bufferOffset = 0; - _pos = 0; - _streamPos = 0; - _streamEndWasReached = false; - ReadBlock(); - } - - public void MovePos() - { - _pos++; - if (_pos > _posLimit) - { - UInt32 pointerToPostion = _bufferOffset + _pos; - if (pointerToPostion > _pointerToLastSafePosition) - MoveBlock(); - ReadBlock(); - } - } - - public Byte GetIndexByte(Int32 index) { return _bufferBase[_bufferOffset + _pos + index]; } - - // index + limit have not to exceed _keepSizeAfter; - public UInt32 GetMatchLen(Int32 index, UInt32 distance, UInt32 limit) - { - if (_streamEndWasReached) - if ((_pos + index) + limit > _streamPos) - limit = _streamPos - (UInt32)(_pos + index); - distance++; - // Byte *pby = _buffer + (size_t)_pos + index; - UInt32 pby = _bufferOffset + _pos + (UInt32)index; - - UInt32 i; - for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++); - return i; - } - - public UInt32 GetNumAvailableBytes() { return _streamPos - _pos; } - - public void ReduceOffsets(Int32 subValue) - { - _bufferOffset += (UInt32)subValue; - _posLimit -= (UInt32)subValue; - _pos -= (UInt32)subValue; - _streamPos -= (UInt32)subValue; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs deleted file mode 100644 index c998584a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +++ /dev/null @@ -1,110 +0,0 @@ -// LzOutWindow.cs - -namespace SevenZip.Compression.LZ -{ - public class OutWindow - { - byte[] _buffer = null; - uint _pos; - uint _windowSize = 0; - uint _streamPos; - System.IO.Stream _stream; - - public uint TrainSize = 0; - - public void Create(uint windowSize) - { - if (_windowSize != windowSize) - { - // System.GC.Collect(); - _buffer = new byte[windowSize]; - } - _windowSize = windowSize; - _pos = 0; - _streamPos = 0; - } - - public void Init(System.IO.Stream stream, bool solid) - { - ReleaseStream(); - _stream = stream; - if (!solid) - { - _streamPos = 0; - _pos = 0; - TrainSize = 0; - } - } - - public bool Train(System.IO.Stream stream) - { - long len = stream.Length; - uint size = (len < _windowSize) ? (uint)len : _windowSize; - TrainSize = size; - stream.Position = len - size; - _streamPos = _pos = 0; - while (size > 0) - { - uint curSize = _windowSize - _pos; - if (size < curSize) - curSize = size; - int numReadBytes = stream.Read(_buffer, (int)_pos, (int)curSize); - if (numReadBytes == 0) - return false; - size -= (uint)numReadBytes; - _pos += (uint)numReadBytes; - _streamPos += (uint)numReadBytes; - if (_pos == _windowSize) - _streamPos = _pos = 0; - } - return true; - } - - public void ReleaseStream() - { - Flush(); - _stream = null; - } - - public void Flush() - { - uint size = _pos - _streamPos; - if (size == 0) - return; - _stream.Write(_buffer, (int)_streamPos, (int)size); - if (_pos >= _windowSize) - _pos = 0; - _streamPos = _pos; - } - - public void CopyBlock(uint distance, uint len) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - for (; len > 0; len--) - { - if (pos >= _windowSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos >= _windowSize) - Flush(); - } - } - - public void PutByte(byte b) - { - _buffer[_pos++] = b; - if (_pos >= _windowSize) - Flush(); - } - - public byte GetByte(uint distance) - { - uint pos = _pos - distance - 1; - if (pos >= _windowSize) - pos += _windowSize; - return _buffer[pos]; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs deleted file mode 100644 index c7bca86f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +++ /dev/null @@ -1,76 +0,0 @@ -// LzmaBase.cs - -namespace SevenZip.Compression.LZMA -{ - internal abstract class Base - { - public const uint kNumRepDistances = 4; - public const uint kNumStates = 12; - - // static byte []kLiteralNextStates = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; - // static byte []kMatchNextStates = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; - // static byte []kRepNextStates = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; - // static byte []kShortRepNextStates = {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; - - public struct State - { - public uint Index; - public void Init() { Index = 0; } - public void UpdateChar() - { - if (Index < 4) Index = 0; - else if (Index < 10) Index -= 3; - else Index -= 6; - } - public void UpdateMatch() { Index = (uint)(Index < 7 ? 7 : 10); } - public void UpdateRep() { Index = (uint)(Index < 7 ? 8 : 11); } - public void UpdateShortRep() { Index = (uint)(Index < 7 ? 9 : 11); } - public bool IsCharState() { return Index < 7; } - } - - public const int kNumPosSlotBits = 6; - public const int kDicLogSizeMin = 0; - // public const int kDicLogSizeMax = 30; - // public const uint kDistTableSizeMax = kDicLogSizeMax * 2; - - public const int kNumLenToPosStatesBits = 2; // it's for speed optimization - public const uint kNumLenToPosStates = 1 << kNumLenToPosStatesBits; - - public const uint kMatchMinLen = 2; - - public static uint GetLenToPosState(uint len) - { - len -= kMatchMinLen; - if (len < kNumLenToPosStates) - return len; - return (uint)(kNumLenToPosStates - 1); - } - - public const int kNumAlignBits = 4; - public const uint kAlignTableSize = 1 << kNumAlignBits; - public const uint kAlignMask = (kAlignTableSize - 1); - - public const uint kStartPosModelIndex = 4; - public const uint kEndPosModelIndex = 14; - public const uint kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - - public const uint kNumFullDistances = 1 << ((int)kEndPosModelIndex / 2); - - public const uint kNumLitPosStatesBitsEncodingMax = 4; - public const uint kNumLitContextBitsMax = 8; - - public const int kNumPosStatesBitsMax = 4; - public const uint kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - public const int kNumPosStatesBitsEncodingMax = 4; - public const uint kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - - public const int kNumLowLenBits = 3; - public const int kNumMidLenBits = 3; - public const int kNumHighLenBits = 8; - public const uint kNumLowLenSymbols = 1 << kNumLowLenBits; - public const uint kNumMidLenSymbols = 1 << kNumMidLenBits; - public const uint kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + - (1 << kNumHighLenBits); - public const uint kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs deleted file mode 100644 index a9be39fc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +++ /dev/null @@ -1,398 +0,0 @@ -// LzmaDecoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream - { - class LenDecoder - { - BitDecoder m_Choice = new BitDecoder(); - BitDecoder m_Choice2 = new BitDecoder(); - BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits); - uint m_NumPosStates = 0; - - public void Create(uint numPosStates) - { - for (uint posState = m_NumPosStates; posState < numPosStates; posState++) - { - m_LowCoder[posState] = new BitTreeDecoder(Base.kNumLowLenBits); - m_MidCoder[posState] = new BitTreeDecoder(Base.kNumMidLenBits); - } - m_NumPosStates = numPosStates; - } - - public void Init() - { - m_Choice.Init(); - for (uint posState = 0; posState < m_NumPosStates; posState++) - { - m_LowCoder[posState].Init(); - m_MidCoder[posState].Init(); - } - m_Choice2.Init(); - m_HighCoder.Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder, uint posState) - { - if (m_Choice.Decode(rangeDecoder) == 0) - return m_LowCoder[posState].Decode(rangeDecoder); - else - { - uint symbol = Base.kNumLowLenSymbols; - if (m_Choice2.Decode(rangeDecoder) == 0) - symbol += m_MidCoder[posState].Decode(rangeDecoder); - else - { - symbol += Base.kNumMidLenSymbols; - symbol += m_HighCoder.Decode(rangeDecoder); - } - return symbol; - } - } - } - - class LiteralDecoder - { - struct Decoder2 - { - BitDecoder[] m_Decoders; - public void Create() { m_Decoders = new BitDecoder[0x300]; } - public void Init() { for (int i = 0; i < 0x300; i++) m_Decoders[i].Init(); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder) - { - uint symbol = 1; - do - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - while (symbol < 0x100); - return (byte)symbol; - } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, byte matchByte) - { - uint symbol = 1; - do - { - uint matchBit = (uint)(matchByte >> 7) & 1; - matchByte <<= 1; - uint bit = m_Decoders[((1 + matchBit) << 8) + symbol].Decode(rangeDecoder); - symbol = (symbol << 1) | bit; - if (matchBit != bit) - { - while (symbol < 0x100) - symbol = (symbol << 1) | m_Decoders[symbol].Decode(rangeDecoder); - break; - } - } - while (symbol < 0x100); - return (byte)symbol; - } - } - - Decoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && - m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Decoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - uint GetState(uint pos, byte prevByte) - { return ((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits)); } - - public byte DecodeNormal(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte) - { return m_Coders[GetState(pos, prevByte)].DecodeNormal(rangeDecoder); } - - public byte DecodeWithMatchByte(RangeCoder.Decoder rangeDecoder, uint pos, byte prevByte, byte matchByte) - { return m_Coders[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); } - }; - - LZ.OutWindow m_OutWindow = new LZ.OutWindow(); - RangeCoder.Decoder m_RangeDecoder = new RangeCoder.Decoder(); - - BitDecoder[] m_IsMatchDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - BitDecoder[] m_IsRepDecoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG0Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG1Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRepG2Decoders = new BitDecoder[Base.kNumStates]; - BitDecoder[] m_IsRep0LongDecoders = new BitDecoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates]; - BitDecoder[] m_PosDecoders = new BitDecoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - - BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits); - - LenDecoder m_LenDecoder = new LenDecoder(); - LenDecoder m_RepLenDecoder = new LenDecoder(); - - LiteralDecoder m_LiteralDecoder = new LiteralDecoder(); - - uint m_DictionarySize; - uint m_DictionarySizeCheck; - - uint m_PosStateMask; - - public Decoder() - { - m_DictionarySize = 0xFFFFFFFF; - for (int i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits); - } - - void SetDictionarySize(uint dictionarySize) - { - if (m_DictionarySize != dictionarySize) - { - m_DictionarySize = dictionarySize; - m_DictionarySizeCheck = Math.Max(m_DictionarySize, 1); - uint blockSize = Math.Max(m_DictionarySizeCheck, (1 << 12)); - m_OutWindow.Create(blockSize); - } - } - - void SetLiteralProperties(int lp, int lc) - { - if (lp > 8) - throw new InvalidParamException(); - if (lc > 8) - throw new InvalidParamException(); - m_LiteralDecoder.Create(lp, lc); - } - - void SetPosBitsProperties(int pb) - { - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - uint numPosStates = (uint)1 << pb; - m_LenDecoder.Create(numPosStates); - m_RepLenDecoder.Create(numPosStates); - m_PosStateMask = numPosStates - 1; - } - - bool _solid = false; - void Init(System.IO.Stream inStream, System.IO.Stream outStream) - { - m_RangeDecoder.Init(inStream); - m_OutWindow.Init(outStream, _solid); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= m_PosStateMask; j++) - { - uint index = (i << Base.kNumPosStatesBitsMax) + j; - m_IsMatchDecoders[index].Init(); - m_IsRep0LongDecoders[index].Init(); - } - m_IsRepDecoders[i].Init(); - m_IsRepG0Decoders[i].Init(); - m_IsRepG1Decoders[i].Init(); - m_IsRepG2Decoders[i].Init(); - } - - m_LiteralDecoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i].Init(); - // m_PosSpecDecoder.Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - m_PosDecoders[i].Init(); - - m_LenDecoder.Init(); - m_RepLenDecoder.Init(); - m_PosAlignDecoder.Init(); - } - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - Init(inStream, outStream); - - Base.State state = new Base.State(); - state.Init(); - uint rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0; - - UInt64 nowPos64 = 0; - UInt64 outSize64 = (UInt64)outSize; - if (nowPos64 < outSize64) - { - if (m_IsMatchDecoders[state.Index << Base.kNumPosStatesBitsMax].Decode(m_RangeDecoder) != 0) - throw new DataErrorException(); - state.UpdateChar(); - byte b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, 0, 0); - m_OutWindow.PutByte(b); - nowPos64++; - } - while (nowPos64 < outSize64) - { - // UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64); - // while(nowPos64 < next) - { - uint posState = (uint)nowPos64 & m_PosStateMask; - if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - byte b; - byte prevByte = m_OutWindow.GetByte(0); - if (!state.IsCharState()) - b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder, - (uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0)); - else - b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte); - m_OutWindow.PutByte(b); - state.UpdateChar(); - nowPos64++; - } - else - { - uint len; - if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1) - { - if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - state.UpdateShortRep(); - m_OutWindow.PutByte(m_OutWindow.GetByte(rep0)); - nowPos64++; - continue; - } - } - else - { - UInt32 distance; - if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - distance = rep1; - } - else - { - if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state.UpdateRep(); - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state.UpdateMatch(); - uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (int)((posSlot >> 1) - 1); - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); - } - } - else - rep0 = posSlot; - } - if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck) - { - if (rep0 == 0xFFFFFFFF) - break; - throw new DataErrorException(); - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; - } - } - } - m_OutWindow.Flush(); - m_OutWindow.ReleaseStream(); - m_RangeDecoder.ReleaseStream(); - } - - public void SetDecoderProperties(byte[] properties) - { - if (properties.Length < 5) - throw new InvalidParamException(); - int lc = properties[0] % 9; - int remainder = properties[0] / 9; - int lp = remainder % 5; - int pb = remainder / 5; - if (pb > Base.kNumPosStatesBitsMax) - throw new InvalidParamException(); - UInt32 dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((UInt32)(properties[1 + i])) << (i * 8); - SetDictionarySize(dictionarySize); - SetLiteralProperties(lp, lc); - SetPosBitsProperties(pb); - } - - public bool Train(System.IO.Stream stream) - { - _solid = true; - return m_OutWindow.Train(stream); - } - - /* - public override bool CanRead { get { return true; }} - public override bool CanWrite { get { return true; }} - public override bool CanSeek { get { return true; }} - public override long Length { get { return 0; }} - public override long Position - { - get { return 0; } - set { } - } - public override void Flush() { } - public override int Read(byte[] buffer, int offset, int count) - { - return 0; - } - public override void Write(byte[] buffer, int offset, int count) - { - } - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - return 0; - } - public override void SetLength(long value) {} - */ - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs deleted file mode 100644 index a8d67230..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +++ /dev/null @@ -1,1480 +0,0 @@ -// LzmaEncoder.cs - -using System; - -namespace SevenZip.Compression.LZMA -{ - using RangeCoder; - - public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties - { - enum EMatchFinderType - { - BT2, - BT4, - }; - - const UInt32 kIfinityPrice = 0xFFFFFFF; - - static Byte[] g_FastPos = new Byte[1 << 11]; - - static Encoder() - { - const Byte kFastSlots = 22; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - for (Byte slotFast = 2; slotFast < kFastSlots; slotFast++) - { - UInt32 k = ((UInt32)1 << ((slotFast >> 1) - 1)); - for (UInt32 j = 0; j < k; j++, c++) - g_FastPos[c] = slotFast; - } - } - - static UInt32 GetPosSlot(UInt32 pos) - { - if (pos < (1 << 11)) - return g_FastPos[pos]; - if (pos < (1 << 21)) - return (UInt32)(g_FastPos[pos >> 10] + 20); - return (UInt32)(g_FastPos[pos >> 20] + 40); - } - - static UInt32 GetPosSlot2(UInt32 pos) - { - if (pos < (1 << 17)) - return (UInt32)(g_FastPos[pos >> 6] + 12); - if (pos < (1 << 27)) - return (UInt32)(g_FastPos[pos >> 16] + 32); - return (UInt32)(g_FastPos[pos >> 26] + 52); - } - - Base.State _state = new Base.State(); - Byte _previousByte; - UInt32[] _repDistances = new UInt32[Base.kNumRepDistances]; - - void BaseInit() - { - _state.Init(); - _previousByte = 0; - for (UInt32 i = 0; i < Base.kNumRepDistances; i++) - _repDistances[i] = 0; - } - - const int kDefaultDictionaryLogSize = 22; - const UInt32 kNumFastBytesDefault = 0x20; - - class LiteralEncoder - { - public struct Encoder2 - { - BitEncoder[] m_Encoders; - - public void Create() { m_Encoders = new BitEncoder[0x300]; } - - public void Init() { for (int i = 0; i < 0x300; i++) m_Encoders[i].Init(); } - - public void Encode(RangeCoder.Encoder rangeEncoder, byte symbol) - { - uint context = 1; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - m_Encoders[context].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public void EncodeMatched(RangeCoder.Encoder rangeEncoder, byte matchByte, byte symbol) - { - uint context = 1; - bool same = true; - for (int i = 7; i >= 0; i--) - { - uint bit = (uint)((symbol >> i) & 1); - uint state = context; - if (same) - { - uint matchBit = (uint)((matchByte >> i) & 1); - state += ((1 + matchBit) << 8); - same = (matchBit == bit); - } - m_Encoders[state].Encode(rangeEncoder, bit); - context = (context << 1) | bit; - } - } - - public uint GetPrice(bool matchMode, byte matchByte, byte symbol) - { - uint price = 0; - uint context = 1; - int i = 7; - if (matchMode) - { - for (; i >= 0; i--) - { - uint matchBit = (uint)(matchByte >> i) & 1; - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[((1 + matchBit) << 8) + context].GetPrice(bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - i--; - break; - } - } - } - for (; i >= 0; i--) - { - uint bit = (uint)(symbol >> i) & 1; - price += m_Encoders[context].GetPrice(bit); - context = (context << 1) | bit; - } - return price; - } - } - - Encoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - uint m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = ((uint)1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Encoder2[numStates]; - for (uint i = 0; i < numStates; i++) - m_Coders[i].Create(); - } - - public void Init() - { - uint numStates = (uint)1 << (m_NumPrevBits + m_NumPosBits); - for (uint i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - public Encoder2 GetSubCoder(UInt32 pos, Byte prevByte) - { return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + (uint)(prevByte >> (8 - m_NumPrevBits))]; } - } - - class LenEncoder - { - RangeCoder.BitEncoder _choice = new RangeCoder.BitEncoder(); - RangeCoder.BitEncoder _choice2 = new RangeCoder.BitEncoder(); - RangeCoder.BitTreeEncoder[] _lowCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder[] _midCoder = new RangeCoder.BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - RangeCoder.BitTreeEncoder _highCoder = new RangeCoder.BitTreeEncoder(Base.kNumHighLenBits); - - public LenEncoder() - { - for (UInt32 posState = 0; posState < Base.kNumPosStatesEncodingMax; posState++) - { - _lowCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumLowLenBits); - _midCoder[posState] = new RangeCoder.BitTreeEncoder(Base.kNumMidLenBits); - } - } - - public void Init(UInt32 numPosStates) - { - _choice.Init(); - _choice2.Init(); - for (UInt32 posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - - public void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - if (symbol < Base.kNumLowLenSymbols) - { - _choice.Encode(rangeEncoder, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - symbol -= Base.kNumLowLenSymbols; - _choice.Encode(rangeEncoder, 1); - if (symbol < Base.kNumMidLenSymbols) - { - _choice2.Encode(rangeEncoder, 0); - _midCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - _choice2.Encode(rangeEncoder, 1); - _highCoder.Encode(rangeEncoder, symbol - Base.kNumMidLenSymbols); - } - } - } - - public void SetPrices(UInt32 posState, UInt32 numSymbols, UInt32[] prices, UInt32 st) - { - UInt32 a0 = _choice.GetPrice0(); - UInt32 a1 = _choice.GetPrice1(); - UInt32 b0 = a1 + _choice2.GetPrice0(); - UInt32 b1 = a1 + _choice2.GetPrice1(); - UInt32 i = 0; - for (i = 0; i < Base.kNumLowLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = b0 + _midCoder[posState].GetPrice(i - Base.kNumLowLenSymbols); - } - for (; i < numSymbols; i++) - prices[st + i] = b1 + _highCoder.GetPrice(i - Base.kNumLowLenSymbols - Base.kNumMidLenSymbols); - } - }; - - const UInt32 kNumLenSpecSymbols = Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; - - class LenPriceTableEncoder : LenEncoder - { - UInt32[] _prices = new UInt32[Base.kNumLenSymbols << Base.kNumPosStatesBitsEncodingMax]; - UInt32 _tableSize; - UInt32[] _counters = new UInt32[Base.kNumPosStatesEncodingMax]; - - public void SetTableSize(UInt32 tableSize) { _tableSize = tableSize; } - - public UInt32 GetPrice(UInt32 symbol, UInt32 posState) - { - return _prices[posState * Base.kNumLenSymbols + symbol]; - } - - void UpdateTable(UInt32 posState) - { - SetPrices(posState, _tableSize, _prices, posState * Base.kNumLenSymbols); - _counters[posState] = _tableSize; - } - - public void UpdateTables(UInt32 numPosStates) - { - for (UInt32 posState = 0; posState < numPosStates; posState++) - UpdateTable(posState); - } - - public new void Encode(RangeCoder.Encoder rangeEncoder, UInt32 symbol, UInt32 posState) - { - base.Encode(rangeEncoder, symbol, posState); - if (--_counters[posState] == 0) - UpdateTable(posState); - } - } - - const UInt32 kNumOpts = 1 << 12; - class Optimal - { - public Base.State State; - - public bool Prev1IsChar; - public bool Prev2; - - public UInt32 PosPrev2; - public UInt32 BackPrev2; - - public UInt32 Price; - public UInt32 PosPrev; - public UInt32 BackPrev; - - public UInt32 Backs0; - public UInt32 Backs1; - public UInt32 Backs2; - public UInt32 Backs3; - - public void MakeAsChar() { BackPrev = 0xFFFFFFFF; Prev1IsChar = false; } - public void MakeAsShortRep() { BackPrev = 0; ; Prev1IsChar = false; } - public bool IsShortRep() { return (BackPrev == 0); } - }; - Optimal[] _optimum = new Optimal[kNumOpts]; - LZ.IMatchFinder _matchFinder = null; - RangeCoder.Encoder _rangeEncoder = new RangeCoder.Encoder(); - - RangeCoder.BitEncoder[] _isMatch = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - RangeCoder.BitEncoder[] _isRep = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG0 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG1 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRepG2 = new RangeCoder.BitEncoder[Base.kNumStates]; - RangeCoder.BitEncoder[] _isRep0Long = new RangeCoder.BitEncoder[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - RangeCoder.BitTreeEncoder[] _posSlotEncoder = new RangeCoder.BitTreeEncoder[Base.kNumLenToPosStates]; - - RangeCoder.BitEncoder[] _posEncoders = new RangeCoder.BitEncoder[Base.kNumFullDistances - Base.kEndPosModelIndex]; - RangeCoder.BitTreeEncoder _posAlignEncoder = new RangeCoder.BitTreeEncoder(Base.kNumAlignBits); - - LenPriceTableEncoder _lenEncoder = new LenPriceTableEncoder(); - LenPriceTableEncoder _repMatchLenEncoder = new LenPriceTableEncoder(); - - LiteralEncoder _literalEncoder = new LiteralEncoder(); - - UInt32[] _matchDistances = new UInt32[Base.kMatchMaxLen * 2 + 2]; - - UInt32 _numFastBytes = kNumFastBytesDefault; - UInt32 _longestMatchLength; - UInt32 _numDistancePairs; - - UInt32 _additionalOffset; - - UInt32 _optimumEndIndex; - UInt32 _optimumCurrentIndex; - - bool _longestMatchWasFound; - - UInt32[] _posSlotPrices = new UInt32[1 << (Base.kNumPosSlotBits + Base.kNumLenToPosStatesBits)]; - UInt32[] _distancesPrices = new UInt32[Base.kNumFullDistances << Base.kNumLenToPosStatesBits]; - UInt32[] _alignPrices = new UInt32[Base.kAlignTableSize]; - UInt32 _alignPriceCount; - - UInt32 _distTableSize = (kDefaultDictionaryLogSize * 2); - - int _posStateBits = 2; - UInt32 _posStateMask = (4 - 1); - int _numLiteralPosStateBits = 0; - int _numLiteralContextBits = 3; - - UInt32 _dictionarySize = (1 << kDefaultDictionaryLogSize); - UInt32 _dictionarySizePrev = 0xFFFFFFFF; - UInt32 _numFastBytesPrev = 0xFFFFFFFF; - - Int64 nowPos64; - bool _finished; - System.IO.Stream _inStream; - - EMatchFinderType _matchFinderType = EMatchFinderType.BT4; - bool _writeEndMark = false; - - bool _needReleaseMFStream; - - void Create() - { - if (_matchFinder == null) - { - LZ.BinTree bt = new LZ.BinTree(); - int numHashBytes = 4; - if (_matchFinderType == EMatchFinderType.BT2) - numHashBytes = 2; - bt.SetType(numHashBytes); - _matchFinder = bt; - } - _literalEncoder.Create(_numLiteralPosStateBits, _numLiteralContextBits); - - if (_dictionarySize == _dictionarySizePrev && _numFastBytesPrev == _numFastBytes) - return; - _matchFinder.Create(_dictionarySize, kNumOpts, _numFastBytes, Base.kMatchMaxLen + 1); - _dictionarySizePrev = _dictionarySize; - _numFastBytesPrev = _numFastBytes; - } - - public Encoder() - { - for (int i = 0; i < kNumOpts; i++) - _optimum[i] = new Optimal(); - for (int i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i] = new RangeCoder.BitTreeEncoder(Base.kNumPosSlotBits); - } - - void SetWriteEndMarkerMode(bool writeEndMarker) - { - _writeEndMark = writeEndMarker; - } - - void Init() - { - BaseInit(); - _rangeEncoder.Init(); - - uint i; - for (i = 0; i < Base.kNumStates; i++) - { - for (uint j = 0; j <= _posStateMask; j++) - { - uint complexState = (i << Base.kNumPosStatesBitsMax) + j; - _isMatch[complexState].Init(); - _isRep0Long[complexState].Init(); - } - _isRep[i].Init(); - _isRepG0[i].Init(); - _isRepG1[i].Init(); - _isRepG2[i].Init(); - } - _literalEncoder.Init(); - for (i = 0; i < Base.kNumLenToPosStates; i++) - _posSlotEncoder[i].Init(); - for (i = 0; i < Base.kNumFullDistances - Base.kEndPosModelIndex; i++) - _posEncoders[i].Init(); - - _lenEncoder.Init((UInt32)1 << _posStateBits); - _repMatchLenEncoder.Init((UInt32)1 << _posStateBits); - - _posAlignEncoder.Init(); - - _longestMatchWasFound = false; - _optimumEndIndex = 0; - _optimumCurrentIndex = 0; - _additionalOffset = 0; - } - - void ReadMatchDistances(out UInt32 lenRes, out UInt32 numDistancePairs) - { - lenRes = 0; - numDistancePairs = _matchFinder.GetMatches(_matchDistances); - if (numDistancePairs > 0) - { - lenRes = _matchDistances[numDistancePairs - 2]; - if (lenRes == _numFastBytes) - lenRes += _matchFinder.GetMatchLen((int)lenRes - 1, _matchDistances[numDistancePairs - 1], - Base.kMatchMaxLen - lenRes); - } - _additionalOffset++; - } - - - void MovePos(UInt32 num) - { - if (num > 0) - { - _matchFinder.Skip(num); - _additionalOffset += num; - } - } - - UInt32 GetRepLen1Price(Base.State state, UInt32 posState) - { - return _isRepG0[state.Index].GetPrice0() + - _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0(); - } - - UInt32 GetPureRepPrice(UInt32 repIndex, Base.State state, UInt32 posState) - { - UInt32 price; - if (repIndex == 0) - { - price = _isRepG0[state.Index].GetPrice0(); - price += _isRep0Long[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - } - else - { - price = _isRepG0[state.Index].GetPrice1(); - if (repIndex == 1) - price += _isRepG1[state.Index].GetPrice0(); - else - { - price += _isRepG1[state.Index].GetPrice1(); - price += _isRepG2[state.Index].GetPrice(repIndex - 2); - } - } - return price; - } - - UInt32 GetRepPrice(UInt32 repIndex, UInt32 len, Base.State state, UInt32 posState) - { - UInt32 price = _repMatchLenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - return price + GetPureRepPrice(repIndex, state, posState); - } - - UInt32 GetPosLenPrice(UInt32 pos, UInt32 len, UInt32 posState) - { - UInt32 price; - UInt32 lenToPosState = Base.GetLenToPosState(len); - if (pos < Base.kNumFullDistances) - price = _distancesPrices[(lenToPosState * Base.kNumFullDistances) + pos]; - else - price = _posSlotPrices[(lenToPosState << Base.kNumPosSlotBits) + GetPosSlot2(pos)] + - _alignPrices[pos & Base.kAlignMask]; - return price + _lenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - } - - UInt32 Backward(out UInt32 backRes, UInt32 cur) - { - _optimumEndIndex = cur; - UInt32 posMem = _optimum[cur].PosPrev; - UInt32 backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - UInt32 posPrev = posMem; - UInt32 backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while (cur > 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; - } - - UInt32[] reps = new UInt32[Base.kNumRepDistances]; - UInt32[] repLens = new UInt32[Base.kNumRepDistances]; - - - UInt32 GetOptimum(UInt32 position, out UInt32 backRes) - { - if (_optimumEndIndex != _optimumCurrentIndex) - { - UInt32 lenRes = _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; - backRes = _optimum[_optimumCurrentIndex].BackPrev; - _optimumCurrentIndex = _optimum[_optimumCurrentIndex].PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - UInt32 lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - ReadMatchDistances(out lenMain, out numDistancePairs); - } - else - { - lenMain = _longestMatchLength; - numDistancePairs = _numDistancePairs; - _longestMatchWasFound = false; - } - - UInt32 numAvailableBytes = _matchFinder.GetNumAvailableBytes() + 1; - if (numAvailableBytes < 2) - { - backRes = 0xFFFFFFFF; - return 1; - } - if (numAvailableBytes > Base.kMatchMaxLen) - numAvailableBytes = Base.kMatchMaxLen; - - UInt32 repMaxIndex = 0; - UInt32 i; - for (i = 0; i < Base.kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - repLens[i] = _matchFinder.GetMatchLen(0 - 1, reps[i], Base.kMatchMaxLen); - if (repLens[i] > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - UInt32 lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - if (lenMain >= _numFastBytes) - { - backRes = _matchDistances[numDistancePairs - 1] + Base.kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - Byte currentByte = _matchFinder.GetIndexByte(0 - 1); - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - 1)); - - if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = (UInt32)0xFFFFFFFF; - return 1; - } - - _optimum[0].State = _state; - - UInt32 posState = (position & _posStateMask); - - _optimum[1].Price = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(!_state.IsCharState(), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - UInt32 matchPrice = _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - UInt32 repMatchPrice = matchPrice + _isRep[_state.Index].GetPrice1(); - - if (matchByte == currentByte) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if (shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - - UInt32 lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if(lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - - _optimum[0].Backs0 = reps[0]; - _optimum[0].Backs1 = reps[1]; - _optimum[0].Backs2 = reps[2]; - _optimum[0].Backs3 = reps[3]; - - UInt32 len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for (i = 0; i < Base.kNumRepDistances; i++) - { - UInt32 repLen = repLens[i]; - if (repLen < 2) - continue; - UInt32 price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - UInt32 curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - Optimal optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while (--repLen >= 2); - } - - UInt32 normalMatchPrice = matchPrice + _isRep[_state.Index].GetPrice0(); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - UInt32 offs = 0; - while (len > _matchDistances[offs]) - offs += 2; - for (; ; len++) - { - UInt32 distance = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - Optimal optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == _matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - UInt32 cur = 0; - - while (true) - { - cur++; - if (cur == lenEnd) - return Backward(out backRes, cur); - UInt32 newLen; - ReadMatchDistances(out newLen, out numDistancePairs); - if (newLen >= _numFastBytes) - { - _numDistancePairs = numDistancePairs; - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(out backRes, cur); - } - position++; - UInt32 posPrev = _optimum[cur].PosPrev; - Base.State state; - if (_optimum[cur].Prev1IsChar) - { - posPrev--; - if (_optimum[cur].Prev2) - { - state = _optimum[_optimum[cur].PosPrev2].State; - if (_optimum[cur].BackPrev2 < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - else - state = _optimum[posPrev].State; - state.UpdateChar(); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (_optimum[cur].IsShortRep()) - state.UpdateShortRep(); - else - state.UpdateChar(); - } - else - { - UInt32 pos; - if (_optimum[cur].Prev1IsChar && _optimum[cur].Prev2) - { - posPrev = _optimum[cur].PosPrev2; - pos = _optimum[cur].BackPrev2; - state.UpdateRep(); - } - else - { - pos = _optimum[cur].BackPrev; - if (pos < Base.kNumRepDistances) - state.UpdateRep(); - else - state.UpdateMatch(); - } - Optimal opt = _optimum[posPrev]; - if (pos < Base.kNumRepDistances) - { - if (pos == 0) - { - reps[0] = opt.Backs0; - reps[1] = opt.Backs1; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 1) - { - reps[0] = opt.Backs1; - reps[1] = opt.Backs0; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 2) - { - reps[0] = opt.Backs2; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs3; - } - else - { - reps[0] = opt.Backs3; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - else - { - reps[0] = (pos - Base.kNumRepDistances); - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - _optimum[cur].State = state; - _optimum[cur].Backs0 = reps[0]; - _optimum[cur].Backs1 = reps[1]; - _optimum[cur].Backs2 = reps[2]; - _optimum[cur].Backs3 = reps[3]; - UInt32 curPrice = _optimum[cur].Price; - - currentByte = _matchFinder.GetIndexByte(0 - 1); - matchByte = _matchFinder.GetIndexByte((Int32)(0 - reps[0] - 1 - 1)); - - posState = (position & _posStateMask); - - UInt32 curAnd1Price = curPrice + - _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice0() + - _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). - GetPrice(!state.IsCharState(), matchByte, currentByte); - - Optimal nextOptimum = _optimum[cur + 1]; - - bool nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - matchPrice = curPrice + _isMatch[(state.Index << Base.kNumPosStatesBitsMax) + posState].GetPrice1(); - repMatchPrice = matchPrice + _isRep[state.Index].GetPrice1(); - - if (matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if (shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - - UInt32 numAvailableBytesFull = _matchFinder.GetNumAvailableBytes() + 1; - numAvailableBytesFull = Math.Min(kNumOpts - 1 - cur, numAvailableBytesFull); - numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) - { - // try Literal + rep0 - UInt32 t = Math.Min(numAvailableBytesFull - 1, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen(0, reps[0], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateChar(); - UInt32 posStateNext = (position + 1) & _posStateMask; - UInt32 nextRepMatchPrice = curAnd1Price + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1() + - _isRep[state2.Index].GetPrice1(); - { - UInt32 offset = cur + 1 + lenTest2; - while (lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - UInt32 startLen = 2; // speed optimization - - for (UInt32 repIndex = 0; repIndex < Base.kNumRepDistances; repIndex++) - { - UInt32 lenTest = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); - if (lenTest < 2) - continue; - UInt32 lenTestTemp = lenTest; - do - { - while (lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while(--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, reps[repIndex], t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateRep(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = - repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)).GetPrice(true, - _matchFinder.GetIndexByte((Int32)((Int32)lenTest - 1 - (Int32)(reps[repIndex] + 1))), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - // for(; lenTest2 >= 2; lenTest2--) - { - UInt32 offset = lenTest + 1 + lenTest2; - while(lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - UInt32 curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > _matchDistances[numDistancePairs]; numDistancePairs += 2) ; - _matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - normalMatchPrice = matchPrice + _isRep[state.Index].GetPrice0(); - while (lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - UInt32 offs = 0; - while (startLen > _matchDistances[offs]) - offs += 2; - - for (UInt32 lenTest = startLen; ; lenTest++) - { - UInt32 curBack = _matchDistances[offs + 1]; - UInt32 curAndLenPrice = normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (lenTest == _matchDistances[offs]) - { - if (lenTest < numAvailableBytesFull) - { - UInt32 t = Math.Min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - UInt32 lenTest2 = _matchFinder.GetMatchLen((Int32)lenTest, curBack, t); - if (lenTest2 >= 2) - { - Base.State state2 = state; - state2.UpdateMatch(); - UInt32 posStateNext = (position + lenTest) & _posStateMask; - UInt32 curAndLenCharPrice = curAndLenPrice + - _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice0() + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte((Int32)lenTest - 1 - 1)). - GetPrice(true, - _matchFinder.GetIndexByte((Int32)lenTest - (Int32)(curBack + 1) - 1), - _matchFinder.GetIndexByte((Int32)lenTest - 1)); - state2.UpdateChar(); - posStateNext = (position + lenTest + 1) & _posStateMask; - UInt32 nextMatchPrice = curAndLenCharPrice + _isMatch[(state2.Index << Base.kNumPosStatesBitsMax) + posStateNext].GetPrice1(); - UInt32 nextRepMatchPrice = nextMatchPrice + _isRep[state2.Index].GetPrice1(); - - UInt32 offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + Base.kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - } - } - - bool ChangePair(UInt32 smallDist, UInt32 bigDist) - { - const int kDif = 7; - return (smallDist < ((UInt32)(1) << (32 - kDif)) && bigDist >= (smallDist << kDif)); - } - - void WriteEndMarker(UInt32 posState) - { - if (!_writeEndMark) - return; - - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 1); - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - UInt32 len = Base.kMatchMinLen; - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - UInt32 posSlot = (1 << Base.kNumPosSlotBits) - 1; - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - int footerBits = 30; - UInt32 posReduced = (((UInt32)1) << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - } - - void Flush(UInt32 nowPos) - { - ReleaseMFStream(); - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - _rangeEncoder.FlushStream(); - } - - public void CodeOneBlock(out Int64 inSize, out Int64 outSize, out bool finished) - { - inSize = 0; - outSize = 0; - finished = true; - - if (_inStream != null) - { - _matchFinder.SetStream(_inStream); - _matchFinder.Init(); - _needReleaseMFStream = true; - _inStream = null; - if (_trainSize > 0) - _matchFinder.Skip(_trainSize); - } - - if (_finished) - return; - _finished = true; - - - Int64 progressPosValuePrev = nowPos64; - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - UInt32 len, numDistancePairs; // it's not used - ReadMatchDistances(out len, out numDistancePairs); - UInt32 posState = (UInt32)(nowPos64) & _posStateMask; - _isMatch[(_state.Index << Base.kNumPosStatesBitsMax) + posState].Encode(_rangeEncoder, 0); - _state.UpdateChar(); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - _literalEncoder.GetSubCoder((UInt32)(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - while (true) - { - UInt32 pos; - UInt32 len = GetOptimum((UInt32)nowPos64, out pos); - - UInt32 posState = ((UInt32)nowPos64) & _posStateMask; - UInt32 complexState = (_state.Index << Base.kNumPosStatesBitsMax) + posState; - if (len == 1 && pos == 0xFFFFFFFF) - { - _isMatch[complexState].Encode(_rangeEncoder, 0); - Byte curByte = _matchFinder.GetIndexByte((Int32)(0 - _additionalOffset)); - LiteralEncoder.Encoder2 subCoder = _literalEncoder.GetSubCoder((UInt32)nowPos64, _previousByte); - if (!_state.IsCharState()) - { - Byte matchByte = _matchFinder.GetIndexByte((Int32)(0 - _repDistances[0] - 1 - _additionalOffset)); - subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); - } - else - subCoder.Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _state.UpdateChar(); - } - else - { - _isMatch[complexState].Encode(_rangeEncoder, 1); - if (pos < Base.kNumRepDistances) - { - _isRep[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 0) - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 0); - if (len == 1) - _isRep0Long[complexState].Encode(_rangeEncoder, 0); - else - _isRep0Long[complexState].Encode(_rangeEncoder, 1); - } - else - { - _isRepG0[_state.Index].Encode(_rangeEncoder, 1); - if (pos == 1) - _isRepG1[_state.Index].Encode(_rangeEncoder, 0); - else - { - _isRepG1[_state.Index].Encode(_rangeEncoder, 1); - _isRepG2[_state.Index].Encode(_rangeEncoder, pos - 2); - } - } - if (len == 1) - _state.UpdateShortRep(); - else - { - _repMatchLenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - _state.UpdateRep(); - } - UInt32 distance = _repDistances[pos]; - if (pos != 0) - { - for (UInt32 i = pos; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - } - } - else - { - _isRep[_state.Index].Encode(_rangeEncoder, 0); - _state.UpdateMatch(); - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - pos -= Base.kNumRepDistances; - UInt32 posSlot = GetPosSlot(pos); - UInt32 lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - - if (posSlot >= Base.kStartPosModelIndex) - { - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - UInt32 posReduced = pos - baseVal; - - if (posSlot < Base.kEndPosModelIndex) - RangeCoder.BitTreeEncoder.ReverseEncode(_posEncoders, - baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - _alignPriceCount++; - } - } - UInt32 distance = pos; - for (UInt32 i = Base.kNumRepDistances - 1; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte((Int32)(len - 1 - _additionalOffset)); - } - _additionalOffset -= len; - nowPos64 += len; - if (_additionalOffset == 0) - { - // if (!_fastMode) - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= Base.kAlignTableSize) - FillAlignPrices(); - inSize = nowPos64; - outSize = _rangeEncoder.GetProcessedSizeAdd(); - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((UInt32)nowPos64); - return; - } - - if (nowPos64 - progressPosValuePrev >= (1 << 12)) - { - _finished = false; - finished = false; - return; - } - } - } - } - - void ReleaseMFStream() - { - if (_matchFinder != null && _needReleaseMFStream) - { - _matchFinder.ReleaseStream(); - _needReleaseMFStream = false; - } - } - - void SetOutStream(System.IO.Stream outStream) { _rangeEncoder.SetStream(outStream); } - void ReleaseOutStream() { _rangeEncoder.ReleaseStream(); } - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - void SetStreams(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize) - { - _inStream = inStream; - _finished = false; - Create(); - SetOutStream(outStream); - Init(); - - // if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _lenEncoder.UpdateTables((UInt32)1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _repMatchLenEncoder.UpdateTables((UInt32)1 << _posStateBits); - - nowPos64 = 0; - } - - - public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) - { - _needReleaseMFStream = false; - try - { - SetStreams(inStream, outStream, inSize, outSize); - while (true) - { - Int64 processedInSize; - Int64 processedOutSize; - bool finished; - CodeOneBlock(out processedInSize, out processedOutSize, out finished); - if (finished) - return; - if (progress != null) - { - progress.SetProgress(processedInSize, processedOutSize); - } - } - } - finally - { - ReleaseStreams(); - } - } - - const int kPropSize = 5; - Byte[] properties = new Byte[kPropSize]; - - public void WriteCoderProperties(System.IO.Stream outStream) - { - properties[0] = (Byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = (Byte)(_dictionarySize >> (8 * i)); - outStream.Write(properties, 0, kPropSize); - } - - UInt32[] tempPrices = new UInt32[Base.kNumFullDistances]; - UInt32 _matchPriceCount; - - void FillDistancesPrices() - { - for (UInt32 i = Base.kStartPosModelIndex; i < Base.kNumFullDistances; i++) - { - UInt32 posSlot = GetPosSlot(i); - int footerBits = (int)((posSlot >> 1) - 1); - UInt32 baseVal = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = BitTreeEncoder.ReverseGetPrice(_posEncoders, - baseVal - posSlot - 1, footerBits, i - baseVal); - } - - for (UInt32 lenToPosState = 0; lenToPosState < Base.kNumLenToPosStates; lenToPosState++) - { - UInt32 posSlot; - RangeCoder.BitTreeEncoder encoder = _posSlotEncoder[lenToPosState]; - - UInt32 st = (lenToPosState << Base.kNumPosSlotBits); - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] = encoder.GetPrice(posSlot); - for (posSlot = Base.kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] += ((((posSlot >> 1) - 1) - Base.kNumAlignBits) << RangeCoder.BitEncoder.kNumBitPriceShiftBits); - - UInt32 st2 = lenToPosState * Base.kNumFullDistances; - UInt32 i; - for (i = 0; i < Base.kStartPosModelIndex; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + i]; - for (; i < Base.kNumFullDistances; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; - } - - void FillAlignPrices() - { - for (UInt32 i = 0; i < Base.kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; - } - - - static string[] kMatchFinderIDs = - { - "BT2", - "BT4", - }; - - static int FindMatchFinder(string s) - { - for (int m = 0; m < kMatchFinderIDs.Length; m++) - if (s == kMatchFinderIDs[m]) - return m; - return -1; - } - - public void SetCoderProperties(CoderPropID[] propIDs, object[] properties) - { - for (UInt32 i = 0; i < properties.Length; i++) - { - object prop = properties[i]; - switch (propIDs[i]) - { - case CoderPropID.NumFastBytes: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 numFastBytes = (Int32)prop; - if (numFastBytes < 5 || numFastBytes > Base.kMatchMaxLen) - throw new InvalidParamException(); - _numFastBytes = (UInt32)numFastBytes; - break; - } - case CoderPropID.Algorithm: - { - /* - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 maximize = (Int32)prop; - _fastMode = (maximize == 0); - _maxMode = (maximize >= 2); - */ - break; - } - case CoderPropID.MatchFinder: - { - if (!(prop is String)) - throw new InvalidParamException(); - EMatchFinderType matchFinderIndexPrev = _matchFinderType; - int m = FindMatchFinder(((string)prop).ToUpper()); - if (m < 0) - throw new InvalidParamException(); - _matchFinderType = (EMatchFinderType)m; - if (_matchFinder != null && matchFinderIndexPrev != _matchFinderType) - { - _dictionarySizePrev = 0xFFFFFFFF; - _matchFinder = null; - } - break; - } - case CoderPropID.DictionarySize: - { - const int kDicLogSizeMaxCompress = 30; - if (!(prop is Int32)) - throw new InvalidParamException(); ; - Int32 dictionarySize = (Int32)prop; - if (dictionarySize < (UInt32)(1 << Base.kDicLogSizeMin) || - dictionarySize > (UInt32)(1 << kDicLogSizeMaxCompress)) - throw new InvalidParamException(); - _dictionarySize = (UInt32)dictionarySize; - int dicLogSize; - for (dicLogSize = 0; dicLogSize < (UInt32)kDicLogSizeMaxCompress; dicLogSize++) - if (dictionarySize <= ((UInt32)(1) << dicLogSize)) - break; - _distTableSize = (UInt32)dicLogSize * 2; - break; - } - case CoderPropID.PosStateBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _posStateBits = (int)v; - _posStateMask = (((UInt32)1) << (int)_posStateBits) - 1; - break; - } - case CoderPropID.LitPosBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitPosStatesBitsEncodingMax) - throw new InvalidParamException(); - _numLiteralPosStateBits = (int)v; - break; - } - case CoderPropID.LitContextBits: - { - if (!(prop is Int32)) - throw new InvalidParamException(); - Int32 v = (Int32)prop; - if (v < 0 || v > (UInt32)Base.kNumLitContextBitsMax) - throw new InvalidParamException(); ; - _numLiteralContextBits = (int)v; - break; - } - case CoderPropID.EndMarker: - { - if (!(prop is Boolean)) - throw new InvalidParamException(); - SetWriteEndMarkerMode((Boolean)prop); - break; - } - default: - throw new InvalidParamException(); - } - } - } - - uint _trainSize = 0; - public void SetTrainSize(uint trainSize) - { - _trainSize = trainSize; - } - - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs deleted file mode 100644 index 38018a2c..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +++ /dev/null @@ -1,364 +0,0 @@ -using System; -using System.IO; -namespace SevenZip -{ - using CommandLineParser; - - public class CDoubleStream: Stream - { - public System.IO.Stream s1; - public System.IO.Stream s2; - public int fileIndex; - public long skipSize; - - public override bool CanRead { get { return true; }} - public override bool CanWrite { get { return false; }} - public override bool CanSeek { get { return false; }} - public override long Length { get { return s1.Length + s2.Length - skipSize; } } - public override long Position - { - get { return 0; } - set { } - } - public override void Flush() { } - public override int Read(byte[] buffer, int offset, int count) - { - int numTotal = 0; - while (count > 0) - { - if (fileIndex == 0) - { - int num = s1.Read(buffer, offset, count); - offset += num; - count -= num; - numTotal += num; - if (num == 0) - fileIndex++; - } - if (fileIndex == 1) - { - numTotal += s2.Read(buffer, offset, count); - return numTotal; - } - } - return numTotal; - } - public override void Write(byte[] buffer, int offset, int count) - { - throw (new Exception("can't Write")); - } - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - throw (new Exception("can't Seek")); - } - public override void SetLength(long value) - { - throw (new Exception("can't SetLength")); - } - } - - class LzmaAlone - { - enum Key - { - Help1 = 0, - Help2, - Mode, - Dictionary, - FastBytes, - LitContext, - LitPos, - PosBits, - MatchFinder, - EOS, - StdIn, - StdOut, - Train - }; - - static void PrintHelp() - { - System.Console.WriteLine("\nUsage: LZMA [...] inputFile outputFile\n" + - " e: encode file\n" + - " d: decode file\n" + - " b: Benchmark\n" + - "\n" + - // " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" + - " -d{N}: set dictionary - [0, 29], default: 23 (8MB)\n" + - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" + - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" + - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" + - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" + - " -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4\n" + - " -eos: write End Of Stream marker\n" - // + " -si: read data from stdin\n" - // + " -so: write data to stdout\n" - ); - } - - static bool GetNumber(string s, out Int32 v) - { - v = 0; - for (int i = 0; i < s.Length; i++) - { - char c = s[i]; - if (c < '0' || c > '9') - return false; - v *= 10; - v += (Int32)(c - '0'); - } - return true; - } - - static int IncorrectCommand() - { - throw (new Exception("Command line error")); - // System.Console.WriteLine("\nCommand line error\n"); - // return 1; - } - static int Main2(string[] args) - { - System.Console.WriteLine("\nLZMA# 4.49 Copyright (c) 1999-2007 Igor Pavlov 2006-07-05\n"); - - if (args.Length == 0) - { - PrintHelp(); - return 0; - } - - SwitchForm[] kSwitchForms = new SwitchForm[13]; - int sw = 0; - kSwitchForms[sw++] = new SwitchForm("?", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("H", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("A", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("D", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("FB", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("LC", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("LP", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("PB", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("MF", SwitchType.UnLimitedPostString, false, 1); - kSwitchForms[sw++] = new SwitchForm("EOS", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("SI", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("SO", SwitchType.Simple, false); - kSwitchForms[sw++] = new SwitchForm("T", SwitchType.UnLimitedPostString, false, 1); - - - Parser parser = new Parser(sw); - try - { - parser.ParseStrings(kSwitchForms, args); - } - catch - { - return IncorrectCommand(); - } - - if (parser[(int)Key.Help1].ThereIs || parser[(int)Key.Help2].ThereIs) - { - PrintHelp(); - return 0; - } - - System.Collections.ArrayList nonSwitchStrings = parser.NonSwitchStrings; - - int paramIndex = 0; - if (paramIndex >= nonSwitchStrings.Count) - return IncorrectCommand(); - string command = (string)nonSwitchStrings[paramIndex++]; - command = command.ToLower(); - - bool dictionaryIsDefined = false; - Int32 dictionary = 1 << 21; - if (parser[(int)Key.Dictionary].ThereIs) - { - Int32 dicLog; - if (!GetNumber((string)parser[(int)Key.Dictionary].PostStrings[0], out dicLog)) - IncorrectCommand(); - dictionary = (Int32)1 << dicLog; - dictionaryIsDefined = true; - } - string mf = "bt4"; - if (parser[(int)Key.MatchFinder].ThereIs) - mf = (string)parser[(int)Key.MatchFinder].PostStrings[0]; - mf = mf.ToLower(); - - if (command == "b") - { - const Int32 kNumDefaultItereations = 10; - Int32 numIterations = kNumDefaultItereations; - if (paramIndex < nonSwitchStrings.Count) - if (!GetNumber((string)nonSwitchStrings[paramIndex++], out numIterations)) - numIterations = kNumDefaultItereations; - return LzmaBench.LzmaBenchmark(numIterations, (UInt32)dictionary); - } - - string train = ""; - if (parser[(int)Key.Train].ThereIs) - train = (string)parser[(int)Key.Train].PostStrings[0]; - - bool encodeMode = false; - if (command == "e") - encodeMode = true; - else if (command == "d") - encodeMode = false; - else - IncorrectCommand(); - - bool stdInMode = parser[(int)Key.StdIn].ThereIs; - bool stdOutMode = parser[(int)Key.StdOut].ThereIs; - - Stream inStream = null; - if (stdInMode) - { - throw (new Exception("Not implemeted")); - } - else - { - if (paramIndex >= nonSwitchStrings.Count) - IncorrectCommand(); - string inputName = (string)nonSwitchStrings[paramIndex++]; - inStream = new FileStream(inputName, FileMode.Open, FileAccess.Read); - } - - FileStream outStream = null; - if (stdOutMode) - { - throw (new Exception("Not implemeted")); - } - else - { - if (paramIndex >= nonSwitchStrings.Count) - IncorrectCommand(); - string outputName = (string)nonSwitchStrings[paramIndex++]; - outStream = new FileStream(outputName, FileMode.Create, FileAccess.Write); - } - - FileStream trainStream = null; - if (train.Length != 0) - trainStream = new FileStream(train, FileMode.Open, FileAccess.Read); - - if (encodeMode) - { - if (!dictionaryIsDefined) - dictionary = 1 << 23; - - Int32 posStateBits = 2; - Int32 litContextBits = 3; // for normal files - // UInt32 litContextBits = 0; // for 32-bit data - Int32 litPosBits = 0; - // UInt32 litPosBits = 2; // for 32-bit data - Int32 algorithm = 2; - Int32 numFastBytes = 128; - - bool eos = parser[(int)Key.EOS].ThereIs || stdInMode; - - if (parser[(int)Key.Mode].ThereIs) - if (!GetNumber((string)parser[(int)Key.Mode].PostStrings[0], out algorithm)) - IncorrectCommand(); - - if (parser[(int)Key.FastBytes].ThereIs) - if (!GetNumber((string)parser[(int)Key.FastBytes].PostStrings[0], out numFastBytes)) - IncorrectCommand(); - if (parser[(int)Key.LitContext].ThereIs) - if (!GetNumber((string)parser[(int)Key.LitContext].PostStrings[0], out litContextBits)) - IncorrectCommand(); - if (parser[(int)Key.LitPos].ThereIs) - if (!GetNumber((string)parser[(int)Key.LitPos].PostStrings[0], out litPosBits)) - IncorrectCommand(); - if (parser[(int)Key.PosBits].ThereIs) - if (!GetNumber((string)parser[(int)Key.PosBits].PostStrings[0], out posStateBits)) - IncorrectCommand(); - - CoderPropID[] propIDs = - { - CoderPropID.DictionarySize, - CoderPropID.PosStateBits, - CoderPropID.LitContextBits, - CoderPropID.LitPosBits, - CoderPropID.Algorithm, - CoderPropID.NumFastBytes, - CoderPropID.MatchFinder, - CoderPropID.EndMarker - }; - object[] properties = - { - (Int32)(dictionary), - (Int32)(posStateBits), - (Int32)(litContextBits), - (Int32)(litPosBits), - (Int32)(algorithm), - (Int32)(numFastBytes), - mf, - eos - }; - - Compression.LZMA.Encoder encoder = new Compression.LZMA.Encoder(); - encoder.SetCoderProperties(propIDs, properties); - encoder.WriteCoderProperties(outStream); - Int64 fileSize; - if (eos || stdInMode) - fileSize = -1; - else - fileSize = inStream.Length; - for (int i = 0; i < 8; i++) - outStream.WriteByte((Byte)(fileSize >> (8 * i))); - if (trainStream != null) - { - CDoubleStream doubleStream = new CDoubleStream(); - doubleStream.s1 = trainStream; - doubleStream.s2 = inStream; - doubleStream.fileIndex = 0; - inStream = doubleStream; - long trainFileSize = trainStream.Length; - doubleStream.skipSize = 0; - if (trainFileSize > dictionary) - doubleStream.skipSize = trainFileSize - dictionary; - trainStream.Seek(doubleStream.skipSize, SeekOrigin.Begin); - encoder.SetTrainSize((uint)(trainFileSize - doubleStream.skipSize)); - } - encoder.Code(inStream, outStream, -1, -1, null); - } - else if (command == "d") - { - byte[] properties = new byte[5]; - if (inStream.Read(properties, 0, 5) != 5) - throw (new Exception("input .lzma is too short")); - Compression.LZMA.Decoder decoder = new Compression.LZMA.Decoder(); - decoder.SetDecoderProperties(properties); - if (trainStream != null) - { - if (!decoder.Train(trainStream)) - throw (new Exception("can't train")); - } - long outSize = 0; - for (int i = 0; i < 8; i++) - { - int v = inStream.ReadByte(); - if (v < 0) - throw (new Exception("Can't Read 1")); - outSize |= ((long)(byte)v) << (8 * i); - } - long compressedSize = inStream.Length - inStream.Position; - decoder.Code(inStream, outStream, compressedSize, outSize, null); - } - else - throw (new Exception("Command Error")); - return 0; - } - - [STAThread] - static int Main(string[] args) - { - try - { - return Main2(args); - } - catch (Exception e) - { - Console.WriteLine("{0} Caught exception #1.", e); - // throw e; - return 1; - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj deleted file mode 100644 index 6d87b61f..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +++ /dev/null @@ -1,90 +0,0 @@ - - - Debug - AnyCPU - 8.0.50727 - 2.0 - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973} - Exe - LzmaAlone - Lzma# - 4 - - - true - full - false - .\bin\Debug\ - DEBUG;TRACE - - - false - true - .\bin\Release\ - TRACE - AnyCPU - - - - - - - - - Common\CommandLineParser.cs - - - Common\CRC.cs - - - ICoder.cs - - - LZ\IMatchFinder.cs - - - LZ\LzBinTree.cs - - - LZ\LzInWindow.cs - - - LZ\LzOutWindow.cs - - - LZMA\LzmaBase.cs - - - LZMA\LzmaDecoder.cs - - - LZMA\LzmaEncoder.cs - - - RangeCoder\RangeCoder.cs - - - RangeCoder\RangeCoderBit.cs - - - RangeCoder\RangeCoderBitTree.cs - - - Code - - - Code - - - - True - Settings.settings - - - SettingsSingleFileGenerator - Settings.cs - - - - - \ No newline at end of file diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln deleted file mode 100644 index 376cd27a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C# Express 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LzmaAlone", "LzmaAlone.csproj", "{CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE33DF18-F9C8-4D6F-9057-DBB4DB96E973}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs deleted file mode 100644 index f7b6bd01..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +++ /dev/null @@ -1,340 +0,0 @@ -// LzmaBench.cs - -using System; -using System.IO; - -namespace SevenZip -{ - /// - /// LZMA Benchmark - /// - internal abstract class LzmaBench - { - const UInt32 kAdditionalSize = (6 << 20); - const UInt32 kCompressedAdditionalSize = (1 << 10); - const UInt32 kMaxLzmaPropSize = 10; - - class CRandomGenerator - { - UInt32 A1; - UInt32 A2; - public CRandomGenerator() { Init(); } - public void Init() { A1 = 362436069; A2 = 521288629; } - public UInt32 GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >> 16)) << 16) ^ - ((A2 = 18000 * (A2 & 0xffff) + (A2 >> 16))); - } - }; - - class CBitRandomGenerator - { - CRandomGenerator RG = new CRandomGenerator(); - UInt32 Value; - int NumBits; - public void Init() - { - Value = 0; - NumBits = 0; - } - public UInt32 GetRnd(int numBits) - { - UInt32 result; - if (NumBits > numBits) - { - result = Value & (((UInt32)1 << numBits) - 1); - Value >>= numBits; - NumBits -= numBits; - return result; - } - numBits -= NumBits; - result = (Value << numBits); - Value = RG.GetRnd(); - result |= Value & (((UInt32)1 << numBits) - 1); - Value >>= numBits; - NumBits = 32 - numBits; - return result; - } - }; - - class CBenchRandomGenerator - { - CBitRandomGenerator RG = new CBitRandomGenerator(); - UInt32 Pos; - UInt32 Rep0; - - public UInt32 BufferSize; - public Byte[] Buffer = null; - - public CBenchRandomGenerator() { } - - public void Set(UInt32 bufferSize) - { - Buffer = new Byte[bufferSize]; - Pos = 0; - BufferSize = bufferSize; - } - UInt32 GetRndBit() { return RG.GetRnd(1); } - UInt32 GetLogRandBits(int numBits) - { - UInt32 len = RG.GetRnd(numBits); - return RG.GetRnd((int)len); - } - UInt32 GetOffset() - { - if (GetRndBit() == 0) - return GetLogRandBits(4); - return (GetLogRandBits(4) << 10) | RG.GetRnd(10); - } - UInt32 GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } - UInt32 GetLen2() { return RG.GetRnd(2 + (int)RG.GetRnd(2)); } - public void Generate() - { - RG.Init(); - Rep0 = 1; - while (Pos < BufferSize) - { - if (GetRndBit() == 0 || Pos < 1) - Buffer[Pos++] = (Byte)RG.GetRnd(8); - else - { - UInt32 len; - if (RG.GetRnd(3) == 0) - len = 1 + GetLen1(); - else - { - do - Rep0 = GetOffset(); - while (Rep0 >= Pos); - Rep0++; - len = 2 + GetLen2(); - } - for (UInt32 i = 0; i < len && Pos < BufferSize; i++, Pos++) - Buffer[Pos] = Buffer[Pos - Rep0]; - } - } - } - }; - - class CrcOutStream : System.IO.Stream - { - public CRC CRC = new CRC(); - public void Init() { CRC.Init(); } - public UInt32 GetDigest() { return CRC.GetDigest(); } - - public override bool CanRead { get { return false; } } - public override bool CanSeek { get { return false; } } - public override bool CanWrite { get { return true; } } - public override Int64 Length { get { return 0; } } - public override Int64 Position { get { return 0; } set { } } - public override void Flush() { } - public override long Seek(long offset, SeekOrigin origin) { return 0; } - public override void SetLength(long value) { } - public override int Read(byte[] buffer, int offset, int count) { return 0; } - - public override void WriteByte(byte b) - { - CRC.UpdateByte(b); - } - public override void Write(byte[] buffer, int offset, int count) - { - CRC.Update(buffer, (uint)offset, (uint)count); - } - }; - - class CProgressInfo : ICodeProgress - { - public Int64 ApprovedStart; - public Int64 InSize; - public System.DateTime Time; - public void Init() { InSize = 0; } - public void SetProgress(Int64 inSize, Int64 outSize) - { - if (inSize >= ApprovedStart && InSize == 0) - { - Time = DateTime.UtcNow; - InSize = inSize; - } - } - } - const int kSubBits = 8; - - static UInt32 GetLogSize(UInt32 size) - { - for (int i = kSubBits; i < 32; i++) - for (UInt32 j = 0; j < (1 << kSubBits); j++) - if (size <= (((UInt32)1) << i) + (j << (i - kSubBits))) - return (UInt32)(i << kSubBits) + j; - return (32 << kSubBits); - } - - static UInt64 MyMultDiv64(UInt64 value, UInt64 elapsedTime) - { - UInt64 freq = TimeSpan.TicksPerSecond; - UInt64 elTime = elapsedTime; - while (freq > 1000000) - { - freq >>= 1; - elTime >>= 1; - } - if (elTime == 0) - elTime = 1; - return value * freq / elTime; - } - - static UInt64 GetCompressRating(UInt32 dictionarySize, UInt64 elapsedTime, UInt64 size) - { - UInt64 t = GetLogSize(dictionarySize) - (18 << kSubBits); - UInt64 numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); - UInt64 numCommands = (UInt64)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime); - } - - static UInt64 GetDecompressRating(UInt64 elapsedTime, UInt64 outSize, UInt64 inSize) - { - UInt64 numCommands = inSize * 220 + outSize * 20; - return MyMultDiv64(numCommands, elapsedTime); - } - - static UInt64 GetTotalRating( - UInt32 dictionarySize, - UInt64 elapsedTimeEn, UInt64 sizeEn, - UInt64 elapsedTimeDe, - UInt64 inSizeDe, UInt64 outSizeDe) - { - return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + - GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; - } - - static void PrintValue(UInt64 v) - { - string s = v.ToString(); - for (int i = 0; i + s.Length < 6; i++) - System.Console.Write(" "); - System.Console.Write(s); - } - - static void PrintRating(UInt64 rating) - { - PrintValue(rating / 1000000); - System.Console.Write(" MIPS"); - } - - static void PrintResults( - UInt32 dictionarySize, - UInt64 elapsedTime, - UInt64 size, - bool decompressMode, UInt64 secondSize) - { - UInt64 speed = MyMultDiv64(size, elapsedTime); - PrintValue(speed / 1024); - System.Console.Write(" KB/s "); - UInt64 rating; - if (decompressMode) - rating = GetDecompressRating(elapsedTime, size, secondSize); - else - rating = GetCompressRating(dictionarySize, elapsedTime, size); - PrintRating(rating); - } - - static public int LzmaBenchmark(Int32 numIterations, UInt32 dictionarySize) - { - if (numIterations <= 0) - return 0; - if (dictionarySize < (1 << 18)) - { - System.Console.WriteLine("\nError: dictionary size for benchmark must be >= 19 (512 KB)"); - return 1; - } - System.Console.Write("\n Compressing Decompressing\n\n"); - - Compression.LZMA.Encoder encoder = new Compression.LZMA.Encoder(); - Compression.LZMA.Decoder decoder = new Compression.LZMA.Decoder(); - - - CoderPropID[] propIDs = - { - CoderPropID.DictionarySize, - }; - object[] properties = - { - (Int32)(dictionarySize), - }; - - UInt32 kBufferSize = dictionarySize + kAdditionalSize; - UInt32 kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - - encoder.SetCoderProperties(propIDs, properties); - System.IO.MemoryStream propStream = new System.IO.MemoryStream(); - encoder.WriteCoderProperties(propStream); - byte[] propArray = propStream.ToArray(); - - CBenchRandomGenerator rg = new CBenchRandomGenerator(); - - rg.Set(kBufferSize); - rg.Generate(); - CRC crc = new CRC(); - crc.Init(); - crc.Update(rg.Buffer, 0, rg.BufferSize); - - CProgressInfo progressInfo = new CProgressInfo(); - progressInfo.ApprovedStart = dictionarySize; - - UInt64 totalBenchSize = 0; - UInt64 totalEncodeTime = 0; - UInt64 totalDecodeTime = 0; - UInt64 totalCompressedSize = 0; - - MemoryStream inStream = new MemoryStream(rg.Buffer, 0, (int)rg.BufferSize); - MemoryStream compressedStream = new MemoryStream((int)kCompressedBufferSize); - CrcOutStream crcOutStream = new CrcOutStream(); - for (Int32 i = 0; i < numIterations; i++) - { - progressInfo.Init(); - inStream.Seek(0, SeekOrigin.Begin); - compressedStream.Seek(0, SeekOrigin.Begin); - encoder.Code(inStream, compressedStream, -1, -1, progressInfo); - TimeSpan sp2 = DateTime.UtcNow - progressInfo.Time; - UInt64 encodeTime = (UInt64)sp2.Ticks; - - long compressedSize = compressedStream.Position; - if (progressInfo.InSize == 0) - throw (new Exception("Internal ERROR 1282")); - - UInt64 decodeTime = 0; - for (int j = 0; j < 2; j++) - { - compressedStream.Seek(0, SeekOrigin.Begin); - crcOutStream.Init(); - - decoder.SetDecoderProperties(propArray); - UInt64 outSize = kBufferSize; - System.DateTime startTime = DateTime.UtcNow; - decoder.Code(compressedStream, crcOutStream, 0, (Int64)outSize, null); - TimeSpan sp = (DateTime.UtcNow - startTime); - decodeTime = (ulong)sp.Ticks; - if (crcOutStream.GetDigest() != crc.GetDigest()) - throw (new Exception("CRC Error")); - } - UInt64 benchSize = kBufferSize - (UInt64)progressInfo.InSize; - PrintResults(dictionarySize, encodeTime, benchSize, false, 0); - System.Console.Write(" "); - PrintResults(dictionarySize, decodeTime, kBufferSize, true, (ulong)compressedSize); - System.Console.WriteLine(); - - totalBenchSize += benchSize; - totalEncodeTime += encodeTime; - totalDecodeTime += decodeTime; - totalCompressedSize += (ulong)compressedSize; - } - System.Console.WriteLine("---------------------------------------------------"); - PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); - System.Console.Write(" "); - PrintResults(dictionarySize, totalDecodeTime, - kBufferSize * (UInt64)numIterations, true, totalCompressedSize); - System.Console.WriteLine(" Average"); - return 0; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs deleted file mode 100644 index 96148847..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Using directives - -using System.Reflection; -using System.Runtime.CompilerServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("LZMA#")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Igor Pavlov")] -[assembly: AssemblyProduct("LZMA# SDK")] -[assembly: AssemblyCopyright("Copyright @ Igor Pavlov 1999-2004")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("4.12.*")] diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs deleted file mode 100644 index 1170cf18..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +++ /dev/null @@ -1,70 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.40607.42 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LzmaAlone.Properties -{ - using System; - using System.IO; - using System.Resources; - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the Strongly Typed Resource Builder - // class via a tool like ResGen or Visual Studio.NET. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - class Resources - { - - private static System.Resources.ResourceManager _resMgr; - - private static System.Globalization.CultureInfo _resCulture; - - /*FamANDAssem*/ - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - public static System.Resources.ResourceManager ResourceManager - { - get - { - if ((_resMgr == null)) - { - System.Resources.ResourceManager temp = new System.Resources.ResourceManager("Resources", typeof(Resources).Assembly); - _resMgr = temp; - } - return _resMgr; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] - public static System.Globalization.CultureInfo Culture - { - get - { - return _resCulture; - } - set - { - _resCulture = value; - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs deleted file mode 100644 index ccfed776..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +++ /dev/null @@ -1,42 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.40607.42 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace LzmaAlone.Properties -{ - public partial class Settings : System.Configuration.ApplicationSettingsBase - { - private static Settings m_Value; - - private static object m_SyncObject = new object(); - - public static Settings Value - { - get - { - if ((Settings.m_Value == null)) - { - System.Threading.Monitor.Enter(Settings.m_SyncObject); - if ((Settings.m_Value == null)) - { - try - { - Settings.m_Value = new Settings(); - } - finally - { - System.Threading.Monitor.Exit(Settings.m_SyncObject); - } - } - } - return Settings.m_Value; - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs deleted file mode 100644 index 949c6bbe..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - class Encoder - { - public const uint kTopValue = (1 << 24); - - System.IO.Stream Stream; - - public UInt64 Low; - public uint Range; - uint _cacheSize; - byte _cache; - - long StartPosition; - - public void SetStream(System.IO.Stream stream) - { - Stream = stream; - } - - public void ReleaseStream() - { - Stream = null; - } - - public void Init() - { - StartPosition = Stream.Position; - - Low = 0; - Range = 0xFFFFFFFF; - _cacheSize = 1; - _cache = 0; - } - - public void FlushData() - { - for (int i = 0; i < 5; i++) - ShiftLow(); - } - - public void FlushStream() - { - Stream.Flush(); - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Encode(uint start, uint size, uint total) - { - Low += start * (Range /= total); - Range *= size; - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public void ShiftLow() - { - if ((uint)Low < (uint)0xFF000000 || (uint)(Low >> 32) == 1) - { - byte temp = _cache; - do - { - Stream.WriteByte((byte)(temp + (Low >> 32))); - temp = 0xFF; - } - while (--_cacheSize != 0); - _cache = (byte)(((uint)Low) >> 24); - } - _cacheSize++; - Low = ((uint)Low) << 8; - } - - public void EncodeDirectBits(uint v, int numTotalBits) - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>= 1; - if (((v >> i) & 1) == 1) - Low += Range; - if (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - } - - public void EncodeBit(uint size0, int numTotalBits, uint symbol) - { - uint newBound = (Range >> numTotalBits) * size0; - if (symbol == 0) - Range = newBound; - else - { - Low += newBound; - Range -= newBound; - } - while (Range < kTopValue) - { - Range <<= 8; - ShiftLow(); - } - } - - public long GetProcessedSizeAdd() - { - return _cacheSize + - Stream.Position - StartPosition + 4; - // (long)Stream.GetProcessedSize(); - } - } - - class Decoder - { - public const uint kTopValue = (1 << 24); - public uint Range; - public uint Code; - // public Buffer.InBuffer Stream = new Buffer.InBuffer(1 << 16); - public System.IO.Stream Stream; - - public void Init(System.IO.Stream stream) - { - // Stream.Init(stream); - Stream = stream; - - Code = 0; - Range = 0xFFFFFFFF; - for (int i = 0; i < 5; i++) - Code = (Code << 8) | (byte)Stream.ReadByte(); - } - - public void ReleaseStream() - { - // Stream.ReleaseStream(); - Stream = null; - } - - public void CloseStream() - { - Stream.Close(); - } - - public void Normalize() - { - while (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public void Normalize2() - { - if (Range < kTopValue) - { - Code = (Code << 8) | (byte)Stream.ReadByte(); - Range <<= 8; - } - } - - public uint GetThreshold(uint total) - { - return Code / (Range /= total); - } - - public void Decode(uint start, uint size, uint total) - { - Code -= start * Range; - Range *= size; - Normalize(); - } - - public uint DecodeDirectBits(int numTotalBits) - { - uint range = Range; - uint code = Code; - uint result = 0; - for (int i = numTotalBits; i > 0; i--) - { - range >>= 1; - /* - result <<= 1; - if (code >= range) - { - code -= range; - result |= 1; - } - */ - uint t = (code - range) >> 31; - code -= range & (t - 1); - result = (result << 1) | (1 - t); - - if (range < kTopValue) - { - code = (code << 8) | (byte)Stream.ReadByte(); - range <<= 8; - } - } - Range = range; - Code = code; - return result; - } - - public uint DecodeBit(uint size0, int numTotalBits) - { - uint newBound = (Range >> numTotalBits) * size0; - uint symbol; - if (Code < newBound) - { - symbol = 0; - Range = newBound; - } - else - { - symbol = 1; - Code -= newBound; - Range -= newBound; - } - Normalize(); - return symbol; - } - - // ulong GetProcessedSize() {return Stream.GetProcessedSize(); } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs deleted file mode 100644 index 4f0346d1..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitEncoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - const int kNumMoveReducingBits = 2; - public const int kNumBitPriceShiftBits = 6; - - uint Prob; - - public void Init() { Prob = kBitModelTotal >> 1; } - - public void UpdateModel(uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - else - Prob -= (Prob) >> kNumMoveBits; - } - - public void Encode(Encoder encoder, uint symbol) - { - // encoder.EncodeBit(Prob, kNumBitModelTotalBits, symbol); - // UpdateModel(symbol); - uint newBound = (encoder.Range >> kNumBitModelTotalBits) * Prob; - if (symbol == 0) - { - encoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - } - else - { - encoder.Low += newBound; - encoder.Range -= newBound; - Prob -= (Prob) >> kNumMoveBits; - } - if (encoder.Range < Encoder.kTopValue) - { - encoder.Range <<= 8; - encoder.ShiftLow(); - } - } - - private static UInt32[] ProbPrices = new UInt32[kBitModelTotal >> kNumMoveReducingBits]; - - static BitEncoder() - { - const int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for (int i = kNumBits - 1; i >= 0; i--) - { - UInt32 start = (UInt32)1 << (kNumBits - i - 1); - UInt32 end = (UInt32)1 << (kNumBits - i); - for (UInt32 j = start; j < end; j++) - ProbPrices[j] = ((UInt32)i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >> (kNumBits - i - 1)); - } - } - - public uint GetPrice(uint symbol) - { - return ProbPrices[(((Prob - symbol) ^ ((-(int)symbol))) & (kBitModelTotal - 1)) >> kNumMoveReducingBits]; - } - public uint GetPrice0() { return ProbPrices[Prob >> kNumMoveReducingBits]; } - public uint GetPrice1() { return ProbPrices[(kBitModelTotal - Prob) >> kNumMoveReducingBits]; } - } - - struct BitDecoder - { - public const int kNumBitModelTotalBits = 11; - public const uint kBitModelTotal = (1 << kNumBitModelTotalBits); - const int kNumMoveBits = 5; - - uint Prob; - - public void UpdateModel(int numMoveBits, uint symbol) - { - if (symbol == 0) - Prob += (kBitModelTotal - Prob) >> numMoveBits; - else - Prob -= (Prob) >> numMoveBits; - } - - public void Init() { Prob = kBitModelTotal >> 1; } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint newBound = (uint)(rangeDecoder.Range >> kNumBitModelTotalBits) * (uint)Prob; - if (rangeDecoder.Code < newBound) - { - rangeDecoder.Range = newBound; - Prob += (kBitModelTotal - Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 0; - } - else - { - rangeDecoder.Range -= newBound; - rangeDecoder.Code -= newBound; - Prob -= (Prob) >> kNumMoveBits; - if (rangeDecoder.Range < Decoder.kTopValue) - { - rangeDecoder.Code = (rangeDecoder.Code << 8) | (byte)rangeDecoder.Stream.ReadByte(); - rangeDecoder.Range <<= 8; - } - return 1; - } - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs deleted file mode 100644 index 4b4506f9..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; - -namespace SevenZip.Compression.RangeCoder -{ - struct BitTreeEncoder - { - BitEncoder[] Models; - int NumBitLevels; - - public BitTreeEncoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitEncoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public void Encode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - } - } - - public void ReverseEncode(Encoder rangeEncoder, UInt32 symbol) - { - UInt32 m = 1; - for (UInt32 i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - - public UInt32 GetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; ) - { - bitIndex--; - UInt32 bit = (symbol >> bitIndex) & 1; - price += Models[m].GetPrice(bit); - m = (m << 1) + bit; - } - return price; - } - - public UInt32 ReverseGetPrice(UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static UInt32 ReverseGetPrice(BitEncoder[] Models, UInt32 startIndex, - int NumBitLevels, UInt32 symbol) - { - UInt32 price = 0; - UInt32 m = 1; - for (int i = NumBitLevels; i > 0; i--) - { - UInt32 bit = symbol & 1; - symbol >>= 1; - price += Models[startIndex + m].GetPrice(bit); - m = (m << 1) | bit; - } - return price; - } - - public static void ReverseEncode(BitEncoder[] Models, UInt32 startIndex, - Encoder rangeEncoder, int NumBitLevels, UInt32 symbol) - { - UInt32 m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - UInt32 bit = symbol & 1; - Models[startIndex + m].Encode(rangeEncoder, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - } - - struct BitTreeDecoder - { - BitDecoder[] Models; - int NumBitLevels; - - public BitTreeDecoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new BitDecoder[1 << numBitLevels]; - } - - public void Init() - { - for (uint i = 1; i < (1 << NumBitLevels); i++) - Models[i].Init(); - } - - public uint Decode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - for (int bitIndex = NumBitLevels; bitIndex > 0; bitIndex--) - m = (m << 1) + Models[m].Decode(rangeDecoder); - return m - ((uint)1 << NumBitLevels); - } - - public uint ReverseDecode(RangeCoder.Decoder rangeDecoder) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - - public static uint ReverseDecode(BitDecoder[] Models, UInt32 startIndex, - RangeCoder.Decoder rangeDecoder, int NumBitLevels) - { - uint m = 1; - uint symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - uint bit = Models[startIndex + m].Decode(rangeDecoder); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/ICoder.cs b/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/ICoder.cs deleted file mode 100644 index 85bf5316..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/CS/7zip/ICoder.cs +++ /dev/null @@ -1,145 +0,0 @@ -// ICoder.h - -using System; - -namespace SevenZip -{ - /// - /// The exception that is thrown when an error in input stream occurs during decoding. - /// - class DataErrorException : ApplicationException - { - public DataErrorException(): base("Data Error") { } - } - - /// - /// The exception that is thrown when the value of an argument is outside the allowable range. - /// - class InvalidParamException : ApplicationException - { - public InvalidParamException(): base("Invalid Parameter") { } - } - - public interface ICodeProgress - { - /// - /// Callback progress. - /// - /// - /// input size. -1 if unknown. - /// - /// - /// output size. -1 if unknown. - /// - void SetProgress(Int64 inSize, Int64 outSize); - }; - - public interface ICoder - { - /// - /// Codes streams. - /// - /// - /// input Stream. - /// - /// - /// output Stream. - /// - /// - /// input Size. -1 if unknown. - /// - /// - /// output Size. -1 if unknown. - /// - /// - /// callback progress reference. - /// - /// - /// if input stream is not valid - /// - void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress); - }; - - /* - public interface ICoder2 - { - void Code(ISequentialInStream []inStreams, - const UInt64 []inSizes, - ISequentialOutStream []outStreams, - UInt64 []outSizes, - ICodeProgress progress); - }; - */ - - /// - /// Provides the fields that represent properties idenitifiers for compressing. - /// - public enum CoderPropID - { - /// - /// Specifies size of dictionary. - /// - DictionarySize = 0x400, - /// - /// Specifies size of memory for PPM*. - /// - UsedMemorySize, - /// - /// Specifies order for PPM methods. - /// - Order, - /// - /// Specifies number of postion state bits for LZMA (0 <= x <= 4). - /// - PosStateBits = 0x440, - /// - /// Specifies number of literal context bits for LZMA (0 <= x <= 8). - /// - LitContextBits, - /// - /// Specifies number of literal position bits for LZMA (0 <= x <= 4). - /// - LitPosBits, - /// - /// Specifies number of fast bytes for LZ*. - /// - NumFastBytes = 0x450, - /// - /// Specifies match finder. LZMA: "BT2", "BT4" or "BT4B". - /// - MatchFinder, - /// - /// Specifies number of passes. - /// - NumPasses = 0x460, - /// - /// Specifies number of algorithm. - /// - Algorithm = 0x470, - /// - /// Specifies multithread mode. - /// - MultiThread = 0x480, - /// - /// Specifies mode with end marker. - /// - EndMarker = 0x490 - }; - - - public interface ISetCoderProperties - { - void SetCoderProperties(CoderPropID[] propIDs, object[] properties); - }; - - public interface IWriteCoderProperties - { - void WriteCoderProperties(System.IO.Stream outStream); - } - - public interface ISetDecoderProperties - { - void SetDecoderProperties(byte[] properties); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/CRC.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/CRC.java deleted file mode 100644 index c55e33cc..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/CRC.java +++ /dev/null @@ -1,52 +0,0 @@ -// SevenZip/CRC.java - -package SevenZip; - -public class CRC -{ - static public int[] Table = new int[256]; - - static - { - for (int i = 0; i < 256; i++) - { - int r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >>> 1) ^ 0xEDB88320; - else - r >>>= 1; - Table[i] = r; - } - } - - int _value = -1; - - public void Init() - { - _value = -1; - } - - public void Update(byte[] data, int offset, int size) - { - for (int i = 0; i < size; i++) - _value = Table[(_value ^ data[offset + i]) & 0xFF] ^ (_value >>> 8); - } - - public void Update(byte[] data) - { - int size = data.length; - for (int i = 0; i < size; i++) - _value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8); - } - - public void UpdateByte(int b) - { - _value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8); - } - - public int GetDigest() - { - return _value ^ (-1); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/BinTree.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/BinTree.java deleted file mode 100644 index e2074e9a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/BinTree.java +++ /dev/null @@ -1,382 +0,0 @@ -// LZ.BinTree - -package SevenZip.Compression.LZ; -import java.io.IOException; - - -public class BinTree extends InWindow -{ - int _cyclicBufferPos; - int _cyclicBufferSize = 0; - int _matchMaxLen; - - int[] _son; - int[] _hash; - - int _cutValue = 0xFF; - int _hashMask; - int _hashSizeSum = 0; - - boolean HASH_ARRAY = true; - - static final int kHash2Size = 1 << 10; - static final int kHash3Size = 1 << 16; - static final int kBT2HashSize = 1 << 16; - static final int kStartMaxLen = 1; - static final int kHash3Offset = kHash2Size; - static final int kEmptyHashValue = 0; - static final int kMaxValForNormalize = (1 << 30) - 1; - - int kNumHashDirectBytes = 0; - int kMinMatchCheck = 4; - int kFixHashSize = kHash2Size + kHash3Size; - - public void SetType(int numHashBytes) - { - HASH_ARRAY = (numHashBytes > 2); - if (HASH_ARRAY) - { - kNumHashDirectBytes = 0; - kMinMatchCheck = 4; - kFixHashSize = kHash2Size + kHash3Size; - } - else - { - kNumHashDirectBytes = 2; - kMinMatchCheck = 2 + 1; - kFixHashSize = 0; - } - } - - - - - public void Init() throws IOException - { - super.Init(); - for (int i = 0; i < _hashSizeSum; i++) - _hash[i] = kEmptyHashValue; - _cyclicBufferPos = 0; - ReduceOffsets(-1); - } - - public void MovePos() throws IOException - { - if (++_cyclicBufferPos >= _cyclicBufferSize) - _cyclicBufferPos = 0; - super.MovePos(); - if (_pos == kMaxValForNormalize) - Normalize(); - } - - - - - - - - - public boolean Create(int historySize, int keepAddBufferBefore, - int matchMaxLen, int keepAddBufferAfter) - { - if (historySize > kMaxValForNormalize - 256) - return false; - _cutValue = 16 + (matchMaxLen >> 1); - - int windowReservSize = (historySize + keepAddBufferBefore + - matchMaxLen + keepAddBufferAfter) / 2 + 256; - - super.Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); - - _matchMaxLen = matchMaxLen; - - int cyclicBufferSize = historySize + 1; - if (_cyclicBufferSize != cyclicBufferSize) - _son = new int[(_cyclicBufferSize = cyclicBufferSize) * 2]; - - int hs = kBT2HashSize; - - if (HASH_ARRAY) - { - hs = historySize - 1; - hs |= (hs >> 1); - hs |= (hs >> 2); - hs |= (hs >> 4); - hs |= (hs >> 8); - hs >>= 1; - hs |= 0xFFFF; - if (hs > (1 << 24)) - hs >>= 1; - _hashMask = hs; - hs++; - hs += kFixHashSize; - } - if (hs != _hashSizeSum) - _hash = new int [_hashSizeSum = hs]; - return true; - } - public int GetMatches(int[] distances) throws IOException - { - int lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - return 0; - } - } - - int offset = 0; - int matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - int cur = _bufferOffset + _pos; - int maxLen = kStartMaxLen; // to avoid items for len < hashSize; - int hashValue, hash2Value = 0, hash3Value = 0; - - if (HASH_ARRAY) - { - int temp = CrcTable[_bufferBase[cur] & 0xFF] ^ (_bufferBase[cur + 1] & 0xFF); - hash2Value = temp & (kHash2Size - 1); - temp ^= ((int)(_bufferBase[cur + 2] & 0xFF) << 8); - hash3Value = temp & (kHash3Size - 1); - hashValue = (temp ^ (CrcTable[_bufferBase[cur + 3] & 0xFF] << 5)) & _hashMask; - } - else - hashValue = ((_bufferBase[cur] & 0xFF) ^ ((int)(_bufferBase[cur + 1] & 0xFF) << 8)); - - int curMatch = _hash[kFixHashSize + hashValue]; - if (HASH_ARRAY) - { - int curMatch2 = _hash[hash2Value]; - int curMatch3 = _hash[kHash3Offset + hash3Value]; - _hash[hash2Value] = _pos; - _hash[kHash3Offset + hash3Value] = _pos; - if (curMatch2 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch2] == _bufferBase[cur]) - { - distances[offset++] = maxLen = 2; - distances[offset++] = _pos - curMatch2 - 1; - } - if (curMatch3 > matchMinPos) - if (_bufferBase[_bufferOffset + curMatch3] == _bufferBase[cur]) - { - if (curMatch3 == curMatch2) - offset -= 2; - distances[offset++] = maxLen = 3; - distances[offset++] = _pos - curMatch3 - 1; - curMatch2 = curMatch3; - } - if (offset != 0 && curMatch2 == curMatch) - { - offset -= 2; - maxLen = kStartMaxLen; - } - } - - _hash[kFixHashSize + hashValue] = _pos; - - int ptr0 = (_cyclicBufferPos << 1) + 1; - int ptr1 = (_cyclicBufferPos << 1); - - int len0, len1; - len0 = len1 = kNumHashDirectBytes; - - if (kNumHashDirectBytes != 0) - { - if (curMatch > matchMinPos) - { - if (_bufferBase[_bufferOffset + curMatch + kNumHashDirectBytes] != - _bufferBase[cur + kNumHashDirectBytes]) - { - distances[offset++] = maxLen = kNumHashDirectBytes; - distances[offset++] = _pos - curMatch - 1; - } - } - } - - int count = _cutValue; - - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - int delta = _pos - curMatch; - int cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - int pby1 = _bufferOffset + curMatch; - int len = Math.min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while(++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (maxLen < len) - { - distances[offset++] = maxLen = len; - distances[offset++] = delta - 1; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - } - if ((_bufferBase[pby1 + len] & 0xFF) < (_bufferBase[cur + len] & 0xFF)) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - return offset; - } - - public void Skip(int num) throws IOException - { - do - { - int lenLimit; - if (_pos + _matchMaxLen <= _streamPos) - lenLimit = _matchMaxLen; - else - { - lenLimit = _streamPos - _pos; - if (lenLimit < kMinMatchCheck) - { - MovePos(); - continue; - } - } - - int matchMinPos = (_pos > _cyclicBufferSize) ? (_pos - _cyclicBufferSize) : 0; - int cur = _bufferOffset + _pos; - - int hashValue; - - if (HASH_ARRAY) - { - int temp = CrcTable[_bufferBase[cur] & 0xFF] ^ (_bufferBase[cur + 1] & 0xFF); - int hash2Value = temp & (kHash2Size - 1); - _hash[hash2Value] = _pos; - temp ^= ((int)(_bufferBase[cur + 2] & 0xFF) << 8); - int hash3Value = temp & (kHash3Size - 1); - _hash[kHash3Offset + hash3Value] = _pos; - hashValue = (temp ^ (CrcTable[_bufferBase[cur + 3] & 0xFF] << 5)) & _hashMask; - } - else - hashValue = ((_bufferBase[cur] & 0xFF) ^ ((int)(_bufferBase[cur + 1] & 0xFF) << 8)); - - int curMatch = _hash[kFixHashSize + hashValue]; - _hash[kFixHashSize + hashValue] = _pos; - - int ptr0 = (_cyclicBufferPos << 1) + 1; - int ptr1 = (_cyclicBufferPos << 1); - - int len0, len1; - len0 = len1 = kNumHashDirectBytes; - - int count = _cutValue; - while (true) - { - if (curMatch <= matchMinPos || count-- == 0) - { - _son[ptr0] = _son[ptr1] = kEmptyHashValue; - break; - } - - int delta = _pos - curMatch; - int cyclicPos = ((delta <= _cyclicBufferPos) ? - (_cyclicBufferPos - delta) : - (_cyclicBufferPos - delta + _cyclicBufferSize)) << 1; - - int pby1 = _bufferOffset + curMatch; - int len = Math.min(len0, len1); - if (_bufferBase[pby1 + len] == _bufferBase[cur + len]) - { - while (++len != lenLimit) - if (_bufferBase[pby1 + len] != _bufferBase[cur + len]) - break; - if (len == lenLimit) - { - _son[ptr1] = _son[cyclicPos]; - _son[ptr0] = _son[cyclicPos + 1]; - break; - } - } - if ((_bufferBase[pby1 + len] & 0xFF) < (_bufferBase[cur + len] & 0xFF)) - { - _son[ptr1] = curMatch; - ptr1 = cyclicPos + 1; - curMatch = _son[ptr1]; - len1 = len; - } - else - { - _son[ptr0] = curMatch; - ptr0 = cyclicPos; - curMatch = _son[ptr0]; - len0 = len; - } - } - MovePos(); - } - while (--num != 0); - } - - void NormalizeLinks(int[] items, int numItems, int subValue) - { - for (int i = 0; i < numItems; i++) - { - int value = items[i]; - if (value <= subValue) - value = kEmptyHashValue; - else - value -= subValue; - items[i] = value; - } - } - - void Normalize() - { - int subValue = _pos - _cyclicBufferSize; - NormalizeLinks(_son, _cyclicBufferSize * 2, subValue); - NormalizeLinks(_hash, _hashSizeSum, subValue); - ReduceOffsets(subValue); - } - - public void SetCutValue(int cutValue) { _cutValue = cutValue; } - - private static final int[] CrcTable = new int[256]; - - static - { - for (int i = 0; i < 256; i++) - { - int r = i; - for (int j = 0; j < 8; j++) - if ((r & 1) != 0) - r = (r >>> 1) ^ 0xEDB88320; - else - r >>>= 1; - CrcTable[i] = r; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/InWindow.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/InWindow.java deleted file mode 100644 index c9efe601..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/InWindow.java +++ /dev/null @@ -1,131 +0,0 @@ -// LZ.InWindow - -package SevenZip.Compression.LZ; - -import java.io.IOException; - -public class InWindow -{ - public byte[] _bufferBase; // pointer to buffer with data - java.io.InputStream _stream; - int _posLimit; // offset (from _buffer) of first byte when new block reading must be done - boolean _streamEndWasReached; // if (true) then _streamPos shows real end of stream - - int _pointerToLastSafePosition; - - public int _bufferOffset; - - public int _blockSize; // Size of Allocated memory block - public int _pos; // offset (from _buffer) of curent byte - int _keepSizeBefore; // how many BYTEs must be kept in buffer before _pos - int _keepSizeAfter; // how many BYTEs must be kept buffer after _pos - public int _streamPos; // offset (from _buffer) of first not read byte from Stream - - public void MoveBlock() - { - int offset = _bufferOffset + _pos - _keepSizeBefore; - // we need one additional byte, since MovePos moves on 1 byte. - if (offset > 0) - offset--; - - int numBytes = _bufferOffset + _streamPos - offset; - - // check negative offset ???? - for (int i = 0; i < numBytes; i++) - _bufferBase[i] = _bufferBase[offset + i]; - _bufferOffset -= offset; - } - - public void ReadBlock() throws IOException - { - if (_streamEndWasReached) - return; - while (true) - { - int size = (0 - _bufferOffset) + _blockSize - _streamPos; - if (size == 0) - return; - int numReadBytes = _stream.read(_bufferBase, _bufferOffset + _streamPos, size); - if (numReadBytes == -1) - { - _posLimit = _streamPos; - int pointerToPostion = _bufferOffset + _posLimit; - if (pointerToPostion > _pointerToLastSafePosition) - _posLimit = _pointerToLastSafePosition - _bufferOffset; - - _streamEndWasReached = true; - return; - } - _streamPos += numReadBytes; - if (_streamPos >= _pos + _keepSizeAfter) - _posLimit = _streamPos - _keepSizeAfter; - } - } - - void Free() { _bufferBase = null; } - - public void Create(int keepSizeBefore, int keepSizeAfter, int keepSizeReserv) - { - _keepSizeBefore = keepSizeBefore; - _keepSizeAfter = keepSizeAfter; - int blockSize = keepSizeBefore + keepSizeAfter + keepSizeReserv; - if (_bufferBase == null || _blockSize != blockSize) - { - Free(); - _blockSize = blockSize; - _bufferBase = new byte[_blockSize]; - } - _pointerToLastSafePosition = _blockSize - keepSizeAfter; - } - - public void SetStream(java.io.InputStream stream) { _stream = stream; } - public void ReleaseStream() { _stream = null; } - - public void Init() throws IOException - { - _bufferOffset = 0; - _pos = 0; - _streamPos = 0; - _streamEndWasReached = false; - ReadBlock(); - } - - public void MovePos() throws IOException - { - _pos++; - if (_pos > _posLimit) - { - int pointerToPostion = _bufferOffset + _pos; - if (pointerToPostion > _pointerToLastSafePosition) - MoveBlock(); - ReadBlock(); - } - } - - public byte GetIndexByte(int index) { return _bufferBase[_bufferOffset + _pos + index]; } - - // index + limit have not to exceed _keepSizeAfter; - public int GetMatchLen(int index, int distance, int limit) - { - if (_streamEndWasReached) - if ((_pos + index) + limit > _streamPos) - limit = _streamPos - (_pos + index); - distance++; - // Byte *pby = _buffer + (size_t)_pos + index; - int pby = _bufferOffset + _pos + index; - - int i; - for (i = 0; i < limit && _bufferBase[pby + i] == _bufferBase[pby + i - distance]; i++); - return i; - } - - public int GetNumAvailableBytes() { return _streamPos - _pos; } - - public void ReduceOffsets(int subValue) - { - _bufferOffset += subValue; - _posLimit -= subValue; - _pos -= subValue; - _streamPos -= subValue; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/OutWindow.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/OutWindow.java deleted file mode 100644 index 2fd28321..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +++ /dev/null @@ -1,85 +0,0 @@ -// LZ.OutWindow - -package SevenZip.Compression.LZ; - -import java.io.IOException; - -public class OutWindow -{ - byte[] _buffer; - int _pos; - int _windowSize = 0; - int _streamPos; - java.io.OutputStream _stream; - - public void Create(int windowSize) - { - if (_buffer == null || _windowSize != windowSize) - _buffer = new byte[windowSize]; - _windowSize = windowSize; - _pos = 0; - _streamPos = 0; - } - - public void SetStream(java.io.OutputStream stream) throws IOException - { - ReleaseStream(); - _stream = stream; - } - - public void ReleaseStream() throws IOException - { - Flush(); - _stream = null; - } - - public void Init(boolean solid) - { - if (!solid) - { - _streamPos = 0; - _pos = 0; - } - } - - public void Flush() throws IOException - { - int size = _pos - _streamPos; - if (size == 0) - return; - _stream.write(_buffer, _streamPos, size); - if (_pos >= _windowSize) - _pos = 0; - _streamPos = _pos; - } - - public void CopyBlock(int distance, int len) throws IOException - { - int pos = _pos - distance - 1; - if (pos < 0) - pos += _windowSize; - for (; len != 0; len--) - { - if (pos >= _windowSize) - pos = 0; - _buffer[_pos++] = _buffer[pos++]; - if (_pos >= _windowSize) - Flush(); - } - } - - public void PutByte(byte b) throws IOException - { - _buffer[_pos++] = b; - if (_pos >= _windowSize) - Flush(); - } - - public byte GetByte(int distance) - { - int pos = _pos - distance - 1; - if (pos < 0) - pos += _windowSize; - return _buffer[pos]; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Base.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Base.java deleted file mode 100644 index b4f2fb50..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Base.java +++ /dev/null @@ -1,88 +0,0 @@ -// Base.java - -package SevenZip.Compression.LZMA; - -public class Base -{ - public static final int kNumRepDistances = 4; - public static final int kNumStates = 12; - - public static final int StateInit() - { - return 0; - } - - public static final int StateUpdateChar(int index) - { - if (index < 4) - return 0; - if (index < 10) - return index - 3; - return index - 6; - } - - public static final int StateUpdateMatch(int index) - { - return (index < 7 ? 7 : 10); - } - - public static final int StateUpdateRep(int index) - { - return (index < 7 ? 8 : 11); - } - - public static final int StateUpdateShortRep(int index) - { - return (index < 7 ? 9 : 11); - } - - public static final boolean StateIsCharState(int index) - { - return index < 7; - } - - public static final int kNumPosSlotBits = 6; - public static final int kDicLogSizeMin = 0; - // public static final int kDicLogSizeMax = 28; - // public static final int kDistTableSizeMax = kDicLogSizeMax * 2; - - public static final int kNumLenToPosStatesBits = 2; // it's for speed optimization - public static final int kNumLenToPosStates = 1 << kNumLenToPosStatesBits; - - public static final int kMatchMinLen = 2; - - public static final int GetLenToPosState(int len) - { - len -= kMatchMinLen; - if (len < kNumLenToPosStates) - return len; - return (int)(kNumLenToPosStates - 1); - } - - public static final int kNumAlignBits = 4; - public static final int kAlignTableSize = 1 << kNumAlignBits; - public static final int kAlignMask = (kAlignTableSize - 1); - - public static final int kStartPosModelIndex = 4; - public static final int kEndPosModelIndex = 14; - public static final int kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; - - public static final int kNumFullDistances = 1 << (kEndPosModelIndex / 2); - - public static final int kNumLitPosStatesBitsEncodingMax = 4; - public static final int kNumLitContextBitsMax = 8; - - public static final int kNumPosStatesBitsMax = 4; - public static final int kNumPosStatesMax = (1 << kNumPosStatesBitsMax); - public static final int kNumPosStatesBitsEncodingMax = 4; - public static final int kNumPosStatesEncodingMax = (1 << kNumPosStatesBitsEncodingMax); - - public static final int kNumLowLenBits = 3; - public static final int kNumMidLenBits = 3; - public static final int kNumHighLenBits = 8; - public static final int kNumLowLenSymbols = 1 << kNumLowLenBits; - public static final int kNumMidLenSymbols = 1 << kNumMidLenBits; - public static final int kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + - (1 << kNumHighLenBits); - public static final int kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Decoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Decoder.java deleted file mode 100644 index 16ee2490..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +++ /dev/null @@ -1,329 +0,0 @@ -package SevenZip.Compression.LZMA; - -import SevenZip.Compression.RangeCoder.BitTreeDecoder; -import SevenZip.Compression.LZMA.Base; -import SevenZip.Compression.LZ.OutWindow; -import java.io.IOException; - -public class Decoder -{ - class LenDecoder - { - short[] m_Choice = new short[2]; - BitTreeDecoder[] m_LowCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder[] m_MidCoder = new BitTreeDecoder[Base.kNumPosStatesMax]; - BitTreeDecoder m_HighCoder = new BitTreeDecoder(Base.kNumHighLenBits); - int m_NumPosStates = 0; - - public void Create(int numPosStates) - { - for (; m_NumPosStates < numPosStates; m_NumPosStates++) - { - m_LowCoder[m_NumPosStates] = new BitTreeDecoder(Base.kNumLowLenBits); - m_MidCoder[m_NumPosStates] = new BitTreeDecoder(Base.kNumMidLenBits); - } - } - - public void Init() - { - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_Choice); - for (int posState = 0; posState < m_NumPosStates; posState++) - { - m_LowCoder[posState].Init(); - m_MidCoder[posState].Init(); - } - m_HighCoder.Init(); - } - - public int Decode(SevenZip.Compression.RangeCoder.Decoder rangeDecoder, int posState) throws IOException - { - if (rangeDecoder.DecodeBit(m_Choice, 0) == 0) - return m_LowCoder[posState].Decode(rangeDecoder); - int symbol = Base.kNumLowLenSymbols; - if (rangeDecoder.DecodeBit(m_Choice, 1) == 0) - symbol += m_MidCoder[posState].Decode(rangeDecoder); - else - symbol += Base.kNumMidLenSymbols + m_HighCoder.Decode(rangeDecoder); - return symbol; - } - } - - class LiteralDecoder - { - class Decoder2 - { - short[] m_Decoders = new short[0x300]; - - public void Init() - { - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_Decoders); - } - - public byte DecodeNormal(SevenZip.Compression.RangeCoder.Decoder rangeDecoder) throws IOException - { - int symbol = 1; - do - symbol = (symbol << 1) | rangeDecoder.DecodeBit(m_Decoders, symbol); - while (symbol < 0x100); - return (byte)symbol; - } - - public byte DecodeWithMatchByte(SevenZip.Compression.RangeCoder.Decoder rangeDecoder, byte matchByte) throws IOException - { - int symbol = 1; - do - { - int matchBit = (matchByte >> 7) & 1; - matchByte <<= 1; - int bit = rangeDecoder.DecodeBit(m_Decoders, ((1 + matchBit) << 8) + symbol); - symbol = (symbol << 1) | bit; - if (matchBit != bit) - { - while (symbol < 0x100) - symbol = (symbol << 1) | rangeDecoder.DecodeBit(m_Decoders, symbol); - break; - } - } - while (symbol < 0x100); - return (byte)symbol; - } - } - - Decoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - int m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = (1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Decoder2[numStates]; - for (int i = 0; i < numStates; i++) - m_Coders[i] = new Decoder2(); - } - - public void Init() - { - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - for (int i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - Decoder2 GetDecoder(int pos, byte prevByte) - { - return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + ((prevByte & 0xFF) >>> (8 - m_NumPrevBits))]; - } - } - - OutWindow m_OutWindow = new OutWindow(); - SevenZip.Compression.RangeCoder.Decoder m_RangeDecoder = new SevenZip.Compression.RangeCoder.Decoder(); - - short[] m_IsMatchDecoders = new short[Base.kNumStates << Base.kNumPosStatesBitsMax]; - short[] m_IsRepDecoders = new short[Base.kNumStates]; - short[] m_IsRepG0Decoders = new short[Base.kNumStates]; - short[] m_IsRepG1Decoders = new short[Base.kNumStates]; - short[] m_IsRepG2Decoders = new short[Base.kNumStates]; - short[] m_IsRep0LongDecoders = new short[Base.kNumStates << Base.kNumPosStatesBitsMax]; - - BitTreeDecoder[] m_PosSlotDecoder = new BitTreeDecoder[Base.kNumLenToPosStates]; - short[] m_PosDecoders = new short[Base.kNumFullDistances - Base.kEndPosModelIndex]; - - BitTreeDecoder m_PosAlignDecoder = new BitTreeDecoder(Base.kNumAlignBits); - - LenDecoder m_LenDecoder = new LenDecoder(); - LenDecoder m_RepLenDecoder = new LenDecoder(); - - LiteralDecoder m_LiteralDecoder = new LiteralDecoder(); - - int m_DictionarySize = -1; - int m_DictionarySizeCheck = -1; - - int m_PosStateMask; - - public Decoder() - { - for (int i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i] = new BitTreeDecoder(Base.kNumPosSlotBits); - } - - boolean SetDictionarySize(int dictionarySize) - { - if (dictionarySize < 0) - return false; - if (m_DictionarySize != dictionarySize) - { - m_DictionarySize = dictionarySize; - m_DictionarySizeCheck = Math.max(m_DictionarySize, 1); - m_OutWindow.Create(Math.max(m_DictionarySizeCheck, (1 << 12))); - } - return true; - } - - boolean SetLcLpPb(int lc, int lp, int pb) - { - if (lc > Base.kNumLitContextBitsMax || lp > 4 || pb > Base.kNumPosStatesBitsMax) - return false; - m_LiteralDecoder.Create(lp, lc); - int numPosStates = 1 << pb; - m_LenDecoder.Create(numPosStates); - m_RepLenDecoder.Create(numPosStates); - m_PosStateMask = numPosStates - 1; - return true; - } - - void Init() throws IOException - { - m_OutWindow.Init(false); - - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsMatchDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRep0LongDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepDecoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG0Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG1Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_IsRepG2Decoders); - SevenZip.Compression.RangeCoder.Decoder.InitBitModels(m_PosDecoders); - - m_LiteralDecoder.Init(); - int i; - for (i = 0; i < Base.kNumLenToPosStates; i++) - m_PosSlotDecoder[i].Init(); - m_LenDecoder.Init(); - m_RepLenDecoder.Init(); - m_PosAlignDecoder.Init(); - m_RangeDecoder.Init(); - } - - public boolean Code(java.io.InputStream inStream, java.io.OutputStream outStream, - long outSize) throws IOException - { - m_RangeDecoder.SetStream(inStream); - m_OutWindow.SetStream(outStream); - Init(); - - int state = Base.StateInit(); - int rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0; - - long nowPos64 = 0; - byte prevByte = 0; - while (outSize < 0 || nowPos64 < outSize) - { - int posState = (int)nowPos64 & m_PosStateMask; - if (m_RangeDecoder.DecodeBit(m_IsMatchDecoders, (state << Base.kNumPosStatesBitsMax) + posState) == 0) - { - LiteralDecoder.Decoder2 decoder2 = m_LiteralDecoder.GetDecoder((int)nowPos64, prevByte); - if (!Base.StateIsCharState(state)) - prevByte = decoder2.DecodeWithMatchByte(m_RangeDecoder, m_OutWindow.GetByte(rep0)); - else - prevByte = decoder2.DecodeNormal(m_RangeDecoder); - m_OutWindow.PutByte(prevByte); - state = Base.StateUpdateChar(state); - nowPos64++; - } - else - { - int len; - if (m_RangeDecoder.DecodeBit(m_IsRepDecoders, state) == 1) - { - len = 0; - if (m_RangeDecoder.DecodeBit(m_IsRepG0Decoders, state) == 0) - { - if (m_RangeDecoder.DecodeBit(m_IsRep0LongDecoders, (state << Base.kNumPosStatesBitsMax) + posState) == 0) - { - state = Base.StateUpdateShortRep(state); - len = 1; - } - } - else - { - int distance; - if (m_RangeDecoder.DecodeBit(m_IsRepG1Decoders, state) == 0) - distance = rep1; - else - { - if (m_RangeDecoder.DecodeBit(m_IsRepG2Decoders, state) == 0) - distance = rep2; - else - { - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - if (len == 0) - { - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state = Base.StateUpdateRep(state); - } - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state = Base.StateUpdateMatch(state); - int posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (posSlot >> 1) - 1; - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); - if (rep0 < 0) - { - if (rep0 == -1) - break; - return false; - } - } - } - else - rep0 = posSlot; - } - if (rep0 >= nowPos64 || rep0 >= m_DictionarySizeCheck) - { - // m_OutWindow.Flush(); - return false; - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; - prevByte = m_OutWindow.GetByte(0); - } - } - m_OutWindow.Flush(); - m_OutWindow.ReleaseStream(); - m_RangeDecoder.ReleaseStream(); - return true; - } - - public boolean SetDecoderProperties(byte[] properties) - { - if (properties.length < 5) - return false; - int val = properties[0] & 0xFF; - int lc = val % 9; - int remainder = val / 9; - int lp = remainder % 5; - int pb = remainder / 5; - int dictionarySize = 0; - for (int i = 0; i < 4; i++) - dictionarySize += ((int)(properties[1 + i]) & 0xFF) << (i * 8); - if (!SetLcLpPb(lc, lp, pb)) - return false; - return SetDictionarySize(dictionarySize); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Encoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Encoder.java deleted file mode 100644 index 71fd6e50..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +++ /dev/null @@ -1,1416 +0,0 @@ -package SevenZip.Compression.LZMA; - -import SevenZip.Compression.RangeCoder.BitTreeEncoder; -import SevenZip.Compression.LZMA.Base; -import SevenZip.Compression.LZ.BinTree; -import SevenZip.ICodeProgress; -import java.io.IOException; - -public class Encoder -{ - public static final int EMatchFinderTypeBT2 = 0; - public static final int EMatchFinderTypeBT4 = 1; - - - - - static final int kIfinityPrice = 0xFFFFFFF; - - static byte[] g_FastPos = new byte[1 << 11]; - - static - { - int kFastSlots = 22; - int c = 2; - g_FastPos[0] = 0; - g_FastPos[1] = 1; - for (int slotFast = 2; slotFast < kFastSlots; slotFast++) - { - int k = (1 << ((slotFast >> 1) - 1)); - for (int j = 0; j < k; j++, c++) - g_FastPos[c] = (byte)slotFast; - } - } - - static int GetPosSlot(int pos) - { - if (pos < (1 << 11)) - return g_FastPos[pos]; - if (pos < (1 << 21)) - return (g_FastPos[pos >> 10] + 20); - return (g_FastPos[pos >> 20] + 40); - } - - static int GetPosSlot2(int pos) - { - if (pos < (1 << 17)) - return (g_FastPos[pos >> 6] + 12); - if (pos < (1 << 27)) - return (g_FastPos[pos >> 16] + 32); - return (g_FastPos[pos >> 26] + 52); - } - - int _state = Base.StateInit(); - byte _previousByte; - int[] _repDistances = new int[Base.kNumRepDistances]; - - void BaseInit() - { - _state = Base.StateInit(); - _previousByte = 0; - for (int i = 0; i < Base.kNumRepDistances; i++) - _repDistances[i] = 0; - } - - static final int kDefaultDictionaryLogSize = 22; - static final int kNumFastBytesDefault = 0x20; - - class LiteralEncoder - { - class Encoder2 - { - short[] m_Encoders = new short[0x300]; - - public void Init() { SevenZip.Compression.RangeCoder.Encoder.InitBitModels(m_Encoders); } - - - - public void Encode(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, byte symbol) throws IOException - { - int context = 1; - for (int i = 7; i >= 0; i--) - { - int bit = ((symbol >> i) & 1); - rangeEncoder.Encode(m_Encoders, context, bit); - context = (context << 1) | bit; - } - } - - public void EncodeMatched(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, byte matchByte, byte symbol) throws IOException - { - int context = 1; - boolean same = true; - for (int i = 7; i >= 0; i--) - { - int bit = ((symbol >> i) & 1); - int state = context; - if (same) - { - int matchBit = ((matchByte >> i) & 1); - state += ((1 + matchBit) << 8); - same = (matchBit == bit); - } - rangeEncoder.Encode(m_Encoders, state, bit); - context = (context << 1) | bit; - } - } - - public int GetPrice(boolean matchMode, byte matchByte, byte symbol) - { - int price = 0; - int context = 1; - int i = 7; - if (matchMode) - { - for (; i >= 0; i--) - { - int matchBit = (matchByte >> i) & 1; - int bit = (symbol >> i) & 1; - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(m_Encoders[((1 + matchBit) << 8) + context], bit); - context = (context << 1) | bit; - if (matchBit != bit) - { - i--; - break; - } - } - } - for (; i >= 0; i--) - { - int bit = (symbol >> i) & 1; - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(m_Encoders[context], bit); - context = (context << 1) | bit; - } - return price; - } - } - - Encoder2[] m_Coders; - int m_NumPrevBits; - int m_NumPosBits; - int m_PosMask; - - public void Create(int numPosBits, int numPrevBits) - { - if (m_Coders != null && m_NumPrevBits == numPrevBits && m_NumPosBits == numPosBits) - return; - m_NumPosBits = numPosBits; - m_PosMask = (1 << numPosBits) - 1; - m_NumPrevBits = numPrevBits; - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - m_Coders = new Encoder2[numStates]; - for (int i = 0; i < numStates; i++) - m_Coders[i] = new Encoder2(); - } - - public void Init() - { - int numStates = 1 << (m_NumPrevBits + m_NumPosBits); - for (int i = 0; i < numStates; i++) - m_Coders[i].Init(); - } - - public Encoder2 GetSubCoder(int pos, byte prevByte) - { return m_Coders[((pos & m_PosMask) << m_NumPrevBits) + ((prevByte & 0xFF) >>> (8 - m_NumPrevBits))]; } - } - - class LenEncoder - { - short[] _choice = new short[2]; - BitTreeEncoder[] _lowCoder = new BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - BitTreeEncoder[] _midCoder = new BitTreeEncoder[Base.kNumPosStatesEncodingMax]; - BitTreeEncoder _highCoder = new BitTreeEncoder(Base.kNumHighLenBits); - - - public LenEncoder() - { - for (int posState = 0; posState < Base.kNumPosStatesEncodingMax; posState++) - { - _lowCoder[posState] = new BitTreeEncoder(Base.kNumLowLenBits); - _midCoder[posState] = new BitTreeEncoder(Base.kNumMidLenBits); - } - } - - public void Init(int numPosStates) - { - SevenZip.Compression.RangeCoder.Encoder.InitBitModels(_choice); - - for (int posState = 0; posState < numPosStates; posState++) - { - _lowCoder[posState].Init(); - _midCoder[posState].Init(); - } - _highCoder.Init(); - } - - public void Encode(SevenZip.Compression.RangeCoder.Encoder rangeEncoder, int symbol, int posState) throws IOException - { - if (symbol < Base.kNumLowLenSymbols) - { - rangeEncoder.Encode(_choice, 0, 0); - _lowCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - symbol -= Base.kNumLowLenSymbols; - rangeEncoder.Encode(_choice, 0, 1); - if (symbol < Base.kNumMidLenSymbols) - { - rangeEncoder.Encode(_choice, 1, 0); - _midCoder[posState].Encode(rangeEncoder, symbol); - } - else - { - rangeEncoder.Encode(_choice, 1, 1); - _highCoder.Encode(rangeEncoder, symbol - Base.kNumMidLenSymbols); - } - } - } - - public void SetPrices(int posState, int numSymbols, int[] prices, int st) - { - int a0 = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_choice[0]); - int a1 = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_choice[0]); - int b0 = a1 + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_choice[1]); - int b1 = a1 + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_choice[1]); - int i = 0; - for (i = 0; i < Base.kNumLowLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = a0 + _lowCoder[posState].GetPrice(i); - } - for (; i < Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; i++) - { - if (i >= numSymbols) - return; - prices[st + i] = b0 + _midCoder[posState].GetPrice(i - Base.kNumLowLenSymbols); - } - for (; i < numSymbols; i++) - prices[st + i] = b1 + _highCoder.GetPrice(i - Base.kNumLowLenSymbols - Base.kNumMidLenSymbols); - } - }; - - public static final int kNumLenSpecSymbols = Base.kNumLowLenSymbols + Base.kNumMidLenSymbols; - - class LenPriceTableEncoder extends LenEncoder - { - int[] _prices = new int[Base.kNumLenSymbols< 0) - { - lenRes = _matchDistances[_numDistancePairs - 2]; - if (lenRes == _numFastBytes) - lenRes += _matchFinder.GetMatchLen((int)lenRes - 1, _matchDistances[_numDistancePairs - 1], - Base.kMatchMaxLen - lenRes); - } - _additionalOffset++; - return lenRes; - } - - void MovePos(int num) throws java.io.IOException - { - if (num > 0) - { - _matchFinder.Skip(num); - _additionalOffset += num; - } - } - - int GetRepLen1Price(int state, int posState) - { - return SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG0[state]) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep0Long[(state << Base.kNumPosStatesBitsMax) + posState]); - } - - int GetPureRepPrice(int repIndex, int state, int posState) - { - int price; - if (repIndex == 0) - { - price = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG0[state]); - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep0Long[(state << Base.kNumPosStatesBitsMax) + posState]); - } - else - { - price = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRepG0[state]); - if (repIndex == 1) - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRepG1[state]); - else - { - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRepG1[state]); - price += SevenZip.Compression.RangeCoder.Encoder.GetPrice(_isRepG2[state], repIndex - 2); - } - } - return price; - } - - int GetRepPrice(int repIndex, int len, int state, int posState) - { - int price = _repMatchLenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - return price + GetPureRepPrice(repIndex, state, posState); - } - - int GetPosLenPrice(int pos, int len, int posState) - { - int price; - int lenToPosState = Base.GetLenToPosState(len); - if (pos < Base.kNumFullDistances) - price = _distancesPrices[(lenToPosState * Base.kNumFullDistances) + pos]; - else - price = _posSlotPrices[(lenToPosState << Base.kNumPosSlotBits) + GetPosSlot2(pos)] + - _alignPrices[pos & Base.kAlignMask]; - return price + _lenEncoder.GetPrice(len - Base.kMatchMinLen, posState); - } - - int Backward(int cur) - { - _optimumEndIndex = cur; - int posMem = _optimum[cur].PosPrev; - int backMem = _optimum[cur].BackPrev; - do - { - if (_optimum[cur].Prev1IsChar) - { - _optimum[posMem].MakeAsChar(); - _optimum[posMem].PosPrev = posMem - 1; - if (_optimum[cur].Prev2) - { - _optimum[posMem - 1].Prev1IsChar = false; - _optimum[posMem - 1].PosPrev = _optimum[cur].PosPrev2; - _optimum[posMem - 1].BackPrev = _optimum[cur].BackPrev2; - } - } - int posPrev = posMem; - int backCur = backMem; - - backMem = _optimum[posPrev].BackPrev; - posMem = _optimum[posPrev].PosPrev; - - _optimum[posPrev].BackPrev = backCur; - _optimum[posPrev].PosPrev = cur; - cur = posPrev; - } - while (cur > 0); - backRes = _optimum[0].BackPrev; - _optimumCurrentIndex = _optimum[0].PosPrev; - return _optimumCurrentIndex; - } - - int[] reps = new int[Base.kNumRepDistances]; - int[] repLens = new int[Base.kNumRepDistances]; - int backRes; - - int GetOptimum(int position) throws IOException - { - if (_optimumEndIndex != _optimumCurrentIndex) - { - int lenRes = _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; - backRes = _optimum[_optimumCurrentIndex].BackPrev; - _optimumCurrentIndex = _optimum[_optimumCurrentIndex].PosPrev; - return lenRes; - } - _optimumCurrentIndex = _optimumEndIndex = 0; - - int lenMain, numDistancePairs; - if (!_longestMatchWasFound) - { - lenMain = ReadMatchDistances(); - } - else - { - lenMain = _longestMatchLength; - _longestMatchWasFound = false; - } - numDistancePairs = _numDistancePairs; - - int numAvailableBytes = _matchFinder.GetNumAvailableBytes() + 1; - if (numAvailableBytes < 2) - { - backRes = -1; - return 1; - } - if (numAvailableBytes > Base.kMatchMaxLen) - numAvailableBytes = Base.kMatchMaxLen; - - int repMaxIndex = 0; - int i; - for (i = 0; i < Base.kNumRepDistances; i++) - { - reps[i] = _repDistances[i]; - repLens[i] = _matchFinder.GetMatchLen(0 - 1, reps[i], Base.kMatchMaxLen); - if (repLens[i] > repLens[repMaxIndex]) - repMaxIndex = i; - } - if (repLens[repMaxIndex] >= _numFastBytes) - { - backRes = repMaxIndex; - int lenRes = repLens[repMaxIndex]; - MovePos(lenRes - 1); - return lenRes; - } - - if (lenMain >= _numFastBytes) - { - backRes = _matchDistances[numDistancePairs - 1] + Base.kNumRepDistances; - MovePos(lenMain - 1); - return lenMain; - } - - byte currentByte = _matchFinder.GetIndexByte(0 - 1); - byte matchByte = _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - 1); - - if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) - { - backRes = -1; - return 1; - } - - _optimum[0].State = _state; - - int posState = (position & _posStateMask); - - _optimum[1].Price = SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(_state << Base.kNumPosStatesBitsMax) + posState]) + - _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(!Base.StateIsCharState(_state), matchByte, currentByte); - _optimum[1].MakeAsChar(); - - int matchPrice = SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(_state << Base.kNumPosStatesBitsMax) + posState]); - int repMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[_state]); - - if (matchByte == currentByte) - { - int shortRepPrice = repMatchPrice + GetRepLen1Price(_state, posState); - if (shortRepPrice < _optimum[1].Price) - { - _optimum[1].Price = shortRepPrice; - _optimum[1].MakeAsShortRep(); - } - } - - int lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); - - if (lenEnd < 2) - { - backRes = _optimum[1].BackPrev; - return 1; - } - - _optimum[1].PosPrev = 0; - - _optimum[0].Backs0 = reps[0]; - _optimum[0].Backs1 = reps[1]; - _optimum[0].Backs2 = reps[2]; - _optimum[0].Backs3 = reps[3]; - - int len = lenEnd; - do - _optimum[len--].Price = kIfinityPrice; - while (len >= 2); - - for (i = 0; i < Base.kNumRepDistances; i++) - { - int repLen = repLens[i]; - if (repLen < 2) - continue; - int price = repMatchPrice + GetPureRepPrice(i, _state, posState); - do - { - int curAndLenPrice = price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); - Optimal optimum = _optimum[repLen]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = i; - optimum.Prev1IsChar = false; - } - } - while (--repLen >= 2); - } - - int normalMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep[_state]); - - len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); - if (len <= lenMain) - { - int offs = 0; - while (len > _matchDistances[offs]) - offs += 2; - for (; ; len++) - { - int distance = _matchDistances[offs + 1]; - int curAndLenPrice = normalMatchPrice + GetPosLenPrice(distance, len, posState); - Optimal optimum = _optimum[len]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = 0; - optimum.BackPrev = distance + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - if (len == _matchDistances[offs]) - { - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - - int cur = 0; - - while (true) - { - cur++; - if (cur == lenEnd) - return Backward(cur); - int newLen = ReadMatchDistances(); - numDistancePairs = _numDistancePairs; - if (newLen >= _numFastBytes) - { - - _longestMatchLength = newLen; - _longestMatchWasFound = true; - return Backward(cur); - } - position++; - int posPrev = _optimum[cur].PosPrev; - int state; - if (_optimum[cur].Prev1IsChar) - { - posPrev--; - if (_optimum[cur].Prev2) - { - state = _optimum[_optimum[cur].PosPrev2].State; - if (_optimum[cur].BackPrev2 < Base.kNumRepDistances) - state = Base.StateUpdateRep(state); - else - state = Base.StateUpdateMatch(state); - } - else - state = _optimum[posPrev].State; - state = Base.StateUpdateChar(state); - } - else - state = _optimum[posPrev].State; - if (posPrev == cur - 1) - { - if (_optimum[cur].IsShortRep()) - state = Base.StateUpdateShortRep(state); - else - state = Base.StateUpdateChar(state); - } - else - { - int pos; - if (_optimum[cur].Prev1IsChar && _optimum[cur].Prev2) - { - posPrev = _optimum[cur].PosPrev2; - pos = _optimum[cur].BackPrev2; - state = Base.StateUpdateRep(state); - } - else - { - pos = _optimum[cur].BackPrev; - if (pos < Base.kNumRepDistances) - state = Base.StateUpdateRep(state); - else - state = Base.StateUpdateMatch(state); - } - Optimal opt = _optimum[posPrev]; - if (pos < Base.kNumRepDistances) - { - if (pos == 0) - { - reps[0] = opt.Backs0; - reps[1] = opt.Backs1; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 1) - { - reps[0] = opt.Backs1; - reps[1] = opt.Backs0; - reps[2] = opt.Backs2; - reps[3] = opt.Backs3; - } - else if (pos == 2) - { - reps[0] = opt.Backs2; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs3; - } - else - { - reps[0] = opt.Backs3; - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - else - { - reps[0] = (pos - Base.kNumRepDistances); - reps[1] = opt.Backs0; - reps[2] = opt.Backs1; - reps[3] = opt.Backs2; - } - } - _optimum[cur].State = state; - _optimum[cur].Backs0 = reps[0]; - _optimum[cur].Backs1 = reps[1]; - _optimum[cur].Backs2 = reps[2]; - _optimum[cur].Backs3 = reps[3]; - int curPrice = _optimum[cur].Price; - - currentByte = _matchFinder.GetIndexByte(0 - 1); - matchByte = _matchFinder.GetIndexByte(0 - reps[0] - 1 - 1); - - posState = (position & _posStateMask); - - int curAnd1Price = curPrice + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state << Base.kNumPosStatesBitsMax) + posState]) + - _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). - GetPrice(!Base.StateIsCharState(state), matchByte, currentByte); - - Optimal nextOptimum = _optimum[cur + 1]; - - boolean nextIsChar = false; - if (curAnd1Price < nextOptimum.Price) - { - nextOptimum.Price = curAnd1Price; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsChar(); - nextIsChar = true; - } - - matchPrice = curPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state << Base.kNumPosStatesBitsMax) + posState]); - repMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state]); - - if (matchByte == currentByte && - !(nextOptimum.PosPrev < cur && nextOptimum.BackPrev == 0)) - { - int shortRepPrice = repMatchPrice + GetRepLen1Price(state, posState); - if (shortRepPrice <= nextOptimum.Price) - { - nextOptimum.Price = shortRepPrice; - nextOptimum.PosPrev = cur; - nextOptimum.MakeAsShortRep(); - nextIsChar = true; - } - } - - int numAvailableBytesFull = _matchFinder.GetNumAvailableBytes() + 1; - numAvailableBytesFull = Math.min(kNumOpts - 1 - cur, numAvailableBytesFull); - numAvailableBytes = numAvailableBytesFull; - - if (numAvailableBytes < 2) - continue; - if (numAvailableBytes > _numFastBytes) - numAvailableBytes = _numFastBytes; - if (!nextIsChar && matchByte != currentByte) - { - // try Literal + rep0 - int t = Math.min(numAvailableBytesFull - 1, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(0, reps[0], t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateChar(state); - - int posStateNext = (position + 1) & _posStateMask; - int nextRepMatchPrice = curAnd1Price + - SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - { - int offset = cur + 1 + lenTest2; - while (lenEnd < offset) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = nextRepMatchPrice + GetRepPrice( - 0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = false; - } - } - } - } - - int startLen = 2; // speed optimization - - for (int repIndex = 0; repIndex < Base.kNumRepDistances; repIndex++) - { - int lenTest = _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); - if (lenTest < 2) - continue; - int lenTestTemp = lenTest; - do - { - while (lenEnd < cur + lenTest) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = repIndex; - optimum.Prev1IsChar = false; - } - } - while (--lenTest >= 2); - lenTest = lenTestTemp; - - if (repIndex == 0) - startLen = lenTest + 1; - - // if (_maxMode) - if (lenTest < numAvailableBytesFull) - { - int t = Math.min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(lenTest, reps[repIndex], t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateRep(state); - - int posStateNext = (position + lenTest) & _posStateMask; - int curAndLenCharPrice = - repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte(lenTest - 1 - 1)).GetPrice(true, - _matchFinder.GetIndexByte(lenTest - 1 - (reps[repIndex] + 1)), - _matchFinder.GetIndexByte(lenTest - 1)); - state2 = Base.StateUpdateChar(state2); - posStateNext = (position + lenTest + 1) & _posStateMask; - int nextMatchPrice = curAndLenCharPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]); - int nextRepMatchPrice = nextMatchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - - // for(; lenTest2 >= 2; lenTest2--) - { - int offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - int curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - Optimal optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = repIndex; - } - } - } - } - } - - if (newLen > numAvailableBytes) - { - newLen = numAvailableBytes; - for (numDistancePairs = 0; newLen > _matchDistances[numDistancePairs]; numDistancePairs += 2) ; - _matchDistances[numDistancePairs] = newLen; - numDistancePairs += 2; - } - if (newLen >= startLen) - { - normalMatchPrice = matchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isRep[state]); - while (lenEnd < cur + newLen) - _optimum[++lenEnd].Price = kIfinityPrice; - - int offs = 0; - while (startLen > _matchDistances[offs]) - offs += 2; - - for (int lenTest = startLen; ; lenTest++) - { - int curBack = _matchDistances[offs + 1]; - int curAndLenPrice = normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); - Optimal optimum = _optimum[cur + lenTest]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur; - optimum.BackPrev = curBack + Base.kNumRepDistances; - optimum.Prev1IsChar = false; - } - - if (lenTest == _matchDistances[offs]) - { - if (lenTest < numAvailableBytesFull) - { - int t = Math.min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); - int lenTest2 = _matchFinder.GetMatchLen(lenTest, curBack, t); - if (lenTest2 >= 2) - { - int state2 = Base.StateUpdateMatch(state); - - int posStateNext = (position + lenTest) & _posStateMask; - int curAndLenCharPrice = curAndLenPrice + - SevenZip.Compression.RangeCoder.Encoder.GetPrice0(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]) + - _literalEncoder.GetSubCoder(position + lenTest, - _matchFinder.GetIndexByte(lenTest - 1 - 1)). - GetPrice(true, - _matchFinder.GetIndexByte(lenTest - (curBack + 1) - 1), - _matchFinder.GetIndexByte(lenTest - 1)); - state2 = Base.StateUpdateChar(state2); - posStateNext = (position + lenTest + 1) & _posStateMask; - int nextMatchPrice = curAndLenCharPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isMatch[(state2 << Base.kNumPosStatesBitsMax) + posStateNext]); - int nextRepMatchPrice = nextMatchPrice + SevenZip.Compression.RangeCoder.Encoder.GetPrice1(_isRep[state2]); - - int offset = lenTest + 1 + lenTest2; - while (lenEnd < cur + offset) - _optimum[++lenEnd].Price = kIfinityPrice; - curAndLenPrice = nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); - optimum = _optimum[cur + offset]; - if (curAndLenPrice < optimum.Price) - { - optimum.Price = curAndLenPrice; - optimum.PosPrev = cur + lenTest + 1; - optimum.BackPrev = 0; - optimum.Prev1IsChar = true; - optimum.Prev2 = true; - optimum.PosPrev2 = cur; - optimum.BackPrev2 = curBack + Base.kNumRepDistances; - } - } - } - offs += 2; - if (offs == numDistancePairs) - break; - } - } - } - } - } - - boolean ChangePair(int smallDist, int bigDist) - { - int kDif = 7; - return (smallDist < (1 << (32 - kDif)) && bigDist >= (smallDist << kDif)); - } - - void WriteEndMarker(int posState) throws IOException - { - if (!_writeEndMark) - return; - - _rangeEncoder.Encode(_isMatch, (_state << Base.kNumPosStatesBitsMax) + posState, 1); - _rangeEncoder.Encode(_isRep, _state, 0); - _state = Base.StateUpdateMatch(_state); - int len = Base.kMatchMinLen; - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - int posSlot = (1 << Base.kNumPosSlotBits) - 1; - int lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - int footerBits = 30; - int posReduced = (1 << footerBits) - 1; - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - } - - void Flush(int nowPos) throws IOException - { - ReleaseMFStream(); - WriteEndMarker(nowPos & _posStateMask); - _rangeEncoder.FlushData(); - _rangeEncoder.FlushStream(); - } - - public void CodeOneBlock(long[] inSize, long[] outSize, boolean[] finished) throws IOException - { - inSize[0] = 0; - outSize[0] = 0; - finished[0] = true; - - if (_inStream != null) - { - _matchFinder.SetStream(_inStream); - _matchFinder.Init(); - _needReleaseMFStream = true; - _inStream = null; - } - - if (_finished) - return; - _finished = true; - - - long progressPosValuePrev = nowPos64; - if (nowPos64 == 0) - { - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - - ReadMatchDistances(); - int posState = (int)(nowPos64) & _posStateMask; - _rangeEncoder.Encode(_isMatch, (_state << Base.kNumPosStatesBitsMax) + posState, 0); - _state = Base.StateUpdateChar(_state); - byte curByte = _matchFinder.GetIndexByte(0 - _additionalOffset); - _literalEncoder.GetSubCoder((int)(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _additionalOffset--; - nowPos64++; - } - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - while (true) - { - - int len = GetOptimum((int)nowPos64); - int pos = backRes; - int posState = ((int)nowPos64) & _posStateMask; - int complexState = (_state << Base.kNumPosStatesBitsMax) + posState; - if (len == 1 && pos == -1) - { - _rangeEncoder.Encode(_isMatch, complexState, 0); - byte curByte = _matchFinder.GetIndexByte((int)(0 - _additionalOffset)); - LiteralEncoder.Encoder2 subCoder = _literalEncoder.GetSubCoder((int)nowPos64, _previousByte); - if (!Base.StateIsCharState(_state)) - { - byte matchByte = _matchFinder.GetIndexByte((int)(0 - _repDistances[0] - 1 - _additionalOffset)); - subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); - } - else - subCoder.Encode(_rangeEncoder, curByte); - _previousByte = curByte; - _state = Base.StateUpdateChar(_state); - } - else - { - _rangeEncoder.Encode(_isMatch, complexState, 1); - if (pos < Base.kNumRepDistances) - { - _rangeEncoder.Encode(_isRep, _state, 1); - if (pos == 0) - { - _rangeEncoder.Encode(_isRepG0, _state, 0); - if (len == 1) - _rangeEncoder.Encode(_isRep0Long, complexState, 0); - else - _rangeEncoder.Encode(_isRep0Long, complexState, 1); - } - else - { - _rangeEncoder.Encode(_isRepG0, _state, 1); - if (pos == 1) - _rangeEncoder.Encode(_isRepG1, _state, 0); - else - { - _rangeEncoder.Encode(_isRepG1, _state, 1); - _rangeEncoder.Encode(_isRepG2, _state, pos - 2); - } - } - if (len == 1) - _state = Base.StateUpdateShortRep(_state); - else - { - _repMatchLenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - _state = Base.StateUpdateRep(_state); - } - int distance = _repDistances[pos]; - if (pos != 0) - { - for (int i = pos; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - } - } - else - { - _rangeEncoder.Encode(_isRep, _state, 0); - _state = Base.StateUpdateMatch(_state); - _lenEncoder.Encode(_rangeEncoder, len - Base.kMatchMinLen, posState); - pos -= Base.kNumRepDistances; - int posSlot = GetPosSlot(pos); - int lenToPosState = Base.GetLenToPosState(len); - _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); - - if (posSlot >= Base.kStartPosModelIndex) - { - int footerBits = (int)((posSlot >> 1) - 1); - int baseVal = ((2 | (posSlot & 1)) << footerBits); - int posReduced = pos - baseVal; - - if (posSlot < Base.kEndPosModelIndex) - BitTreeEncoder.ReverseEncode(_posEncoders, - baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced); - else - { - _rangeEncoder.EncodeDirectBits(posReduced >> Base.kNumAlignBits, footerBits - Base.kNumAlignBits); - _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced & Base.kAlignMask); - _alignPriceCount++; - } - } - int distance = pos; - for (int i = Base.kNumRepDistances - 1; i >= 1; i--) - _repDistances[i] = _repDistances[i - 1]; - _repDistances[0] = distance; - _matchPriceCount++; - } - _previousByte = _matchFinder.GetIndexByte(len - 1 - _additionalOffset); - } - _additionalOffset -= len; - nowPos64 += len; - if (_additionalOffset == 0) - { - // if (!_fastMode) - if (_matchPriceCount >= (1 << 7)) - FillDistancesPrices(); - if (_alignPriceCount >= Base.kAlignTableSize) - FillAlignPrices(); - inSize[0] = nowPos64; - outSize[0] = _rangeEncoder.GetProcessedSizeAdd(); - if (_matchFinder.GetNumAvailableBytes() == 0) - { - Flush((int)nowPos64); - return; - } - - if (nowPos64 - progressPosValuePrev >= (1 << 12)) - { - _finished = false; - finished[0] = false; - return; - } - } - } - } - - void ReleaseMFStream() - { - if (_matchFinder != null && _needReleaseMFStream) - { - _matchFinder.ReleaseStream(); - _needReleaseMFStream = false; - } - } - - void SetOutStream(java.io.OutputStream outStream) - { _rangeEncoder.SetStream(outStream); } - void ReleaseOutStream() - { _rangeEncoder.ReleaseStream(); } - - void ReleaseStreams() - { - ReleaseMFStream(); - ReleaseOutStream(); - } - - void SetStreams(java.io.InputStream inStream, java.io.OutputStream outStream, - long inSize, long outSize) - { - _inStream = inStream; - _finished = false; - Create(); - SetOutStream(outStream); - Init(); - - // if (!_fastMode) - { - FillDistancesPrices(); - FillAlignPrices(); - } - - _lenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _lenEncoder.UpdateTables(1 << _posStateBits); - _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - Base.kMatchMinLen); - _repMatchLenEncoder.UpdateTables(1 << _posStateBits); - - nowPos64 = 0; - } - - long[] processedInSize = new long[1]; long[] processedOutSize = new long[1]; boolean[] finished = new boolean[1]; - public void Code(java.io.InputStream inStream, java.io.OutputStream outStream, - long inSize, long outSize, ICodeProgress progress) throws IOException - { - _needReleaseMFStream = false; - try - { - SetStreams(inStream, outStream, inSize, outSize); - while (true) - { - - - - CodeOneBlock(processedInSize, processedOutSize, finished); - if (finished[0]) - return; - if (progress != null) - { - progress.SetProgress(processedInSize[0], processedOutSize[0]); - } - } - } - finally - { - ReleaseStreams(); - } - } - - public static final int kPropSize = 5; - byte[] properties = new byte[kPropSize]; - - public void WriteCoderProperties(java.io.OutputStream outStream) throws IOException - { - properties[0] = (byte)((_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits); - for (int i = 0; i < 4; i++) - properties[1 + i] = (byte)(_dictionarySize >> (8 * i)); - outStream.write(properties, 0, kPropSize); - } - - int[] tempPrices = new int[Base.kNumFullDistances]; - int _matchPriceCount; - - void FillDistancesPrices() - { - for (int i = Base.kStartPosModelIndex; i < Base.kNumFullDistances; i++) - { - int posSlot = GetPosSlot(i); - int footerBits = (int)((posSlot >> 1) - 1); - int baseVal = ((2 | (posSlot & 1)) << footerBits); - tempPrices[i] = BitTreeEncoder.ReverseGetPrice(_posEncoders, - baseVal - posSlot - 1, footerBits, i - baseVal); - } - - for (int lenToPosState = 0; lenToPosState < Base.kNumLenToPosStates; lenToPosState++) - { - int posSlot; - BitTreeEncoder encoder = _posSlotEncoder[lenToPosState]; - - int st = (lenToPosState << Base.kNumPosSlotBits); - for (posSlot = 0; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] = encoder.GetPrice(posSlot); - for (posSlot = Base.kEndPosModelIndex; posSlot < _distTableSize; posSlot++) - _posSlotPrices[st + posSlot] += ((((posSlot >> 1) - 1) - Base.kNumAlignBits) << SevenZip.Compression.RangeCoder.Encoder.kNumBitPriceShiftBits); - - int st2 = lenToPosState * Base.kNumFullDistances; - int i; - for (i = 0; i < Base.kStartPosModelIndex; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + i]; - for (; i < Base.kNumFullDistances; i++) - _distancesPrices[st2 + i] = _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; - } - _matchPriceCount = 0; - } - - void FillAlignPrices() - { - for (int i = 0; i < Base.kAlignTableSize; i++) - _alignPrices[i] = _posAlignEncoder.ReverseGetPrice(i); - _alignPriceCount = 0; - } - - - public boolean SetAlgorithm(int algorithm) - { - /* - _fastMode = (algorithm == 0); - _maxMode = (algorithm >= 2); - */ - return true; - } - - public boolean SetDictionarySize(int dictionarySize) - { - int kDicLogSizeMaxCompress = 29; - if (dictionarySize < (1 << Base.kDicLogSizeMin) || dictionarySize > (1 << kDicLogSizeMaxCompress)) - return false; - _dictionarySize = dictionarySize; - int dicLogSize; - for (dicLogSize = 0; dictionarySize > (1 << dicLogSize); dicLogSize++) ; - _distTableSize = dicLogSize * 2; - return true; - } - - public boolean SeNumFastBytes(int numFastBytes) - { - if (numFastBytes < 5 || numFastBytes > Base.kMatchMaxLen) - return false; - _numFastBytes = numFastBytes; - return true; - } - - public boolean SetMatchFinder(int matchFinderIndex) - { - if (matchFinderIndex < 0 || matchFinderIndex > 2) - return false; - int matchFinderIndexPrev = _matchFinderType; - _matchFinderType = matchFinderIndex; - if (_matchFinder != null && matchFinderIndexPrev != _matchFinderType) - { - _dictionarySizePrev = -1; - _matchFinder = null; - } - return true; - } - - public boolean SetLcLpPb(int lc, int lp, int pb) - { - if ( - lp < 0 || lp > Base.kNumLitPosStatesBitsEncodingMax || - lc < 0 || lc > Base.kNumLitContextBitsMax || - pb < 0 || pb > Base.kNumPosStatesBitsEncodingMax) - return false; - _numLiteralPosStateBits = lp; - _numLiteralContextBits = lc; - _posStateBits = pb; - _posStateMask = ((1) << _posStateBits) - 1; - return true; - } - - public void SetEndMarkerMode(boolean endMarkerMode) - { - _writeEndMark = endMarkerMode; - } -} - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java deleted file mode 100644 index 76985814..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +++ /dev/null @@ -1,55 +0,0 @@ -package SevenZip.Compression.RangeCoder; - -public class BitTreeDecoder -{ - short[] Models; - int NumBitLevels; - - public BitTreeDecoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new short[1 << numBitLevels]; - } - - public void Init() - { - Decoder.InitBitModels(Models); - } - - public int Decode(Decoder rangeDecoder) throws java.io.IOException - { - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--) - m = (m << 1) + rangeDecoder.DecodeBit(Models, m); - return m - (1 << NumBitLevels); - } - - public int ReverseDecode(Decoder rangeDecoder) throws java.io.IOException - { - int m = 1; - int symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - int bit = rangeDecoder.DecodeBit(Models, m); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } - - public static int ReverseDecode(short[] Models, int startIndex, - Decoder rangeDecoder, int NumBitLevels) throws java.io.IOException - { - int m = 1; - int symbol = 0; - for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++) - { - int bit = rangeDecoder.DecodeBit(Models, startIndex + m); - m <<= 1; - m += bit; - symbol |= (bit << bitIndex); - } - return symbol; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java deleted file mode 100644 index f9e97db7..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +++ /dev/null @@ -1,99 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class BitTreeEncoder -{ - short[] Models; - int NumBitLevels; - - public BitTreeEncoder(int numBitLevels) - { - NumBitLevels = numBitLevels; - Models = new short[1 << numBitLevels]; - } - - public void Init() - { - Decoder.InitBitModels(Models); - } - - public void Encode(Encoder rangeEncoder, int symbol) throws IOException - { - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; ) - { - bitIndex--; - int bit = (symbol >>> bitIndex) & 1; - rangeEncoder.Encode(Models, m, bit); - m = (m << 1) | bit; - } - } - - public void ReverseEncode(Encoder rangeEncoder, int symbol) throws IOException - { - int m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - int bit = symbol & 1; - rangeEncoder.Encode(Models, m, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } - - public int GetPrice(int symbol) - { - int price = 0; - int m = 1; - for (int bitIndex = NumBitLevels; bitIndex != 0; ) - { - bitIndex--; - int bit = (symbol >>> bitIndex) & 1; - price += Encoder.GetPrice(Models[m], bit); - m = (m << 1) + bit; - } - return price; - } - - public int ReverseGetPrice(int symbol) - { - int price = 0; - int m = 1; - for (int i = NumBitLevels; i != 0; i--) - { - int bit = symbol & 1; - symbol >>>= 1; - price += Encoder.GetPrice(Models[m], bit); - m = (m << 1) | bit; - } - return price; - } - - public static int ReverseGetPrice(short[] Models, int startIndex, - int NumBitLevels, int symbol) - { - int price = 0; - int m = 1; - for (int i = NumBitLevels; i != 0; i--) - { - int bit = symbol & 1; - symbol >>>= 1; - price += Encoder.GetPrice(Models[startIndex + m], bit); - m = (m << 1) | bit; - } - return price; - } - - public static void ReverseEncode(short[] Models, int startIndex, - Encoder rangeEncoder, int NumBitLevels, int symbol) throws IOException - { - int m = 1; - for (int i = 0; i < NumBitLevels; i++) - { - int bit = symbol & 1; - rangeEncoder.Encode(Models, startIndex + m, bit); - m = (m << 1) | bit; - symbol >>= 1; - } - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java deleted file mode 100644 index 85b31506..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +++ /dev/null @@ -1,88 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class Decoder -{ - static final int kTopMask = ~((1 << 24) - 1); - - static final int kNumBitModelTotalBits = 11; - static final int kBitModelTotal = (1 << kNumBitModelTotalBits); - static final int kNumMoveBits = 5; - - int Range; - int Code; - - java.io.InputStream Stream; - - public final void SetStream(java.io.InputStream stream) - { - Stream = stream; - } - - public final void ReleaseStream() - { - Stream = null; - } - - public final void Init() throws IOException - { - Code = 0; - Range = -1; - for (int i = 0; i < 5; i++) - Code = (Code << 8) | Stream.read(); - } - - public final int DecodeDirectBits(int numTotalBits) throws IOException - { - int result = 0; - for (int i = numTotalBits; i != 0; i--) - { - Range >>>= 1; - int t = ((Code - Range) >>> 31); - Code -= Range & (t - 1); - result = (result << 1) | (1 - t); - - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - } - return result; - } - - public int DecodeBit(short []probs, int index) throws IOException - { - int prob = probs[index]; - int newBound = (Range >>> kNumBitModelTotalBits) * prob; - if ((Code ^ 0x80000000) < (newBound ^ 0x80000000)) - { - Range = newBound; - probs[index] = (short)(prob + ((kBitModelTotal - prob) >>> kNumMoveBits)); - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - return 0; - } - else - { - Range -= newBound; - Code -= newBound; - probs[index] = (short)(prob - ((prob) >>> kNumMoveBits)); - if ((Range & kTopMask) == 0) - { - Code = (Code << 8) | Stream.read(); - Range <<= 8; - } - return 1; - } - } - - public static void InitBitModels(short []probs) - { - for (int i = 0; i < probs.length; i++) - probs[i] = (kBitModelTotal >>> 1); - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java deleted file mode 100644 index d21b983b..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +++ /dev/null @@ -1,151 +0,0 @@ -package SevenZip.Compression.RangeCoder; -import java.io.IOException; - -public class Encoder -{ - static final int kTopMask = ~((1 << 24) - 1); - - static final int kNumBitModelTotalBits = 11; - static final int kBitModelTotal = (1 << kNumBitModelTotalBits); - static final int kNumMoveBits = 5; - - java.io.OutputStream Stream; - - long Low; - int Range; - int _cacheSize; - int _cache; - - long _position; - - public void SetStream(java.io.OutputStream stream) - { - Stream = stream; - } - - public void ReleaseStream() - { - Stream = null; - } - - public void Init() - { - _position = 0; - Low = 0; - Range = -1; - _cacheSize = 1; - _cache = 0; - } - - public void FlushData() throws IOException - { - for (int i = 0; i < 5; i++) - ShiftLow(); - } - - public void FlushStream() throws IOException - { - Stream.flush(); - } - - public void ShiftLow() throws IOException - { - int LowHi = (int)(Low >>> 32); - if (LowHi != 0 || Low < 0xFF000000L) - { - _position += _cacheSize; - int temp = _cache; - do - { - Stream.write(temp + LowHi); - temp = 0xFF; - } - while(--_cacheSize != 0); - _cache = (((int)Low) >>> 24); - } - _cacheSize++; - Low = (Low & 0xFFFFFF) << 8; - } - - public void EncodeDirectBits(int v, int numTotalBits) throws IOException - { - for (int i = numTotalBits - 1; i >= 0; i--) - { - Range >>>= 1; - if (((v >>> i) & 1) == 1) - Low += Range; - if ((Range & Encoder.kTopMask) == 0) - { - Range <<= 8; - ShiftLow(); - } - } - } - - - public long GetProcessedSizeAdd() - { - return _cacheSize + _position + 4; - } - - - - static final int kNumMoveReducingBits = 2; - public static final int kNumBitPriceShiftBits = 6; - - public static void InitBitModels(short []probs) - { - for (int i = 0; i < probs.length; i++) - probs[i] = (kBitModelTotal >>> 1); - } - - public void Encode(short []probs, int index, int symbol) throws IOException - { - int prob = probs[index]; - int newBound = (Range >>> kNumBitModelTotalBits) * prob; - if (symbol == 0) - { - Range = newBound; - probs[index] = (short)(prob + ((kBitModelTotal - prob) >>> kNumMoveBits)); - } - else - { - Low += (newBound & 0xFFFFFFFFL); - Range -= newBound; - probs[index] = (short)(prob - ((prob) >>> kNumMoveBits)); - } - if ((Range & kTopMask) == 0) - { - Range <<= 8; - ShiftLow(); - } - } - - private static int[] ProbPrices = new int[kBitModelTotal >>> kNumMoveReducingBits]; - - static - { - int kNumBits = (kNumBitModelTotalBits - kNumMoveReducingBits); - for (int i = kNumBits - 1; i >= 0; i--) - { - int start = 1 << (kNumBits - i - 1); - int end = 1 << (kNumBits - i); - for (int j = start; j < end; j++) - ProbPrices[j] = (i << kNumBitPriceShiftBits) + - (((end - j) << kNumBitPriceShiftBits) >>> (kNumBits - i - 1)); - } - } - - static public int GetPrice(int Prob, int symbol) - { - return ProbPrices[(((Prob - symbol) ^ ((-symbol))) & (kBitModelTotal - 1)) >>> kNumMoveReducingBits]; - } - static public int GetPrice0(int Prob) - { - return ProbPrices[Prob >>> kNumMoveReducingBits]; - } - static public int GetPrice1(int Prob) - { - return ProbPrices[(kBitModelTotal - Prob) >>> kNumMoveReducingBits]; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/ICodeProgress.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/ICodeProgress.java deleted file mode 100644 index 4cb8d1ba..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/ICodeProgress.java +++ /dev/null @@ -1,6 +0,0 @@ -package SevenZip; - -public interface ICodeProgress -{ - public void SetProgress(long inSize, long outSize); -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaAlone.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaAlone.java deleted file mode 100644 index 79c2b00a..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaAlone.java +++ /dev/null @@ -1,253 +0,0 @@ -package SevenZip; - -public class LzmaAlone -{ - static public class CommandLine - { - public static final int kEncode = 0; - public static final int kDecode = 1; - public static final int kBenchmak = 2; - - public int Command = -1; - public int NumBenchmarkPasses = 10; - - public int DictionarySize = 1 << 23; - public boolean DictionarySizeIsDefined = false; - - public int Lc = 3; - public int Lp = 0; - public int Pb = 2; - - public int Fb = 128; - public boolean FbIsDefined = false; - - public boolean Eos = false; - - public int Algorithm = 2; - public int MatchFinder = 1; - - public String InFile; - public String OutFile; - - boolean ParseSwitch(String s) - { - if (s.startsWith("d")) - { - DictionarySize = 1 << Integer.parseInt(s.substring(1)); - DictionarySizeIsDefined = true; - } - else if (s.startsWith("fb")) - { - Fb = Integer.parseInt(s.substring(2)); - FbIsDefined = true; - } - else if (s.startsWith("a")) - Algorithm = Integer.parseInt(s.substring(1)); - else if (s.startsWith("lc")) - Lc = Integer.parseInt(s.substring(2)); - else if (s.startsWith("lp")) - Lp = Integer.parseInt(s.substring(2)); - else if (s.startsWith("pb")) - Pb = Integer.parseInt(s.substring(2)); - else if (s.startsWith("eos")) - Eos = true; - else if (s.startsWith("mf")) - { - String mfs = s.substring(2); - if (mfs.equals("bt2")) - MatchFinder = 0; - else if (mfs.equals("bt4")) - MatchFinder = 1; - else if (mfs.equals("bt4b")) - MatchFinder = 2; - else - return false; - } - else - return false; - return true; - } - - public boolean Parse(String[] args) throws Exception - { - int pos = 0; - boolean switchMode = true; - for (int i = 0; i < args.length; i++) - { - String s = args[i]; - if (s.length() == 0) - return false; - if (switchMode) - { - if (s.compareTo("--") == 0) - { - switchMode = false; - continue; - } - if (s.charAt(0) == '-') - { - String sw = s.substring(1).toLowerCase(); - if (sw.length() == 0) - return false; - try - { - if (!ParseSwitch(sw)) - return false; - } - catch (NumberFormatException e) - { - return false; - } - continue; - } - } - if (pos == 0) - { - if (s.equalsIgnoreCase("e")) - Command = kEncode; - else if (s.equalsIgnoreCase("d")) - Command = kDecode; - else if (s.equalsIgnoreCase("b")) - Command = kBenchmak; - else - return false; - } - else if(pos == 1) - { - if (Command == kBenchmak) - { - try - { - NumBenchmarkPasses = Integer.parseInt(s); - if (NumBenchmarkPasses < 1) - return false; - } - catch (NumberFormatException e) - { - return false; - } - } - else - InFile = s; - } - else if(pos == 2) - OutFile = s; - else - return false; - pos++; - continue; - } - return true; - } - } - - - static void PrintHelp() - { - System.out.println( - "\nUsage: LZMA [...] inputFile outputFile\n" + - " e: encode file\n" + - " d: decode file\n" + - " b: Benchmark\n" + - "\n" + - // " -a{N}: set compression mode - [0, 1], default: 1 (max)\n" + - " -d{N}: set dictionary - [0,28], default: 23 (8MB)\n" + - " -fb{N}: set number of fast bytes - [5, 273], default: 128\n" + - " -lc{N}: set number of literal context bits - [0, 8], default: 3\n" + - " -lp{N}: set number of literal pos bits - [0, 4], default: 0\n" + - " -pb{N}: set number of pos bits - [0, 4], default: 2\n" + - " -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4\n" + - " -eos: write End Of Stream marker\n" - ); - } - - public static void main(String[] args) throws Exception - { - System.out.println("\nLZMA (Java) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15\n"); - - if (args.length < 1) - { - PrintHelp(); - return; - } - - CommandLine params = new CommandLine(); - if (!params.Parse(args)) - { - System.out.println("\nIncorrect command"); - return; - } - - if (params.Command == CommandLine.kBenchmak) - { - int dictionary = (1 << 21); - if (params.DictionarySizeIsDefined) - dictionary = params.DictionarySize; - if (params.MatchFinder > 1) - throw new Exception("Unsupported match finder"); - SevenZip.LzmaBench.LzmaBenchmark(params.NumBenchmarkPasses, dictionary); - } - else if (params.Command == CommandLine.kEncode || params.Command == CommandLine.kDecode) - { - java.io.File inFile = new java.io.File(params.InFile); - java.io.File outFile = new java.io.File(params.OutFile); - - java.io.BufferedInputStream inStream = new java.io.BufferedInputStream(new java.io.FileInputStream(inFile)); - java.io.BufferedOutputStream outStream = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outFile)); - - boolean eos = false; - if (params.Eos) - eos = true; - if (params.Command == CommandLine.kEncode) - { - SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); - if (!encoder.SetAlgorithm(params.Algorithm)) - throw new Exception("Incorrect compression mode"); - if (!encoder.SetDictionarySize(params.DictionarySize)) - throw new Exception("Incorrect dictionary size"); - if (!encoder.SeNumFastBytes(params.Fb)) - throw new Exception("Incorrect -fb value"); - if (!encoder.SetMatchFinder(params.MatchFinder)) - throw new Exception("Incorrect -mf value"); - if (!encoder.SetLcLpPb(params.Lc, params.Lp, params.Pb)) - throw new Exception("Incorrect -lc or -lp or -pb value"); - encoder.SetEndMarkerMode(eos); - encoder.WriteCoderProperties(outStream); - long fileSize; - if (eos) - fileSize = -1; - else - fileSize = inFile.length(); - for (int i = 0; i < 8; i++) - outStream.write((int)(fileSize >>> (8 * i)) & 0xFF); - encoder.Code(inStream, outStream, -1, -1, null); - } - else - { - int propertiesSize = 5; - byte[] properties = new byte[propertiesSize]; - if (inStream.read(properties, 0, propertiesSize) != propertiesSize) - throw new Exception("input .lzma file is too short"); - SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); - if (!decoder.SetDecoderProperties(properties)) - throw new Exception("Incorrect stream properties"); - long outSize = 0; - for (int i = 0; i < 8; i++) - { - int v = inStream.read(); - if (v < 0) - throw new Exception("Can't read stream size"); - outSize |= ((long)v) << (8 * i); - } - if (!decoder.Code(inStream, outStream, outSize)) - throw new Exception("Error in data stream"); - } - outStream.flush(); - outStream.close(); - inStream.close(); - } - else - throw new Exception("Incorrect command"); - return; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaBench.java b/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaBench.java deleted file mode 100644 index 397e7af5..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Java/SevenZip/LzmaBench.java +++ /dev/null @@ -1,392 +0,0 @@ -package SevenZip; - -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; - -public class LzmaBench -{ - static final int kAdditionalSize = (1 << 21); - static final int kCompressedAdditionalSize = (1 << 10); - - static class CRandomGenerator - { - int A1; - int A2; - public CRandomGenerator() { Init(); } - public void Init() { A1 = 362436069; A2 = 521288629; } - public int GetRnd() - { - return - ((A1 = 36969 * (A1 & 0xffff) + (A1 >>> 16)) << 16) ^ - ((A2 = 18000 * (A2 & 0xffff) + (A2 >>> 16))); - } - }; - - static class CBitRandomGenerator - { - CRandomGenerator RG = new CRandomGenerator(); - int Value; - int NumBits; - public void Init() - { - Value = 0; - NumBits = 0; - } - public int GetRnd(int numBits) - { - int result; - if (NumBits > numBits) - { - result = Value & ((1 << numBits) - 1); - Value >>>= numBits; - NumBits -= numBits; - return result; - } - numBits -= NumBits; - result = (Value << numBits); - Value = RG.GetRnd(); - result |= Value & (((int)1 << numBits) - 1); - Value >>>= numBits; - NumBits = 32 - numBits; - return result; - } - }; - - static class CBenchRandomGenerator - { - CBitRandomGenerator RG = new CBitRandomGenerator(); - int Pos; - int Rep0; - - public int BufferSize; - public byte[] Buffer = null; - - public CBenchRandomGenerator() { } - public void Set(int bufferSize) - { - Buffer = new byte[bufferSize]; - Pos = 0; - BufferSize = bufferSize; - } - int GetRndBit() { return RG.GetRnd(1); } - int GetLogRandBits(int numBits) - { - int len = RG.GetRnd(numBits); - return RG.GetRnd((int)len); - } - int GetOffset() - { - if (GetRndBit() == 0) - return GetLogRandBits(4); - return (GetLogRandBits(4) << 10) | RG.GetRnd(10); - } - int GetLen1() { return RG.GetRnd(1 + (int)RG.GetRnd(2)); } - int GetLen2() { return RG.GetRnd(2 + (int)RG.GetRnd(2)); } - public void Generate() - { - RG.Init(); - Rep0 = 1; - while (Pos < BufferSize) - { - if (GetRndBit() == 0 || Pos < 1) - Buffer[Pos++] = (byte)(RG.GetRnd(8)); - else - { - int len; - if (RG.GetRnd(3) == 0) - len = 1 + GetLen1(); - else - { - do - Rep0 = GetOffset(); - while (Rep0 >= Pos); - Rep0++; - len = 2 + GetLen2(); - } - for (int i = 0; i < len && Pos < BufferSize; i++, Pos++) - Buffer[Pos] = Buffer[Pos - Rep0]; - } - } - } - }; - - static class CrcOutStream extends java.io.OutputStream - { - public CRC CRC = new CRC(); - - public void Init() - { - CRC.Init(); - } - public int GetDigest() - { - return CRC.GetDigest(); - } - public void write(byte[] b) - { - CRC.Update(b); - } - public void write(byte[] b, int off, int len) - { - CRC.Update(b, off, len); - } - public void write(int b) - { - CRC.UpdateByte(b); - } - }; - - static class MyOutputStream extends java.io.OutputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyOutputStream(byte[] buffer) - { - _buffer = buffer; - _size = _buffer.length; - } - - public void reset() - { - _pos = 0; - } - - public void write(int b) throws IOException - { - if (_pos >= _size) - throw new IOException("Error"); - _buffer[_pos++] = (byte)b; - } - - public int size() - { - return _pos; - } - }; - - static class MyInputStream extends java.io.InputStream - { - byte[] _buffer; - int _size; - int _pos; - - public MyInputStream(byte[] buffer, int size) - { - _buffer = buffer; - _size = size; - } - - public void reset() - { - _pos = 0; - } - - public int read() - { - if (_pos >= _size) - return -1; - return _buffer[_pos++] & 0xFF; - } - }; - - static class CProgressInfo implements ICodeProgress - { - public long ApprovedStart; - public long InSize; - public long Time; - public void Init() - { InSize = 0; } - public void SetProgress(long inSize, long outSize) - { - if (inSize >= ApprovedStart && InSize == 0) - { - Time = System.currentTimeMillis(); - InSize = inSize; - } - } - } - static final int kSubBits = 8; - - static int GetLogSize(int size) - { - for (int i = kSubBits; i < 32; i++) - for (int j = 0; j < (1 << kSubBits); j++) - if (size <= ((1) << i) + (j << (i - kSubBits))) - return (i << kSubBits) + j; - return (32 << kSubBits); - } - - static long MyMultDiv64(long value, long elapsedTime) - { - long freq = 1000; // ms - long elTime = elapsedTime; - while (freq > 1000000) - { - freq >>>= 1; - elTime >>>= 1; - } - if (elTime == 0) - elTime = 1; - return value * freq / elTime; - } - - static long GetCompressRating(int dictionarySize, long elapsedTime, long size) - { - long t = GetLogSize(dictionarySize) - (18 << kSubBits); - long numCommandsForOne = 1060 + ((t * t * 10) >> (2 * kSubBits)); - long numCommands = (long)(size) * numCommandsForOne; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetDecompressRating(long elapsedTime, long outSize, long inSize) - { - long numCommands = inSize * 220 + outSize * 20; - return MyMultDiv64(numCommands, elapsedTime); - } - - static long GetTotalRating( - int dictionarySize, - long elapsedTimeEn, long sizeEn, - long elapsedTimeDe, - long inSizeDe, long outSizeDe) - { - return (GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + - GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) / 2; - } - - static void PrintValue(long v) - { - String s = ""; - s += v; - for (int i = 0; i + s.length() < 6; i++) - System.out.print(" "); - System.out.print(s); - } - - static void PrintRating(long rating) - { - PrintValue(rating / 1000000); - System.out.print(" MIPS"); - } - - static void PrintResults( - int dictionarySize, - long elapsedTime, - long size, - boolean decompressMode, long secondSize) - { - long speed = MyMultDiv64(size, elapsedTime); - PrintValue(speed / 1024); - System.out.print(" KB/s "); - long rating; - if (decompressMode) - rating = GetDecompressRating(elapsedTime, size, secondSize); - else - rating = GetCompressRating(dictionarySize, elapsedTime, size); - PrintRating(rating); - } - - static public int LzmaBenchmark(int numIterations, int dictionarySize) throws Exception - { - if (numIterations <= 0) - return 0; - if (dictionarySize < (1 << 18)) - { - System.out.println("\nError: dictionary size for benchmark must be >= 18 (256 KB)"); - return 1; - } - System.out.print("\n Compressing Decompressing\n\n"); - - SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder(); - SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder(); - - if (!encoder.SetDictionarySize(dictionarySize)) - throw new Exception("Incorrect dictionary size"); - - int kBufferSize = dictionarySize + kAdditionalSize; - int kCompressedBufferSize = (kBufferSize / 2) + kCompressedAdditionalSize; - - ByteArrayOutputStream propStream = new ByteArrayOutputStream(); - encoder.WriteCoderProperties(propStream); - byte[] propArray = propStream.toByteArray(); - decoder.SetDecoderProperties(propArray); - - CBenchRandomGenerator rg = new CBenchRandomGenerator(); - - rg.Set(kBufferSize); - rg.Generate(); - CRC crc = new CRC(); - crc.Init(); - crc.Update(rg.Buffer, 0, rg.BufferSize); - - CProgressInfo progressInfo = new CProgressInfo(); - progressInfo.ApprovedStart = dictionarySize; - - long totalBenchSize = 0; - long totalEncodeTime = 0; - long totalDecodeTime = 0; - long totalCompressedSize = 0; - - MyInputStream inStream = new MyInputStream(rg.Buffer, rg.BufferSize); - - byte[] compressedBuffer = new byte[kCompressedBufferSize]; - MyOutputStream compressedStream = new MyOutputStream(compressedBuffer); - CrcOutStream crcOutStream = new CrcOutStream(); - MyInputStream inputCompressedStream = null; - int compressedSize = 0; - for (int i = 0; i < numIterations; i++) - { - progressInfo.Init(); - inStream.reset(); - compressedStream.reset(); - encoder.Code(inStream, compressedStream, -1, -1, progressInfo); - long encodeTime = System.currentTimeMillis() - progressInfo.Time; - - if (i == 0) - { - compressedSize = compressedStream.size(); - inputCompressedStream = new MyInputStream(compressedBuffer, compressedSize); - } - else if (compressedSize != compressedStream.size()) - throw (new Exception("Encoding error")); - - if (progressInfo.InSize == 0) - throw (new Exception("Internal ERROR 1282")); - - long decodeTime = 0; - for (int j = 0; j < 2; j++) - { - inputCompressedStream.reset(); - crcOutStream.Init(); - - long outSize = kBufferSize; - long startTime = System.currentTimeMillis(); - if (!decoder.Code(inputCompressedStream, crcOutStream, outSize)) - throw (new Exception("Decoding Error"));; - decodeTime = System.currentTimeMillis() - startTime; - if (crcOutStream.GetDigest() != crc.GetDigest()) - throw (new Exception("CRC Error")); - } - long benchSize = kBufferSize - (long)progressInfo.InSize; - PrintResults(dictionarySize, encodeTime, benchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, decodeTime, kBufferSize, true, compressedSize); - System.out.println(); - - totalBenchSize += benchSize; - totalEncodeTime += encodeTime; - totalDecodeTime += decodeTime; - totalCompressedSize += compressedSize; - } - System.out.println("---------------------------------------------------"); - PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); - System.out.print(" "); - PrintResults(dictionarySize, totalDecodeTime, - kBufferSize * (long)numIterations, true, totalCompressedSize); - System.out.println(" Average"); - return 0; - } -} diff --git a/love/src/jni/physfs-2.1.0/src/lzma/LGPL.txt b/love/src/jni/physfs-2.1.0/src/lzma/LGPL.txt deleted file mode 100644 index 4c389012..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/LGPL.txt +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/love/src/jni/physfs-2.1.0/src/lzma/Methods.txt b/love/src/jni/physfs-2.1.0/src/lzma/Methods.txt deleted file mode 100644 index e6156690..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/Methods.txt +++ /dev/null @@ -1,141 +0,0 @@ -7-Zip method IDs (4.56) ------------------------ - -Each compression or crypto method in 7z has unique binary value (ID). -The length of ID in bytes is arbitrary but it can not exceed 63 bits (8 bytes). - -If you want to add some new ID, you have two ways: -1) Write request for allocating IDs to 7-zip developers. -2) Generate 8-bytes ID: - - 7F ZZ ZZ ZZ ZZ ZZ MM MM - - 7F - Prefix for random IDs (1 byte) - ZZ ZZ ZZ ZZ ZZ - Developer ID (5 bytes). Use real random bytes. - - MM MM - Method ID (2 bytes) - - You can notify 7-Zip developers about your Developer ID / Method ID. - - Note: Use new ID only if old codec can not decode data encoded with new version. - - -List of defined IDs -------------------- - -00 - Copy -01 - Reserved -02 - Common - 03 Swap - - 2 Swap2 - - 4 Swap4 - 04 Delta (subject to change) - -03 - 7z - 01 - LZMA - 01 - Version - - 03 - Branch - 01 - x86 - 03 - BCJ - 1B - BCJ2 - 02 - PPC - 05 - BC_PPC_B (Big Endian) - 03 - Alpha - 01 - BC_Alpha - 04 - IA64 - 01 - BC_IA64 - 05 - ARM - 01 - BC_ARM - 06 - M68 - 05 - BC_M68_B (Big Endian) - 07 - ARM Thumb - 01 - BC_ARMThumb - 08 - SPARC - 05 - BC_SPARC - - 04 - PPMD - 01 - Version - - 7F - - 01 - experimental methods. - - 80 - reserved for independent developers - - E0 - Random IDs - -04 - Misc - 00 - Reserved - 01 - Zip - 00 - Copy (not used). Use {00} instead - 01 - Shrink - 06 - Implode - 08 - Deflate - 09 - Deflate64 - 12 - BZip2 (not used). Use {04 02 02} instead - 02 - BZip - 02 - BZip2 - 03 - Rar - 01 - Rar15 - 02 - Rar20 - 03 - Rar29 - 04 - Arj - 01 - Arj (1,2,3) - 02 - Arj 4 - 05 - Z - 06 - Lzh - 07 - Reserved for 7z - 08 - Cab - 09 - NSIS - 01 - DeflateNSIS - 02 - BZip2NSIS - - -06 - Crypto - 00 - - 01 - AES - 0x - AES-128 - 4x - AES-192 - 8x - AES-256 - Cx - AES - - x0 - ECB - x1 - CBC - x2 - CFB - x3 - OFB - - 07 - Reserved - 0F - Reserved - - F0 - Misc Ciphers (Real Ciphers without hashing algo) - - F1 - Misc Ciphers (Combine) - 01 - Zip - 01 - Main Zip crypto algo - 03 - RAR - 02 - - 03 - Rar29 AES-128 + (modified SHA-1) - 07 - 7z - 01 - AES-256 + SHA-256 - -07 - Hash (subject to change) - 00 - - 01 - CRC - 02 - SHA-1 - 03 - SHA-256 - 04 - SHA-384 - 05 - SHA-512 - - F0 - Misc Hash - - F1 - Misc - 03 - RAR - 03 - Rar29 Password Hashing (modified SHA1) - 07 - 7z - 01 - SHA-256 Password Hashing - - - - ---- -End of document diff --git a/love/src/jni/physfs-2.1.0/src/lzma/history.txt b/love/src/jni/physfs-2.1.0/src/lzma/history.txt deleted file mode 100644 index 8db5c101..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/history.txt +++ /dev/null @@ -1,198 +0,0 @@ -HISTORY of the LZMA SDK ------------------------ - - 4.57 2007-12-12 - ------------------------- - - Speed optimizations in Ñ++ LZMA Decoder. - - Small changes for more compatibility with some C/C++ compilers. - - - 4.49 beta 2007-07-05 - ------------------------- - - .7z ANSI-C Decoder: - - now it supports BCJ and BCJ2 filters - - now it supports files larger than 4 GB. - - now it supports "Last Write Time" field for files. - - C++ code for .7z archives compressing/decompressing from 7-zip - was included to LZMA SDK. - - - 4.43 2006-06-04 - ------------------------- - - Small changes for more compatibility with some C/C++ compilers. - - - 4.42 2006-05-15 - ------------------------- - - Small changes in .h files in ANSI-C version. - - - 4.39 beta 2006-04-14 - ------------------------- - - Bug in versions 4.33b:4.38b was fixed: - C++ version of LZMA encoder could not correctly compress - files larger than 2 GB with HC4 match finder (-mfhc4). - - - 4.37 beta 2005-04-06 - ------------------------- - - Fixes in C++ code: code could no be compiled if _NO_EXCEPTIONS was defined. - - - 4.35 beta 2005-03-02 - ------------------------- - - Bug was fixed in C++ version of LZMA Decoder: - If encoded stream was corrupted, decoder could access memory - outside of allocated range. - - - 4.34 beta 2006-02-27 - ------------------------- - - Compressing speed and memory requirements for compressing were increased - - LZMA now can use only these match finders: HC4, BT2, BT3, BT4 - - - 4.32 2005-12-09 - ------------------------- - - Java version of LZMA SDK was included - - - 4.30 2005-11-20 - ------------------------- - - Compression ratio was improved in -a2 mode - - Speed optimizations for compressing in -a2 mode - - -fb switch now supports values up to 273 - - Bug in 7z_C (7zIn.c) was fixed: - It used Alloc/Free functions from different memory pools. - So if program used two memory pools, it worked incorrectly. - - 7z_C: .7z format supporting was improved - - LZMA# SDK (C#.NET version) was included - - - 4.27 (Updated) 2005-09-21 - ------------------------- - - Some GUIDs/interfaces in C++ were changed. - IStream.h: - ISequentialInStream::Read now works as old ReadPart - ISequentialOutStream::Write now works as old WritePart - - - 4.27 2005-08-07 - ------------------------- - - Bug in LzmaDecodeSize.c was fixed: - if _LZMA_IN_CB and _LZMA_OUT_READ were defined, - decompressing worked incorrectly. - - - 4.26 2005-08-05 - ------------------------- - - Fixes in 7z_C code and LzmaTest.c: - previous versions could work incorrectly, - if malloc(0) returns 0 - - - 4.23 2005-06-29 - ------------------------- - - Small fixes in C++ code - - - 4.22 2005-06-10 - ------------------------- - - Small fixes - - - 4.21 2005-06-08 - ------------------------- - - Interfaces for ANSI-C LZMA Decoder (LzmaDecode.c) were changed - - New additional version of ANSI-C LZMA Decoder with zlib-like interface: - - LzmaStateDecode.h - - LzmaStateDecode.c - - LzmaStateTest.c - - ANSI-C LZMA Decoder now can decompress files larger than 4 GB - - - 4.17 2005-04-18 - ------------------------- - - New example for RAM->RAM compressing/decompressing: - LZMA + BCJ (filter for x86 code): - - LzmaRam.h - - LzmaRam.cpp - - LzmaRamDecode.h - - LzmaRamDecode.c - - -f86 switch for lzma.exe - - - 4.16 2005-03-29 - ------------------------- - - Bug was fixed in LzmaDecode.c (ANSI-C LZMA Decoder): - If _LZMA_OUT_READ was defined, and if encoded stream was corrupted, - decoder could access memory outside of allocated range. - - Speed optimization of ANSI-C LZMA Decoder (now it's about 20% faster). - Old version of LZMA Decoder now is in file LzmaDecodeSize.c. - LzmaDecodeSize.c can provide slightly smaller code than LzmaDecode.c - - Small speed optimization in LZMA C++ code - - filter for SPARC's code was added - - Simplified version of .7z ANSI-C Decoder was included - - - 4.06 2004-09-05 - ------------------------- - - Bug in v4.05 was fixed: - LZMA-Encoder didn't release output stream in some cases. - - - 4.05 2004-08-25 - ------------------------- - - Source code of filters for x86, IA-64, ARM, ARM-Thumb - and PowerPC code was included to SDK - - Some internal minor changes - - - 4.04 2004-07-28 - ------------------------- - - More compatibility with some C++ compilers - - - 4.03 2004-06-18 - ------------------------- - - "Benchmark" command was added. It measures compressing - and decompressing speed and shows rating values. - Also it checks hardware errors. - - - 4.02 2004-06-10 - ------------------------- - - C++ LZMA Encoder/Decoder code now is more portable - and it can be compiled by GCC on Linux. - - - 4.01 2004-02-15 - ------------------------- - - Some detection of data corruption was enabled. - LzmaDecode.c / RangeDecoderReadByte - ..... - { - rd->ExtraBytes = 1; - return 0xFF; - } - - - 4.00 2004-02-13 - ------------------------- - - Original version of LZMA SDK - - - -HISTORY of the LZMA -------------------- - 2001-2007: Improvements to LZMA compressing/decompressing code, - keeping compatibility with original LZMA format - 1996-2001: Development of LZMA compression format - - Some milestones: - - 2001-08-30: LZMA compression was added to 7-Zip - 1999-01-02: First version of 7-Zip was released - - -End of document diff --git a/love/src/jni/physfs-2.1.0/src/lzma/lzma.exe b/love/src/jni/physfs-2.1.0/src/lzma/lzma.exe deleted file mode 100755 index 72394705941f1197f7e3a54ba758dd3dbdc6cac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73216 zcmeEvdwf*Ywf~t%!azo5kU>X@GM4cg4YjF*HZajnfC*8OFo9%-QAn^w8dGX9nF-h? zG~r}I&TNii4QhLRwb%CcR$H~zHoh>EU?u^90E#G9qf$LXVhxW%c$E2l*FH1J1ku}j zfBob4$B)m4Is5GAdhNB>UVH76;#)TfIzbTh_#cl8LOY)H&&7Yg`ezu$6Q{j2QFwm* zjw{+VMLVu2tGct+wz}qr->bR(2e$9te%D<;4A{PNhpi@fm+j8GZ1WZ_w*BCTEAF`V zf(s_t6J6iEeC_7zH5YX!|KED~W!*R6{ZE%!yKltv*2^=yZ{p7jyT66!%j0kEo{8u6 znv1&|@ch&G1>HG#>aM!1+s2=nyxpQZzgtCpei;THw;&X0bizuxa(=Q-zhKg2Xwn6N z5Gzr0mkJs|Fe7colc+*ztx7MXINj(etVTHz5&wvuydu@52K+hlpiJRmn?~^P)W7%# za2g2IFZp+E;EuHclocGu55YyaCg4Vj|Fa3g@@s2W+#a}H5GGuNEW+K2=NVo+^5X(Q zu2riEt7alQ2lXc4X&DOu>UALZ|Nr}ckOJ+pHeXPV4+=ulU?bSJ*z1!+jc4O=>5d^! zl&9JNc6`cObG{Jj2cwx(PM3rnZh>+H>=TU%ZJjvBOnWbX~sSiBH*2uMGx` z-yfWy+zkPWZJi_ta&e!Md8r^o-F!v<>KE|o0M<< z0@dApc=1%_PRbX$-DkAQ{l651Y7O#ks}`hXXOvHWB?yhVf+;i;oi9ed@>VkEYse8B z+J&E_DdW*EbHCDfhe;53#jABJ2Q{T-Z%7Tz%CFS=ftl4hYW^TznaeB}8%mkL1dq~+ zw*KZ0e=tqyoPx4q13SI<({8s(gVt5^fUI2nu%gGzs2-0F0A-p|n&|Ulo~6u5_W5u; zM{%O2So~zXdIAl1RifrxCGZq_pggu;nWQ#gg1A;M1kKX2CkMW!%){vIzc;&tE`}kW zEcGa#AtwRaRY+F308IP_<*xrkb_fuEzgkl&N*K^ z_$0UoE_jqJn8xwo!)yr1Xq4z7kQhu7w^|6|m!25mUetXCdQylzVIoRD84r$&x}T(3 z-*`ucP?e`b)Bo!PH0j;$49!4hRj!)flgv-ExibdRlshcIpIEO-;z8xEiv?9C ztAs|Nv)UY=au6cv_dAYDL8Y-_I|+YF+}qLzo|JNB_nNH z5^YB&o&|(WOgyy{#fXN?Jt%H9hdMAoS|FVnJn>Qkn2T49GN`Dm^%L1Yd@Pl*iCrQ!jiPU~6rY23r=4n_-sxv6-=0sNLFjm9HhEFk1KSfFo z)dLX^b8nRkjml*QiGZ_$jcX<`UT`CZ9x}CD4!X;sLe#8ky%?B9d0G!7m8StWYk0%i z&|aUW%(zfxik0QHD;AWHK$yTkvCse}c#_mtz-wg*1b>8rw*xo7AG2(w8UHQ7*CUr0 zK$#5XZvg5XPD}tNUj8(}iSenNIAc_~IKqkdzIiSu)}tYFD@jg_OL79-A;yF{k{Lva^Sxp*CZK%sd8v(3YjVW1~5?EsPAlegUZWN$|?N{m0w9P zHe`V1NC+zPsx6K^{u77U@b}|WnxXo$OZO7CtO8yypM=A}@F(hn1L#sMKLfI=Xf zmbObk?ekDz38w)4dX#+_J$}6cB?VmL*AF6rh0)-}XpiyHfGLfZmogfqn`yM4p)v6` z9&7_~6s6!dN$zI;qHR;}@i&Wdri~-&5)jm>(nJ`JX>e zr4-bX5M$6Ea>$heDWz8sq@Pn$E;T|L7OjVG)CtNmlMx;btwsUl z1F2O=HB!pmNOrgK8%!+dte}yUQ!t&@tpPo)Q_$AGQNn6zAdA1%nYv3D2j3?h ztQrTuf`nA-soCO0v#ZtDdC7J(c%q$SwA~M=T^hBUii%;Oxuex>3jCXzWk|FwZcH>h zMJh`ja3(cOr-mOr!m&Uj{<;^h+=O`}(dhNjMsX;Q>T%TQcZo(7K>13#2BcA@Cu6n$mEjE+%uqe(h<&Ra?MICVxt+!MQmd~1T(paH9bi4j+^~39I`Dv?Km((TMHY}vUMuS>LG{7S zsi?we6k@-Fy{PsLdlN7~jm3VAXI1NE&_m16n)IK8RGr1y#Wi4CI;ssp10HuCC7@uc zgW~C4%naGR6**Hpa)^{-bsE(EpfUm0mb#$VCWyM}9HJgg@{u|j;bYgid>qM0@^S0? zDagGDNgCxNY(gQ{2kk00Y)uRNs|Q|?ImKO1Fd0BP1eaJ{k*%O{Bet?ln`8X*Mg zLrbGfP^6S*HzMumV8zEOD^^HY=>_4o-mY>sSW0f3YE8nA)Bg}UcN?HiQwp)RaVJmL z*urXaRr5vgTLg{Dfp-BP+0?-atk{eWB+bCLQJ#Y>9F@PEED!V}*PO`xRWdht8Je)3 z6Yt0#{nXy++gQ0-n!q=_dPm1VTD#UIG%o8j3T&QTA9op;%h0J8SP@=sHn4m{@B;96 z9Mb>`kHyh}GA}!#jgqRKs`o`FwXTMvSrHH+e<92Cbs$ zQBu{&gWqDa5Mr*Nv2lrf2b1dMkez z4E$j{24JEE=7aoUc@qyXBO!;qT`c10l?+m$UMjRmg*FmPFAExd)#gecmocw$4}exB z>;f(;kd#;mBv3XKD~zN#m9 zq45ia=7FicDi^@^DxbfdghZ8E*<(5J&eUGdh}fnwy|Q9dZmrB^9g$lr%eSV=z?aCa z9)l(1w*6&dUIsFVc|Oj)f0EYmKM|KW-?mUnx#Q<}y$UW0u#vNrmI|@PVnoLk9~)t5`vA3Dc1}ADX^;ZrSG0?<lMszBVr3t&iV8&a$6k08T2mQZ0C7_j?}2j+G66e~jeAy8xvZ<*LTG3)R%t2x z{RAt#{RtgC@F}(|{(*1902v|9BV&luUY-R{w7Lkkp(Mq2=SBW57z?RFfOVohi-x=p zx@Saj&>;Yq1v?-n?6HY?2XsQq(TUxD6Seat+Ep8sYmxM`9;tZ9(c$co+-CxCX&Mwi z(Hwnv(8(UM3{yJ6lmYchq31z9gH(J5#L?|?_N+_Gj!JGLb7R?Am$TT*PQVP0e4=IU zGt6aVnK_{Y0aM(eMD~)Ke8#7Q0DWa|r-6?FYGMd>*l_?S z6w>8Vg%Njf$51s*-#RO*hN@kLM+Le+4WzOvZ<4QJxzs#94 z@HqgflnV4vbhq`=n&e~kb|X9NJR8Vn>EcSguu`-M@ilryOI?|$vq>u@v&)sAzcREZ zc$m%C^X8SbY7uDlb~A@90a)&|z__`Mc}^jCaxnl}$N>ri9!;yk)!Z8}geM>|XW$s{ zVBM7!x1pQ(H22W86i>ONh|?f)b=7+H>|+GN{p<`ZjdZZc##V=Qi*{uq{SUv zJS;EKI4cZ+d9r>g{OteOjW)xMj#&i;|GKNNW5^HnuA9szu4Kmim6CBja$Nb&Nd0Fx zK6x8;{nAYXY0^zArEy@LigOY>M~9RSf=UGjBDxF}aeksFnD#}GZh}AW2dVH}nSf^! zn;14~T8+6$Xg&utHz%OcOEh+V!R8Jyh zh<%tSHN^gNB=5J0lrh$oC^g2Uk-UwGlsWdRM5#IU{gJ%85-Ce;L!#6YD;~-7BvSgA z@puxJH6y7XAw^vCvVh(E5}il0LUVSZ(Rrj!%Z@k?P&7{itc zt(IB&&Yd*_m73K?w6{Riv{H_vqoUJH(-8c^B%E(yYYf>#&Y-zY$AV_I&71bM!h6WbDc~ zs*6nC2chjv^j|GhnXkg;4eQqfy95DxxbeY5Ki`g;*TVPPO0XOnB{Q}QfbBj#PSm2?t{DYT;5YHEMhRr^^$v#xy@3sqP`Umu?0nv`xw*2 z%>y@}DqE1t7Uxw9I>Th>7^;aHIXZ(>evB=ii9BkGCgs?N_b|;O(nLd{ySrssv>?Xiy8+S&^awQep`I z68KV>Ns9|sm>~uoR(y;V0wtqV+%LHgCYh?N0t_mb`#nk}0puQr>n6i}2CHUp9AAvx z!>o8HqxcxT9up)t)@B$h@Ch7@2m6)Y9mLTp*Bq0u$fLZBH!LXe;4ohP#$S%bgF|@v z5HG!5(1-!M(f2Y{XI|3Fd)DZkU3J%yP*-dG%4}4V(yKL)P&SVF^nN9aa>hwMeX{=k z8njrm2ZD7D{y-G?15x0waQp`e|9+1D!6g2}Sf*8!6^}yxR+SipKgq)X82>j?Fh0Xy z%$V80_!<6^K>s7W@I5Hm2c;mi|LX$gVmxSd^u~jhc#s;EdLWT&QL`GJc=YfCN}B!3 zmAofg+Dc4LaSs}0qR@j(Jm#S~>o?jcDRqJxU?;JILaP zQ22uxBoa~gFnS_506*X+oFdy(=x_`#9NWe4?k12!CCCXpENEws2W`rIs02h|F=eu0 z_Aa_o>UoxKI3CQJ{O)3(vI_6OkyHS1th^1@;u12!-oykK2WJ3WT4H@t!CK4#9O7sM zdEF}3gik`5-np+6_hC<-f!SL@wzg(WQnr=L_9w0 zu|^Ccx6rRtQIGi&ysp}+=+L{f%l}o~Vw!oRf_fzny|9w{>NGK;SEln3f)m=wHy+dD zjTO{mek`#7Wy#&Q#OXFh-3nnFbq_Y;u`=rJnJi50z;izi0wj081g!|$q};HmN}#=} z!2^RZK8X!GPY16;H_k5fPYX@#NdV1Iv!_}MzoEjNm{ct=1=Yx;g-bZ;0*VgYBP}zt zIvl^4ORM^^)r3!&HWYEVOw6b_8wfEo8_!P`*pTyR;7Sy34b*Y=lBFc1BhCWf8 zCiYJgJJPZEC{@&|_!v4CPhP&}Qt0Wu{e{!rXZHSp>SFpT1*n1ISq;OrTjJ1X(AuE` zbyqsq>1(ehgS98ScsTAp7BVRvST#|2gbpoXw}b}k4mQXbgp$ zp-9Z>`+Rrqxf4clL^10+S*f0#k~GuL-Wm5`w8$Z|?(ND*zga5P>pCl79mDp3Cc21q ziv7CCAuY^e4rS-wL()Y_>p1Q*<8+YhQtn1FvwU;V4A<8L_>&;{aDS;jAk1*Z3Y1iK zOppuCV4dj(N08#nqkQ+76YozwKK<}055=&`bbm!x`zq2HzeEGRzhsB2ElM5U_*4&E zAT7~Hg=6458^+X*J5NgugCpC90#XsuLW4BlEL9p=K^bkNF!KsvfGy!G;Sdqjym)b` zkB-lrUC0bf<`d;~q8A)*3=M$pWy}S0r3&>S{^KzR5&r_Cer(-yCA+JA6G4CQb<%fP zv}+>p|BP1^{D~vrV_@tQmJP8k0%Ct+?&xWc37D5D^1Lncpb8MOg=x*bOaOt;)=9IL zDZ#0La_sz86~eVpIN0dAF(PR%bv*qPs6zK3jW?){_vXlW^;?YSRVyt!C{^Z2mAO*o zOsO(&Rz;?%k0Y$`$TA=;m_P>1n7n=Dw zlPYJjf-24Y+)0&rarZ&yKIkmSG_C(GE&joNmJaS165P35b#rS{^_6mt{yK+h=Q5DQ zn}^o?PdZ`l_XgVkcg>odUBuJ`JLqWbtKp@Slv{xM;_y=1UmQN(r43x=lh>W8>Y3#d z;@_%j1|_`;+lu+u1>dtzadnY0j8+az!7hC=N_oCl$>RC&4glr$(%})YuPQvQpKoYg`DYkPGHj>q%m@%0JNYNUlZA z)hM4L7qg4pSfeA5Ojp&+rVgt0UZsobqeAWp?#~Cb?4)ClGh%wEb52u(k;0UvhJ#YMVp=~RNTFc;xABCUhZSPl;6U0(;eYQT z!GeQiHi>r(3GDq)Tw2y|YJtm=j=?bvc;pG~^-lCnhy4Ys;_V1P!X)NVC>kh>9_4Gf zIBSRLLD-R7$@)1=q6S5%n=2RON$&T+Xf#j{aUWKjzsZ|xdGp;$JWkD7F?aJJ%IR-t z?|u*dqy53&xO=Fnn;1Q-VaT-pPO`QDD#BL&TK@AXA*^$KFE}rpR+q(&BC-c77fd-= zeadQVm_r>HHu$~N9%|l|-A{Xzz70UaaU2ZOInN^Cu-o0EftT0Rf^z^+WGL!3zzP%Y zJWd1ag8lM3Bm1D*qrBTe6599Iv=UlDTQ#}F!%l# zMb}Vh-~xlBQ{tZ?6A`pei(TX#gYzc%Td`qCfRQ;49#3>e&x7cfjYEWnN7*?97b9yp zD8@B)UjsY5cXoK7^sbDLgOC-vTmm*@Hs!hy*tOM&b#kXd4hq`G1#bu1oMc}o<*}?k z(aSXF*}AE)xugbe8P7-4Cbxmmj29dI!GT!_8oh}%Y$YjUWj=>0xt?9F2BD!+F+^cq1wJuoQem3O+^&u^n2`Nz%nq|={{&$e?x+6FfZ>g z2yma9THw&f+4w=h)FKm_SRPJ8zWGG^HxQz_r~-q?^S<@GM_G+Qnf_adR14@p819QT z20w0!s*J|8;z4(X=V2k|a`+U$avNe3f$^8sS;^}dV}}Ts;MUM_Q|J(cUgiD>>tDrO zcEtTsLz~p_u+;E~)bIqGo9Q<_<5o!0-A_7q)n$?hZ~>Uq@G$59q=qLF?Ee%FDMSN- z8opAN&UTWUV!!i)fb9!lId^f;chLms8t}1nwOO^MRBbhc7S0o%K;~GnR$KjyT6GUx zalWz!l<}iQA9guV(AbzJjr*?TVI{mnO8%>y(>R&6z-lCSoBj(Ylh_TwO2>&CHa#}6 zLuWsuY~2F-?Nko`ohz(@qJYsu0$ONLnn64Hjx%taEyKE%Xy?N+qBdmI@FpBsVAFUv z`3Di>amTPU@4h1PwNaDyIka%heFf&f>gkKJckb*U84x@4j^iH5p%_p|K{W`G4W0>1 zQz%c_2b#;^owNrOsN zENJS8OATkFbq2mJ@(Q$Mjx3IcLAbF+Bdh5?6w$!z%A|Emq;*TBb+jnk$;Mk(FKuZg z*@M4*gdZ#-+EfpC8Z^i#`hdMmUEcEPW zNBoXG3|hvxThY0VaHb(`n0y2qc)=!2KH@k)y2A8O*W43FJ>F8qk6|j{2q0F$3cC#yeJA03<;az|i6s0C(N8$c)eYg^2Qq^I z)zML{^Z1n4(12W6Yp7wdu~OGF`3Q@!eHHLpv=Iw0M}at)x!7^Q>w^t|?KxRKRTO(2%v;keU8f+sTnTyDo+u~ZmivycC|lvhwMHWbswZP z+9S76#VYawc;F47pA7VY+0PAIcFc*pu z>!hvby|{a@sbR1mUDb5|5s?&0K$UAz(_aZu38x5X*L4R54#036-FuBgHQI1v@8#$f zd*ZW-?1s9lyyUW}KuPIXQAH>97 zXeeFe@y6E_Dib&{aw;4hm5I|a95&LSd}=e^k8(G!YONkuJ;AU17V8|mAaHQ~4%vvK zI0Q8b<-;9TX0P(20rh=IDu>t8yvR!)FN5+4Dl@lL+?t1DIZ@Dv2qM+2woWR931im4 z6I*PVRA|(!HCI+lT4G6ruAJZf){7DUd-vNMz&YZ04dR8n-{8ZC*W2A+Jpm|~$!7a= z4FJ2I--+64eytq`rUY+%AG!CHg$@a*Ej%Xzt5{2hN}=8OY)wT!_loE>wRQN zZbhD(1;=Oys13({)IEfWhnmA4bgBFYR%hH#s)U^3l$0OCii7o78I+T!X==j?yY+BhI|40*<)32AmLN4(Gg{=Vgq=G8&YN@GCz3?Y*C8|np^2k;_ zj}cVotnwYS^ZOThs-EVfJ`eCPs$ATR8xUDo2b3F;qe@NHDykwiyb<5$hYO;rh+dHn z9e{6GB`v-B=ZdGb^&eKvOB7R8`&U=Bsm0tB19Sa;Qwz3)LQ{hU7dzq3w4V_>E+X&r ze&DhF*1aD&%Pn=f1p|jiU%}lqw=Ax*sy)GZ1{C0Y#KkptpK>YU*nkxrV^x-s3UtrF z6oRuzm&c7xvHY!{GNR6mhHs8#A79EbuG$^qsPx2D#oXxi~U#4!Z zm6v2HVO~NmNTcrF&T zXG!@vQhu(K?~?LoNcl6R{5&atURTv1xCA9&Q0FO3Ju|#Q@zsX->dg3RE8IkMmo8wp zEB9b(VS00uK$TKxx+?v*5{e4$WL8c}tvapR;#c z&*&w|)le*apLrqo*d${$4A@xQf`bGp_#XBl)fVy}DBaJhK7oniazs1|%c*JNN{+N_ zfADJc;6aO6a@(>qBViwgYVEm^KZtgRJwzLvVt5eEbm6WM7w$s67zPJAMg(uH`9^nv zMT3eoGDWBJLk;R%h11mhbHbBoW{BN~WTQ=p7to2mJm2V5Z#e`z#C7KMz|~*gOM>cH z4q{8Nu))ebZD?4*)|ugBT4$)qpH)6cU=R#&;J61p6nzPA(R;|zj=Hx9B-)))9Yw8E zt&63jM_QD(M?Tak3iiV|7--d-0Oj0)hY)kV%+1JhQl^|q^vpEyE-3Sa+x614N7DwGP+gH?D)53b<9%lYq8{32BLwk~mSCP6E}ARa^!_J z<>(L4+kI=1!&cb~vwPTvdZedzV&J}-3lR_zt245ggt7rW)nFS|qa1;gre-IiM#SN> z!4>kFLU=TuSOu+IUm%VbT%i&LV zgeNQVk>N@rXGY%w$!ia8!)EXRq$|otqb@_AnVPp5(A@^Yk=;kwvBwEJ_7KMxov5%$ zMfS|_eMAsAgb{8amDz0=%d)O4^jV#U&9^fjVV>Pp=~}y+nrF|;=)`EQ;JEI2 zcB?RO5krh(iMbHiYjqJsvRMqRWeAY^%+&HS#3?*~1vc2BKO>30Eo=kHBi8x6roVE@ z+A+N|@}VBYMbCCQQ^QJZM6F0f$uK=L@A1{nK9jf&q=8SE;q@f}Ll2*d~IUH4S z9Ix5NA=;}}-t<(uY}KZPj1*1#z1V_Jl)?WK@)4vK86$P}2fRx^598 z8VFaR*e5{3^B@zh7@hWn%`Q+r2W$ititIVy9GunwGb1vFE|?YQ#)fXq^5dlQ(2LE> zwxgpNG)0ut2vHApcuk@ANWsvY>`#-6tOlhM8ZmYXnJMg1>BvahvOA^3TPl-w05n#T zVA6+%bATDkB+~xGq`v@al}VH{MxNWAp{yj6#)|Zl2txpsW+p{?W>TbQo?oQLipb-% z>d@$ulOn=%#)=5f8X290@H4dfQXve7o+J*gf;|rIy^M~9nEPA;a)c5h-aHmP8erpB z4KNmkXZjKZ{N)G%DQ7GSywVsHuKCIlFnME30C_6YRWc-D9zzt9_$^ch+;0+}zHD~J zE6L!@xwD8GxelIe#~YH$R+^LwSi7TEY^0 z4Wy=yCVojr`;ed7(XZ8x&^#R4h`vak<+*3YVSPa#ojt)f>n{34>e`w^F40xRvq{Sud>{$T~^w zdDEs%u!hkVA=R)MhOS2-iLzyuu1EJeV(`P-R!#n#;^2v8mCtG_;O?lr4$tPe7#b$mNh-v3Yle$uhH?vo4S^1QDL(|2a{WuH`!L)f9(Z!#TQ zpjwLCmA>zAoo-F)bgQHT>#UJa4NV{M#qCt&6N)xBlW}AYJ}Uj#F4fv9+3PTM{b1E5 zzyl{gZ8B;A%a80V#?>&J_b8N9BnAtr$9b~$B6fI;hA4Ve*!}UqqGXNYUqngMMI%A;l8U`aWavLe;e2XF?K=3YGMWDI z5q8AjiW-Lc1?Z@l5d3q%T&Ix9Gru8my2NAK^|#JFkR^)`i=#4 z9K0*s(ufYBAuq$mNvZCH;1Y7EX6+5pzBO+cpf(LonM)La980is;C3*ge% zM&ink(VP{`#N@s}b+kkaI38^B;`kyndwt-0DV0mUtTMI;9z@FV1~;%>L>NJ_QSD*g zd2+aO2N`V_1t+qgM3blU;#Pa7b(D$Fr(xW_?LZ9YL@{DhwpOC=8_o;3*C-d@<06a9 z6)74Ghe;5Dq4S7yoQ=3!ji@pZ6jwIN5p^FgHRFIXaaIjy zD*Nj)00?guGqkTS8Ll<`feX<!n8Q0Zx5r|m(*$hH7}$11il6(#z~B_X%htB z2sssp(|ol!9b48;;S9GSAOY+|p#K)^xrA^Ai~Q`w+4foYew@1n20KYn=84$uQ>+t; zTGz){%p$v0-B74?zqfMbN_L1>+7^jT)9q&4#FP4UV}}UXEnMO6{m6mOx@c}e{M3WA z4|MDaoA-W%+t#{MF7c$T{&SyPlBt|oO0pT`T~KH_hq7fJ>O;t;vU~ZS@re$hxB{u zdhbUPzq@-2_Vf>WkTDh#ObRn@WzSQV--Zx_{Zl(CuRIbT{z=8Mv?Q!taX=bzT`S+k zN((VVafX)f(c!0TavyO5F+v_(Sf`aZp=OYa;8Dbkh><*{99_dlHd2T>Ja8HFK6RcI z5?a&?7C7h?-afPkj!JwWsfkoZU=rk}iEIqENH5(_W=6D$3=wjLR^ytxS-F4N7lz^x zsq!wQeNp9Q;wqEH>kA!##3uwikRH_$EI90>Sh-!w(?9^07e)2DjiqwQAWkZ!f*DE+ zLf|M6iu4Q=*(6kL;#F~!`5yN6I%He}_J3ib;FekWAWZ^G`+eW#lfZJmI>k!+A5qLE zN#zzyl=IbT-$m`YbfAZk;1NDi%t>w}=g!fjh)QZ{*kAZkDWX%E4DWLA7P z1h0{E1kmilo|RxTZL9!$NF=3uV5LibE{Jq1M3pZi!2+qaE=KUO-wt2;JvL`w5Ry`RAfPq@tWkHaGYYxrWsCScz&M!gvyAGkz= zNK3B~4lfB!urEn?dXOqG--ymNCh_0#AlEoLC@@f79JI7yGw3zGXv3?L{s1>xmWI80 zd7TyZlMNL|N|m3&<|1E^Pp^$IQ>%UwQf#4N4(r6FQfCCa@LkHch@t5)h;8vgDLwca zbpRv@9BXTd9_W!9_o6uj$3>)M5hoEXfXf8lk^>okfjtm9jpaT;!4aDR`%8+r$Rrxt z6SM;xn?5G>O*FOnuoReS*1eb@r3L$%%$wn608g@18*uLcD2is{#~Kh5rX6iPBgnDJ z#-`-52^vo!5}mVbV%NFOpc_VDC|hR~-^R)(tusnq)Js|Sl9b*EI8Ytk^YsNcu+24- zlZ0eZ<?}7E$5BT_=oc^5IHk0DPdy?%cl8qP>kpbvVupk9UwhkvqA?<%{mluBh^fW z3rKZ@w{wXEVY8A_`BJJ>zBE=UUpiMRUmB6hmqw+MVun}+r`2gB&!JV9ayRbE!Ho2T zD~ML9bn>BuT?`6oyIS=V&LfP!T|_i$+|DWVItGC#n%UmSA!{pcMT1Ho)5S4Dc!W~2 z{@WR^!&oGZ8j6odq8VEc(xb_LrL05fx4Dj%!N8rzJI1tE-BeIPR!9JT7l8AJSkViD?l}5or_j#_ zj$Ii?Mtaiec~7AO!9JS0{&UE+NxiPl-r?qtFLYeeNptmeUy~m&LMQXn=`S8um(cOB z{IU@w;ieO;CVnT1cmP9?Vy~?19WidGT@5;0_)?6kkKFjxAw-JllIMw&k1B>V0zoD;8xon44{6ypR$i@d0As@Qwvy8um;z4|bVHw}w zVT(wr`7T3Z9_Vz6gcq;zRj@;t{1()(7cnq^At~~@q{P==02tU#s05{scpEpH#C;?S zUNfIQ+`L$R|yr!la&(&s+I65W;^zNE^q9k zEeu9rowAXs+XKi5FgmZQyEwU+^qpV9rJ#W5G&*jx$VMS!SLicZ|4gADb3;+36lma0 zQfaOphr4+58dE4VSD#d%NF~;)lmRe>f#lE#l3cqdkSwN=RRl#kIRHwCF7MM&POq(MV4u1?ehMcb z!U5Ptq;Iflk_Va=Kd-v@?Nnx$pu#w=Z^i{*NB_5xPt)2uU(ZZ%-sMYc43a52pRacK z=tL42Jjs8mSVL-v7)I6LThIh_m}}OZDv)v!*dm@aP`@?57SEb%@1((G%d;5Iu8#D3 za8C9Pj|_Ef%1}@L7oGfk)o6RrpH(-EUwd*iGE(g|zog!4%K*#_Ir9&)7lFo&J2k1e zu&3`QY51z%-$K8cxY))A$dZ11rocH=gKu+@-A1~eqDCDDeEg6IpTR4slsoxWfguAf`i1p`rMPQ7FU-pB;Y@R1sdIk2A6%$DX7A8T=aZ>8e-ruTenk z#n%`-^od1$tB&vRje^?d*$YS7T&}hW)O}Tb{&fU(jAZ=+wLU(XaGw78M-SBcjzs@t z9ReQXIrS;m(R)s2WxLiTG**nRI_N{s3hnt)Awo{D2ZBC8NSD13ak8mj*HiDsWB!5N zN-k)iUcwpgRsLfG(U3mU#dlEDpGWa7;F*}X>ibH(`}s76vvuYdoKL0b6*E)+72H!9 zSG61=wjQWBnw*028satNdr63RL8v8Cd;R@%aZ%=tLg1U8VXiUCPhqa~JD)IE%U0vWwkY zMxxz9lP=V2+S~=AObNG;_`?;O(R?5>}GHv#VMPlZPF=w8OmvfaiXi8zC^5JyQJS!SLBqXj+b$->{6tHsld}r zXIn@=kfEq?Mp$&}p54lccX6*%dT$(d@6Hzx!0WSa}X)6SrD%v+p+Pu|^b#-Bn)vJ%GD7$hfwH==Cv;xu7K)Z^a6x zHXemHwU?PVhXCSgFDdI6<^vok_*~UzUT4H-YMDx~LY}cR%Y->X-V-aB(Tmw@W!f|W z!I3w@ddC^gDPRD{`lf?FatU$!=I8NPDc&^M6#5Vau=a5TU|Rnc(l-*WrVZQhD{UA8 z?PC9qq+0g{q)=Dd&Q!`CiY2k9Vp&0`^BY`FA z%#8AP;3r6x^|7OPs&HOFeN-5@Y&yHp+tdRm4p2XRR5hg^bK-DnOg~SJ^z%AWoHiQM z`WKNVn1gy%lh%s1`kRGs#H+cQx_!$oPMnN5w9)X zSBB!fAKfB7MC;Xni|Pd{_%Ql4UTFiZT?5zf+(MpfSmQ#V0OeYcn-RP&L79%$4Wz4} zS}4-P<`%on2zYfWwD&QsKY_?dEVPJAKo~v}iK88}@XkFhArtJs760eq|Ep{9j=UJ2 z8a#{f|9<>mjk4e1zmV~N_fMnMjp;z2mOkeF+?R3ZWEjSe&6qHDKIm66+ zgRgd;{Lz~9rbs{h6-XBbyLzbnPHS|L~u%5s-@ z6j|W<1TIru=zC6Z`B(H^7MwHMueSbrbpDf^mCU7GdE@OuO~%R_ev* zE*4Fy#}{xqI5-T)Zg+uM=q{LqKs}3G;-U}Z6~F^!Q+~?3j27h5>L?ZDNCh*a1zCi1 zYrzcpUR#S6X5F*+ebtD(m&u9G!@M8nVcu3X%$ra~n76-AxiRJn9o>ZhaEwySx4#cQFJVx!+mi9&R1CnV81doH%GzXnIJ=kV zo0$3Xz3umD5ve5NYX)io7m&UEFf88F!f2>QfxM+2m3Txs>pJ?BqocdU{7qO9Qi}l( zsl~{D_4p;rIF;w%haR-fWcO34N7u)i8Udq6;_va&dSYA383@rofMwu0>ewgi|HK}N z=rNLPiLmB~z*B#c^LB^Zb{~cYM%>WNvZYb3ip!SW(e+f57}LF;3I*x6)S&UTBlHrm zb+7NG1bgim9@0zu@hjK=sgmWLlwJa=IFpz4jcj0a#88~Aryiu=QpeICD9!LygL^Op z5VHU&>wn6gw?BdMN_pe! zLj*zd>(oy+KKEpS*YjqxBvTX6v}r5#Lju0J5edhEMbe|3_K#A9c=>8voDLCBRFlpI z>t>4FY^SMoT%+U%b2rL!|9;mh0D;}*@?@e8V8y*(pV>0(fTv2jkm{C zmJ8z21P?lh(`QA_>7dNMJWSCwnc1D-M#VxF~JhJhWa5Mw2Rm`z>!A%j2#$jBPE&&kWN89i^VZOzd@f64LjQgV%hh8gv$e)`F_>tqDb~_%2l}CtBbxyegr9GhrmWd zGw@5&(H*)3DItuH_(ynX7<@JaRQ4+zoXF=|W_gud1-y0kE1{u~mf{CVP+U}+$4hmm zW_Q6ul^49NRW%N*YG*yTDxllR+GJ9(Y-5P@Ej%H>FX{2fRFRYkEM1o_>WtK0oC+j> z6B0lY7ch-;5re43Cl-da+SDqgQ#RN$<;1|7B zNt=z7DzmSWWHVB-u~FJg=g#uR9cLijdm4urvIBLhi?u;o!=B2%fY+e>p3VuFZ$wvY2$ z7r}#!dEMKx{x!L6v;H7f#^%?F3T%Q7Om!M+&5|MNq9qI8do*;r{w^#O59viE3&f~> z7x$U@)HSVt2i|qq0k7DJP$XGxGD!_abB!Xei=fqf8nHI*HLgf7RZSZ%1xcAq6IKq< zFE0F?gs9o-CgDmcLV(3it@GrXqm;#Vs#Um%$@)$7+=ULa*rEqC}@zB09$I$(dqDO)pfB;5Y;^ypT3ba(R`J3 zcN@C%|4xQamNPea304#W0(b#C=RQJ=a0pnam-+ByiIFVGT~5qN$`G?$-DC8ilEu{A zieO}Qg`v&ZBCIR4o**U;=GHt~NM4}|Tzw+fgKuz&b(EtjqI^kxf=cZ99ki0kOLqw2 zjXU^K-5aP5i?kG%AYAR+Or%v9Yj?Q$Ez(y|fo6tTfzEJu19YvOsA{$F`W|?%2CT`q zSLkhmZ241aLo`X2KYLF3Lh9Lh0@F#P)f&d?B|zJ(PK@yVZ=yP;n>qF_s0JdM`D6>X zQa8{&=2$24@iFwPRM>fNA%Xfw0-rrV04G{-Ft1_{&?wZAcuHS;L26k>;)O7PWkbEA zPGaeY7+GsEV{Z;MtfZi$xnylR6Cf7GF&&Icv z2QC*o&&aszjr9fJPR4axmjPX_z^AnbAgwxX5s1%mX|16*^Fz7k1uNsP3X z^Z=rOQY=pZ-lZ;Je4V;xTeu+3UZ7P9 ztChM=O+T#OLSiqZtWZ0Z&_TY^=K^SvuLMVQC$8&t4%JRa?-uEglqWHCBt*rLrAy>X z*K-s;u~v1Zw{aLpl?>0-MKL#K0EZ>nZLg9dqH@&>uj>OI^#FTmxXd1y-3N+Wg5R6< z01Z?-f$^bW4VTjh?3Gu!PR5$o9HQk6hj@vjJDr{{f*58g278%+bw<}rlQ=38?@a|8 zqA7HbfL(9TX^-O;Q+B5_T8mHUVFAs7QpCe%TK_XdLb4FIdteJW`|4;~+nRe#p%t|1 zfRW*)02$x+D8su8A@Ew(_ac%4ZsK1G#bxC`>?jqT%&F&`K*bLh^V7JYm<2(!7 zn5GYmHP}0SwU=ji$}@ke>yw}VJ0}J5#qO-aC|yzq@}XXKBIrQvwP-bi)0{oBnUkT7 zlOcOMQJl;Q)s`~yv!sD4G?}5s+Ba|JqN`}dlQ1XL<7Su>n>}OAiCk_=h>^3|kMJVa zwwap~yHC91*o^_mocM?z9~o6zt0Q4u#0=7Pf+o2D(W;t|WJk*S*~l!C9|;lp329vv zHkRDXtt(9JTwMn23X4Qe2K*%;Jsz3(Y@KRb3?yxfeQ249gEARS{8sf2e_Hr>(CEH(44Cwm8)e-x~eSMHud~}dJq5fo~{SB7fk@LBEbhh zT86F*!^U*7-(6wj#8O9ZxF{Xp5M+_(4A*QQvEjF|-E2F1lvE;_@3@FchWmEqt`E3c zEJO1m*cNRZ99<-QA5BumC#+m{kp?K|5`dVX08xbtrpGSMPSW7pK$^1bM^pguolcc~ z3CmH{i33`lnv2dXzy=pNaU*t~l{&XO_Y-exuaPtVeRRGSQAu`}Za?O(9qA&m3qq?) z%ve=hBD*Xhf{${Y`MH+VW~QnWP9hKXpEoC`pHmx}(&1^!q^AcI4znuH<1reI%6v$I=UovXlT1FQhU6crhmL5zF z7;VlT%<_nAk#s$>s(S#EUF-zGvgRh|wF>IuFC>MHXv&bp@nEeu0c* z)l%)u-j=jffk7Twt4jD`vQcH@0x)1E%?sJM1rHlwvEnbTAVBI9z3wnzTuO=GsEM>KmB@>M%E!4}m=$}?mm`VWFnlb|rXR2Qcxwjw^ib!SyoqR#PZ&DdFrTcjxU6WV0`2SZp_g1&OXiOGN@XVoaLBkG||-w5)u7FO}rRZW$+#?s#aZ{fx**f#!ZJ*YbJpb}_zXKtG3jn2zL%by;WNn~&V!Fg zx_fkv{eI{%W?7&<=eNsG|(jR}m84k8bMF>C3v6d+Fc zA{LQ1=|g;$Zmct^2zo~KI!QA5^L+4H;qMefv{iSWM)}>jZMc8i=QzObr70)3(6slI z#=UD1(Ul2bY^XzW3w7UNkF@afP9B?pZxxoZ2dVy|IR1pgFl(W-XMWrpV8wLGSI9Qr zOICS)Q=B^k(_W(o>&xEl`~bnvhh(EQTM17J>#v^O7fhd<@BEr&1cWh!q2SR2h z+|>B992{NX$^Dutm?nNI44ceC&^kVoODxhV?3Py{;+oVNoj~@m*?6>Se;VVH;bh zMs^taw*_jN_c!>g=LIiyd#&rpi#FEwO}Zzq@7&x({B|1ijG+ zlxmD%0T0N<451KGqP&gOw~-sDrU3Uo;qka!UZ{0$uQ4?JgF;o-;BS=a@UgwC@ro|$ zt{`*(icR)$*Ddyc_$zj)C}Bj?`a8g85fY>|wcJYbsfsZq43Z^pA-MrLAPzodALb;P zbS)%OHC|@I8EhLDar`Bmw`#7G7vL;Dm;o*H`8el4>ZUj&YbLp14$cry>uRowd^XN` z2%ob7GgSf9oR_B~;|CzlGf27#gAz+2=wSz81ojS_Ozv_B-p%ABpB?sSV)s2C#;j*x0+BQd%Ar$898{bwpIkvvy=u(Z zF|lkl_oIwr0#&^TKlc2y4QB(3O&i*d?%fhu++1)cM#yDx^EZ~Zq^D9GYrcLiC&E)0-}gr32?S%`$5BdyCRmb_VstDfpX z503woyU?<7*=>nCM#-}sdY1A}4N>S7eMRxlAM7)V5dGqhkgWPwcri6a)V`|IeZ_Fi|J)MOl=TBrQ^+b z9R3U|ch@yPYAh0jLP>oFuVs6gY(Nfqd-p~@N|&3jG2lGFQ@R*Sm6sshOvO?gZ^!R0 zyhzbOh%LSORRmrlq;#iSTez4+yHCMnUyzrs{=BeC(%<*BiKEOw6fT zFBuq`cuS%^X(WL5`h5Th-Sevh@OjihZN7?6Qb8WfFCnc%aOk1k3PwiQawB3G5w&Sh zV^B+s_=bX1VpQXTM`Ln7dMh3;zUQ@9=`&l&3+z@>WqRti#0-QIF~7}^uLZS7F{8IJ z0q`4ng@NpmF}+57pJyaASZzOwBeg#dYfAwTW~P~NBsIGGvqDnh&}i^0d>=?c!B?tZ z4H%VR^*&_P7echeK?^Sbvcv7<#Z``f2b>JzGw!%~h)+8jJ-E% zW>LleY4805qpGe&|1+5ZMi`kv1|2oksfIRo&_;t6NUReeAy^V737J5ZUy{UtKropB z>;)PeeoYR8_SUNHv%R*rx6fPclit@?vA;}+5`L&8P?h?tpjgiswD_YElsfOT_BoSG zFi^eU_xs6E#wDNZaG<+g76p6VNsOD6tE#P<<* zV%t{S3gf+Exbc&YT`B@>Ku&^?!et(eG0!$~h!z9ya>Y2g8jj80B8KrQ6J>`(GWrK) z)g%^`iuJi%Q1%K-xr@9xpzhO06H`Uxy0%O2-I#K3l*7}fW$||fIr^t%|l7QJGRd_qc;B+;? zttvG;@TRtx=vnG?#KG6A^WUyX{6Y96rku(XcM1DT+$TIv_!P4*IpXZq?-DK-s;K5l z(}Dx41N!v)#1D4kEslGbf~{|tO|F6-dZNg{y-mB!VpXA~`EPT6g2`37TuueQ{MpMq z*8N$_#p2{@eOv>TKHIBBdzc6osAYa8|)noB%aV zCq1SPYu(oZ`6bi=y2|+G33Q-N?e0f7lULIq-FdV0cU$~X$qNLPcFGwP4Q+gUiypYH z5uoNSfdd_U{2j4-mkP7FH|9vYsq8CLH8LqfMCa2tOWY9XZAZ1eIY}MI`CaBr6Dsfx zybl8ITOj%Ui^NP1zn32r0~V`t?Oo}i5@DJQl_FIBOhcuuONL4YNozA`rboX|)-3vF z!N7?Zp|_f)`h7~ucW4U&306WhdY+^iRiPB7$)s6rt*Z+6?NvNBV6Wnw-BJUUvx=rv zpk-ia^ix~rkBX}ZafLDyNBUz@-AY-K@)Y)A?7T2o`5u-N`f=5|**x$X8Ob)DSKp8Q z4%U}Fqv$)?;L%%ANs`J}0OMa2B3WHs{-;>4$VPoEuJYU)#R{HGo#CP8~0N6%8`X0z%FsfSpLrje>YCg^KDBu5n3 z`k6Kg{381RIFLQgM5cb1pc292_#h3{{+HqQcMFF#yQ$bX{n^TD;}^TA=Xial*F-S7 z@zLvdmlPG)X%>Z4pM2T08qczxzm=hC8vIm5e0IZS*$Tb|R%QyTpH zv2V_{o>G&|!V{)$<|IGO0X^oST1x?j|>IXwrE)z%@%KveG4!m&RHd#b$ zs*EoJm${~hZ&iy1wa_uQ|F=x@B=2Pq1t$t7b@%O_yUgW}av-TQE`J&!L7EL|0f&?Z zUa@`3n8Y1=CNC4^+UW8D*GBz>WOc}?hwG?#-~G^+-}byijDcVva7KeMIA(|Vs`#Rmj+7l67@7@|fq3LNJ@hqazPr(sPxe#~%Oulbp& z@ZLO9PR)xTk~xdN=So?}WHq1HZn(hY7IpNbJ=W&y;Xb4<9TO{(ZFwa23q^43pic|l z&>>5I!hp}}kbbHCRu**9DWP2z^&3L7a`zV@1Dm6+&1nK=F?1#x{v3A*8)c-VY`H`D z40mrSCAt9*KOnmA3^5haBuUNK|@rF`UBlmC)a)unCXd+aBlW9^u*6mi+`uBtyc( z1)=VZ%UM7r*MjB5;*YtTxD>ywnC75{?Qe(g@cKeWsK?bOlFbGUW%^J;Uwlo;m3 zU5j6>Zx)GO|9rDwyl}VDRiaE?ZprrOb42a*6ul!p2mK{Cp?CV~(Hv^dIR1S%WaObN zN2PiRS}rCIP!cca%1wDi%OLU!l*?o4$A^+KQ)?MA3Qq-Ap}4GrO%Y3@li|V^-lsGy zp{~r-!j!#Z%rBG{CUW|ey0RTtt1zXCY)DXRIb9W*s`dI~UXz_Ts;YMgk&A2>RU)(y zecPwFa`W)~m&^^-o+~VFtaq{H`j*Q)3K;8v8|%CAN%~s9FC047k;i`iL3rA0@U*?C z1V!c8+fN7&ri*z3?_vFGCi(ki5~1%8?1RSka#`1&V%t=4Fe9*gMDK}LK&?Mtbj%s;C@B$kyk$02m5&k0l@8CS-YKZw`W+=cgdXe%M90Gj*2if|_-k6v!{5FUeMTXitfs~D zzzo_4RKB!A)6b}cPvE*!xRQdaPp6Klzd=+kcr!=MGw2WKSCul)6+0-ZQs$j;ZEz75dZXVSF(OUd{?q$Kz#Fi$B$u(#yD;oW7P~(y6mAYam0t_ zzcd@kt>6`lAM>zbiciolWpH!VLZc%g^Y?5K%dhcL7Y3#~gI?)dok52b)RAfF zI7eAJmdsOMTaq0%ehR#nnd3PE!XRdjiWpx>QmGib%7|vFnB9V$-y34P1?V{=OW!6O92MYGG{X&vfGH znKB$<<6NvFw$!<~l@l*Jg(3(>_u}4l)5H2SSIb(rrjNfrdPVBmhOc4n=sM$G))I3t z`Vt+wtJrPp$;JW_7VE;s7buIpZA^2Y3Ma6WX^W;(Qwrwxu6cakd}Y~ehc=W7d_!&& zADd14Vu3AQc2r;Iz)UPgh0fDy>w29VTkWuj4HPi!nzrOmc}MoW?FYC$cGBqA)$5LV zA>#ovQp7d|o2#+1V+cGZI^$)B<7LO)+uoz%nCc_PRDEoM78x=v80`65!P;Z%mL(jQ z78D!bu7k#uG4O+uw@D+dJ%-BIkU;qE zZ69XaIfw6<&N$z)rrpW0>h|b4EnnB%8>bS%jv>ai#x72Bl{x|+GmN-5yaSfq+lCPs zJ854xm+eneqE)ck<=#3LZ>(G;${sSV!Z<6}zt%n!9U3e5rF!zHZ#_DMU=8)UYfe3y zIbHQ!xIQ-+tk*p~e+_hY_x9M4FKujFgUS})l$xG(n42p2C|-Toz4ZvCQl5Lm+q_`N ziU~<22JNas#7KjcGOsdrxX>Ik48T7_iX%d-31B9#n8>%qxHJi1DxL|3I+?F zU4se7qhwVd%UJ=6kA~t=!?=eum_#%}zytMv0FaqDQATzvsDu@2J4X8z`^3M(AJ?wt7_V*eXshE+96=|Ze`_}U@J z4Cn%FHCv`$yMxdYGx(d-h66agBRZl_GbL}GaqVN}Tb#j-AAb9T7C(yyOmX7PtFmkf zH-(E$oa+onht#vRb*uZaVs;8I$By)l_>7T7(Fz)#1^U| zXtotC@}<}(j&FaF;4L>_i=oId+9-}Ms%ZFyRot72TMzbn?Ddd~fH6zX}%KQocO~eSBUArVFvP+BQ!t;DHlVrl1hEUN49hyRxR#>v>b^ z3qFZlh&f3bD2$3@Fw6?$x#V$vg) z=3Y{y6`y-NKKE#Ru7M>rW6bTec@!hFr(pdBA4hJ4Ew8~6nhmlG87Ec{N;kM}8g@jF zhQgS(^rXf}RSP<}5lRog|3b5eN6Ha1ikf+B<9<~3^jEs* zuVSxGYCD&Z*pp09UGa5dz*6jdql-s?S2&90q#e^ntiW*Cx%AT z2JhhIs^^NfF0oQR&BCoB3CGpQ0rngJ9jsrm3cgAT#olrf#V?aj2tb&I zST=kYG(5?u*6=I-bQV7dY+7o}RALaZ6o-aAFH!bjMXHN8XmMNExfo5CZr5Tt;MRDy1;z%s;@%^*Fc4IkxWDQjsl; zszUS(wXDn5B93d?dS;>2LmwJwulc@>^EPPsU)zh3Q{N~oj(WgsB{Q@6kx>|LO<=#Z z)KBG&uX1h&g&ulYZ+xh|9XV==gW;K}e@Ql5yY~Pe=81*2?*hxrWgRY9B?iH4Me&jI z2C4MdRh>O(2YA+y9!#A*hM4M|!@A{DRld%+lpy+WUxmF!j2WR+xPl!RW$BayzUb|9 zVCi&AQBH?m|v!9-=$+6 zz8Is398YjT^;kx9GjWGyP3bgv-FL5Y6Mq=P{4AxxJG7&R8GO|Hy z!2+uE#KQhSIj@5C*58N$bbXi7|4P?;(>C+O3+vzX$9BBkZRB@OkM<~uP09L?7StAL zO{j9rfJnFuS_(IQsPA3rM-Ly8ybH~nr}+m5SXVEPzBbr-L4Bv*9pciE@jq!lOs|`> z889$J;Ydw&X;wR$Q<8^?VwN`)uk)zO1nNTEVa8Jg&Fe7LZOJsGPvWY$A2VV$`d#3r zqH>8$702u#Awk*s2ZWLA3LX8S3Mns7%43MKdT~WO%eZVnx-`J#FNY=^0;}<;ijtw7*=&EB z(cmZ|&|*nK;Bi)@#*CwckRf_#2arr(c&-Zn#USAdUh-6c=6o8^J2KOdpGzttbqwiQ z()s-==c>$D>DnlGRedCX!#}Apk6YA+ZiXJ-x2Y3h4U2=F(#Dc;lp@W7`ad`x?ojV z(IW#uVQMr|0W|B}q?dD)X5*gu^Ps9eDplXumlt?NZ81xVa zPvY1T4mreiuof400BuPnEm%t?P{9>?NdwMeeWa-DEOBv9C|tn#Fy`VW1pB8#ZI1-XT_5e|btaxdNa$PA8wKxqPb@+|L4r=n-w(>&a<&uY& z-uoR@ZKc8vokn_Rw_(nZR}K;Ja2Bz$0Y>yH_!G0-Hv7IfH)`%?oP&+iy~X5$5RO(nKTrNVDSevO7z#4uVORVLMVN{_2^;-3<0dj1jx# zFiDo_IK(*@8z*d(VrjD5ki8?@%8{{;>?&PK>p>M@yd*bBo-2n*mLg*N$i8yeddc3# zyTf|N?nwA%y?lW_ua&%BSyyV&Ed9AeA@f2%!pv}OWMskq z=x`P?ssn=!_H601-3j%IX@zNMo6e08= zbBx*aP@lfqEB9&lVehS*S@B+dg-c&OHSoUve8CH=Mqmj39JQm-lhqd?lwI&1^QZUh ze~Pd0%twm|It%-WnKwnxtl-)vmM>W8#_mZlF1mWc3$UNS3@a}z7Dat=uKr+(oV8YY zL%e)~@t2PwEMtL50GZ@&@f)@=X9sqcjurKU1IrUS6MbDm$1-k&(Li7;*trT-W`Mmj zZeuU4JbJ7zPX!;kh<{31KqZzQnRC)8p^6$c9uk%dG_fbyaiJ&`Keo=1iqbKkPyoU> zgnMyx#o|9Op4}3hr|6AYrk5(>1xcto>0x72Uq=RB(MBYf$DLJi?|R;ai$KP#e&4%s znc-9?zKw><{m9O@TQbPi0^_fF`K z_}1$H>M->w1E#F?v*q1}sEm=c2qEJ>hN;!^!TtK$m zC@AROa3wvQ2!*7c3QpvWEX3IA1%woQbn%CmAIEom03{R&$8nIB7kH1`Oj*bZxO3i` zeYIRFU&MP(QNjMm)ft{+)1Go0Hcx*i(32>Ru*4@;cqG<*DqJN#p#a1+1P&`1D z#<`RCl;g&DwambBc;)UQL6PO)3%AvKwLl=H9+Wzx;fvaE*GTF^edFgRR)|(uk3N*@ z<@ThRoZMFQs!E@)3n|EHyj(IE$8aS_2zpD|hY);h{0Qpmxs)JIf1*E0ZX~&|na)MD zrD|!bl@|1}i=cMes zsNjh!nY-K@Hb@@Q07)8PystI;s!5lyJ;H6)U|}NKYb$ z4|ASk{~|HdAy5I6r{{daWHURPyNhg;5`KZygo=uSGpWM6)1hKsBVWR!kZdO;3n6D> zc!=x4l!4$6l8z5oI8y;+I)7d#prVPc6Ut-1_*3{KBKnS5;ulSh;~+e^3z8+Hg2 z8=;t=gMGo9g#TerK|u0iKoliGc8I{&JSuFAO~VCBZkp4fe_d&goab*H);iOM;L5R4 z)_kq2vhtaU<#%xljKdGePcG-xp^wu8Pw9_*S5({5MriAI#LX{#o}Y8^_n0AGT@Q;b z?CgS_%0P@e_B~LnzYyqZJ#W$l?v0z}i=A<%92e`|_`=A%6WKAq4+KYh6uG5`B;$&N>tV7REcbDed+H-{U(QCoG(~1R6w?m)XSPGkEX2H2*-s%N z0ah)7`B7;R2QA`l9vwEmt0rX(d(t98hGv_n2GPB$Ipol6R(`j>TYnMr6PRdW>Z8Av zzmGNbd^>vOX`lAP(!`7+KU8aWI$VB-KF@*jtbC>|xtH_DPuKATvVShTOUNLc92t3z1y!C=f zdsza(Fcp#$WpeR2D}JL`s*#a{GkgWfNKQey4~Duwz-Q|@liVm-V@Ofj;bR?HB#O`Y z!71W;5y(VQ13ZSqTF)s$nGhYq?eFMcB{SM~>JNIOvxGLns`V=Mu+RpMqK$E)f%u5k zdi}IftY~9-CT%>;r3q%e>ASz44mwSUDc zKgDQlxs%R12$9S)OH1Fpg_jRTA2~uF&1S#;KSCeAe){kYN*~^S`tbJChi4#tc>hn( z2S*A``luHAu%T`M`jB&mjD`hoK_6kEj~4=b3fEBd;pwA~>QsEz_fJ6^i`00MNgd~q z1B21dXpg+ar+&Ye_d>-$bMW!W+>KVUh+z;)*!j0JQi4!G!ts5*To|@j_z-eTULB%m zCQpvy1%+*Qk;CVqhLBle1~p)hMYy+Gz{&X_8C9HN<5qY}&rLF*(6<>*7)@j-F~<>M zWWb_m6j!=|fF=O_8FCX0DAGhl^^^Ye074JC#Nv*7ITlF|m>Inbk#C2|tk~mS?uq@~ z-aH~~yakOXb>ZD388i+E1h&=+n>A$Q@8nGM?OA$xZhqHTHDVwX@aw-*Y$I`x$!abV zudU|0>rOq4ktQFrZmZJ@L#H#fVMzsQ7_5x^%W@_g=%A#)WMk50sd^W#Z&e7Wwg>oW6)0gL>UQ1YP{(gO( zzx~LN{M}}4pV1$=OYzVL?i2P%pni{fi+eW<*9<%2Xi0ve2SLh?ttSYCX zvN~j3%PG8nSabjTs--e&ett&H&53)u{;_o)hqT@}P?~&r(3b}){-)bU*#o9gJQKJT(Po^?C@p0=jsyWD5UHIPVb-ZRk9jUyMA9iYocL(JJ z)%GXFakeSPrM(_xvm>q-$uEQM3BHm-v@ zF@qur@EnyW$wRm%C6Wt%T2*46zsgvk0L-p1Zsi4=w8)$F7p4_-MJ}mMEYGPnLU>mh zlO(WQ1$JUpKKka|&Ju^@e3QV^SAJrhhoY_t8%tjJX11BJ8a+ULi>WUTFMLUdn-WpS*cuQ1jEnSwledm`+sG?w*! zFH~(hx9_`xm8vgM?ysq-Q1wxQu4q9`f{9C|u~EfCG7`N43X_GJCzJ?#Dk?498B^bs zf+T{obEx1*CI%22u|32V8N3{_K>P~huQ9F_q#lQSFi>(%OW7fQ4X5=Oo5G6%qA)D*#fr$DZ`rpTf*Bi>XTz zcL~DmPuX9o5Q*9)hEt)}k$eETfJ{{qn}brb_ZhTX()ML{rsj7Fqy(<{MSKdv3-L*a#-zEpH&F>5% z>7SqeRtvHNt#6VZ3c=*+DuG(1bsr8KN>dJo5k*Kc)8XFKp#YJBbyYATwy%bb8-+CQ zmBPS&ww)GtVD(bpBt8Y3ga^6rT*Tkx4E}IDVVf%OM;^Yoy|l@PE3yo=>@gGVZW2ih zW)}nPOaPnZ!y{3Z!c7($f%bmi0;CG=*uMf3k|>eDNKN+M$X-1kZdN;#vQ2?}uOf?% zMB$?WM{7~s^xP)!O;6M?^V{aDdexYRK6X;)DNEuym)`ksI2Nc9MNn!VNm(>UDlbq1&WTxW5{qRH0H^MYZYq zPhwtSVtKGCKV|%eb#t|G^fl>43?6K(p%0^EJkA#rC8Z(b2ZZaL(-6P=L3^TnMuo8o zFBy8f6ZcBTimzKyX>>4!Oq5I|zL`_czX}%3{VB8mb#4-hkzdGoP8NE*a>ItXzI68W zC@^F0|LH1rdJCs7XAuw^iD>Lm9XV^q%L(7pMIzlEZfeDj< zsCP*)46+&?#6N6&#q?L$HTNsA7iJ1q^4mBSk;(nkeWx8QRLyASe7NlI8Xu(vD~UQy zj!6xSZ>_HoaQs0q!hw?-?gGYtq?qB4q~jY&7;cSWmr(XT{7?<%>Dd23s_2h1g|E3e z9?sUM<-`@u>fCrUSyWAF{9a)XI_F}|j_Wo%G&khp_eu}cr}^S0SDHC4uK0&6xds3T zMmdR=8#1a`5g&8msR{*Jia|MAc-TGGlOq7tpow6D&Ss|zR z)i7{F`{9x1Q8{Y>z^*1oYJ~OUa05^}B^y0W2o*OeqH>U}z@ul(fh~CC_9SyVqUvT; zruPa6i7)$At9`mhFO_@WS%|B?*|%KmP|GHL{N}i8Gxi6)O zRx6QTna=n}=_5XLm0hpz4D3o2vR&?+WJ7P*F7~Y$JcLDu9IOyUo7hMZ8zXJg=Atv6 zgNh13UJ+doui%xYZ2e&1`Bv|6)ZmRWV+P&_>~eKA$f9JknHBzO#F8hyXdTu*@75i6 zv*$GvEtt0WI&}14*K_4%GBhPt+p4<%s$WQG{35n>`rl?olQ#)LjGSD=weC3J^%0Ta zehtIgG^fbGv)3oauaE6=Bxd<++y}04A`#*8dar{~C_dBMv{bJls$T@gfv#|6O{ykG zM~%lJeOTaCcyIg1Sw+D(dIg5f*E1*z83&zCpR z>=NtAioO|mYAz!mnUeFc0r`Ov3m*b9RG22J>&!kZYeuPNDfQ%)bDkq1XR16C5>8A7 zVI|Heiuw9#f2REYV(s*mQ1>jUJ7j)2@{|KC@;$AkHjzhozo*vs-Q2k4z!I$;muVcO zQ|@F@$PjiE%>)3~orzgC8?6-mAtj51-=ze+kYh#-A{iyxtrD+Cf^vW(C(C{4dMvUr z>N(6ZMS_ywsrQ;R`=%5wGI)=^H$L_ES{&2FB3ekpVzxPm_(ld6V*UJ5t&hWC)Q$d~o-tc?eLbGH%X4BBrzIPveu?6tEf z=WdnQ>;FrTQI_j=_&)e1`4#2lnIYTX=nn~*A#@j6d@mq`0z(ui?Ic~C3CC0jJj0MX z!tph9IN2~`B8QmkMWkF1QLFRvXM%z3yW;as#l3ei;^a=A&a@{t`f|EcS^3SD4nsJ+ zfqv~3s$vU7rc~q!k9Y|laYq*V{L*5p4!q{r5Qe^b`Oc!i%^R^VcPbv)D09->5|JzA zMt7&n$Yjt~c}xCbc}4ctIa%$m+pPjAI$z4XP(<^lwEiDM@as=QV3of>${(z*go8h_ zZm_q`&Qf~?KFVhQAm63-2nd>O%il-6_XYzuC(L?d(i*Imn7CCt66r3*9TVrsaMLy9 z>j9~po2`lYQPuAL^_ugC9()tSW3~yCF+JAw&ivR%&SrND-dfZ?xra+A{Z{~3Ma0&+ zM#7xjcW#0%$rCVJgfH=5Xwo1NQda zO4S;6w>D@?xsQm+1yq!CCGS+!u_UYKT8{3=c8w&lk82ei>gRehw>aLD+`=K_Z)BH> zp3;w}s{Q$U5QG-I8yO-u3%1OTr(>A9!Fyu4_h z$8=R;N^z}e7gG&Lu2x^m$49oXgVL1t6#{g%e0(JW4NBIU0^rxXV_Ez8OHI2PCyu}@ z0(-lYcFe{M3AS_`oE|+1HzN~o%g5(*mT)qKWHQO}?wGjk^$GpS9Nljb|HO?F-y!iK z1;8{9S;o&lZ9)+{R!GwYWymabsv`y1EPm%EcSQp&qIei45g_`3pgLsr8KxsG*wgp1i?o7~ZzeE;Fmd+OhR zm@0@`_SyL#CdS#g(ZLSl?EF;0Gwuy?w~Ntx6c(LFyjL_WmKw6gpu`XWQ*O;h8PN>|D+E1B*x7rOCS4ClJw@B*(BXi$rM8Mw!esClM(M1 zNxt>^GP$t-in)`fRNL%B@i(>(+_8KTP(~po`1E$m(1I|f_LD>Gav{95K0dq^LH{qE zm;d!E0!W^Taiye8Y`W(J558f4F5yxOzxE^NBpw+hbV`6Xc5;}2=-&D&jf#hd2P z8GKw9=qJ111l1GPzbPvxvqr8<6OWY1B!g6iR>fvfvAymMcl6^-D)ydLG0rmV*56{f z!=y)5?3sdho3Bb&;a#UsGT)shB zKe}Scp*>HSkUXOxNslP~C zb6T^7(v=so^9us@)yKD*v02aqvz+P4#TE7-=WKFeX&()9|FC^}?8x6^?W$UdyK09b zMA--xnLzGSK$?A~K5mxYd|5w~?hRj{JqL&MehX6RD+8f*$6lkxN*lV~9uU2nh3y{? zvCE5JN|BU_Z@Q(szM`}PU?AP>ub0!3CU!B~`V-_5j8SqGq;-VwgLkJ;7Fe1)7>24L zzrJ3oh#L%vK!rms?hRq`N+X08^njF4V(lYTTkltAw-!umb&Y~Tv$xE+Ahm@pyrkGt zwa}y>7y4Hxe(K{FCPmmWI1Z(D19A8#G8!C*+btXp#2=fT7Pm>)V{46yNvkIR1=J2+ zutXVH@PacIynFD1vp-$1iV0cud~rajP}z8COBKwq0a|7}jVETZM7$&_&*YGSP$b%? zGAU6ZJ#kmVaEr6S%fzOF@UoBG8-BqY8IEv))iK_iMw8Iw6Ip)!+2YY}jc`ADu;9Js zujo5XUAG76#1lY^*8b5D`wQ)FIABk|VZMwWkt-Y~!gdDUtJhzsN5^mABda@399Z!9 z!3(|vi$0$!IWVAP8O{4kuE;Wr-g<>duX=I|%`hBS8&^b}q(2$YxfL8+jFCyGLUfA?z?6E|O}Syh|?1)Owmc$gy^pQ@t3!DZkPpJ`n1b-%&5 zFuKQQQtaNuZT*9n4>XJ*w?diMQpr^!s(3qyZg}_BeCZT_*PrW7p)zJBDq~`QA4zoz z*IuCSSM?u9g*_a-e57I?Qm>wB@|g{xhhl$4br?Lp`J#fPd&64@rkH2UO*8lR6?5-4 zx?d|e-ZUg|Jhs<1GrFI&3OO>V6DvLcJ{2@c{>pw7z)cVwfkF#U*=b6!(6m8H+0*Jy zk04e@DGWdf`_27orSPqrp3+AN(r`XS4c$j%jFcjJa_TvIvr~-(a;^`}IFvd8iU>>@ zv6nuqw9<$dfrZ_#O$SJU4dl%Oc|CGOPnKC88CVgQcZnR5^WAvK80z5+PeHeP^B=`q zmh|0$7jPGRqlhCsq{!YfYhr2(Q>TqDab}Q61{R%eEg7%}9+)M*u#OMM_q6lF+#6XoE{Wqe6t3nkWG z8#=nfUTq#)9J1oW&rr%gs-?7pWcx$uZ=a`@0LQ8kWQ7weP?69ZT4Ix{T3q(4R5jvA z|B#^8(ldzy^k=1r{{JLl?J={rHL0w}(jD zd3(^4OF3Y`%RZ@Hu0OB!Xe;w~Xf2q#FZMLsxp|)`^Kkcy{9H@^)<+H=+MOgrQ1@*c zi9BO4f>IQaoJgNnWxQ)##VfFk72O1~N)=a-gQkMi7#BG*c=o2a#~L5XP0_hKy>bs) zABtb*l7&g+PcOl`NRYswW|KMjXcSEt4}$$>rJPg2p5>6TU(Svhhlm;)ik|9}H= zzO&8#?C35~%Q1!!m;n!_E{F;UP|!(8^(ncsS=`GOCRsbk8Zh`iEpOtY^1K(7XJw~2 zA-mnShh7A6x+pJ_Zc^NQ{ac>)ipN@*dJ>XifAO)N_)K61rq4BqWHnWCqSEB7D_&aP<0fSq@=ke&-5cu z1o`k9vbPEp3IaS_OKcKH-JhZC{I&^zM+QLw$!R=if<&uU{6ipwP?S#i0YCtqM!*Rw zd*YCJxmKxN;A*?6gX3`kf>c0nZ$YsWX-V;^f?}6y&S7+c-vR-x<}`ItJf6qFB&C%? z?iR}+!%ca~73Eig62vY`ob%$C^{YOG%p-9lqQ`@8Vi)o-b`Y=At3QZGd#|YOO^jED z>abOy?_Ruz672T<=pg0fds*+n9{Y>I_$7$sxcPgS+)`y9q>4{XjGkKebHwuf0utE? z^;RR~yn+{W{4-4$(rlkQr$cSLWY@%Y4Plz#A@>yG2AP7eWc0w&P_&$N3S%7Swhqhr zq|iX64%*A!*E_kaagvMeG1;IANR}t@ zJTm>@8o0D6J5rc`;BgZH>dZ7p{J#QX1%+mn)#t$B@$S^v;}DwA z#g8D2520hFPvKl3vh*pW#vUd{YV6DEZx?_2gk8LF*R}S?L`K8-)ErlBe5|}P3veZP zLLE=HoD4RPX*ua{9_s$Lod*whaO1bF<;bN6Uqkyx{(%AEzvw#nR)@}cK?ygk@YL9+ zRk^#>-zQHiUEO~cdA4W7ZvMKW=g8o9;s|}U3K7~NzMLm&bG&x*?TG#0O$24a57{Ac z9wFC%WUWtY=N~xnu1e{`J=jykG}9EK2^G4!lie?Mztw$c#GdE}C*IeOle<_sLUM58 zFZS-Hkp;7IJgb~d!#IEHT4^iiJftYzQZoncp*{!&40;dMMIVgS9aT!BcDWxd_Sg_R z3b!irtR8U%{kzPWs`mCA?<_vbfTeVF83-U@9U0eCg}27m9@V0wOcAHWD!SNTifE06L=gOV?RP5YZaZ+P8;HjS*g#X8x zLu^rBh3f0aTjfLh*9IaQ`-P^i_cLH>QCGvgHqwr{TkrI|Mev~ z1&|k4`a>R+@Zw{T!8!4=E{@KN4v#sC;!@GB)R>0|PmSHK{yw7q{#5M_8@3|Lvlw}fm}@e^golFx`=oA|A^{0=1_ zSMiPHFO~bp!!ZJZ|k zrbHO%%W0meeaU7gr;|+Our&Gm8z{FT%8?e^Oh$>amy_RC?y=-5+#M4n_GM-k z;P{g1u_N>azK`~OEBxdpi$#A`+41%5VqPM7f%z3{_a=u(iMu7uc9llO_a@&Fdekn# z`}=)asR9zv&!PJX%$2}30|SY%BP9N{{dqZ)U6)BSIF0FeLSj24!W4->S;^<5AVa+J zGSfUj8VUZj1bZ$ec$5kTA5SMs@l2HcDj8I6TXKSOA4uj&Uk=8 zrt(bS$>lkZ$HDU;A!QF@XX^u(UEo)&-pxAJjXA$X@_~bc;vSe z_a{96%yTEta-LgwDtRXJOyU{Glf&cT>AlRR9pc%=^E;mZ;CYDWM?712B0NiZZsDoq znapz?&s97*JU*W77Omj?ie!EF=Uwe8!kVm`5Pg>bIhN5-;&2%W02p5 zGx)dQkK{@H`b*TbHD~aToWXzT8T@O{;D7TO{AZoPf5sX7r)KzPR=W`Y!G7b<;6LsR z{yF%|%0Bbw$8WLwg3H^3tzX99p^euDeqVFi_tmF;=bZL^`Dx#mo%Zb?@NL(SVrP_Z z7XSx*)1U*sY1q2UgW8odgW99GFMk-+a!v%bJ9zf-y=YueTgJ1B=eva6aamA%hv#FS zNB@EH>{^ZXlON62ebPEgDAdxx~8ge_x6@R!`6R!sggdFJpOza^-B z8TV?Q0-gu?J_mO+&lh+W@ZG}G69{U5<4N)4@%;?$3p_`7+7<-0=PC1NV}siN+12~?Ye&4O`@IF?*n|x@AK5@^TvPhmqBeiPaDsQH9WX2Ja^0Y z>Yx_H4e>1C=_33%k0%mj9fixY{SoK^_dnCFD}USHZcJ%X?{);W6FfGXjkS)dc$S@? zyvnal{nbi5tO9nO3aT$jCogw@(*J#w_jfYBCH(PJfA|brk+y(Geok2vTEBE&@_Cq5 zY35Jh={?O)r3DuGN%(Gycct^mc9K6Fi9^z$*Y(A)z97^znAz@rjuo5<}Y1#+D(T^ zTq(zI#g}iPYwq}@E@W)U{7vLLjmHJ2<)4lx`TH$+B(E)Ji8nq2?(JuZS4uqjg);Iz ze3tmNRy?5{C+p3@egfxeE8iAe1*?^AC<%gRN%w%2?tfV69>*0N?#Gof-@uhNK8`E+ zlJ~pMlAqII!sxNwi!3(>H;wPEv!tJ3#gnpo&k}EjmG3-Usqf;9{PS2Q5B3v0ZMEVF zUS<16N@C4Q^&U!He)G$?w6_^21B}GGl08{Rat`IFer% z`AR$~tJi|h$&x+umo7K$ro*Icfz5BlKZo}TUo+`{_5$Wke0%sdNVtaY%-@52r^{VI zddaKhbC!GmAmy%KG_c%%<2&=Whi@rY;5JSxFC9FE zpN=K@Zv`It-IoEs6OqMWKZ*ZH2K;$viPuIviNDW^FLb-$Eb$K$Pkx4#uGeypTj{0l z51u8xYiNHv?LJF9e@49HXNfnSc=9_89m`MZBCgaU^CxsKzrn(#t$h9>t#^=eCg3kW z=_m3#Q~KFwNWU8YqhGYCwDQMwnN2(8v1tt%e#h`@!O!sb$2)~gLc?#c-+#$DOuUTO zrZg;Us$Q|8uBk}VzSjR$!!eGk;>!GMuBu(SRMY<1Hh)F5scz9iKE9K+45x7si@vP- zrn)*!d)PL=xh}G-v6gqYcEb(V1m_fmie^s_ev<~^JD=~_c*ytctojvAiI=t6R2c z*$VowdRuXaru`wSInuPWj?nwXZ&~BYI_+oL{9Ed7rI3cEx`nlMt2J$}Hos2gGrz$s zAz#zVs=`w$XPNaI36xhy?pRSbfARAA#$d3zs5m$qXs^<4h}1PLTfBT>q%J76!1JKw zwK$@cYV&6=S`jH(yp$-~^epA6)l!=k^XHS#;z-@{mD+5+Zv{CE$)oAkX3b5l36fm3 z7-1kT+RVqoNJCvylcxPpo4>GjNwhgKzrJ?yN>N&^@>|qM)datd=6AjMwcgBO{=yY2 z<_q|m_Lw$*QRDJRQ{&Ql@bqWfw7N*RuBjRP6|XMRo|Ercix=HCr7^lZqG>;o?@&|Y zqPphhS&Ns|HEWZ^XG*lGscv~XK%15|qi*5Kx+zVIBa0z{s=7sHd)%cJFQ+1(^8c1L zwQgx$W=0}-LmO4k@k^o+S0~b7A`HTTh`cgM^$7YXoLpR^(m^YZK6(^wn}`;8f&9VE#iXC zqxSIPrbu+*(jt?NSEs*Agq*L^rYvo2wqk1=?KKM*M@kx-sunN5b!pwqTb59JXm$#u z6{#y;37W`pguSXRqCPb3$*jscTGjfhvtm}&EnB#vp|Pos*pCxqY2Cu+x;{@$yD)1y zWU+YR(#7BU6y6>t{=!-ajrRSe!b7Ci>?!mFdkxJ}rvl5YvgD&kyGdfoYZX~)9)VE4 zLXC6`2v!@SU|wE3vtA|EzENCRUOXe+;|JrK|K<081qK!)58M&d{^g_Kr>Yykr$n2e zU58tx%~au4^alAA^Ie5orp;2{WyF+UNSmzO8NA7FhBigHP^)rFtnjIP(K+C&nsx)v zcGj6c<+-0n(YPN52`iAkV7+Qn7B2TMZ;bfWfJA@vGX%g6wEHdD%~gy#WR>|X#b`qD z{zY_iI(0g)sdbCsuubVtjs9YJ!5|qRBa7>r(}BZ_muE!wU+*6~TSOq*aK)`A`Og5C zijxk5?faV}wTqYg`5$Rm-0U}b`iyTaTX;GwwF@H)&s=t`%2(l~nZ9mCOqTod%>^ynH}1DFEiAF`UzyvqUtn z4WIGNvLgTZtFHZ;-#?{s#T`wHZ*7S9a~ECVzk1@tiC12em-jXQ^jjO7{Go*_mo~2S z`^D$VtFO5-?>ZBg)y)fUt()Zct9%OU*3^C-Oi`=?&;(q)-c;DUYH?&yLtXRNue$20 zxx@W_Qq`#jQWe9ac9OqVHE-JEmP!7}L}^&Iu<5qpg;nYFM7?t1Kb5bgR9Lv5QFnz5 zBaEJ^ar{^MZ^|3zzk2RCva4UnU^dBrwLf>+!qrzu%G&;vwTsmlxv=RDGfjS8W}0jA z{kap$CaXmCx2RN7-16wMTOh#3dVf6wpZ^xd$!1A@?KuB6U(3(T;Oc88NP){14U%@z z9gCKdt{%)Xt60=Pm6t=;5`XDn@s~1uG%Z|8Wf>P%Q|#i1DwT>($SgBo<*;Iq64N=X zXl%|*Jw7vao}^weSY6MS>Kawc`hO}bnLm9hts+<|Q6XYf?xsY`ki!-W{FeR*i5tgSIKbdFJ4~jpIPs(iV(aEJT~2CVz7C! z#PLfazv`6rO^wUUZY+5;H>zMW4;3D1lu)Qu(e!kvlBv}qMOw?4iqcQy*T=75erX;; zcQpHf;wi&3{k2Ds8T$Qe{E~JovmALDKC3Y@2^aAE@_pt1!{6|tl}(bL05SHOT6xt3 zBFX+6lfT+5u7B)U{*+A*RauV2;Z@?|RIRA1tM#jX%$L9NtJVI>g%NnJgbyD+l};l5 z@|%+GYB1!!-orCC-EZ9%sjJp)xxH_z9@uS zd29Z%$>aR~%VB^1vH3K}@XDex`5;PvyWCJzJ!NJzGC5jbU)R*PBnbv362HFolX%mY zpDCIaV((-D&r;UHSMpDOCiC*cab+Z{kIH(>@>|9_z<&$FgqnL27fv$+u6_OW{@cnM yd6V=|=JL9w{qwd@&x?y$0hzx6aGJB}(<&2G5i{b2GnPe~&C2J$od17f;C}<0phmX< diff --git a/love/src/jni/physfs-2.1.0/src/lzma/lzma.txt b/love/src/jni/physfs-2.1.0/src/lzma/lzma.txt deleted file mode 100644 index 81695539..00000000 --- a/love/src/jni/physfs-2.1.0/src/lzma/lzma.txt +++ /dev/null @@ -1,663 +0,0 @@ -LZMA SDK 4.57 -------------- - -LZMA SDK Copyright (C) 1999-2007 Igor Pavlov - -LZMA SDK provides the documentation, samples, header files, libraries, -and tools you need to develop applications that use LZMA compression. - -LZMA is default and general compression method of 7z format -in 7-Zip compression program (www.7-zip.org). LZMA provides high -compression ratio and very fast decompression. - -LZMA is an improved version of famous LZ77 compression algorithm. -It was improved in way of maximum increasing of compression ratio, -keeping high decompression speed and low memory requirements for -decompressing. - - - -LICENSE -------- - -LZMA SDK is available under any of the following licenses: - -1) GNU Lesser General Public License (GNU LGPL) -2) Common Public License (CPL) -3) Simplified license for unmodified code (read SPECIAL EXCEPTION) -4) Proprietary license - -It means that you can select one of these four options and follow rules of that license. - - -1,2) GNU LGPL and CPL licenses are pretty similar and both these -licenses are classified as - - "Free software licenses" at http://www.gnu.org/ - - "OSI-approved" at http://www.opensource.org/ - - -3) SPECIAL EXCEPTION - -Igor Pavlov, as the author of this code, expressly permits you -to statically or dynamically link your code (or bind by name) -to the files from LZMA SDK without subjecting your linked -code to the terms of the CPL or GNU LGPL. -Any modifications or additions to files from LZMA SDK, however, -are subject to the GNU LGPL or CPL terms. - -SPECIAL EXCEPTION allows you to use LZMA SDK in applications with closed code, -while you keep LZMA SDK code unmodified. - - -SPECIAL EXCEPTION #2: Igor Pavlov, as the author of this code, expressly permits -you to use this code under the same terms and conditions contained in the License -Agreement you have for any previous version of LZMA SDK developed by Igor Pavlov. - -SPECIAL EXCEPTION #2 allows owners of proprietary licenses to use latest version -of LZMA SDK as update for previous versions. - - -SPECIAL EXCEPTION #3: Igor Pavlov, as the author of this code, expressly permits -you to use code of the following files: -BranchTypes.h, LzmaTypes.h, LzmaTest.c, LzmaStateTest.c, LzmaAlone.cpp, -LzmaAlone.cs, LzmaAlone.java -as public domain code. - - -4) Proprietary license - -LZMA SDK also can be available under a proprietary license which -can include: - -1) Right to modify code without subjecting modified code to the -terms of the CPL or GNU LGPL -2) Technical support for code - -To request such proprietary license or any additional consultations, -send email message from that page: -http://www.7-zip.org/support.html - - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -You should have received a copy of the Common Public License -along with this library. - - -LZMA SDK Contents ------------------ - -LZMA SDK includes: - - - C++ source code of LZMA compressing and decompressing - - ANSI-C compatible source code for LZMA decompressing - - C# source code for LZMA compressing and decompressing - - Java source code for LZMA compressing and decompressing - - Compiled file->file LZMA compressing/decompressing program for Windows system - -ANSI-C LZMA decompression code was ported from original C++ sources to C. -Also it was simplified and optimized for code size. -But it is fully compatible with LZMA from 7-Zip. - - -UNIX/Linux version ------------------- -To compile C++ version of file->file LZMA, go to directory -C/7zip/Compress/LZMA_Alone -and type "make" or "make clean all" to recompile all. - -In some UNIX/Linux versions you must compile LZMA with static libraries. -To compile with static libraries, change string in makefile -LIB = -lm -to string -LIB = -lm -static - - -Files ---------------------- -C - C source code -CPP - CPP source code -CS - C# source code -Java - Java source code -lzma.txt - LZMA SDK description (this file) -7zFormat.txt - 7z Format description -7zC.txt - 7z ANSI-C Decoder description (this file) -methods.txt - Compression method IDs for .7z -LGPL.txt - GNU Lesser General Public License -CPL.html - Common Public License -lzma.exe - Compiled file->file LZMA encoder/decoder for Windows -history.txt - history of the LZMA SDK - - -Source code structure ---------------------- - -C - C files - Compress - files related to compression/decompression - Lz - files related to LZ (Lempel-Ziv) compression algorithm - Lzma - ANSI-C compatible LZMA decompressor - - LzmaDecode.h - interface for LZMA decoding on ANSI-C - LzmaDecode.c - LZMA decoding on ANSI-C (new fastest version) - LzmaDecodeSize.c - LZMA decoding on ANSI-C (old size-optimized version) - LzmaTest.c - test application that decodes LZMA encoded file - LzmaTypes.h - basic types for LZMA Decoder - LzmaStateDecode.h - interface for LZMA decoding (State version) - LzmaStateDecode.c - LZMA decoding on ANSI-C (State version) - LzmaStateTest.c - test application (State version) - - Branch - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code - - Archive - files related to archiving - 7z_C - 7z ANSI-C Decoder - - -CPP -- CPP files - - Common - common files for C++ projects - Windows - common files for Windows related code - 7zip - files related to 7-Zip Project - - Common - common files for 7-Zip - - Compress - files related to compression/decompression - - LZ - files related to LZ (Lempel-Ziv) compression algorithm - - Copy - Copy coder - RangeCoder - Range Coder (special code of compression/decompression) - LZMA - LZMA compression/decompression on C++ - LZMA_Alone - file->file LZMA compression/decompression - - Branch - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code - - Archive - files related to archiving - - Common - common files for archive handling - 7z - 7z C++ Encoder/Decoder - - Bundles - Modules that are bundles of other modules - - Alone7z - 7zr.exe: Standalone version of 7z.exe that supports only 7z/LZMA/BCJ/BCJ2 - Format7zR - 7zr.dll: Reduced version of 7za.dll: extracting/compressing to 7z/LZMA/BCJ/BCJ2 - Format7zExtractR - 7zxr.dll: Reduced version of 7zxa.dll: extracting from 7z/LZMA/BCJ/BCJ2. - - UI - User Interface files - - Client7z - Test application for 7za.dll, 7zr.dll, 7zxr.dll - Common - Common UI files - Console - Code for console archiver - - - -CS - C# files - 7zip - Common - some common files for 7-Zip - Compress - files related to compression/decompression - LZ - files related to LZ (Lempel-Ziv) compression algorithm - LZMA - LZMA compression/decompression - LzmaAlone - file->file LZMA compression/decompression - RangeCoder - Range Coder (special code of compression/decompression) - -Java - Java files - SevenZip - Compression - files related to compression/decompression - LZ - files related to LZ (Lempel-Ziv) compression algorithm - LZMA - LZMA compression/decompression - RangeCoder - Range Coder (special code of compression/decompression) - -C/C++ source code of LZMA SDK is part of 7-Zip project. - -You can find ANSI-C LZMA decompressing code at folder - C/7zip/Compress/Lzma -7-Zip doesn't use that ANSI-C LZMA code and that code was developed -specially for this SDK. And files from C/7zip/Compress/Lzma do not need -files from other directories of SDK for compiling. - -7-Zip source code can be downloaded from 7-Zip's SourceForge page: - - http://sourceforge.net/projects/sevenzip/ - - -LZMA features -------------- - - Variable dictionary size (up to 1 GB) - - Estimated compressing speed: about 1 MB/s on 1 GHz CPU - - Estimated decompressing speed: - - 8-12 MB/s on 1 GHz Intel Pentium 3 or AMD Athlon - - 500-1000 KB/s on 100 MHz ARM, MIPS, PowerPC or other simple RISC - - Small memory requirements for decompressing (8-32 KB + DictionarySize) - - Small code size for decompressing: 2-8 KB (depending from - speed optimizations) - -LZMA decoder uses only integer operations and can be -implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions). - -Some critical operations that affect to speed of LZMA decompression: - 1) 32*16 bit integer multiply - 2) Misspredicted branches (penalty mostly depends from pipeline length) - 3) 32-bit shift and arithmetic operations - -Speed of LZMA decompressing mostly depends from CPU speed. -Memory speed has no big meaning. But if your CPU has small data cache, -overall weight of memory speed will slightly increase. - - -How To Use ----------- - -Using LZMA encoder/decoder executable --------------------------------------- - -Usage: LZMA inputFile outputFile [...] - - e: encode file - - d: decode file - - b: Benchmark. There are two tests: compressing and decompressing - with LZMA method. Benchmark shows rating in MIPS (million - instructions per second). Rating value is calculated from - measured speed and it is normalized with AMD Athlon 64 X2 CPU - results. Also Benchmark checks possible hardware errors (RAM - errors in most cases). Benchmark uses these settings: - (-a1, -d21, -fb32, -mfbt4). You can change only -d. Also you - can change number of iterations. Example for 30 iterations: - LZMA b 30 - Default number of iterations is 10. - - - - - -a{N}: set compression mode 0 = fast, 1 = normal - default: 1 (normal) - - d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB) - The maximum value for dictionary size is 1 GB = 2^30 bytes. - Dictionary size is calculated as DictionarySize = 2^N bytes. - For decompressing file compressed by LZMA method with dictionary - size D = 2^N you need about D bytes of memory (RAM). - - -fb{N}: set number of fast bytes - [5, 273], default: 128 - Usually big number gives a little bit better compression ratio - and slower compression process. - - -lc{N}: set number of literal context bits - [0, 8], default: 3 - Sometimes lc=4 gives gain for big files. - - -lp{N}: set number of literal pos bits - [0, 4], default: 0 - lp switch is intended for periodical data when period is - equal 2^N. For example, for 32-bit (4 bytes) - periodical data you can use lp=2. Often it's better to set lc0, - if you change lp switch. - - -pb{N}: set number of pos bits - [0, 4], default: 2 - pb switch is intended for periodical data - when period is equal 2^N. - - -mf{MF_ID}: set Match Finder. Default: bt4. - Algorithms from hc* group doesn't provide good compression - ratio, but they often works pretty fast in combination with - fast mode (-a0). - - Memory requirements depend from dictionary size - (parameter "d" in table below). - - MF_ID Memory Description - - bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing. - bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing. - bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing. - hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing. - - -eos: write End Of Stream marker. By default LZMA doesn't write - eos marker, since LZMA decoder knows uncompressed size - stored in .lzma file header. - - -si: Read data from stdin (it will write End Of Stream marker). - -so: Write data to stdout - - -Examples: - -1) LZMA e file.bin file.lzma -d16 -lc0 - -compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K) -and 0 literal context bits. -lc0 allows to reduce memory requirements -for decompression. - - -2) LZMA e file.bin file.lzma -lc0 -lp2 - -compresses file.bin to file.lzma with settings suitable -for 32-bit periodical data (for example, ARM or MIPS code). - -3) LZMA d file.lzma file.bin - -decompresses file.lzma to file.bin. - - -Compression ratio hints ------------------------ - -Recommendations ---------------- - -To increase compression ratio for LZMA compressing it's desirable -to have aligned data (if it's possible) and also it's desirable to locate -data in such order, where code is grouped in one place and data is -grouped in other place (it's better than such mixing: code, data, code, -data, ...). - - -Using Filters -------------- -You can increase compression ratio for some data types, using -special filters before compressing. For example, it's possible to -increase compression ratio on 5-10% for code for those CPU ISAs: -x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC. - -You can find C/C++ source code of such filters in folder "7zip/Compress/Branch" - -You can check compression ratio gain of these filters with such -7-Zip commands (example for ARM code): -No filter: - 7z a a1.7z a.bin -m0=lzma - -With filter for little-endian ARM code: - 7z a a2.7z a.bin -m0=bc_arm -m1=lzma - -With filter for big-endian ARM code (using additional Swap4 filter): - 7z a a3.7z a.bin -m0=swap4 -m1=bc_arm -m2=lzma - -It works in such manner: -Compressing = Filter_encoding + LZMA_encoding -Decompressing = LZMA_decoding + Filter_decoding - -Compressing and decompressing speed of such filters is very high, -so it will not increase decompressing time too much. -Moreover, it reduces decompression time for LZMA_decoding, -since compression ratio with filtering is higher. - -These filters convert CALL (calling procedure) instructions -from relative offsets to absolute addresses, so such data becomes more -compressible. Source code of these CALL filters is pretty simple -(about 20 lines of C++), so you can convert it from C++ version yourself. - -For some ISAs (for example, for MIPS) it's impossible to get gain from such filter. - - -LZMA compressed file format ---------------------------- -Offset Size Description - 0 1 Special LZMA properties for compressed data - 1 4 Dictionary size (little endian) - 5 8 Uncompressed size (little endian). -1 means unknown size - 13 Compressed data - - -ANSI-C LZMA Decoder -~~~~~~~~~~~~~~~~~~~ - -To compile ANSI-C LZMA Decoder you can use one of the following files sets: -1) LzmaDecode.h + LzmaDecode.c + LzmaTest.c (fastest version) -2) LzmaDecode.h + LzmaDecodeSize.c + LzmaTest.c (old size-optimized version) -3) LzmaStateDecode.h + LzmaStateDecode.c + LzmaStateTest.c (zlib-like interface) - - -Memory requirements for LZMA decoding -------------------------------------- - -LZMA decoder doesn't allocate memory itself, so you must -allocate memory and send it to LZMA. - -Stack usage of LZMA decoding function for local variables is not -larger than 200 bytes. - -How To decompress data ----------------------- - -LZMA Decoder (ANSI-C version) now supports 5 interfaces: -1) Single-call Decompressing -2) Single-call Decompressing with input stream callback -3) Multi-call Decompressing with output buffer -4) Multi-call Decompressing with input callback and output buffer -5) Multi-call State Decompressing (zlib-like interface) - -Variant-5 is similar to Variant-4, but Variant-5 doesn't use callback functions. - -Decompressing steps -------------------- - -1) read LZMA properties (5 bytes): - unsigned char properties[LZMA_PROPERTIES_SIZE]; - -2) read uncompressed size (8 bytes, little-endian) - -3) Decode properties: - - CLzmaDecoderState state; /* it's 24-140 bytes structure, if int is 32-bit */ - - if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) - return PrintError(rs, "Incorrect stream properties"); - -4) Allocate memory block for internal Structures: - - state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return PrintError(rs, kCantAllocateMessage); - - LZMA decoder uses array of CProb variables as internal structure. - By default, CProb is unsigned_short. But you can define _LZMA_PROB32 to make - it unsigned_int. It can increase speed on some 32-bit CPUs, but memory - usage will be doubled in that case. - - -5) Main Decompressing - -You must use one of the following interfaces: - -5.1 Single-call Decompressing ------------------------------ -When to use: RAM->RAM decompressing -Compile files: LzmaDecode.h, LzmaDecode.c -Compile defines: no defines -Memory Requirements: - - Input buffer: compressed size - - Output buffer: uncompressed size - - LZMA Internal Structures (~16 KB for default settings) - -Interface: - int res = LzmaDecode(&state, - inStream, compressedSize, &inProcessed, - outStream, outSize, &outProcessed); - - -5.2 Single-call Decompressing with input stream callback --------------------------------------------------------- -When to use: File->RAM or Flash->RAM decompressing. -Compile files: LzmaDecode.h, LzmaDecode.c -Compile defines: _LZMA_IN_CB -Memory Requirements: - - Buffer for input stream: any size (for example, 16 KB) - - Output buffer: uncompressed size - - LZMA Internal Structures (~16 KB for default settings) - -Interface: - typedef struct _CBuffer - { - ILzmaInCallback InCallback; - FILE *File; - unsigned char Buffer[kInBufferSize]; - } CBuffer; - - int LzmaReadCompressed(void *object, const unsigned char **buffer, SizeT *size) - { - CBuffer *bo = (CBuffer *)object; - *buffer = bo->Buffer; - *size = MyReadFile(bo->File, bo->Buffer, kInBufferSize); - return LZMA_RESULT_OK; - } - - CBuffer g_InBuffer; - - g_InBuffer.File = inFile; - g_InBuffer.InCallback.Read = LzmaReadCompressed; - int res = LzmaDecode(&state, - &g_InBuffer.InCallback, - outStream, outSize, &outProcessed); - - -5.3 Multi-call decompressing with output buffer ------------------------------------------------ -When to use: RAM->File decompressing -Compile files: LzmaDecode.h, LzmaDecode.c -Compile defines: _LZMA_OUT_READ -Memory Requirements: - - Input buffer: compressed size - - Buffer for output stream: any size (for example, 16 KB) - - LZMA Internal Structures (~16 KB for default settings) - - LZMA dictionary (dictionary size is encoded in stream properties) - -Interface: - - state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); - - LzmaDecoderInit(&state); - do - { - LzmaDecode(&state, - inBuffer, inAvail, &inProcessed, - g_OutBuffer, outAvail, &outProcessed); - inAvail -= inProcessed; - inBuffer += inProcessed; - } - while you need more bytes - - see LzmaTest.c for more details. - - -5.4 Multi-call decompressing with input callback and output buffer ------------------------------------------------------------------- -When to use: File->File decompressing -Compile files: LzmaDecode.h, LzmaDecode.c -Compile defines: _LZMA_IN_CB, _LZMA_OUT_READ -Memory Requirements: - - Buffer for input stream: any size (for example, 16 KB) - - Buffer for output stream: any size (for example, 16 KB) - - LZMA Internal Structures (~16 KB for default settings) - - LZMA dictionary (dictionary size is encoded in stream properties) - -Interface: - - state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); - - LzmaDecoderInit(&state); - do - { - LzmaDecode(&state, - &bo.InCallback, - g_OutBuffer, outAvail, &outProcessed); - } - while you need more bytes - - see LzmaTest.c for more details: - - -5.5 Multi-call State Decompressing (zlib-like interface) ------------------------------------------------------------------- -When to use: file->file decompressing -Compile files: LzmaStateDecode.h, LzmaStateDecode.c -Compile defines: -Memory Requirements: - - Buffer for input stream: any size (for example, 16 KB) - - Buffer for output stream: any size (for example, 16 KB) - - LZMA Internal Structures (~16 KB for default settings) - - LZMA dictionary (dictionary size is encoded in stream properties) - -Interface: - - state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); - - - LzmaDecoderInit(&state); - do - { - res = LzmaDecode(&state, - inBuffer, inAvail, &inProcessed, - g_OutBuffer, outAvail, &outProcessed, - finishDecoding); - inAvail -= inProcessed; - inBuffer += inProcessed; - } - while you need more bytes - - see LzmaStateTest.c for more details: - - -6) Free all allocated blocks - - -Note ----- -LzmaDecodeSize.c is size-optimized version of LzmaDecode.c. -But compiled code of LzmaDecodeSize.c can be larger than -compiled code of LzmaDecode.c. So it's better to use -LzmaDecode.c in most cases. - - -EXIT codes ------------ - -LZMA decoder can return one of the following codes: - -#define LZMA_RESULT_OK 0 -#define LZMA_RESULT_DATA_ERROR 1 - -If you use callback function for input data and you return some -error code, LZMA Decoder also returns that code. - - - -LZMA Defines ------------- - -_LZMA_IN_CB - Use callback for input data - -_LZMA_OUT_READ - Use read function for output data - -_LZMA_LOC_OPT - Enable local speed optimizations inside code. - _LZMA_LOC_OPT is only for LzmaDecodeSize.c (size-optimized version). - _LZMA_LOC_OPT doesn't affect LzmaDecode.c (speed-optimized version) - and LzmaStateDecode.c - -_LZMA_PROB32 - It can increase speed on some 32-bit CPUs, - but memory usage will be doubled in that case - -_LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler - and long is 32-bit. - -_LZMA_SYSTEM_SIZE_T - Define it if you want to use system's size_t. - You can use it to enable 64-bit sizes supporting - - - -C++ LZMA Encoder/Decoder -~~~~~~~~~~~~~~~~~~~~~~~~ -C++ LZMA code use COM-like interfaces. So if you want to use it, -you can study basics of COM/OLE. - -By default, LZMA Encoder contains all Match Finders. -But for compressing it's enough to have just one of them. -So for reducing size of compressing code you can define: - #define COMPRESS_MF_BT - #define COMPRESS_MF_BT4 -and it will use only bt4 match finder. - - ---- - -http://www.7-zip.org -http://www.7-zip.org/support.html diff --git a/love/src/jni/physfs-2.1.0/src/physfs_casefolding.h b/love/src/jni/physfs-2.1.0/src/physfs_casefolding.h deleted file mode 100644 index 0e50f1e7..00000000 --- a/love/src/jni/physfs-2.1.0/src/physfs_casefolding.h +++ /dev/null @@ -1,2013 +0,0 @@ -/* - * This file is part of PhysicsFS (http://icculus.org/physfs/) - * - * This data generated by physfs/extras/makecasefoldhashtable.pl ... - * Do not manually edit this file! - * - * Please see the file LICENSE.txt in the source's root directory. - */ - -#ifndef __PHYSICSFS_INTERNAL__ -#error Do not include this header from your applications. -#endif - -static const CaseFoldMapping case_fold_000[] = { - { 0x0202, 0x0203, 0x0000, 0x0000 }, - { 0x0404, 0x0454, 0x0000, 0x0000 }, - { 0x1E1E, 0x1E1F, 0x0000, 0x0000 }, - { 0x2C2C, 0x2C5C, 0x0000, 0x0000 }, - { 0x10404, 0x1042C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_001[] = { - { 0x0100, 0x0101, 0x0000, 0x0000 }, - { 0x0405, 0x0455, 0x0000, 0x0000 }, - { 0x0504, 0x0505, 0x0000, 0x0000 }, - { 0x2C2D, 0x2C5D, 0x0000, 0x0000 }, - { 0x10405, 0x1042D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_002[] = { - { 0x0200, 0x0201, 0x0000, 0x0000 }, - { 0x0406, 0x0456, 0x0000, 0x0000 }, - { 0x1E1C, 0x1E1D, 0x0000, 0x0000 }, - { 0x1F1D, 0x1F15, 0x0000, 0x0000 }, - { 0x2C2E, 0x2C5E, 0x0000, 0x0000 }, - { 0x10406, 0x1042E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_003[] = { - { 0x0102, 0x0103, 0x0000, 0x0000 }, - { 0x0407, 0x0457, 0x0000, 0x0000 }, - { 0x0506, 0x0507, 0x0000, 0x0000 }, - { 0x1F1C, 0x1F14, 0x0000, 0x0000 }, - { 0x10407, 0x1042F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_004[] = { - { 0x0206, 0x0207, 0x0000, 0x0000 }, - { 0x0400, 0x0450, 0x0000, 0x0000 }, - { 0x1E1A, 0x1E1B, 0x0000, 0x0000 }, - { 0x1F1B, 0x1F13, 0x0000, 0x0000 }, - { 0x2C28, 0x2C58, 0x0000, 0x0000 }, - { 0x10400, 0x10428, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_005[] = { - { 0x0104, 0x0105, 0x0000, 0x0000 }, - { 0x0401, 0x0451, 0x0000, 0x0000 }, - { 0x0500, 0x0501, 0x0000, 0x0000 }, - { 0x1F1A, 0x1F12, 0x0000, 0x0000 }, - { 0x2C29, 0x2C59, 0x0000, 0x0000 }, - { 0x10401, 0x10429, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_006[] = { - { 0x0204, 0x0205, 0x0000, 0x0000 }, - { 0x0402, 0x0452, 0x0000, 0x0000 }, - { 0x1E18, 0x1E19, 0x0000, 0x0000 }, - { 0x1F19, 0x1F11, 0x0000, 0x0000 }, - { 0x2C2A, 0x2C5A, 0x0000, 0x0000 }, - { 0x10402, 0x1042A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_007[] = { - { 0x0106, 0x0107, 0x0000, 0x0000 }, - { 0x0403, 0x0453, 0x0000, 0x0000 }, - { 0x0502, 0x0503, 0x0000, 0x0000 }, - { 0x1F18, 0x1F10, 0x0000, 0x0000 }, - { 0x2126, 0x03C9, 0x0000, 0x0000 }, - { 0x2C2B, 0x2C5B, 0x0000, 0x0000 }, - { 0x10403, 0x1042B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_008[] = { - { 0x020A, 0x020B, 0x0000, 0x0000 }, - { 0x040C, 0x045C, 0x0000, 0x0000 }, - { 0x1E16, 0x1E17, 0x0000, 0x0000 }, - { 0x2C24, 0x2C54, 0x0000, 0x0000 }, - { 0x1040C, 0x10434, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_009[] = { - { 0x0108, 0x0109, 0x0000, 0x0000 }, - { 0x040D, 0x045D, 0x0000, 0x0000 }, - { 0x050C, 0x050D, 0x0000, 0x0000 }, - { 0x2C25, 0x2C55, 0x0000, 0x0000 }, - { 0x1040D, 0x10435, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_010[] = { - { 0x0208, 0x0209, 0x0000, 0x0000 }, - { 0x040E, 0x045E, 0x0000, 0x0000 }, - { 0x1E14, 0x1E15, 0x0000, 0x0000 }, - { 0x212B, 0x00E5, 0x0000, 0x0000 }, - { 0x2C26, 0x2C56, 0x0000, 0x0000 }, - { 0x1040E, 0x10436, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_011[] = { - { 0x010A, 0x010B, 0x0000, 0x0000 }, - { 0x040F, 0x045F, 0x0000, 0x0000 }, - { 0x050E, 0x050F, 0x0000, 0x0000 }, - { 0x212A, 0x006B, 0x0000, 0x0000 }, - { 0x2C27, 0x2C57, 0x0000, 0x0000 }, - { 0x1040F, 0x10437, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_012[] = { - { 0x020E, 0x020F, 0x0000, 0x0000 }, - { 0x0408, 0x0458, 0x0000, 0x0000 }, - { 0x1E12, 0x1E13, 0x0000, 0x0000 }, - { 0x2C20, 0x2C50, 0x0000, 0x0000 }, - { 0x10408, 0x10430, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_013[] = { - { 0x010C, 0x010D, 0x0000, 0x0000 }, - { 0x0409, 0x0459, 0x0000, 0x0000 }, - { 0x0508, 0x0509, 0x0000, 0x0000 }, - { 0x2C21, 0x2C51, 0x0000, 0x0000 }, - { 0x10409, 0x10431, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_014[] = { - { 0x020C, 0x020D, 0x0000, 0x0000 }, - { 0x040A, 0x045A, 0x0000, 0x0000 }, - { 0x1E10, 0x1E11, 0x0000, 0x0000 }, - { 0x2C22, 0x2C52, 0x0000, 0x0000 }, - { 0x1040A, 0x10432, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_015[] = { - { 0x010E, 0x010F, 0x0000, 0x0000 }, - { 0x040B, 0x045B, 0x0000, 0x0000 }, - { 0x050A, 0x050B, 0x0000, 0x0000 }, - { 0x2C23, 0x2C53, 0x0000, 0x0000 }, - { 0x1040B, 0x10433, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_016[] = { - { 0x0212, 0x0213, 0x0000, 0x0000 }, - { 0x0414, 0x0434, 0x0000, 0x0000 }, - { 0x1E0E, 0x1E0F, 0x0000, 0x0000 }, - { 0x1F0F, 0x1F07, 0x0000, 0x0000 }, - { 0x10414, 0x1043C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_017[] = { - { 0x0110, 0x0111, 0x0000, 0x0000 }, - { 0x0415, 0x0435, 0x0000, 0x0000 }, - { 0x1F0E, 0x1F06, 0x0000, 0x0000 }, - { 0x10415, 0x1043D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_018[] = { - { 0x0210, 0x0211, 0x0000, 0x0000 }, - { 0x0416, 0x0436, 0x0000, 0x0000 }, - { 0x1E0C, 0x1E0D, 0x0000, 0x0000 }, - { 0x1F0D, 0x1F05, 0x0000, 0x0000 }, - { 0x10416, 0x1043E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_019[] = { - { 0x0112, 0x0113, 0x0000, 0x0000 }, - { 0x0417, 0x0437, 0x0000, 0x0000 }, - { 0x1F0C, 0x1F04, 0x0000, 0x0000 }, - { 0x10417, 0x1043F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_020[] = { - { 0x0216, 0x0217, 0x0000, 0x0000 }, - { 0x0410, 0x0430, 0x0000, 0x0000 }, - { 0x1E0A, 0x1E0B, 0x0000, 0x0000 }, - { 0x1F0B, 0x1F03, 0x0000, 0x0000 }, - { 0x10410, 0x10438, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_021[] = { - { 0x0114, 0x0115, 0x0000, 0x0000 }, - { 0x0411, 0x0431, 0x0000, 0x0000 }, - { 0x1F0A, 0x1F02, 0x0000, 0x0000 }, - { 0x10411, 0x10439, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_022[] = { - { 0x0214, 0x0215, 0x0000, 0x0000 }, - { 0x0412, 0x0432, 0x0000, 0x0000 }, - { 0x1E08, 0x1E09, 0x0000, 0x0000 }, - { 0x1F09, 0x1F01, 0x0000, 0x0000 }, - { 0x10412, 0x1043A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_023[] = { - { 0x0116, 0x0117, 0x0000, 0x0000 }, - { 0x0413, 0x0433, 0x0000, 0x0000 }, - { 0x1F08, 0x1F00, 0x0000, 0x0000 }, - { 0x10413, 0x1043B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_024[] = { - { 0x021A, 0x021B, 0x0000, 0x0000 }, - { 0x041C, 0x043C, 0x0000, 0x0000 }, - { 0x1E06, 0x1E07, 0x0000, 0x0000 }, - { 0x1041C, 0x10444, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_025[] = { - { 0x0118, 0x0119, 0x0000, 0x0000 }, - { 0x041D, 0x043D, 0x0000, 0x0000 }, - { 0x1041D, 0x10445, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_026[] = { - { 0x0218, 0x0219, 0x0000, 0x0000 }, - { 0x041E, 0x043E, 0x0000, 0x0000 }, - { 0x1E04, 0x1E05, 0x0000, 0x0000 }, - { 0x1041E, 0x10446, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_027[] = { - { 0x011A, 0x011B, 0x0000, 0x0000 }, - { 0x041F, 0x043F, 0x0000, 0x0000 }, - { 0x1041F, 0x10447, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_028[] = { - { 0x021E, 0x021F, 0x0000, 0x0000 }, - { 0x0418, 0x0438, 0x0000, 0x0000 }, - { 0x1E02, 0x1E03, 0x0000, 0x0000 }, - { 0x10418, 0x10440, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_029[] = { - { 0x011C, 0x011D, 0x0000, 0x0000 }, - { 0x0419, 0x0439, 0x0000, 0x0000 }, - { 0x10419, 0x10441, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_030[] = { - { 0x021C, 0x021D, 0x0000, 0x0000 }, - { 0x041A, 0x043A, 0x0000, 0x0000 }, - { 0x1E00, 0x1E01, 0x0000, 0x0000 }, - { 0x1041A, 0x10442, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_031[] = { - { 0x011E, 0x011F, 0x0000, 0x0000 }, - { 0x041B, 0x043B, 0x0000, 0x0000 }, - { 0x1041B, 0x10443, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_032[] = { - { 0x0222, 0x0223, 0x0000, 0x0000 }, - { 0x0424, 0x0444, 0x0000, 0x0000 }, - { 0x1E3E, 0x1E3F, 0x0000, 0x0000 }, - { 0x1F3F, 0x1F37, 0x0000, 0x0000 }, - { 0x2C0C, 0x2C3C, 0x0000, 0x0000 }, - { 0x10424, 0x1044C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_033[] = { - { 0x0120, 0x0121, 0x0000, 0x0000 }, - { 0x0425, 0x0445, 0x0000, 0x0000 }, - { 0x1F3E, 0x1F36, 0x0000, 0x0000 }, - { 0x2C0D, 0x2C3D, 0x0000, 0x0000 }, - { 0x10425, 0x1044D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_034[] = { - { 0x0220, 0x019E, 0x0000, 0x0000 }, - { 0x0426, 0x0446, 0x0000, 0x0000 }, - { 0x1E3C, 0x1E3D, 0x0000, 0x0000 }, - { 0x1F3D, 0x1F35, 0x0000, 0x0000 }, - { 0x2C0E, 0x2C3E, 0x0000, 0x0000 }, - { 0x10426, 0x1044E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_035[] = { - { 0x0122, 0x0123, 0x0000, 0x0000 }, - { 0x0427, 0x0447, 0x0000, 0x0000 }, - { 0x1F3C, 0x1F34, 0x0000, 0x0000 }, - { 0x2C0F, 0x2C3F, 0x0000, 0x0000 }, - { 0x10427, 0x1044F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_036[] = { - { 0x0226, 0x0227, 0x0000, 0x0000 }, - { 0x0420, 0x0440, 0x0000, 0x0000 }, - { 0x1E3A, 0x1E3B, 0x0000, 0x0000 }, - { 0x1F3B, 0x1F33, 0x0000, 0x0000 }, - { 0x2C08, 0x2C38, 0x0000, 0x0000 }, - { 0x10420, 0x10448, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_037[] = { - { 0x0124, 0x0125, 0x0000, 0x0000 }, - { 0x0421, 0x0441, 0x0000, 0x0000 }, - { 0x1F3A, 0x1F32, 0x0000, 0x0000 }, - { 0x2C09, 0x2C39, 0x0000, 0x0000 }, - { 0x10421, 0x10449, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_038[] = { - { 0x0224, 0x0225, 0x0000, 0x0000 }, - { 0x0422, 0x0442, 0x0000, 0x0000 }, - { 0x1E38, 0x1E39, 0x0000, 0x0000 }, - { 0x1F39, 0x1F31, 0x0000, 0x0000 }, - { 0x2C0A, 0x2C3A, 0x0000, 0x0000 }, - { 0x10422, 0x1044A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_039[] = { - { 0x0126, 0x0127, 0x0000, 0x0000 }, - { 0x0423, 0x0443, 0x0000, 0x0000 }, - { 0x1F38, 0x1F30, 0x0000, 0x0000 }, - { 0x2C0B, 0x2C3B, 0x0000, 0x0000 }, - { 0x10423, 0x1044B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_040[] = { - { 0x022A, 0x022B, 0x0000, 0x0000 }, - { 0x042C, 0x044C, 0x0000, 0x0000 }, - { 0x1E36, 0x1E37, 0x0000, 0x0000 }, - { 0x2C04, 0x2C34, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_041[] = { - { 0x0128, 0x0129, 0x0000, 0x0000 }, - { 0x042D, 0x044D, 0x0000, 0x0000 }, - { 0x2C05, 0x2C35, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_042[] = { - { 0x0228, 0x0229, 0x0000, 0x0000 }, - { 0x042E, 0x044E, 0x0000, 0x0000 }, - { 0x1E34, 0x1E35, 0x0000, 0x0000 }, - { 0x2C06, 0x2C36, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_043[] = { - { 0x012A, 0x012B, 0x0000, 0x0000 }, - { 0x042F, 0x044F, 0x0000, 0x0000 }, - { 0x2C07, 0x2C37, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_044[] = { - { 0x022E, 0x022F, 0x0000, 0x0000 }, - { 0x0428, 0x0448, 0x0000, 0x0000 }, - { 0x1E32, 0x1E33, 0x0000, 0x0000 }, - { 0x2C00, 0x2C30, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_045[] = { - { 0x012C, 0x012D, 0x0000, 0x0000 }, - { 0x0429, 0x0449, 0x0000, 0x0000 }, - { 0x2C01, 0x2C31, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_046[] = { - { 0x022C, 0x022D, 0x0000, 0x0000 }, - { 0x042A, 0x044A, 0x0000, 0x0000 }, - { 0x1E30, 0x1E31, 0x0000, 0x0000 }, - { 0x2C02, 0x2C32, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_047[] = { - { 0x012E, 0x012F, 0x0000, 0x0000 }, - { 0x042B, 0x044B, 0x0000, 0x0000 }, - { 0x2C03, 0x2C33, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_048[] = { - { 0x0232, 0x0233, 0x0000, 0x0000 }, - { 0x0535, 0x0565, 0x0000, 0x0000 }, - { 0x1E2E, 0x1E2F, 0x0000, 0x0000 }, - { 0x1F2F, 0x1F27, 0x0000, 0x0000 }, - { 0x2C1C, 0x2C4C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_049[] = { - { 0x0130, 0x0069, 0x0307, 0x0000 }, - { 0x0534, 0x0564, 0x0000, 0x0000 }, - { 0x1F2E, 0x1F26, 0x0000, 0x0000 }, - { 0x2C1D, 0x2C4D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_050[] = { - { 0x0230, 0x0231, 0x0000, 0x0000 }, - { 0x0537, 0x0567, 0x0000, 0x0000 }, - { 0x1E2C, 0x1E2D, 0x0000, 0x0000 }, - { 0x1F2D, 0x1F25, 0x0000, 0x0000 }, - { 0x2C1E, 0x2C4E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_051[] = { - { 0x0132, 0x0133, 0x0000, 0x0000 }, - { 0x0536, 0x0566, 0x0000, 0x0000 }, - { 0x1F2C, 0x1F24, 0x0000, 0x0000 }, - { 0x2C1F, 0x2C4F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_052[] = { - { 0x0531, 0x0561, 0x0000, 0x0000 }, - { 0x1E2A, 0x1E2B, 0x0000, 0x0000 }, - { 0x1F2B, 0x1F23, 0x0000, 0x0000 }, - { 0x2C18, 0x2C48, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_053[] = { - { 0x0134, 0x0135, 0x0000, 0x0000 }, - { 0x1F2A, 0x1F22, 0x0000, 0x0000 }, - { 0x2C19, 0x2C49, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_054[] = { - { 0x0533, 0x0563, 0x0000, 0x0000 }, - { 0x1E28, 0x1E29, 0x0000, 0x0000 }, - { 0x1F29, 0x1F21, 0x0000, 0x0000 }, - { 0x2C1A, 0x2C4A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_055[] = { - { 0x0136, 0x0137, 0x0000, 0x0000 }, - { 0x0532, 0x0562, 0x0000, 0x0000 }, - { 0x1F28, 0x1F20, 0x0000, 0x0000 }, - { 0x2C1B, 0x2C4B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_056[] = { - { 0x0139, 0x013A, 0x0000, 0x0000 }, - { 0x053D, 0x056D, 0x0000, 0x0000 }, - { 0x1E26, 0x1E27, 0x0000, 0x0000 }, - { 0x2C14, 0x2C44, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_057[] = { - { 0x023B, 0x023C, 0x0000, 0x0000 }, - { 0x053C, 0x056C, 0x0000, 0x0000 }, - { 0x2C15, 0x2C45, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_058[] = { - { 0x013B, 0x013C, 0x0000, 0x0000 }, - { 0x053F, 0x056F, 0x0000, 0x0000 }, - { 0x1E24, 0x1E25, 0x0000, 0x0000 }, - { 0x2C16, 0x2C46, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_059[] = { - { 0x053E, 0x056E, 0x0000, 0x0000 }, - { 0x2C17, 0x2C47, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_060[] = { - { 0x013D, 0x013E, 0x0000, 0x0000 }, - { 0x0539, 0x0569, 0x0000, 0x0000 }, - { 0x1E22, 0x1E23, 0x0000, 0x0000 }, - { 0x2C10, 0x2C40, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_061[] = { - { 0x0538, 0x0568, 0x0000, 0x0000 }, - { 0x2C11, 0x2C41, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_062[] = { - { 0x013F, 0x0140, 0x0000, 0x0000 }, - { 0x053B, 0x056B, 0x0000, 0x0000 }, - { 0x1E20, 0x1E21, 0x0000, 0x0000 }, - { 0x2C12, 0x2C42, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_063[] = { - { 0x023D, 0x019A, 0x0000, 0x0000 }, - { 0x053A, 0x056A, 0x0000, 0x0000 }, - { 0x2C13, 0x2C43, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_064[] = { - { 0x0141, 0x0142, 0x0000, 0x0000 }, - { 0x0545, 0x0575, 0x0000, 0x0000 }, - { 0x1E5E, 0x1E5F, 0x0000, 0x0000 }, - { 0x1F5F, 0x1F57, 0x0000, 0x0000 }, - { 0x2161, 0x2171, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_065[] = { - { 0x0041, 0x0061, 0x0000, 0x0000 }, - { 0x0544, 0x0574, 0x0000, 0x0000 }, - { 0x2160, 0x2170, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_066[] = { - { 0x0042, 0x0062, 0x0000, 0x0000 }, - { 0x0143, 0x0144, 0x0000, 0x0000 }, - { 0x0547, 0x0577, 0x0000, 0x0000 }, - { 0x1E5C, 0x1E5D, 0x0000, 0x0000 }, - { 0x1F5D, 0x1F55, 0x0000, 0x0000 }, - { 0x2163, 0x2173, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_067[] = { - { 0x0043, 0x0063, 0x0000, 0x0000 }, - { 0x0241, 0x0294, 0x0000, 0x0000 }, - { 0x0546, 0x0576, 0x0000, 0x0000 }, - { 0x2162, 0x2172, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_068[] = { - { 0x0044, 0x0064, 0x0000, 0x0000 }, - { 0x0145, 0x0146, 0x0000, 0x0000 }, - { 0x0541, 0x0571, 0x0000, 0x0000 }, - { 0x1E5A, 0x1E5B, 0x0000, 0x0000 }, - { 0x1F5B, 0x1F53, 0x0000, 0x0000 }, - { 0x2165, 0x2175, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_069[] = { - { 0x0045, 0x0065, 0x0000, 0x0000 }, - { 0x0540, 0x0570, 0x0000, 0x0000 }, - { 0x2164, 0x2174, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_070[] = { - { 0x0046, 0x0066, 0x0000, 0x0000 }, - { 0x0147, 0x0148, 0x0000, 0x0000 }, - { 0x0345, 0x03B9, 0x0000, 0x0000 }, - { 0x0543, 0x0573, 0x0000, 0x0000 }, - { 0x1E58, 0x1E59, 0x0000, 0x0000 }, - { 0x1F59, 0x1F51, 0x0000, 0x0000 }, - { 0x2167, 0x2177, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_071[] = { - { 0x0047, 0x0067, 0x0000, 0x0000 }, - { 0x0542, 0x0572, 0x0000, 0x0000 }, - { 0x2166, 0x2176, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_072[] = { - { 0x0048, 0x0068, 0x0000, 0x0000 }, - { 0x0149, 0x02BC, 0x006E, 0x0000 }, - { 0x054D, 0x057D, 0x0000, 0x0000 }, - { 0x1E56, 0x1E57, 0x0000, 0x0000 }, - { 0x2169, 0x2179, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_073[] = { - { 0x0049, 0x0069, 0x0000, 0x0000 }, - { 0x054C, 0x057C, 0x0000, 0x0000 }, - { 0x1F56, 0x03C5, 0x0313, 0x0342 }, - { 0x2168, 0x2178, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_074[] = { - { 0x004A, 0x006A, 0x0000, 0x0000 }, - { 0x054F, 0x057F, 0x0000, 0x0000 }, - { 0x1E54, 0x1E55, 0x0000, 0x0000 }, - { 0x216B, 0x217B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_075[] = { - { 0x004B, 0x006B, 0x0000, 0x0000 }, - { 0x014A, 0x014B, 0x0000, 0x0000 }, - { 0x054E, 0x057E, 0x0000, 0x0000 }, - { 0x1F54, 0x03C5, 0x0313, 0x0301 }, - { 0x216A, 0x217A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_076[] = { - { 0x004C, 0x006C, 0x0000, 0x0000 }, - { 0x0549, 0x0579, 0x0000, 0x0000 }, - { 0x1E52, 0x1E53, 0x0000, 0x0000 }, - { 0x216D, 0x217D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_077[] = { - { 0x004D, 0x006D, 0x0000, 0x0000 }, - { 0x014C, 0x014D, 0x0000, 0x0000 }, - { 0x0548, 0x0578, 0x0000, 0x0000 }, - { 0x1F52, 0x03C5, 0x0313, 0x0300 }, - { 0x216C, 0x217C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_078[] = { - { 0x004E, 0x006E, 0x0000, 0x0000 }, - { 0x054B, 0x057B, 0x0000, 0x0000 }, - { 0x1E50, 0x1E51, 0x0000, 0x0000 }, - { 0x216F, 0x217F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_079[] = { - { 0x004F, 0x006F, 0x0000, 0x0000 }, - { 0x014E, 0x014F, 0x0000, 0x0000 }, - { 0x054A, 0x057A, 0x0000, 0x0000 }, - { 0x1F50, 0x03C5, 0x0313, 0x0000 }, - { 0x216E, 0x217E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_080[] = { - { 0x0050, 0x0070, 0x0000, 0x0000 }, - { 0x0555, 0x0585, 0x0000, 0x0000 }, - { 0x1E4E, 0x1E4F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_081[] = { - { 0x0051, 0x0071, 0x0000, 0x0000 }, - { 0x0150, 0x0151, 0x0000, 0x0000 }, - { 0x0554, 0x0584, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_082[] = { - { 0x0052, 0x0072, 0x0000, 0x0000 }, - { 0x1E4C, 0x1E4D, 0x0000, 0x0000 }, - { 0x1F4D, 0x1F45, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_083[] = { - { 0x0053, 0x0073, 0x0000, 0x0000 }, - { 0x0152, 0x0153, 0x0000, 0x0000 }, - { 0x0556, 0x0586, 0x0000, 0x0000 }, - { 0x1F4C, 0x1F44, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_084[] = { - { 0x0054, 0x0074, 0x0000, 0x0000 }, - { 0x0551, 0x0581, 0x0000, 0x0000 }, - { 0x1E4A, 0x1E4B, 0x0000, 0x0000 }, - { 0x1F4B, 0x1F43, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_085[] = { - { 0x0055, 0x0075, 0x0000, 0x0000 }, - { 0x0154, 0x0155, 0x0000, 0x0000 }, - { 0x0550, 0x0580, 0x0000, 0x0000 }, - { 0x1F4A, 0x1F42, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_086[] = { - { 0x0056, 0x0076, 0x0000, 0x0000 }, - { 0x0553, 0x0583, 0x0000, 0x0000 }, - { 0x1E48, 0x1E49, 0x0000, 0x0000 }, - { 0x1F49, 0x1F41, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_087[] = { - { 0x0057, 0x0077, 0x0000, 0x0000 }, - { 0x0156, 0x0157, 0x0000, 0x0000 }, - { 0x0552, 0x0582, 0x0000, 0x0000 }, - { 0x1F48, 0x1F40, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_088[] = { - { 0x0058, 0x0078, 0x0000, 0x0000 }, - { 0x1E46, 0x1E47, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_089[] = { - { 0x0059, 0x0079, 0x0000, 0x0000 }, - { 0x0158, 0x0159, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_090[] = { - { 0x005A, 0x007A, 0x0000, 0x0000 }, - { 0x1E44, 0x1E45, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_091[] = { - { 0x015A, 0x015B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_092[] = { - { 0x1E42, 0x1E43, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_093[] = { - { 0x015C, 0x015D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_094[] = { - { 0x1E40, 0x1E41, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_095[] = { - { 0x015E, 0x015F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_096[] = { - { 0x0464, 0x0465, 0x0000, 0x0000 }, - { 0x1E7E, 0x1E7F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_097[] = { - { 0x0160, 0x0161, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_098[] = { - { 0x0466, 0x0467, 0x0000, 0x0000 }, - { 0x1E7C, 0x1E7D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_099[] = { - { 0x0162, 0x0163, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_100[] = { - { 0x0460, 0x0461, 0x0000, 0x0000 }, - { 0x1E7A, 0x1E7B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_101[] = { - { 0x0164, 0x0165, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_102[] = { - { 0x0462, 0x0463, 0x0000, 0x0000 }, - { 0x1E78, 0x1E79, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_103[] = { - { 0x0166, 0x0167, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_104[] = { - { 0x046C, 0x046D, 0x0000, 0x0000 }, - { 0x1E76, 0x1E77, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_105[] = { - { 0x0168, 0x0169, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_106[] = { - { 0x046E, 0x046F, 0x0000, 0x0000 }, - { 0x1E74, 0x1E75, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_107[] = { - { 0x016A, 0x016B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_108[] = { - { 0x0468, 0x0469, 0x0000, 0x0000 }, - { 0x1E72, 0x1E73, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_109[] = { - { 0x016C, 0x016D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_110[] = { - { 0x046A, 0x046B, 0x0000, 0x0000 }, - { 0x1E70, 0x1E71, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_111[] = { - { 0x016E, 0x016F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_112[] = { - { 0x0474, 0x0475, 0x0000, 0x0000 }, - { 0x1E6E, 0x1E6F, 0x0000, 0x0000 }, - { 0x1F6F, 0x1F67, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_113[] = { - { 0x0170, 0x0171, 0x0000, 0x0000 }, - { 0x1F6E, 0x1F66, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_114[] = { - { 0x0476, 0x0477, 0x0000, 0x0000 }, - { 0x1E6C, 0x1E6D, 0x0000, 0x0000 }, - { 0x1F6D, 0x1F65, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_115[] = { - { 0x0172, 0x0173, 0x0000, 0x0000 }, - { 0x1F6C, 0x1F64, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_116[] = { - { 0x0470, 0x0471, 0x0000, 0x0000 }, - { 0x1E6A, 0x1E6B, 0x0000, 0x0000 }, - { 0x1F6B, 0x1F63, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_117[] = { - { 0x0174, 0x0175, 0x0000, 0x0000 }, - { 0x1F6A, 0x1F62, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_118[] = { - { 0x0472, 0x0473, 0x0000, 0x0000 }, - { 0x1E68, 0x1E69, 0x0000, 0x0000 }, - { 0x1F69, 0x1F61, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_119[] = { - { 0x0176, 0x0177, 0x0000, 0x0000 }, - { 0x1F68, 0x1F60, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_120[] = { - { 0x0179, 0x017A, 0x0000, 0x0000 }, - { 0x047C, 0x047D, 0x0000, 0x0000 }, - { 0x1E66, 0x1E67, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_121[] = { - { 0x0178, 0x00FF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_122[] = { - { 0x017B, 0x017C, 0x0000, 0x0000 }, - { 0x047E, 0x047F, 0x0000, 0x0000 }, - { 0x1E64, 0x1E65, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_124[] = { - { 0x017D, 0x017E, 0x0000, 0x0000 }, - { 0x0478, 0x0479, 0x0000, 0x0000 }, - { 0x1E62, 0x1E63, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_126[] = { - { 0x017F, 0x0073, 0x0000, 0x0000 }, - { 0x047A, 0x047B, 0x0000, 0x0000 }, - { 0x1E60, 0x1E61, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_128[] = { - { 0x0181, 0x0253, 0x0000, 0x0000 }, - { 0x1F9F, 0x1F27, 0x03B9, 0x0000 }, - { 0x2CAC, 0x2CAD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_129[] = { - { 0x1F9E, 0x1F26, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_130[] = { - { 0x0587, 0x0565, 0x0582, 0x0000 }, - { 0x1F9D, 0x1F25, 0x03B9, 0x0000 }, - { 0x2CAE, 0x2CAF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_131[] = { - { 0x0182, 0x0183, 0x0000, 0x0000 }, - { 0x1F9C, 0x1F24, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_132[] = { - { 0x0480, 0x0481, 0x0000, 0x0000 }, - { 0x1E9A, 0x0061, 0x02BE, 0x0000 }, - { 0x1F9B, 0x1F23, 0x03B9, 0x0000 }, - { 0x2CA8, 0x2CA9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_133[] = { - { 0x0184, 0x0185, 0x0000, 0x0000 }, - { 0x0386, 0x03AC, 0x0000, 0x0000 }, - { 0x1E9B, 0x1E61, 0x0000, 0x0000 }, - { 0x1F9A, 0x1F22, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_134[] = { - { 0x0187, 0x0188, 0x0000, 0x0000 }, - { 0x1E98, 0x0077, 0x030A, 0x0000 }, - { 0x1F99, 0x1F21, 0x03B9, 0x0000 }, - { 0x2CAA, 0x2CAB, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_135[] = { - { 0x0186, 0x0254, 0x0000, 0x0000 }, - { 0x1E99, 0x0079, 0x030A, 0x0000 }, - { 0x1F98, 0x1F20, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_136[] = { - { 0x0189, 0x0256, 0x0000, 0x0000 }, - { 0x048C, 0x048D, 0x0000, 0x0000 }, - { 0x1E96, 0x0068, 0x0331, 0x0000 }, - { 0x1F97, 0x1F27, 0x03B9, 0x0000 }, - { 0x2CA4, 0x2CA5, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_137[] = { - { 0x038A, 0x03AF, 0x0000, 0x0000 }, - { 0x1E97, 0x0074, 0x0308, 0x0000 }, - { 0x1F96, 0x1F26, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_138[] = { - { 0x018B, 0x018C, 0x0000, 0x0000 }, - { 0x0389, 0x03AE, 0x0000, 0x0000 }, - { 0x048E, 0x048F, 0x0000, 0x0000 }, - { 0x1E94, 0x1E95, 0x0000, 0x0000 }, - { 0x1F95, 0x1F25, 0x03B9, 0x0000 }, - { 0x2CA6, 0x2CA7, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_139[] = { - { 0x018A, 0x0257, 0x0000, 0x0000 }, - { 0x0388, 0x03AD, 0x0000, 0x0000 }, - { 0x1F94, 0x1F24, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_140[] = { - { 0x038F, 0x03CE, 0x0000, 0x0000 }, - { 0x1E92, 0x1E93, 0x0000, 0x0000 }, - { 0x1F93, 0x1F23, 0x03B9, 0x0000 }, - { 0x2CA0, 0x2CA1, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_141[] = { - { 0x038E, 0x03CD, 0x0000, 0x0000 }, - { 0x1F92, 0x1F22, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_142[] = { - { 0x018F, 0x0259, 0x0000, 0x0000 }, - { 0x048A, 0x048B, 0x0000, 0x0000 }, - { 0x1E90, 0x1E91, 0x0000, 0x0000 }, - { 0x1F91, 0x1F21, 0x03B9, 0x0000 }, - { 0x2CA2, 0x2CA3, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_143[] = { - { 0x018E, 0x01DD, 0x0000, 0x0000 }, - { 0x038C, 0x03CC, 0x0000, 0x0000 }, - { 0x1F90, 0x1F20, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_144[] = { - { 0x0191, 0x0192, 0x0000, 0x0000 }, - { 0x0393, 0x03B3, 0x0000, 0x0000 }, - { 0x0494, 0x0495, 0x0000, 0x0000 }, - { 0x1E8E, 0x1E8F, 0x0000, 0x0000 }, - { 0x1F8F, 0x1F07, 0x03B9, 0x0000 }, - { 0x2CBC, 0x2CBD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_145[] = { - { 0x0190, 0x025B, 0x0000, 0x0000 }, - { 0x0392, 0x03B2, 0x0000, 0x0000 }, - { 0x1F8E, 0x1F06, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_146[] = { - { 0x0193, 0x0260, 0x0000, 0x0000 }, - { 0x0391, 0x03B1, 0x0000, 0x0000 }, - { 0x0496, 0x0497, 0x0000, 0x0000 }, - { 0x1E8C, 0x1E8D, 0x0000, 0x0000 }, - { 0x1F8D, 0x1F05, 0x03B9, 0x0000 }, - { 0x24B6, 0x24D0, 0x0000, 0x0000 }, - { 0x2CBE, 0x2CBF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_147[] = { - { 0x0390, 0x03B9, 0x0308, 0x0301 }, - { 0x1F8C, 0x1F04, 0x03B9, 0x0000 }, - { 0x24B7, 0x24D1, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_148[] = { - { 0x0397, 0x03B7, 0x0000, 0x0000 }, - { 0x0490, 0x0491, 0x0000, 0x0000 }, - { 0x1E8A, 0x1E8B, 0x0000, 0x0000 }, - { 0x1F8B, 0x1F03, 0x03B9, 0x0000 }, - { 0x2CB8, 0x2CB9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_149[] = { - { 0x0194, 0x0263, 0x0000, 0x0000 }, - { 0x0396, 0x03B6, 0x0000, 0x0000 }, - { 0x1F8A, 0x1F02, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_150[] = { - { 0x0197, 0x0268, 0x0000, 0x0000 }, - { 0x0395, 0x03B5, 0x0000, 0x0000 }, - { 0x0492, 0x0493, 0x0000, 0x0000 }, - { 0x1E88, 0x1E89, 0x0000, 0x0000 }, - { 0x1F89, 0x1F01, 0x03B9, 0x0000 }, - { 0x2CBA, 0x2CBB, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_151[] = { - { 0x0196, 0x0269, 0x0000, 0x0000 }, - { 0x0394, 0x03B4, 0x0000, 0x0000 }, - { 0x1F88, 0x1F00, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_152[] = { - { 0x039B, 0x03BB, 0x0000, 0x0000 }, - { 0x049C, 0x049D, 0x0000, 0x0000 }, - { 0x1E86, 0x1E87, 0x0000, 0x0000 }, - { 0x1F87, 0x1F07, 0x03B9, 0x0000 }, - { 0x24BC, 0x24D6, 0x0000, 0x0000 }, - { 0x2CB4, 0x2CB5, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_153[] = { - { 0x0198, 0x0199, 0x0000, 0x0000 }, - { 0x039A, 0x03BA, 0x0000, 0x0000 }, - { 0x1F86, 0x1F06, 0x03B9, 0x0000 }, - { 0x24BD, 0x24D7, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_154[] = { - { 0x0399, 0x03B9, 0x0000, 0x0000 }, - { 0x049E, 0x049F, 0x0000, 0x0000 }, - { 0x1E84, 0x1E85, 0x0000, 0x0000 }, - { 0x1F85, 0x1F05, 0x03B9, 0x0000 }, - { 0x24BE, 0x24D8, 0x0000, 0x0000 }, - { 0x2CB6, 0x2CB7, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_155[] = { - { 0x0398, 0x03B8, 0x0000, 0x0000 }, - { 0x1F84, 0x1F04, 0x03B9, 0x0000 }, - { 0x24BF, 0x24D9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_156[] = { - { 0x019D, 0x0272, 0x0000, 0x0000 }, - { 0x039F, 0x03BF, 0x0000, 0x0000 }, - { 0x0498, 0x0499, 0x0000, 0x0000 }, - { 0x1E82, 0x1E83, 0x0000, 0x0000 }, - { 0x1F83, 0x1F03, 0x03B9, 0x0000 }, - { 0x24B8, 0x24D2, 0x0000, 0x0000 }, - { 0x2CB0, 0x2CB1, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_157[] = { - { 0x019C, 0x026F, 0x0000, 0x0000 }, - { 0x039E, 0x03BE, 0x0000, 0x0000 }, - { 0x1F82, 0x1F02, 0x03B9, 0x0000 }, - { 0x24B9, 0x24D3, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_158[] = { - { 0x019F, 0x0275, 0x0000, 0x0000 }, - { 0x039D, 0x03BD, 0x0000, 0x0000 }, - { 0x049A, 0x049B, 0x0000, 0x0000 }, - { 0x1E80, 0x1E81, 0x0000, 0x0000 }, - { 0x1F81, 0x1F01, 0x03B9, 0x0000 }, - { 0x24BA, 0x24D4, 0x0000, 0x0000 }, - { 0x2CB2, 0x2CB3, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_159[] = { - { 0x039C, 0x03BC, 0x0000, 0x0000 }, - { 0x1F80, 0x1F00, 0x03B9, 0x0000 }, - { 0x24BB, 0x24D5, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_160[] = { - { 0x03A3, 0x03C3, 0x0000, 0x0000 }, - { 0x04A4, 0x04A5, 0x0000, 0x0000 }, - { 0x10B0, 0x2D10, 0x0000, 0x0000 }, - { 0x1EBE, 0x1EBF, 0x0000, 0x0000 }, - { 0x2C8C, 0x2C8D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_161[] = { - { 0x01A0, 0x01A1, 0x0000, 0x0000 }, - { 0x10B1, 0x2D11, 0x0000, 0x0000 }, - { 0x1FBE, 0x03B9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_162[] = { - { 0x03A1, 0x03C1, 0x0000, 0x0000 }, - { 0x04A6, 0x04A7, 0x0000, 0x0000 }, - { 0x10B2, 0x2D12, 0x0000, 0x0000 }, - { 0x1EBC, 0x1EBD, 0x0000, 0x0000 }, - { 0x2C8E, 0x2C8F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_163[] = { - { 0x01A2, 0x01A3, 0x0000, 0x0000 }, - { 0x03A0, 0x03C0, 0x0000, 0x0000 }, - { 0x10B3, 0x2D13, 0x0000, 0x0000 }, - { 0x1FBC, 0x03B1, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_164[] = { - { 0x03A7, 0x03C7, 0x0000, 0x0000 }, - { 0x04A0, 0x04A1, 0x0000, 0x0000 }, - { 0x10B4, 0x2D14, 0x0000, 0x0000 }, - { 0x1EBA, 0x1EBB, 0x0000, 0x0000 }, - { 0x1FBB, 0x1F71, 0x0000, 0x0000 }, - { 0x2C88, 0x2C89, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_165[] = { - { 0x01A4, 0x01A5, 0x0000, 0x0000 }, - { 0x03A6, 0x03C6, 0x0000, 0x0000 }, - { 0x10B5, 0x2D15, 0x0000, 0x0000 }, - { 0x1FBA, 0x1F70, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_166[] = { - { 0x01A7, 0x01A8, 0x0000, 0x0000 }, - { 0x03A5, 0x03C5, 0x0000, 0x0000 }, - { 0x04A2, 0x04A3, 0x0000, 0x0000 }, - { 0x10B6, 0x2D16, 0x0000, 0x0000 }, - { 0x1EB8, 0x1EB9, 0x0000, 0x0000 }, - { 0x1FB9, 0x1FB1, 0x0000, 0x0000 }, - { 0x2C8A, 0x2C8B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_167[] = { - { 0x01A6, 0x0280, 0x0000, 0x0000 }, - { 0x03A4, 0x03C4, 0x0000, 0x0000 }, - { 0x10B7, 0x2D17, 0x0000, 0x0000 }, - { 0x1FB8, 0x1FB0, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_168[] = { - { 0x01A9, 0x0283, 0x0000, 0x0000 }, - { 0x03AB, 0x03CB, 0x0000, 0x0000 }, - { 0x04AC, 0x04AD, 0x0000, 0x0000 }, - { 0x10B8, 0x2D18, 0x0000, 0x0000 }, - { 0x1EB6, 0x1EB7, 0x0000, 0x0000 }, - { 0x1FB7, 0x03B1, 0x0342, 0x03B9 }, - { 0x2C84, 0x2C85, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_169[] = { - { 0x03AA, 0x03CA, 0x0000, 0x0000 }, - { 0x10B9, 0x2D19, 0x0000, 0x0000 }, - { 0x1FB6, 0x03B1, 0x0342, 0x0000 } -}; - -static const CaseFoldMapping case_fold_170[] = { - { 0x03A9, 0x03C9, 0x0000, 0x0000 }, - { 0x04AE, 0x04AF, 0x0000, 0x0000 }, - { 0x10BA, 0x2D1A, 0x0000, 0x0000 }, - { 0x1EB4, 0x1EB5, 0x0000, 0x0000 }, - { 0x2C86, 0x2C87, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_171[] = { - { 0x03A8, 0x03C8, 0x0000, 0x0000 }, - { 0x10BB, 0x2D1B, 0x0000, 0x0000 }, - { 0x1FB4, 0x03AC, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_172[] = { - { 0x04A8, 0x04A9, 0x0000, 0x0000 }, - { 0x10BC, 0x2D1C, 0x0000, 0x0000 }, - { 0x1EB2, 0x1EB3, 0x0000, 0x0000 }, - { 0x1FB3, 0x03B1, 0x03B9, 0x0000 }, - { 0x2C80, 0x2C81, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_173[] = { - { 0x01AC, 0x01AD, 0x0000, 0x0000 }, - { 0x10BD, 0x2D1D, 0x0000, 0x0000 }, - { 0x1FB2, 0x1F70, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_174[] = { - { 0x01AF, 0x01B0, 0x0000, 0x0000 }, - { 0x04AA, 0x04AB, 0x0000, 0x0000 }, - { 0x10BE, 0x2D1E, 0x0000, 0x0000 }, - { 0x1EB0, 0x1EB1, 0x0000, 0x0000 }, - { 0x2C82, 0x2C83, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_175[] = { - { 0x01AE, 0x0288, 0x0000, 0x0000 }, - { 0x10BF, 0x2D1F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_176[] = { - { 0x01B1, 0x028A, 0x0000, 0x0000 }, - { 0x04B4, 0x04B5, 0x0000, 0x0000 }, - { 0x10A0, 0x2D00, 0x0000, 0x0000 }, - { 0x1EAE, 0x1EAF, 0x0000, 0x0000 }, - { 0x1FAF, 0x1F67, 0x03B9, 0x0000 }, - { 0x2C9C, 0x2C9D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_177[] = { - { 0x10A1, 0x2D01, 0x0000, 0x0000 }, - { 0x1FAE, 0x1F66, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_178[] = { - { 0x01B3, 0x01B4, 0x0000, 0x0000 }, - { 0x04B6, 0x04B7, 0x0000, 0x0000 }, - { 0x10A2, 0x2D02, 0x0000, 0x0000 }, - { 0x1EAC, 0x1EAD, 0x0000, 0x0000 }, - { 0x1FAD, 0x1F65, 0x03B9, 0x0000 }, - { 0x2C9E, 0x2C9F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_179[] = { - { 0x01B2, 0x028B, 0x0000, 0x0000 }, - { 0x03B0, 0x03C5, 0x0308, 0x0301 }, - { 0x10A3, 0x2D03, 0x0000, 0x0000 }, - { 0x1FAC, 0x1F64, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_180[] = { - { 0x01B5, 0x01B6, 0x0000, 0x0000 }, - { 0x04B0, 0x04B1, 0x0000, 0x0000 }, - { 0x10A4, 0x2D04, 0x0000, 0x0000 }, - { 0x1EAA, 0x1EAB, 0x0000, 0x0000 }, - { 0x1FAB, 0x1F63, 0x03B9, 0x0000 }, - { 0x2C98, 0x2C99, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_181[] = { - { 0x00B5, 0x03BC, 0x0000, 0x0000 }, - { 0x10A5, 0x2D05, 0x0000, 0x0000 }, - { 0x1FAA, 0x1F62, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_182[] = { - { 0x01B7, 0x0292, 0x0000, 0x0000 }, - { 0x04B2, 0x04B3, 0x0000, 0x0000 }, - { 0x10A6, 0x2D06, 0x0000, 0x0000 }, - { 0x1EA8, 0x1EA9, 0x0000, 0x0000 }, - { 0x1FA9, 0x1F61, 0x03B9, 0x0000 }, - { 0x2C9A, 0x2C9B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_183[] = { - { 0x10A7, 0x2D07, 0x0000, 0x0000 }, - { 0x1FA8, 0x1F60, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_184[] = { - { 0x04BC, 0x04BD, 0x0000, 0x0000 }, - { 0x10A8, 0x2D08, 0x0000, 0x0000 }, - { 0x1EA6, 0x1EA7, 0x0000, 0x0000 }, - { 0x1FA7, 0x1F67, 0x03B9, 0x0000 }, - { 0x2C94, 0x2C95, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_185[] = { - { 0x01B8, 0x01B9, 0x0000, 0x0000 }, - { 0x10A9, 0x2D09, 0x0000, 0x0000 }, - { 0x1FA6, 0x1F66, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_186[] = { - { 0x04BE, 0x04BF, 0x0000, 0x0000 }, - { 0x10AA, 0x2D0A, 0x0000, 0x0000 }, - { 0x1EA4, 0x1EA5, 0x0000, 0x0000 }, - { 0x1FA5, 0x1F65, 0x03B9, 0x0000 }, - { 0x2C96, 0x2C97, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_187[] = { - { 0x10AB, 0x2D0B, 0x0000, 0x0000 }, - { 0x1FA4, 0x1F64, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_188[] = { - { 0x04B8, 0x04B9, 0x0000, 0x0000 }, - { 0x10AC, 0x2D0C, 0x0000, 0x0000 }, - { 0x1EA2, 0x1EA3, 0x0000, 0x0000 }, - { 0x1FA3, 0x1F63, 0x03B9, 0x0000 }, - { 0x2C90, 0x2C91, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_189[] = { - { 0x01BC, 0x01BD, 0x0000, 0x0000 }, - { 0x10AD, 0x2D0D, 0x0000, 0x0000 }, - { 0x1FA2, 0x1F62, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_190[] = { - { 0x04BA, 0x04BB, 0x0000, 0x0000 }, - { 0x10AE, 0x2D0E, 0x0000, 0x0000 }, - { 0x1EA0, 0x1EA1, 0x0000, 0x0000 }, - { 0x1FA1, 0x1F61, 0x03B9, 0x0000 }, - { 0x2C92, 0x2C93, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_191[] = { - { 0x10AF, 0x2D0F, 0x0000, 0x0000 }, - { 0x1FA0, 0x1F60, 0x03B9, 0x0000 } -}; - -static const CaseFoldMapping case_fold_192[] = { - { 0x00C0, 0x00E0, 0x0000, 0x0000 }, - { 0x1EDE, 0x1EDF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_193[] = { - { 0x00C1, 0x00E1, 0x0000, 0x0000 }, - { 0x03C2, 0x03C3, 0x0000, 0x0000 }, - { 0x04C5, 0x04C6, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_194[] = { - { 0x00C2, 0x00E2, 0x0000, 0x0000 }, - { 0x1EDC, 0x1EDD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_195[] = { - { 0x00C3, 0x00E3, 0x0000, 0x0000 }, - { 0x04C7, 0x04C8, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_196[] = { - { 0x00C4, 0x00E4, 0x0000, 0x0000 }, - { 0x01C5, 0x01C6, 0x0000, 0x0000 }, - { 0x1EDA, 0x1EDB, 0x0000, 0x0000 }, - { 0x1FDB, 0x1F77, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_197[] = { - { 0x00C5, 0x00E5, 0x0000, 0x0000 }, - { 0x01C4, 0x01C6, 0x0000, 0x0000 }, - { 0x04C1, 0x04C2, 0x0000, 0x0000 }, - { 0x1FDA, 0x1F76, 0x0000, 0x0000 }, - { 0xFF3A, 0xFF5A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_198[] = { - { 0x00C6, 0x00E6, 0x0000, 0x0000 }, - { 0x01C7, 0x01C9, 0x0000, 0x0000 }, - { 0x1ED8, 0x1ED9, 0x0000, 0x0000 }, - { 0x1FD9, 0x1FD1, 0x0000, 0x0000 }, - { 0xFF39, 0xFF59, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_199[] = { - { 0x00C7, 0x00E7, 0x0000, 0x0000 }, - { 0x04C3, 0x04C4, 0x0000, 0x0000 }, - { 0x1FD8, 0x1FD0, 0x0000, 0x0000 }, - { 0xFF38, 0xFF58, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_200[] = { - { 0x00C8, 0x00E8, 0x0000, 0x0000 }, - { 0x1ED6, 0x1ED7, 0x0000, 0x0000 }, - { 0x1FD7, 0x03B9, 0x0308, 0x0342 }, - { 0xFF37, 0xFF57, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_201[] = { - { 0x00C9, 0x00E9, 0x0000, 0x0000 }, - { 0x01C8, 0x01C9, 0x0000, 0x0000 }, - { 0x04CD, 0x04CE, 0x0000, 0x0000 }, - { 0x1FD6, 0x03B9, 0x0342, 0x0000 }, - { 0xFF36, 0xFF56, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_202[] = { - { 0x00CA, 0x00EA, 0x0000, 0x0000 }, - { 0x01CB, 0x01CC, 0x0000, 0x0000 }, - { 0x1ED4, 0x1ED5, 0x0000, 0x0000 }, - { 0xFF35, 0xFF55, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_203[] = { - { 0x00CB, 0x00EB, 0x0000, 0x0000 }, - { 0x01CA, 0x01CC, 0x0000, 0x0000 }, - { 0xFF34, 0xFF54, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_204[] = { - { 0x00CC, 0x00EC, 0x0000, 0x0000 }, - { 0x01CD, 0x01CE, 0x0000, 0x0000 }, - { 0x1ED2, 0x1ED3, 0x0000, 0x0000 }, - { 0x1FD3, 0x03B9, 0x0308, 0x0301 }, - { 0x2CE0, 0x2CE1, 0x0000, 0x0000 }, - { 0xFF33, 0xFF53, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_205[] = { - { 0x00CD, 0x00ED, 0x0000, 0x0000 }, - { 0x04C9, 0x04CA, 0x0000, 0x0000 }, - { 0x1FD2, 0x03B9, 0x0308, 0x0300 }, - { 0xFF32, 0xFF52, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_206[] = { - { 0x00CE, 0x00EE, 0x0000, 0x0000 }, - { 0x01CF, 0x01D0, 0x0000, 0x0000 }, - { 0x1ED0, 0x1ED1, 0x0000, 0x0000 }, - { 0x2CE2, 0x2CE3, 0x0000, 0x0000 }, - { 0xFF31, 0xFF51, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_207[] = { - { 0x00CF, 0x00EF, 0x0000, 0x0000 }, - { 0x04CB, 0x04CC, 0x0000, 0x0000 }, - { 0xFF30, 0xFF50, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_208[] = { - { 0x00D0, 0x00F0, 0x0000, 0x0000 }, - { 0x01D1, 0x01D2, 0x0000, 0x0000 }, - { 0x04D4, 0x04D5, 0x0000, 0x0000 }, - { 0x10C0, 0x2D20, 0x0000, 0x0000 }, - { 0x1ECE, 0x1ECF, 0x0000, 0x0000 }, - { 0xFF2F, 0xFF4F, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_209[] = { - { 0x00D1, 0x00F1, 0x0000, 0x0000 }, - { 0x10C1, 0x2D21, 0x0000, 0x0000 }, - { 0xFF2E, 0xFF4E, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_210[] = { - { 0x00D2, 0x00F2, 0x0000, 0x0000 }, - { 0x01D3, 0x01D4, 0x0000, 0x0000 }, - { 0x03D1, 0x03B8, 0x0000, 0x0000 }, - { 0x04D6, 0x04D7, 0x0000, 0x0000 }, - { 0x10C2, 0x2D22, 0x0000, 0x0000 }, - { 0x1ECC, 0x1ECD, 0x0000, 0x0000 }, - { 0xFF2D, 0xFF4D, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_211[] = { - { 0x00D3, 0x00F3, 0x0000, 0x0000 }, - { 0x03D0, 0x03B2, 0x0000, 0x0000 }, - { 0x10C3, 0x2D23, 0x0000, 0x0000 }, - { 0x1FCC, 0x03B7, 0x03B9, 0x0000 }, - { 0xFF2C, 0xFF4C, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_212[] = { - { 0x00D4, 0x00F4, 0x0000, 0x0000 }, - { 0x01D5, 0x01D6, 0x0000, 0x0000 }, - { 0x04D0, 0x04D1, 0x0000, 0x0000 }, - { 0x10C4, 0x2D24, 0x0000, 0x0000 }, - { 0x1ECA, 0x1ECB, 0x0000, 0x0000 }, - { 0x1FCB, 0x1F75, 0x0000, 0x0000 }, - { 0xFF2B, 0xFF4B, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_213[] = { - { 0x00D5, 0x00F5, 0x0000, 0x0000 }, - { 0x03D6, 0x03C0, 0x0000, 0x0000 }, - { 0x10C5, 0x2D25, 0x0000, 0x0000 }, - { 0x1FCA, 0x1F74, 0x0000, 0x0000 }, - { 0xFF2A, 0xFF4A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_214[] = { - { 0x00D6, 0x00F6, 0x0000, 0x0000 }, - { 0x01D7, 0x01D8, 0x0000, 0x0000 }, - { 0x03D5, 0x03C6, 0x0000, 0x0000 }, - { 0x04D2, 0x04D3, 0x0000, 0x0000 }, - { 0x1EC8, 0x1EC9, 0x0000, 0x0000 }, - { 0x1FC9, 0x1F73, 0x0000, 0x0000 }, - { 0xFF29, 0xFF49, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_215[] = { - { 0x1FC8, 0x1F72, 0x0000, 0x0000 }, - { 0xFF28, 0xFF48, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_216[] = { - { 0x00D8, 0x00F8, 0x0000, 0x0000 }, - { 0x01D9, 0x01DA, 0x0000, 0x0000 }, - { 0x04DC, 0x04DD, 0x0000, 0x0000 }, - { 0x1EC6, 0x1EC7, 0x0000, 0x0000 }, - { 0x1FC7, 0x03B7, 0x0342, 0x03B9 }, - { 0xFF27, 0xFF47, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_217[] = { - { 0x00D9, 0x00F9, 0x0000, 0x0000 }, - { 0x03DA, 0x03DB, 0x0000, 0x0000 }, - { 0x1FC6, 0x03B7, 0x0342, 0x0000 }, - { 0xFF26, 0xFF46, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_218[] = { - { 0x00DA, 0x00FA, 0x0000, 0x0000 }, - { 0x01DB, 0x01DC, 0x0000, 0x0000 }, - { 0x04DE, 0x04DF, 0x0000, 0x0000 }, - { 0x1EC4, 0x1EC5, 0x0000, 0x0000 }, - { 0xFF25, 0xFF45, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_219[] = { - { 0x00DB, 0x00FB, 0x0000, 0x0000 }, - { 0x03D8, 0x03D9, 0x0000, 0x0000 }, - { 0x1FC4, 0x03AE, 0x03B9, 0x0000 }, - { 0xFF24, 0xFF44, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_220[] = { - { 0x00DC, 0x00FC, 0x0000, 0x0000 }, - { 0x04D8, 0x04D9, 0x0000, 0x0000 }, - { 0x1EC2, 0x1EC3, 0x0000, 0x0000 }, - { 0x1FC3, 0x03B7, 0x03B9, 0x0000 }, - { 0xFF23, 0xFF43, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_221[] = { - { 0x00DD, 0x00FD, 0x0000, 0x0000 }, - { 0x03DE, 0x03DF, 0x0000, 0x0000 }, - { 0x1FC2, 0x1F74, 0x03B9, 0x0000 }, - { 0xFF22, 0xFF42, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_222[] = { - { 0x00DE, 0x00FE, 0x0000, 0x0000 }, - { 0x04DA, 0x04DB, 0x0000, 0x0000 }, - { 0x1EC0, 0x1EC1, 0x0000, 0x0000 }, - { 0xFF21, 0xFF41, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_223[] = { - { 0x00DF, 0x0073, 0x0073, 0x0000 }, - { 0x01DE, 0x01DF, 0x0000, 0x0000 }, - { 0x03DC, 0x03DD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_224[] = { - { 0x04E4, 0x04E5, 0x0000, 0x0000 }, - { 0x24C4, 0x24DE, 0x0000, 0x0000 }, - { 0x2CCC, 0x2CCD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_225[] = { - { 0x01E0, 0x01E1, 0x0000, 0x0000 }, - { 0x03E2, 0x03E3, 0x0000, 0x0000 }, - { 0x24C5, 0x24DF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_226[] = { - { 0x04E6, 0x04E7, 0x0000, 0x0000 }, - { 0x24C6, 0x24E0, 0x0000, 0x0000 }, - { 0x2CCE, 0x2CCF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_227[] = { - { 0x01E2, 0x01E3, 0x0000, 0x0000 }, - { 0x03E0, 0x03E1, 0x0000, 0x0000 }, - { 0x1FFC, 0x03C9, 0x03B9, 0x0000 }, - { 0x24C7, 0x24E1, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_228[] = { - { 0x04E0, 0x04E1, 0x0000, 0x0000 }, - { 0x1FFB, 0x1F7D, 0x0000, 0x0000 }, - { 0x24C0, 0x24DA, 0x0000, 0x0000 }, - { 0x2CC8, 0x2CC9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_229[] = { - { 0x01E4, 0x01E5, 0x0000, 0x0000 }, - { 0x03E6, 0x03E7, 0x0000, 0x0000 }, - { 0x1FFA, 0x1F7C, 0x0000, 0x0000 }, - { 0x24C1, 0x24DB, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_230[] = { - { 0x04E2, 0x04E3, 0x0000, 0x0000 }, - { 0x1EF8, 0x1EF9, 0x0000, 0x0000 }, - { 0x1FF9, 0x1F79, 0x0000, 0x0000 }, - { 0x24C2, 0x24DC, 0x0000, 0x0000 }, - { 0x2CCA, 0x2CCB, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_231[] = { - { 0x01E6, 0x01E7, 0x0000, 0x0000 }, - { 0x03E4, 0x03E5, 0x0000, 0x0000 }, - { 0x1FF8, 0x1F78, 0x0000, 0x0000 }, - { 0x24C3, 0x24DD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_232[] = { - { 0x04EC, 0x04ED, 0x0000, 0x0000 }, - { 0x1EF6, 0x1EF7, 0x0000, 0x0000 }, - { 0x1FF7, 0x03C9, 0x0342, 0x03B9 }, - { 0x24CC, 0x24E6, 0x0000, 0x0000 }, - { 0x2CC4, 0x2CC5, 0x0000, 0x0000 }, - { 0xFB13, 0x0574, 0x0576, 0x0000 } -}; - -static const CaseFoldMapping case_fold_233[] = { - { 0x01E8, 0x01E9, 0x0000, 0x0000 }, - { 0x03EA, 0x03EB, 0x0000, 0x0000 }, - { 0x1FF6, 0x03C9, 0x0342, 0x0000 }, - { 0x24CD, 0x24E7, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_234[] = { - { 0x04EE, 0x04EF, 0x0000, 0x0000 }, - { 0x1EF4, 0x1EF5, 0x0000, 0x0000 }, - { 0x24CE, 0x24E8, 0x0000, 0x0000 }, - { 0x2CC6, 0x2CC7, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_235[] = { - { 0x01EA, 0x01EB, 0x0000, 0x0000 }, - { 0x03E8, 0x03E9, 0x0000, 0x0000 }, - { 0x1FF4, 0x03CE, 0x03B9, 0x0000 }, - { 0x24CF, 0x24E9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_236[] = { - { 0x04E8, 0x04E9, 0x0000, 0x0000 }, - { 0x1EF2, 0x1EF3, 0x0000, 0x0000 }, - { 0x1FF3, 0x03C9, 0x03B9, 0x0000 }, - { 0x24C8, 0x24E2, 0x0000, 0x0000 }, - { 0x2CC0, 0x2CC1, 0x0000, 0x0000 }, - { 0xFB17, 0x0574, 0x056D, 0x0000 } -}; - -static const CaseFoldMapping case_fold_237[] = { - { 0x01EC, 0x01ED, 0x0000, 0x0000 }, - { 0x03EE, 0x03EF, 0x0000, 0x0000 }, - { 0x1FF2, 0x1F7C, 0x03B9, 0x0000 }, - { 0x24C9, 0x24E3, 0x0000, 0x0000 }, - { 0xFB16, 0x057E, 0x0576, 0x0000 } -}; - -static const CaseFoldMapping case_fold_238[] = { - { 0x04EA, 0x04EB, 0x0000, 0x0000 }, - { 0x1EF0, 0x1EF1, 0x0000, 0x0000 }, - { 0x24CA, 0x24E4, 0x0000, 0x0000 }, - { 0x2CC2, 0x2CC3, 0x0000, 0x0000 }, - { 0xFB15, 0x0574, 0x056B, 0x0000 } -}; - -static const CaseFoldMapping case_fold_239[] = { - { 0x01EE, 0x01EF, 0x0000, 0x0000 }, - { 0x03EC, 0x03ED, 0x0000, 0x0000 }, - { 0x24CB, 0x24E5, 0x0000, 0x0000 }, - { 0xFB14, 0x0574, 0x0565, 0x0000 } -}; - -static const CaseFoldMapping case_fold_240[] = { - { 0x01F1, 0x01F3, 0x0000, 0x0000 }, - { 0x04F4, 0x04F5, 0x0000, 0x0000 }, - { 0x1EEE, 0x1EEF, 0x0000, 0x0000 }, - { 0x2CDC, 0x2CDD, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_241[] = { - { 0x01F0, 0x006A, 0x030C, 0x0000 } -}; - -static const CaseFoldMapping case_fold_242[] = { - { 0x03F1, 0x03C1, 0x0000, 0x0000 }, - { 0x04F6, 0x04F7, 0x0000, 0x0000 }, - { 0x1EEC, 0x1EED, 0x0000, 0x0000 }, - { 0x2CDE, 0x2CDF, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_243[] = { - { 0x01F2, 0x01F3, 0x0000, 0x0000 }, - { 0x03F0, 0x03BA, 0x0000, 0x0000 }, - { 0x1FEC, 0x1FE5, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_244[] = { - { 0x03F7, 0x03F8, 0x0000, 0x0000 }, - { 0x04F0, 0x04F1, 0x0000, 0x0000 }, - { 0x1EEA, 0x1EEB, 0x0000, 0x0000 }, - { 0x1FEB, 0x1F7B, 0x0000, 0x0000 }, - { 0x2CD8, 0x2CD9, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_245[] = { - { 0x01F4, 0x01F5, 0x0000, 0x0000 }, - { 0x1FEA, 0x1F7A, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_246[] = { - { 0x01F7, 0x01BF, 0x0000, 0x0000 }, - { 0x03F5, 0x03B5, 0x0000, 0x0000 }, - { 0x04F2, 0x04F3, 0x0000, 0x0000 }, - { 0x1EE8, 0x1EE9, 0x0000, 0x0000 }, - { 0x1FE9, 0x1FE1, 0x0000, 0x0000 }, - { 0x2CDA, 0x2CDB, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_247[] = { - { 0x01F6, 0x0195, 0x0000, 0x0000 }, - { 0x03F4, 0x03B8, 0x0000, 0x0000 }, - { 0x1FE8, 0x1FE0, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_248[] = { - { 0x1EE6, 0x1EE7, 0x0000, 0x0000 }, - { 0x1FE7, 0x03C5, 0x0308, 0x0342 }, - { 0x2CD4, 0x2CD5, 0x0000, 0x0000 }, - { 0xFB03, 0x0066, 0x0066, 0x0069 } -}; - -static const CaseFoldMapping case_fold_249[] = { - { 0x01F8, 0x01F9, 0x0000, 0x0000 }, - { 0x03FA, 0x03FB, 0x0000, 0x0000 }, - { 0x1FE6, 0x03C5, 0x0342, 0x0000 }, - { 0xFB02, 0x0066, 0x006C, 0x0000 } -}; - -static const CaseFoldMapping case_fold_250[] = { - { 0x03F9, 0x03F2, 0x0000, 0x0000 }, - { 0x1EE4, 0x1EE5, 0x0000, 0x0000 }, - { 0x2CD6, 0x2CD7, 0x0000, 0x0000 }, - { 0xFB01, 0x0066, 0x0069, 0x0000 } -}; - -static const CaseFoldMapping case_fold_251[] = { - { 0x01FA, 0x01FB, 0x0000, 0x0000 }, - { 0x1FE4, 0x03C1, 0x0313, 0x0000 }, - { 0xFB00, 0x0066, 0x0066, 0x0000 } -}; - -static const CaseFoldMapping case_fold_252[] = { - { 0x04F8, 0x04F9, 0x0000, 0x0000 }, - { 0x1EE2, 0x1EE3, 0x0000, 0x0000 }, - { 0x1FE3, 0x03C5, 0x0308, 0x0301 }, - { 0x2CD0, 0x2CD1, 0x0000, 0x0000 } -}; - -static const CaseFoldMapping case_fold_253[] = { - { 0x01FC, 0x01FD, 0x0000, 0x0000 }, - { 0x1FE2, 0x03C5, 0x0308, 0x0300 }, - { 0xFB06, 0x0073, 0x0074, 0x0000 } -}; - -static const CaseFoldMapping case_fold_254[] = { - { 0x1EE0, 0x1EE1, 0x0000, 0x0000 }, - { 0x2CD2, 0x2CD3, 0x0000, 0x0000 }, - { 0xFB05, 0x0073, 0x0074, 0x0000 } -}; - -static const CaseFoldMapping case_fold_255[] = { - { 0x01FE, 0x01FF, 0x0000, 0x0000 }, - { 0xFB04, 0x0066, 0x0066, 0x006C } -}; - - -static const CaseFoldHashBucket case_fold_hash[256] = { - { __PHYSFS_ARRAYLEN(case_fold_000), case_fold_000 }, - { __PHYSFS_ARRAYLEN(case_fold_001), case_fold_001 }, - { __PHYSFS_ARRAYLEN(case_fold_002), case_fold_002 }, - { __PHYSFS_ARRAYLEN(case_fold_003), case_fold_003 }, - { __PHYSFS_ARRAYLEN(case_fold_004), case_fold_004 }, - { __PHYSFS_ARRAYLEN(case_fold_005), case_fold_005 }, - { __PHYSFS_ARRAYLEN(case_fold_006), case_fold_006 }, - { __PHYSFS_ARRAYLEN(case_fold_007), case_fold_007 }, - { __PHYSFS_ARRAYLEN(case_fold_008), case_fold_008 }, - { __PHYSFS_ARRAYLEN(case_fold_009), case_fold_009 }, - { __PHYSFS_ARRAYLEN(case_fold_010), case_fold_010 }, - { __PHYSFS_ARRAYLEN(case_fold_011), case_fold_011 }, - { __PHYSFS_ARRAYLEN(case_fold_012), case_fold_012 }, - { __PHYSFS_ARRAYLEN(case_fold_013), case_fold_013 }, - { __PHYSFS_ARRAYLEN(case_fold_014), case_fold_014 }, - { __PHYSFS_ARRAYLEN(case_fold_015), case_fold_015 }, - { __PHYSFS_ARRAYLEN(case_fold_016), case_fold_016 }, - { __PHYSFS_ARRAYLEN(case_fold_017), case_fold_017 }, - { __PHYSFS_ARRAYLEN(case_fold_018), case_fold_018 }, - { __PHYSFS_ARRAYLEN(case_fold_019), case_fold_019 }, - { __PHYSFS_ARRAYLEN(case_fold_020), case_fold_020 }, - { __PHYSFS_ARRAYLEN(case_fold_021), case_fold_021 }, - { __PHYSFS_ARRAYLEN(case_fold_022), case_fold_022 }, - { __PHYSFS_ARRAYLEN(case_fold_023), case_fold_023 }, - { __PHYSFS_ARRAYLEN(case_fold_024), case_fold_024 }, - { __PHYSFS_ARRAYLEN(case_fold_025), case_fold_025 }, - { __PHYSFS_ARRAYLEN(case_fold_026), case_fold_026 }, - { __PHYSFS_ARRAYLEN(case_fold_027), case_fold_027 }, - { __PHYSFS_ARRAYLEN(case_fold_028), case_fold_028 }, - { __PHYSFS_ARRAYLEN(case_fold_029), case_fold_029 }, - { __PHYSFS_ARRAYLEN(case_fold_030), case_fold_030 }, - { __PHYSFS_ARRAYLEN(case_fold_031), case_fold_031 }, - { __PHYSFS_ARRAYLEN(case_fold_032), case_fold_032 }, - { __PHYSFS_ARRAYLEN(case_fold_033), case_fold_033 }, - { __PHYSFS_ARRAYLEN(case_fold_034), case_fold_034 }, - { __PHYSFS_ARRAYLEN(case_fold_035), case_fold_035 }, - { __PHYSFS_ARRAYLEN(case_fold_036), case_fold_036 }, - { __PHYSFS_ARRAYLEN(case_fold_037), case_fold_037 }, - { __PHYSFS_ARRAYLEN(case_fold_038), case_fold_038 }, - { __PHYSFS_ARRAYLEN(case_fold_039), case_fold_039 }, - { __PHYSFS_ARRAYLEN(case_fold_040), case_fold_040 }, - { __PHYSFS_ARRAYLEN(case_fold_041), case_fold_041 }, - { __PHYSFS_ARRAYLEN(case_fold_042), case_fold_042 }, - { __PHYSFS_ARRAYLEN(case_fold_043), case_fold_043 }, - { __PHYSFS_ARRAYLEN(case_fold_044), case_fold_044 }, - { __PHYSFS_ARRAYLEN(case_fold_045), case_fold_045 }, - { __PHYSFS_ARRAYLEN(case_fold_046), case_fold_046 }, - { __PHYSFS_ARRAYLEN(case_fold_047), case_fold_047 }, - { __PHYSFS_ARRAYLEN(case_fold_048), case_fold_048 }, - { __PHYSFS_ARRAYLEN(case_fold_049), case_fold_049 }, - { __PHYSFS_ARRAYLEN(case_fold_050), case_fold_050 }, - { __PHYSFS_ARRAYLEN(case_fold_051), case_fold_051 }, - { __PHYSFS_ARRAYLEN(case_fold_052), case_fold_052 }, - { __PHYSFS_ARRAYLEN(case_fold_053), case_fold_053 }, - { __PHYSFS_ARRAYLEN(case_fold_054), case_fold_054 }, - { __PHYSFS_ARRAYLEN(case_fold_055), case_fold_055 }, - { __PHYSFS_ARRAYLEN(case_fold_056), case_fold_056 }, - { __PHYSFS_ARRAYLEN(case_fold_057), case_fold_057 }, - { __PHYSFS_ARRAYLEN(case_fold_058), case_fold_058 }, - { __PHYSFS_ARRAYLEN(case_fold_059), case_fold_059 }, - { __PHYSFS_ARRAYLEN(case_fold_060), case_fold_060 }, - { __PHYSFS_ARRAYLEN(case_fold_061), case_fold_061 }, - { __PHYSFS_ARRAYLEN(case_fold_062), case_fold_062 }, - { __PHYSFS_ARRAYLEN(case_fold_063), case_fold_063 }, - { __PHYSFS_ARRAYLEN(case_fold_064), case_fold_064 }, - { __PHYSFS_ARRAYLEN(case_fold_065), case_fold_065 }, - { __PHYSFS_ARRAYLEN(case_fold_066), case_fold_066 }, - { __PHYSFS_ARRAYLEN(case_fold_067), case_fold_067 }, - { __PHYSFS_ARRAYLEN(case_fold_068), case_fold_068 }, - { __PHYSFS_ARRAYLEN(case_fold_069), case_fold_069 }, - { __PHYSFS_ARRAYLEN(case_fold_070), case_fold_070 }, - { __PHYSFS_ARRAYLEN(case_fold_071), case_fold_071 }, - { __PHYSFS_ARRAYLEN(case_fold_072), case_fold_072 }, - { __PHYSFS_ARRAYLEN(case_fold_073), case_fold_073 }, - { __PHYSFS_ARRAYLEN(case_fold_074), case_fold_074 }, - { __PHYSFS_ARRAYLEN(case_fold_075), case_fold_075 }, - { __PHYSFS_ARRAYLEN(case_fold_076), case_fold_076 }, - { __PHYSFS_ARRAYLEN(case_fold_077), case_fold_077 }, - { __PHYSFS_ARRAYLEN(case_fold_078), case_fold_078 }, - { __PHYSFS_ARRAYLEN(case_fold_079), case_fold_079 }, - { __PHYSFS_ARRAYLEN(case_fold_080), case_fold_080 }, - { __PHYSFS_ARRAYLEN(case_fold_081), case_fold_081 }, - { __PHYSFS_ARRAYLEN(case_fold_082), case_fold_082 }, - { __PHYSFS_ARRAYLEN(case_fold_083), case_fold_083 }, - { __PHYSFS_ARRAYLEN(case_fold_084), case_fold_084 }, - { __PHYSFS_ARRAYLEN(case_fold_085), case_fold_085 }, - { __PHYSFS_ARRAYLEN(case_fold_086), case_fold_086 }, - { __PHYSFS_ARRAYLEN(case_fold_087), case_fold_087 }, - { __PHYSFS_ARRAYLEN(case_fold_088), case_fold_088 }, - { __PHYSFS_ARRAYLEN(case_fold_089), case_fold_089 }, - { __PHYSFS_ARRAYLEN(case_fold_090), case_fold_090 }, - { __PHYSFS_ARRAYLEN(case_fold_091), case_fold_091 }, - { __PHYSFS_ARRAYLEN(case_fold_092), case_fold_092 }, - { __PHYSFS_ARRAYLEN(case_fold_093), case_fold_093 }, - { __PHYSFS_ARRAYLEN(case_fold_094), case_fold_094 }, - { __PHYSFS_ARRAYLEN(case_fold_095), case_fold_095 }, - { __PHYSFS_ARRAYLEN(case_fold_096), case_fold_096 }, - { __PHYSFS_ARRAYLEN(case_fold_097), case_fold_097 }, - { __PHYSFS_ARRAYLEN(case_fold_098), case_fold_098 }, - { __PHYSFS_ARRAYLEN(case_fold_099), case_fold_099 }, - { __PHYSFS_ARRAYLEN(case_fold_100), case_fold_100 }, - { __PHYSFS_ARRAYLEN(case_fold_101), case_fold_101 }, - { __PHYSFS_ARRAYLEN(case_fold_102), case_fold_102 }, - { __PHYSFS_ARRAYLEN(case_fold_103), case_fold_103 }, - { __PHYSFS_ARRAYLEN(case_fold_104), case_fold_104 }, - { __PHYSFS_ARRAYLEN(case_fold_105), case_fold_105 }, - { __PHYSFS_ARRAYLEN(case_fold_106), case_fold_106 }, - { __PHYSFS_ARRAYLEN(case_fold_107), case_fold_107 }, - { __PHYSFS_ARRAYLEN(case_fold_108), case_fold_108 }, - { __PHYSFS_ARRAYLEN(case_fold_109), case_fold_109 }, - { __PHYSFS_ARRAYLEN(case_fold_110), case_fold_110 }, - { __PHYSFS_ARRAYLEN(case_fold_111), case_fold_111 }, - { __PHYSFS_ARRAYLEN(case_fold_112), case_fold_112 }, - { __PHYSFS_ARRAYLEN(case_fold_113), case_fold_113 }, - { __PHYSFS_ARRAYLEN(case_fold_114), case_fold_114 }, - { __PHYSFS_ARRAYLEN(case_fold_115), case_fold_115 }, - { __PHYSFS_ARRAYLEN(case_fold_116), case_fold_116 }, - { __PHYSFS_ARRAYLEN(case_fold_117), case_fold_117 }, - { __PHYSFS_ARRAYLEN(case_fold_118), case_fold_118 }, - { __PHYSFS_ARRAYLEN(case_fold_119), case_fold_119 }, - { __PHYSFS_ARRAYLEN(case_fold_120), case_fold_120 }, - { __PHYSFS_ARRAYLEN(case_fold_121), case_fold_121 }, - { __PHYSFS_ARRAYLEN(case_fold_122), case_fold_122 }, - { 0, NULL }, - { __PHYSFS_ARRAYLEN(case_fold_124), case_fold_124 }, - { 0, NULL }, - { __PHYSFS_ARRAYLEN(case_fold_126), case_fold_126 }, - { 0, NULL }, - { __PHYSFS_ARRAYLEN(case_fold_128), case_fold_128 }, - { __PHYSFS_ARRAYLEN(case_fold_129), case_fold_129 }, - { __PHYSFS_ARRAYLEN(case_fold_130), case_fold_130 }, - { __PHYSFS_ARRAYLEN(case_fold_131), case_fold_131 }, - { __PHYSFS_ARRAYLEN(case_fold_132), case_fold_132 }, - { __PHYSFS_ARRAYLEN(case_fold_133), case_fold_133 }, - { __PHYSFS_ARRAYLEN(case_fold_134), case_fold_134 }, - { __PHYSFS_ARRAYLEN(case_fold_135), case_fold_135 }, - { __PHYSFS_ARRAYLEN(case_fold_136), case_fold_136 }, - { __PHYSFS_ARRAYLEN(case_fold_137), case_fold_137 }, - { __PHYSFS_ARRAYLEN(case_fold_138), case_fold_138 }, - { __PHYSFS_ARRAYLEN(case_fold_139), case_fold_139 }, - { __PHYSFS_ARRAYLEN(case_fold_140), case_fold_140 }, - { __PHYSFS_ARRAYLEN(case_fold_141), case_fold_141 }, - { __PHYSFS_ARRAYLEN(case_fold_142), case_fold_142 }, - { __PHYSFS_ARRAYLEN(case_fold_143), case_fold_143 }, - { __PHYSFS_ARRAYLEN(case_fold_144), case_fold_144 }, - { __PHYSFS_ARRAYLEN(case_fold_145), case_fold_145 }, - { __PHYSFS_ARRAYLEN(case_fold_146), case_fold_146 }, - { __PHYSFS_ARRAYLEN(case_fold_147), case_fold_147 }, - { __PHYSFS_ARRAYLEN(case_fold_148), case_fold_148 }, - { __PHYSFS_ARRAYLEN(case_fold_149), case_fold_149 }, - { __PHYSFS_ARRAYLEN(case_fold_150), case_fold_150 }, - { __PHYSFS_ARRAYLEN(case_fold_151), case_fold_151 }, - { __PHYSFS_ARRAYLEN(case_fold_152), case_fold_152 }, - { __PHYSFS_ARRAYLEN(case_fold_153), case_fold_153 }, - { __PHYSFS_ARRAYLEN(case_fold_154), case_fold_154 }, - { __PHYSFS_ARRAYLEN(case_fold_155), case_fold_155 }, - { __PHYSFS_ARRAYLEN(case_fold_156), case_fold_156 }, - { __PHYSFS_ARRAYLEN(case_fold_157), case_fold_157 }, - { __PHYSFS_ARRAYLEN(case_fold_158), case_fold_158 }, - { __PHYSFS_ARRAYLEN(case_fold_159), case_fold_159 }, - { __PHYSFS_ARRAYLEN(case_fold_160), case_fold_160 }, - { __PHYSFS_ARRAYLEN(case_fold_161), case_fold_161 }, - { __PHYSFS_ARRAYLEN(case_fold_162), case_fold_162 }, - { __PHYSFS_ARRAYLEN(case_fold_163), case_fold_163 }, - { __PHYSFS_ARRAYLEN(case_fold_164), case_fold_164 }, - { __PHYSFS_ARRAYLEN(case_fold_165), case_fold_165 }, - { __PHYSFS_ARRAYLEN(case_fold_166), case_fold_166 }, - { __PHYSFS_ARRAYLEN(case_fold_167), case_fold_167 }, - { __PHYSFS_ARRAYLEN(case_fold_168), case_fold_168 }, - { __PHYSFS_ARRAYLEN(case_fold_169), case_fold_169 }, - { __PHYSFS_ARRAYLEN(case_fold_170), case_fold_170 }, - { __PHYSFS_ARRAYLEN(case_fold_171), case_fold_171 }, - { __PHYSFS_ARRAYLEN(case_fold_172), case_fold_172 }, - { __PHYSFS_ARRAYLEN(case_fold_173), case_fold_173 }, - { __PHYSFS_ARRAYLEN(case_fold_174), case_fold_174 }, - { __PHYSFS_ARRAYLEN(case_fold_175), case_fold_175 }, - { __PHYSFS_ARRAYLEN(case_fold_176), case_fold_176 }, - { __PHYSFS_ARRAYLEN(case_fold_177), case_fold_177 }, - { __PHYSFS_ARRAYLEN(case_fold_178), case_fold_178 }, - { __PHYSFS_ARRAYLEN(case_fold_179), case_fold_179 }, - { __PHYSFS_ARRAYLEN(case_fold_180), case_fold_180 }, - { __PHYSFS_ARRAYLEN(case_fold_181), case_fold_181 }, - { __PHYSFS_ARRAYLEN(case_fold_182), case_fold_182 }, - { __PHYSFS_ARRAYLEN(case_fold_183), case_fold_183 }, - { __PHYSFS_ARRAYLEN(case_fold_184), case_fold_184 }, - { __PHYSFS_ARRAYLEN(case_fold_185), case_fold_185 }, - { __PHYSFS_ARRAYLEN(case_fold_186), case_fold_186 }, - { __PHYSFS_ARRAYLEN(case_fold_187), case_fold_187 }, - { __PHYSFS_ARRAYLEN(case_fold_188), case_fold_188 }, - { __PHYSFS_ARRAYLEN(case_fold_189), case_fold_189 }, - { __PHYSFS_ARRAYLEN(case_fold_190), case_fold_190 }, - { __PHYSFS_ARRAYLEN(case_fold_191), case_fold_191 }, - { __PHYSFS_ARRAYLEN(case_fold_192), case_fold_192 }, - { __PHYSFS_ARRAYLEN(case_fold_193), case_fold_193 }, - { __PHYSFS_ARRAYLEN(case_fold_194), case_fold_194 }, - { __PHYSFS_ARRAYLEN(case_fold_195), case_fold_195 }, - { __PHYSFS_ARRAYLEN(case_fold_196), case_fold_196 }, - { __PHYSFS_ARRAYLEN(case_fold_197), case_fold_197 }, - { __PHYSFS_ARRAYLEN(case_fold_198), case_fold_198 }, - { __PHYSFS_ARRAYLEN(case_fold_199), case_fold_199 }, - { __PHYSFS_ARRAYLEN(case_fold_200), case_fold_200 }, - { __PHYSFS_ARRAYLEN(case_fold_201), case_fold_201 }, - { __PHYSFS_ARRAYLEN(case_fold_202), case_fold_202 }, - { __PHYSFS_ARRAYLEN(case_fold_203), case_fold_203 }, - { __PHYSFS_ARRAYLEN(case_fold_204), case_fold_204 }, - { __PHYSFS_ARRAYLEN(case_fold_205), case_fold_205 }, - { __PHYSFS_ARRAYLEN(case_fold_206), case_fold_206 }, - { __PHYSFS_ARRAYLEN(case_fold_207), case_fold_207 }, - { __PHYSFS_ARRAYLEN(case_fold_208), case_fold_208 }, - { __PHYSFS_ARRAYLEN(case_fold_209), case_fold_209 }, - { __PHYSFS_ARRAYLEN(case_fold_210), case_fold_210 }, - { __PHYSFS_ARRAYLEN(case_fold_211), case_fold_211 }, - { __PHYSFS_ARRAYLEN(case_fold_212), case_fold_212 }, - { __PHYSFS_ARRAYLEN(case_fold_213), case_fold_213 }, - { __PHYSFS_ARRAYLEN(case_fold_214), case_fold_214 }, - { __PHYSFS_ARRAYLEN(case_fold_215), case_fold_215 }, - { __PHYSFS_ARRAYLEN(case_fold_216), case_fold_216 }, - { __PHYSFS_ARRAYLEN(case_fold_217), case_fold_217 }, - { __PHYSFS_ARRAYLEN(case_fold_218), case_fold_218 }, - { __PHYSFS_ARRAYLEN(case_fold_219), case_fold_219 }, - { __PHYSFS_ARRAYLEN(case_fold_220), case_fold_220 }, - { __PHYSFS_ARRAYLEN(case_fold_221), case_fold_221 }, - { __PHYSFS_ARRAYLEN(case_fold_222), case_fold_222 }, - { __PHYSFS_ARRAYLEN(case_fold_223), case_fold_223 }, - { __PHYSFS_ARRAYLEN(case_fold_224), case_fold_224 }, - { __PHYSFS_ARRAYLEN(case_fold_225), case_fold_225 }, - { __PHYSFS_ARRAYLEN(case_fold_226), case_fold_226 }, - { __PHYSFS_ARRAYLEN(case_fold_227), case_fold_227 }, - { __PHYSFS_ARRAYLEN(case_fold_228), case_fold_228 }, - { __PHYSFS_ARRAYLEN(case_fold_229), case_fold_229 }, - { __PHYSFS_ARRAYLEN(case_fold_230), case_fold_230 }, - { __PHYSFS_ARRAYLEN(case_fold_231), case_fold_231 }, - { __PHYSFS_ARRAYLEN(case_fold_232), case_fold_232 }, - { __PHYSFS_ARRAYLEN(case_fold_233), case_fold_233 }, - { __PHYSFS_ARRAYLEN(case_fold_234), case_fold_234 }, - { __PHYSFS_ARRAYLEN(case_fold_235), case_fold_235 }, - { __PHYSFS_ARRAYLEN(case_fold_236), case_fold_236 }, - { __PHYSFS_ARRAYLEN(case_fold_237), case_fold_237 }, - { __PHYSFS_ARRAYLEN(case_fold_238), case_fold_238 }, - { __PHYSFS_ARRAYLEN(case_fold_239), case_fold_239 }, - { __PHYSFS_ARRAYLEN(case_fold_240), case_fold_240 }, - { __PHYSFS_ARRAYLEN(case_fold_241), case_fold_241 }, - { __PHYSFS_ARRAYLEN(case_fold_242), case_fold_242 }, - { __PHYSFS_ARRAYLEN(case_fold_243), case_fold_243 }, - { __PHYSFS_ARRAYLEN(case_fold_244), case_fold_244 }, - { __PHYSFS_ARRAYLEN(case_fold_245), case_fold_245 }, - { __PHYSFS_ARRAYLEN(case_fold_246), case_fold_246 }, - { __PHYSFS_ARRAYLEN(case_fold_247), case_fold_247 }, - { __PHYSFS_ARRAYLEN(case_fold_248), case_fold_248 }, - { __PHYSFS_ARRAYLEN(case_fold_249), case_fold_249 }, - { __PHYSFS_ARRAYLEN(case_fold_250), case_fold_250 }, - { __PHYSFS_ARRAYLEN(case_fold_251), case_fold_251 }, - { __PHYSFS_ARRAYLEN(case_fold_252), case_fold_252 }, - { __PHYSFS_ARRAYLEN(case_fold_253), case_fold_253 }, - { __PHYSFS_ARRAYLEN(case_fold_254), case_fold_254 }, - { __PHYSFS_ARRAYLEN(case_fold_255), case_fold_255 }, -}; - diff --git a/love/src/jni/physfs-2.1.0/src/platform_macosx.c b/love/src/jni/physfs-2.1.0/src/platform_macosx.c deleted file mode 100644 index 802826ae..00000000 --- a/love/src/jni/physfs-2.1.0/src/platform_macosx.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Mac OS X support routines for PhysicsFS. - * - * Please see the file LICENSE.txt in the source's root directory. - * - * This file written by Ryan C. Gordon. - */ - -#define __PHYSICSFS_INTERNAL__ -#include "physfs_platforms.h" - -#ifdef PHYSFS_PLATFORM_MACOSX - -#include - -#if !defined(PHYSFS_NO_CDROM_SUPPORT) -#include /* !!! FIXME */ -#include -#include -#include -#include -#endif - -/* Seems to get defined in some system header... */ -#ifdef Free -#undef Free -#endif - -#include "physfs_internal.h" - - -/* Wrap PHYSFS_Allocator in a CFAllocator... */ -static CFAllocatorRef cfallocator = NULL; - -static CFStringRef cfallocDesc(const void *info) -{ - return CFStringCreateWithCString(cfallocator, "PhysicsFS", - kCFStringEncodingASCII); -} /* cfallocDesc */ - - -static void *cfallocMalloc(CFIndex allocSize, CFOptionFlags hint, void *info) -{ - return allocator.Malloc(allocSize); -} /* cfallocMalloc */ - - -static void cfallocFree(void *ptr, void *info) -{ - allocator.Free(ptr); -} /* cfallocFree */ - - -static void *cfallocRealloc(void *ptr, CFIndex newsize, - CFOptionFlags hint, void *info) -{ - if ((ptr == NULL) || (newsize <= 0)) - return NULL; /* ADC docs say you should always return NULL here. */ - return allocator.Realloc(ptr, newsize); -} /* cfallocRealloc */ - - -int __PHYSFS_platformInit(void) -{ - /* set up a CFAllocator, so Carbon can use the physfs allocator, too. */ - CFAllocatorContext ctx; - memset(&ctx, '\0', sizeof (ctx)); - ctx.copyDescription = cfallocDesc; - ctx.allocate = cfallocMalloc; - ctx.reallocate = cfallocRealloc; - ctx.deallocate = cfallocFree; - cfallocator = CFAllocatorCreate(kCFAllocatorUseContext, &ctx); - BAIL_IF_MACRO(!cfallocator, PHYSFS_ERR_OUT_OF_MEMORY, 0); - return 1; /* success. */ -} /* __PHYSFS_platformInit */ - - -int __PHYSFS_platformDeinit(void) -{ - CFRelease(cfallocator); - cfallocator = NULL; - return 1; /* always succeed. */ -} /* __PHYSFS_platformDeinit */ - - - -/* CD-ROM detection code... */ - -/* - * Code based on sample from Apple Developer Connection: - * http://developer.apple.com/samplecode/Sample_Code/Devices_and_Hardware/Disks/VolumeToBSDNode/VolumeToBSDNode.c.htm - */ - -#if !defined(PHYSFS_NO_CDROM_SUPPORT) - -static int darwinIsWholeMedia(io_service_t service) -{ - int retval = 0; - CFTypeRef wholeMedia; - - if (!IOObjectConformsTo(service, kIOMediaClass)) - return 0; - - wholeMedia = IORegistryEntryCreateCFProperty(service, - CFSTR(kIOMediaWholeKey), - cfallocator, 0); - if (wholeMedia == NULL) - return 0; - - retval = CFBooleanGetValue(wholeMedia); - CFRelease(wholeMedia); - - return retval; -} /* darwinIsWholeMedia */ - - -static int darwinIsMountedDisc(char *bsdName, mach_port_t masterPort) -{ - int retval = 0; - CFMutableDictionaryRef matchingDict; - kern_return_t rc; - io_iterator_t iter; - io_service_t service; - - if ((matchingDict = IOBSDNameMatching(masterPort, 0, bsdName)) == NULL) - return 0; - - rc = IOServiceGetMatchingServices(masterPort, matchingDict, &iter); - if ((rc != KERN_SUCCESS) || (!iter)) - return 0; - - service = IOIteratorNext(iter); - IOObjectRelease(iter); - if (!service) - return 0; - - rc = IORegistryEntryCreateIterator(service, kIOServicePlane, - kIORegistryIterateRecursively | kIORegistryIterateParents, &iter); - - if (!iter) - return 0; - - if (rc != KERN_SUCCESS) - { - IOObjectRelease(iter); - return 0; - } /* if */ - - IOObjectRetain(service); /* add an extra object reference... */ - - do - { - if (darwinIsWholeMedia(service)) - { - if ( (IOObjectConformsTo(service, kIOCDMediaClass)) || - (IOObjectConformsTo(service, kIODVDMediaClass)) ) - { - retval = 1; - } /* if */ - } /* if */ - IOObjectRelease(service); - } while ((service = IOIteratorNext(iter)) && (!retval)); - - IOObjectRelease(iter); - IOObjectRelease(service); - - return retval; -} /* darwinIsMountedDisc */ - -#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */ - - -void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) -{ -#if !defined(PHYSFS_NO_CDROM_SUPPORT) - const char *devPrefix = "/dev/"; - const int prefixLen = strlen(devPrefix); - mach_port_t masterPort = 0; - struct statfs *mntbufp; - int i, mounts; - - if (IOMasterPort(MACH_PORT_NULL, &masterPort) != KERN_SUCCESS) - BAIL_MACRO(PHYSFS_ERR_OS_ERROR, ) /*return void*/; - - mounts = getmntinfo(&mntbufp, MNT_WAIT); /* NOT THREAD SAFE! */ - for (i = 0; i < mounts; i++) - { - char *dev = mntbufp[i].f_mntfromname; - char *mnt = mntbufp[i].f_mntonname; - if (strncmp(dev, devPrefix, prefixLen) != 0) /* a virtual device? */ - continue; - - dev += prefixLen; - if (darwinIsMountedDisc(dev, masterPort)) - cb(data, mnt); - } /* for */ -#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */ -} /* __PHYSFS_platformDetectAvailableCDs */ - - -static char *convertCFString(CFStringRef cfstr) -{ - CFIndex len = CFStringGetMaximumSizeForEncoding(CFStringGetLength(cfstr), - kCFStringEncodingUTF8) + 1; - char *retval = (char *) allocator.Malloc(len); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - if (CFStringGetCString(cfstr, retval, len, kCFStringEncodingUTF8)) - { - /* shrink overallocated buffer if possible... */ - CFIndex newlen = strlen(retval) + 1; - if (newlen < len) - { - void *ptr = allocator.Realloc(retval, newlen); - if (ptr != NULL) - retval = (char *) ptr; - } /* if */ - } /* if */ - - else /* probably shouldn't fail, but just in case... */ - { - allocator.Free(retval); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - } /* else */ - - return retval; -} /* convertCFString */ - - -char *__PHYSFS_platformCalcBaseDir(const char *argv0) -{ - CFURLRef cfurl = NULL; - CFStringRef cfstr = NULL; - CFMutableStringRef cfmutstr = NULL; - char *retval = NULL; - - cfurl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - BAIL_IF_MACRO(cfurl == NULL, PHYSFS_ERR_OS_ERROR, NULL); - cfstr = CFURLCopyFileSystemPath(cfurl, kCFURLPOSIXPathStyle); - CFRelease(cfurl); - BAIL_IF_MACRO(!cfstr, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - cfmutstr = CFStringCreateMutableCopy(cfallocator, 0, cfstr); - CFRelease(cfstr); - BAIL_IF_MACRO(!cfmutstr, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - CFStringAppendCString(cfmutstr, "/", kCFStringEncodingUTF8); - retval = convertCFString(cfmutstr); - CFRelease(cfmutstr); - - return retval; /* whew. */ -} /* __PHYSFS_platformCalcBaseDir */ - - -char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) -{ - /* !!! FIXME: there's a real API to determine this */ - const char *userdir = __PHYSFS_getUserDir(); - const char *append = "Library/Application Support/"; - const size_t len = strlen(userdir) + strlen(append) + strlen(app) + 2; - char *retval = allocator.Malloc(len); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - snprintf(retval, len, "%s%s%s/", userdir, append, app); - return retval; -} /* __PHYSFS_platformCalcPrefDir */ - - -/* Platform allocator uses default CFAllocator at PHYSFS_init() time. */ - -static CFAllocatorRef cfallocdef = NULL; - -static int macosxAllocatorInit(void) -{ - int retval = 0; - cfallocdef = CFAllocatorGetDefault(); - retval = (cfallocdef != NULL); - if (retval) - CFRetain(cfallocdef); - return retval; -} /* macosxAllocatorInit */ - - -static void macosxAllocatorDeinit(void) -{ - if (cfallocdef != NULL) - { - CFRelease(cfallocdef); - cfallocdef = NULL; - } /* if */ -} /* macosxAllocatorDeinit */ - - -static void *macosxAllocatorMalloc(PHYSFS_uint64 s) -{ - if (!__PHYSFS_ui64FitsAddressSpace(s)) - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - return CFAllocatorAllocate(cfallocdef, (CFIndex) s, 0); -} /* macosxAllocatorMalloc */ - - -static void *macosxAllocatorRealloc(void *ptr, PHYSFS_uint64 s) -{ - if (!__PHYSFS_ui64FitsAddressSpace(s)) - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - return CFAllocatorReallocate(cfallocdef, ptr, (CFIndex) s, 0); -} /* macosxAllocatorRealloc */ - - -static void macosxAllocatorFree(void *ptr) -{ - CFAllocatorDeallocate(cfallocdef, ptr); -} /* macosxAllocatorFree */ - - -int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a) -{ - allocator.Init = macosxAllocatorInit; - allocator.Deinit = macosxAllocatorDeinit; - allocator.Malloc = macosxAllocatorMalloc; - allocator.Realloc = macosxAllocatorRealloc; - allocator.Free = macosxAllocatorFree; - return 1; /* return non-zero: we're supplying custom allocator. */ -} /* __PHYSFS_platformSetDefaultAllocator */ - -#endif /* PHYSFS_PLATFORM_MACOSX */ - -/* end of macosx.c ... */ - diff --git a/love/src/jni/physfs-2.1.0/.hg_archival.txt b/love/src/jni/physfs-3.0.1/.hg_archival.txt similarity index 100% rename from love/src/jni/physfs-2.1.0/.hg_archival.txt rename to love/src/jni/physfs-3.0.1/.hg_archival.txt diff --git a/love/src/jni/physfs-2.1.0/.hgignore b/love/src/jni/physfs-3.0.1/.hgignore similarity index 100% rename from love/src/jni/physfs-2.1.0/.hgignore rename to love/src/jni/physfs-3.0.1/.hgignore diff --git a/love/src/jni/physfs-2.1.0/.hgtags b/love/src/jni/physfs-3.0.1/.hgtags similarity index 100% rename from love/src/jni/physfs-2.1.0/.hgtags rename to love/src/jni/physfs-3.0.1/.hgtags diff --git a/love/src/jni/physfs-2.1.0/Android.mk b/love/src/jni/physfs-3.0.1/Android.mk similarity index 74% rename from love/src/jni/physfs-2.1.0/Android.mk rename to love/src/jni/physfs-3.0.1/Android.mk index 3621d5a0..31571169 100644 --- a/love/src/jni/physfs-2.1.0/Android.mk +++ b/love/src/jni/physfs-3.0.1/Android.mk @@ -20,11 +20,7 @@ LOCAL_C_INCLUDES := \ LOCAL_SRC_FILES := \ $(filter-out \ , $(subst $(LOCAL_PATH)/,,\ - ${LOCAL_PATH}/src/lzma/C/7zCrc.c \ - ${LOCAL_PATH}/src/lzma/C/Compress/Lzma/LzmaDecode.c \ - $(wildcard ${LOCAL_PATH}/src/*.c) \ - $(wildcard ${LOCAL_PATH}/src/lzma/C/Archive/7z/*.c) \ - $(wildcard ${LOCAL_PATH}/src/lzma/C/Compress/Branch/*.c))) + $(wildcard ${LOCAL_PATH}/src/*.c))) # $(info libphysfs: include dirs $(LOCAL_C_INCLUDES)) # $(info libphysfs: src files $(LOCAL_SRC_FILES)) diff --git a/love/src/jni/physfs-2.1.0/CMakeLists.txt b/love/src/jni/physfs-3.0.1/CMakeLists.txt similarity index 51% rename from love/src/jni/physfs-2.1.0/CMakeLists.txt rename to love/src/jni/physfs-3.0.1/CMakeLists.txt index 2a371af2..9373a037 100644 --- a/love/src/jni/physfs-2.1.0/CMakeLists.txt +++ b/love/src/jni/physfs-3.0.1/CMakeLists.txt @@ -2,10 +2,17 @@ # # Please see the file LICENSE.txt in the source's root directory. +# The CMake project file is meant to get this compiling on all sorts of +# platforms quickly, and serve as the way Unix platforms and Linux distros +# package up official builds, but you don't _need_ to use this; we have +# built PhysicsFS to (hopefully) be able to drop into your project and +# compile, using preprocessor checks for platform-specific bits instead of +# testing in here. + cmake_minimum_required(VERSION 2.8.4) project(PhysicsFS) -set(PHYSFS_VERSION 2.1.0) +set(PHYSFS_VERSION 3.0.1) # Increment this if/when we break backwards compatibility. set(PHYSFS_SOVERSION 1) @@ -15,63 +22,14 @@ if(WIN32 AND NOT WINDOWS) set(WINDOWS TRUE) endif() -# Bleh, let's do it for "APPLE" too. -if(APPLE AND NOT MACOSX) - set(MACOSX TRUE) -endif() - -# For now, Haiku and BeOS are the same, as far as the build system cares. -if(HAIKU AND NOT BEOS) - set(BEOS TRUE) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - set(SOLARIS TRUE) -endif() - -include(CheckIncludeFile) -include(CheckLibraryExists) -include(CheckCSourceCompiles) - include_directories(./src) -if(MACOSX) - # Fallback to older OS X on PowerPC to support wider range of systems... - if(CMAKE_OSX_ARCHITECTURES MATCHES ppc) - add_definitions(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020) - set(OTHER_LDFLAGS ${OTHER_LDFLAGS} " -mmacosx-version-min=10.2") - endif() - - # Need these everywhere... - add_definitions(-fno-common) - set(OTHER_LDFLAGS ${OTHER_LDFLAGS} "-framework Carbon -framework IOKit") +if(APPLE) + set(OTHER_LDFLAGS ${OTHER_LDFLAGS} "-framework IOKit -framework Foundation") + set(PHYSFS_M_SRCS src/physfs_platform_apple.m) endif() -# Add some gcc-specific command lines. if(CMAKE_COMPILER_IS_GNUCC) - # Always build with debug symbols...you can strip it later. - add_definitions(-g -pipe -Werror -fsigned-char) - - # Stupid BeOS generates warnings in the system headers. - if(NOT BEOS) - add_definitions(-Wall) - endif() - - check_c_source_compiles(" - #if ((defined(__GNUC__)) && (__GNUC__ >= 4)) - int main(int argc, char **argv) { int is_gcc4 = 1; return 0; } - #else - #error This is not gcc4. - #endif - " PHYSFS_IS_GCC4) - - if(PHYSFS_IS_GCC4) - # Not supported on several operating systems at this time. - if(NOT SOLARIS AND NOT WINDOWS) - add_definitions(-fvisibility=hidden) - endif() - endif() - # Don't use -rpath. set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE) endif() @@ -81,37 +39,30 @@ if(CMAKE_C_COMPILER_ID STREQUAL "SunPro") add_definitions(-xldscope=hidden) endif() -if(MSVC) - # VS.NET 8.0 got really really anal about strcpy, etc, which even if we - # cleaned up our code, zlib, etc still use...so disable the warning. - add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) -endif() - -# Basic chunks of source code ... - -set(LZMA_SRCS - src/lzma/C/7zCrc.c - src/lzma/C/Archive/7z/7zBuffer.c - src/lzma/C/Archive/7z/7zDecode.c - src/lzma/C/Archive/7z/7zExtract.c - src/lzma/C/Archive/7z/7zHeader.c - src/lzma/C/Archive/7z/7zIn.c - src/lzma/C/Archive/7z/7zItem.c - src/lzma/C/Archive/7z/7zMethodID.c - src/lzma/C/Compress/Branch/BranchX86.c - src/lzma/C/Compress/Branch/BranchX86_2.c - src/lzma/C/Compress/Lzma/LzmaDecode.c -) - -if(BEOS) +if(HAIKU) # We add this explicitly, since we don't want CMake to think this - # is a C++ project unless we're on BeOS. - set(PHYSFS_BEOS_SRCS src/platform_beos.cpp) + # is a C++ project unless we're on Haiku. + set(PHYSFS_CPP_SRCS src/physfs_platform_haiku.cpp) find_library(BE_LIBRARY be) find_library(ROOT_LIBRARY root) set(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${BE_LIBRARY} ${ROOT_LIBRARY}) endif() +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(WINRT TRUE) +endif() + +if(WINRT) + set(PHYSFS_CPP_SRCS src/physfs_platform_winrt.cpp) +endif() + +if(UNIX AND NOT WINDOWS AND NOT APPLE) # (MingW and such might be UNIX _and_ WINDOWS!) + find_library(PTHREAD_LIBRARY pthread) + if(PTHREAD_LIBRARY) + set(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${PTHREAD_LIBRARY}) + endif() +endif() + # Almost everything is "compiled" here, but things that don't apply to the # build are #ifdef'd out. This is to make it easy to embed PhysicsFS into # another project or bring up a new build system: just compile all the source @@ -120,154 +71,99 @@ set(PHYSFS_SRCS src/physfs.c src/physfs_byteorder.c src/physfs_unicode.c - src/platform_posix.c - src/platform_unix.c - src/platform_macosx.c - src/platform_windows.c - src/archiver_dir.c - src/archiver_unpacked.c - src/archiver_grp.c - src/archiver_hog.c - src/archiver_lzma.c - src/archiver_mvl.c - src/archiver_qpak.c - src/archiver_wad.c - src/archiver_zip.c - src/archiver_slb.c - src/archiver_iso9660.c - ${PHYSFS_BEOS_SRCS} + src/physfs_platform_posix.c + src/physfs_platform_unix.c + src/physfs_platform_windows.c + src/physfs_platform_os2.c + src/physfs_platform_qnx.c + src/physfs_archiver_dir.c + src/physfs_archiver_unpacked.c + src/physfs_archiver_grp.c + src/physfs_archiver_hog.c + src/physfs_archiver_7z.c + src/physfs_archiver_mvl.c + src/physfs_archiver_qpak.c + src/physfs_archiver_wad.c + src/physfs_archiver_zip.c + src/physfs_archiver_slb.c + src/physfs_archiver_iso9660.c + src/physfs_archiver_vdf.c + ${PHYSFS_CPP_SRCS} + ${PHYSFS_M_SRCS} ) -# platform layers ... - -if(UNIX) - if(BEOS) - set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) - set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) - set(HAVE_PTHREAD_H TRUE) - else() - check_include_file(sys/ucred.h HAVE_UCRED_H) - if(HAVE_UCRED_H) - add_definitions(-DPHYSFS_HAVE_SYS_UCRED_H=1) - set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) - endif() - - check_include_file(mntent.h HAVE_MNTENT_H) - if(HAVE_MNTENT_H) - add_definitions(-DPHYSFS_HAVE_MNTENT_H=1) - set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) - endif() - - # !!! FIXME: Solaris fails this, because mnttab.h implicitly - # !!! FIXME: depends on other system headers. :( - #check_include_file(sys/mnttab.h HAVE_SYS_MNTTAB_H) - check_c_source_compiles(" - #include - #include - int main(int argc, char **argv) { return 0; } - " HAVE_SYS_MNTTAB_H) - - if(HAVE_SYS_MNTTAB_H) - add_definitions(-DPHYSFS_HAVE_SYS_MNTTAB_H=1) - set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) - endif() - - check_include_file(pthread.h HAVE_PTHREAD_H) - if(HAVE_PTHREAD_H) - set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) - find_library(PTHREAD_LIBRARY pthread) - if(PTHREAD_LIBRARY) - set(OPTIONAL_LIBRARY_LIBS ${OPTIONAL_LIBRARY_LIBS} ${PTHREAD_LIBRARY}) - endif() - endif() - endif() -endif() - -if(WINDOWS) - set(PHYSFS_HAVE_CDROM_SUPPORT TRUE) - set(PHYSFS_HAVE_THREAD_SUPPORT TRUE) -endif() - -if(NOT PHYSFS_HAVE_CDROM_SUPPORT) - add_definitions(-DPHYSFS_NO_CDROM_SUPPORT=1) - message(WARNING " ***") - message(WARNING " *** There is no CD-ROM support in this build!") - message(WARNING " *** PhysicsFS will just pretend there are no discs.") - message(WARNING " *** This may be fine, depending on how PhysicsFS is used,") - message(WARNING " *** but is this what you REALLY wanted?") - message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)") - message(WARNING " ***") -endif() - -if(PHYSFS_HAVE_THREAD_SUPPORT) - add_definitions(-D_REENTRANT -D_THREAD_SAFE) -else() - add_definitions(-DPHYSFS_NO_THREAD_SUPPORT=1) - message(WARNING " ***") - message(WARNING " *** There is no thread support in this build!") - message(WARNING " *** PhysicsFS will NOT be reentrant!") - message(WARNING " *** This may be fine, depending on how PhysicsFS is used,") - message(WARNING " *** but is this what you REALLY wanted?") - message(WARNING " *** (Maybe fix CMakeLists.txt, or write a platform driver?)") - message(WARNING " ***") -endif() - - # Archivers ... +# These are (mostly) on by default now, so these options are only useful for +# disabling them. option(PHYSFS_ARCHIVE_ZIP "Enable ZIP support" TRUE) -if(PHYSFS_ARCHIVE_ZIP) - add_definitions(-DPHYSFS_SUPPORTS_ZIP=1) +if(NOT PHYSFS_ARCHIVE_ZIP) + add_definitions(-DPHYSFS_SUPPORTS_ZIP=0) endif() option(PHYSFS_ARCHIVE_7Z "Enable 7zip support" TRUE) -if(PHYSFS_ARCHIVE_7Z) - add_definitions(-DPHYSFS_SUPPORTS_7Z=1) - # !!! FIXME: rename to 7z.c? - set(PHYSFS_SRCS ${PHYSFS_SRCS} ${LZMA_SRCS}) +if(NOT PHYSFS_ARCHIVE_7Z) + add_definitions(-DPHYSFS_SUPPORTS_7Z=0) endif() option(PHYSFS_ARCHIVE_GRP "Enable Build Engine GRP support" TRUE) -if(PHYSFS_ARCHIVE_GRP) - add_definitions(-DPHYSFS_SUPPORTS_GRP=1) +if(NOT PHYSFS_ARCHIVE_GRP) + add_definitions(-DPHYSFS_SUPPORTS_GRP=0) endif() option(PHYSFS_ARCHIVE_WAD "Enable Doom WAD support" TRUE) -if(PHYSFS_ARCHIVE_WAD) - add_definitions(-DPHYSFS_SUPPORTS_WAD=1) +if(NOT PHYSFS_ARCHIVE_WAD) + add_definitions(-DPHYSFS_SUPPORTS_WAD=0) endif() option(PHYSFS_ARCHIVE_HOG "Enable Descent I/II HOG support" TRUE) -if(PHYSFS_ARCHIVE_HOG) - add_definitions(-DPHYSFS_SUPPORTS_HOG=1) +if(NOT PHYSFS_ARCHIVE_HOG) + add_definitions(-DPHYSFS_SUPPORTS_HOG=0) endif() option(PHYSFS_ARCHIVE_MVL "Enable Descent I/II MVL support" TRUE) -if(PHYSFS_ARCHIVE_MVL) - add_definitions(-DPHYSFS_SUPPORTS_MVL=1) +if(NOT PHYSFS_ARCHIVE_MVL) + add_definitions(-DPHYSFS_SUPPORTS_MVL=0) endif() option(PHYSFS_ARCHIVE_QPAK "Enable Quake I/II QPAK support" TRUE) -if(PHYSFS_ARCHIVE_QPAK) - add_definitions(-DPHYSFS_SUPPORTS_QPAK=1) +if(NOT PHYSFS_ARCHIVE_QPAK) + add_definitions(-DPHYSFS_SUPPORTS_QPAK=0) endif() option(PHYSFS_ARCHIVE_SLB "Enable I-War / Independence War SLB support" TRUE) -if(PHYSFS_ARCHIVE_SLB) - add_definitions(-DPHYSFS_SUPPORTS_SLB=1) +if(NOT PHYSFS_ARCHIVE_SLB) + add_definitions(-DPHYSFS_SUPPORTS_SLB=0) endif() option(PHYSFS_ARCHIVE_ISO9660 "Enable ISO9660 support" TRUE) -if(PHYSFS_ARCHIVE_ISO9660) - add_definitions(-DPHYSFS_SUPPORTS_ISO9660=1) +if(NOT PHYSFS_ARCHIVE_ISO9660) + add_definitions(-DPHYSFS_SUPPORTS_ISO9660=0) +endif() + +option(PHYSFS_ARCHIVE_VDF "Enable Gothic I/II VDF archive support" TRUE) +if(NOT PHYSFS_ARCHIVE_VDF) + add_definitions(-DPHYSFS_SUPPORTS_VDF=0) endif() option(PHYSFS_BUILD_STATIC "Build static library" TRUE) if(PHYSFS_BUILD_STATIC) add_library(physfs-static STATIC ${PHYSFS_SRCS}) - set_target_properties(physfs-static PROPERTIES OUTPUT_NAME "physfs") + # Don't rename this on Windows, since DLLs will also produce an import + # library named "physfs.lib" which would conflict; Unix tend to like the + # same library name with a different extension for static libs, but + # Windows can just have a separate name. + if(NOT MSVC) + set_target_properties(physfs-static PROPERTIES OUTPUT_NAME "physfs") + endif() + if(WINRT) + # Ignore LNK4264 warnings; we don't author any WinRT components, just consume them, so we're okay in a static library. + set_target_properties(physfs-static PROPERTIES VS_WINRT_COMPONENT True) + set_target_properties(physfs-static PROPERTIES STATIC_LIBRARY_FLAGS "/ignore:4264") + endif() + set(PHYSFS_LIB_TARGET physfs-static) set(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs-static") endif() @@ -275,8 +171,12 @@ endif() option(PHYSFS_BUILD_SHARED "Build shared library" TRUE) if(PHYSFS_BUILD_SHARED) add_library(physfs SHARED ${PHYSFS_SRCS}) + set_target_properties(physfs PROPERTIES MACOSX_RPATH 1) set_target_properties(physfs PROPERTIES VERSION ${PHYSFS_VERSION}) set_target_properties(physfs PROPERTIES SOVERSION ${PHYSFS_SOVERSION}) + if(WINRT) + set_target_properties(physfs PROPERTIES VS_WINRT_COMPONENT True) + endif() target_link_libraries(physfs ${OPTIONAL_LIBRARY_LIBS} ${OTHER_LDFLAGS}) set(PHYSFS_LIB_TARGET physfs) set(PHYSFS_INSTALL_TARGETS ${PHYSFS_INSTALL_TARGETS} ";physfs") @@ -287,7 +187,7 @@ if(NOT PHYSFS_BUILD_SHARED AND NOT PHYSFS_BUILD_STATIC) endif() # CMake FAQ says I need this... -if(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC) +if(PHYSFS_BUILD_SHARED AND PHYSFS_BUILD_STATIC AND NOT WINDOWS) set_target_properties(physfs PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(physfs-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) endif() @@ -304,7 +204,7 @@ if(PHYSFS_BUILD_TEST) if(READLINE_LIBRARY) set(HAVE_SYSTEM_READLINE TRUE) set(TEST_PHYSFS_LIBS ${TEST_PHYSFS_LIBS} ${READLINE_LIBRARY} ${CURSES_LIBRARY}) - include_directories(${READLINE_H} ${HISTORY_H}) + include_directories(SYSTEM ${READLINE_H} ${HISTORY_H}) add_definitions(-DPHYSFS_HAVE_READLINE=1) endif() endif() @@ -358,7 +258,7 @@ if(UNIX) ) endif() -if(UNIX AND NOT APPLE) +if(NOT MSVC) configure_file( "extras/physfs.pc.in" "extras/physfs.pc" @@ -366,7 +266,7 @@ if(UNIX AND NOT APPLE) ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/extras/physfs.pc" - DESTINATION "lib/pkgconfig" + DESTINATION "lib${LIB_SUFFIX}/pkgconfig" ) endif() @@ -387,8 +287,8 @@ message_bool_option("HOG support" PHYSFS_ARCHIVE_HOG) message_bool_option("MVL support" PHYSFS_ARCHIVE_MVL) message_bool_option("QPAK support" PHYSFS_ARCHIVE_QPAK) message_bool_option("SLB support" PHYSFS_ARCHIVE_SLB) -message_bool_option("CD-ROM drive support" PHYSFS_HAVE_CDROM_SUPPORT) -message_bool_option("Thread safety" PHYSFS_HAVE_THREAD_SUPPORT) +message_bool_option("VDF support" PHYSFS_ARCHIVE_VDF) +message_bool_option("ISO9660 support" PHYSFS_ARCHIVE_ISO9660) message_bool_option("Build static library" PHYSFS_BUILD_STATIC) message_bool_option("Build shared library" PHYSFS_BUILD_SHARED) message_bool_option("Build stdio test program" PHYSFS_BUILD_TEST) diff --git a/love/src/jni/physfs-2.1.0/LICENSE.txt b/love/src/jni/physfs-3.0.1/LICENSE.txt similarity index 55% rename from love/src/jni/physfs-2.1.0/LICENSE.txt rename to love/src/jni/physfs-3.0.1/LICENSE.txt index a3128711..90018f2d 100644 --- a/love/src/jni/physfs-2.1.0/LICENSE.txt +++ b/love/src/jni/physfs-3.0.1/LICENSE.txt @@ -1,5 +1,5 @@ - Copyright (c) 2001-2011 Ryan C. Gordon and others. + Copyright (c) 2001-2017 Ryan C. Gordon and others. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from @@ -21,20 +21,3 @@ Ryan C. Gordon - - - -Notes, separate from the license. This is not legal advice. - -Versions of PhysicsFS prior to 0.1.9 are licensed under the GNU Lesser General - Public License, which restricts you significantly more. For your own safety, - please make sure you've got 0.1.9 or later if you plan to use physfs in a - commercial or closed-source project. - -Optional pieces of PhysicsFS may fall under other licenses, please consult -your lawyer for legal advice, which this is not... - - lzma: if you enable LZMA (7zip) support, PhysicsFS uses the lzma sdk. - It uses the LGPL license, with exceptions for closed-source programs. - Please see lzma/lzma.txt for details. - diff --git a/love/src/jni/physfs-3.0.1/README.txt b/love/src/jni/physfs-3.0.1/README.txt new file mode 100644 index 00000000..2c24a503 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/README.txt @@ -0,0 +1,9 @@ + +PhysicsFS; a portable, flexible file i/o abstraction. + + https://icculus.org/physfs/ + +Please see the docs directory for documentation. + +Please see LICENSE.txt for licensing information. + diff --git a/love/src/jni/physfs-2.1.0/docs/CHANGELOG.txt b/love/src/jni/physfs-3.0.1/docs/CHANGELOG.txt similarity index 86% rename from love/src/jni/physfs-2.1.0/docs/CHANGELOG.txt rename to love/src/jni/physfs-3.0.1/docs/CHANGELOG.txt index fc18f779..649f0f1d 100644 --- a/love/src/jni/physfs-2.1.0/docs/CHANGELOG.txt +++ b/love/src/jni/physfs-3.0.1/docs/CHANGELOG.txt @@ -6,6 +6,6 @@ The changelog is no longer maintained by hand. It made sense to have a single If you want a list of changes, updated in real time, just point your web browser here: - http://hg.icculus.org/icculus/physfs/ + https://hg.icculus.org/icculus/physfs/ diff --git a/love/src/jni/physfs-2.1.0/docs/CREDITS.txt b/love/src/jni/physfs-3.0.1/docs/CREDITS.txt similarity index 89% rename from love/src/jni/physfs-2.1.0/docs/CREDITS.txt rename to love/src/jni/physfs-3.0.1/docs/CREDITS.txt index 514b3678..f7da37f7 100644 --- a/love/src/jni/physfs-2.1.0/docs/CREDITS.txt +++ b/love/src/jni/physfs-3.0.1/docs/CREDITS.txt @@ -52,6 +52,9 @@ Mac OS X improvements: iPhone support: Christian Gmeiner +WinRT support: + Martin Ahrnbom + HOG archiver, MVL archiver: Bradley Bell @@ -139,9 +142,28 @@ Bug fixes: Bug fixes: Andreas Karlsson +Bug fixes: + Michael Bacon + +Bug fixes: + Xian Nox + +Bug fixes: + Reto Schneider + pkg-config support: Jonas Kulla +Bug fixes, +VDF archiver: + Francesco Bertolaccini + +CMake fixes: + Tobias Markus + +Bug fixes, + Rémi Verschelde + Other stuff: Your name here! Patches go to icculus@icculus.org ... diff --git a/love/src/jni/physfs-2.1.0/docs/Doxyfile b/love/src/jni/physfs-3.0.1/docs/Doxyfile similarity index 100% rename from love/src/jni/physfs-2.1.0/docs/Doxyfile rename to love/src/jni/physfs-3.0.1/docs/Doxyfile diff --git a/love/src/jni/physfs-3.0.1/docs/INSTALL.txt b/love/src/jni/physfs-3.0.1/docs/INSTALL.txt new file mode 100644 index 00000000..781b9735 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/docs/INSTALL.txt @@ -0,0 +1,173 @@ + +The latest PhysicsFS information and releases can be found at: + https://icculus.org/physfs/ + +Building is (ahem) very easy. + + +ALL PLATFORMS: + +Please read the text file LICENSE.txt in the root of the source tree. + The license is extremely liberal, even to closed-source, commercial + applications. + +If you've got Doxygen (http://www.doxygen.org/) installed, you can run it + without any command line arguments in the root of the source tree to generate + the API reference (or build the "docs" target from your build system). This + is optional. You can browse the API docs online here: + + https://icculus.org/physfs/docs/ + + + +BUILD IT WITH YOUR OWN PROGRAM: + +If you don't care about formal packaging: just add everything in the "src" +directory to whatever you use to build your program and compile it along with +everything else, and you're done. It should compile with any reasonable +ANSI C compiler, should build cleanly even with excessive compiler warnings +enabled, needs no extra configuration, and allows static linking. +WinRT and Haiku need C++ compilers for their system APIs, but if you aren't on +these platforms and don't have a C++ compiler, don't build the .cpp files. +Likewise: Apple platforms (macOS, iOS, etc) need an Objective-C compiler, but +if you aren't on these platforms and don't have a Objective-C compiler, don't +build the .m file. Everything you need is in the .c sources. + +If this all worked for your specific project, you can stop reading now. + + + +UNIX: + +You will need CMake (https://www.cmake.org/) 2.4 or later installed. + +Make a directory, wherever you like. This will be your build directory. + +Chdir to your build directory. Run "cmake /where/i/unpacked/physfs" to + generate Makefiles. You can then run "ccmake ." and customize the build, + but the defaults are probably okay. You can have CMake generate KDevelop + or Ninja project files or whatever, if you prefer these. + +Run "make". PhysicsFS will now build. + +As root, run "make install". + If you get sick of the library, run "make uninstall" as root + and it will remove all traces of the library from the system paths. + +Once you are satisfied, you can delete the build directory. + +Primary Unix development is done with GNU/Linux, but PhysicsFS is known to + work out of the box with several flavors of Unix. It it doesn't work, patches + to get it running can be sent to icculus@icculus.org. + + +Windows: + +If building with Cygwin, mingw32, MSYS, or something else that uses the GNU + toolchain, follow the Unix instructions, above. + +If you want to use Visual Studio, nmake, or the Platform SDK, you will need + CMake (https://www.cmake.org/) 2.4 or later installed. Point CMake at the + CMakeLists.txt file in the root of the source directory and hit the + "Configure" button. After telling it what type of compiler you are targeting + (Borland, Visual Studio, etc), CMake will process for while and then give you + a list of options you can change (what archivers you want to support, etc). + If you aren't sure, the defaults are probably fine. Hit the "Configure" + button again, then "OK" once configuration has completed with options that + match your liking. Now project files for your favorite programming + environment will be generated for you in the directory you specified. + Go there and use them to build PhysicsFS. + +PhysicsFS will only link directly against system libraries that have existed + since Windows NT 3.51. If there's a newer API we want to use, we try to + dynamically load it at runtime and fallback to a reasonable behaviour when + we can't find it. Note that Windows 98 and later _should_ + work if you use the Microsoft Layer for Unicode (UNICOWS.DLL) to provide + some missing system APIs, but this is no longer tested as of PhysicsFS 2.1.0. + PhysicsFS 2.0.x is known to work with Windows 95 without UNICOWS.DLL. + +PhysicsFS works on 32-bit and 64-bit Windows. There is no 16-bit Windows + support at all. Windows RT is covered below. + + +Windows RT: + +Windows RT (Windows Phone, Windows Store, UWP) 8.0 and later are supported. +Make sure you include both physfs_platform_windows.c _and_ +physfs_platform_winrt.cpp in your build, and that the C++ file has +"Consume Windows Runtime Extension" set to "Yes" in its Visual Studio +properties (from the command line, you want to compile this file with the +"/ZW" compiler switch). CMake can, in theory, generate a project file for +WinRT if you pick a recent Visual Studio target, choose manual cross-compile +options, and set the system name to "WindowsPhone" or "WindowsStore" and the +correct OS version (8.0 or later). + + +PocketPC/WindowsCE: + +Support for PocketPC was removed in PhysicsFS 2.1.0. This was known to work + in the 1.0 releases, but wasn't tested in 2.0 and later. PhysicsFS should + work on modern Windows Phones (see "Windows RT" section). + + +macOS: + +You will need CMake (https://www.cmake.org/) 2.4 or later installed. + +You can either generate a Unix makefile with CMake, or generate an Xcode + project, whichever makes you more comfortable. + +PowerPC and Intel Macs should both be supported. + + +MAC OS 8/9 ("Mac OS Classic"): + +Classic Mac OS support has been dropped in PhysicsFS 2.0. Apple hasn't updated + pre-OSX versions in more than a decade at this point, none of the hardware + they've shipped will boot it for almost as many years, and finding + developer tools for it is becoming almost impossible. As the switch to Intel + hardware has removed the "Classic" emulation environment, it was time to + remove support from PhysicsFS. That being said, the PhysicsFS 1.0 branch can + still target back to Mac OS 8.5, so you can use that if you need support for + this legacy OS. We still very much support modern macOS, though: see above. + + +Emscripten: + +Use the "Unix" instructions, above. You can install the Emscripten SDK and use + the extras/buildbot-emscripten.sh script to automate this for you. + + +BeOS, Zeta, YellowTab: + +BeOS support was dropped in PhysicsFS 2.1.0. Consider installing Haiku, which +we still support. + + +Haiku: + +Use the "Unix" instructions, above. + + +OS/2: + +OS/2 is known to work with OpenWatcom and GCC-based compilers. I couldn't get +an OS/2 port of CMake to generate OpenWatcom project files (although it should +be able to do that in theory), it should be able to do Unix Makefiles with +GCC. It might be easier to just compile PhysicsFS along with the rest of +your project on this platform. + + + +OTHER PLATFORMS: + +Many Unix-like platforms might "just work" with CMake. Some of these platforms + are known to have worked at one time, but have not been heavily tested, if + tested at all. PhysicsFS is, as far as we know, 64-bit and byteorder clean, + and is known to compile on several compilers across many platforms. To + implement a new platform or archiver, please read the heavily-commented + physfs_internal.h and look at the physfs_platform_* and physfs_archiver_* + source files for examples. + +--ryan. (icculus@icculus.org) + diff --git a/love/src/jni/physfs-3.0.1/docs/README-API-documentation.txt b/love/src/jni/physfs-3.0.1/docs/README-API-documentation.txt new file mode 100644 index 00000000..65f9b821 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/docs/README-API-documentation.txt @@ -0,0 +1,18 @@ +The API documentation is readable in a few ways: + +- Read physfs.h; it's _heavily_ documented and the primary source of reference + documentation for the library. +- Run Doxygen over the header, which produces nicer-to-browse documentation in + HTML, LaTeX, manpage, etc formats. This is done for you if Doxygen is + installed and you build the "docs" target in whatever project files CMake + generated for you. +- Too much trouble? We generated the HTML reference for you, online here: + + https://icculus.org/physfs/docs/ + +- We would love well-written tutorials for the latest version of PhysicsFS! + If you write one, we would love to list it here. Drop me a line about it: + icculus@icculus.org ... Thanks! + +--ryan. + diff --git a/love/src/jni/physfs-2.1.0/docs/TODO.txt b/love/src/jni/physfs-3.0.1/docs/TODO.txt similarity index 62% rename from love/src/jni/physfs-2.1.0/docs/TODO.txt rename to love/src/jni/physfs-3.0.1/docs/TODO.txt index e69f9d55..d768a5ce 100644 --- a/love/src/jni/physfs-2.1.0/docs/TODO.txt +++ b/love/src/jni/physfs-3.0.1/docs/TODO.txt @@ -4,9 +4,8 @@ These are in no particular order. Some might be dupes, some might be done already, some might be bad ideas. -From http://icculus.org/pipermail/physfs/2009-March/000698.html ... +From https://icculus.org/pipermail/physfs/2009-March/000698.html ... -- Archives formats provided by the implementation. - Write support for various archives. I haven't decided how to do this yet, but I'd like to. - Add an API to expose a file's extended attributes to the application? @@ -15,17 +14,13 @@ From http://icculus.org/pipermail/physfs/2009-March/000698.html ... - Clean up the sources to match my ever-changing coding style. :) -From http://icculus.org/pipermail/physfs/2010-January/000821.html ... -- Plugin system for the archive handlers - - -From http://icculus.org/pipermail/physfs/2010-January/000826.html ... +From https://icculus.org/pipermail/physfs/2010-January/000826.html ... - Lua bindings -From http://icculus.org/pipermail/physfs/2010-January/000833.html ... +From https://icculus.org/pipermail/physfs/2010-January/000833.html ... - SWIG bindings @@ -37,21 +32,15 @@ From old TODO.txt... important, since streaming archives aren't of much value to games (which is why zipfiles are king: random access), but it could have uses for, say, an installer/updater. -- profile string list interpolation. -- We have two different ways to find dir entries in zip.c. - Do symlinks in zip archiver work when they point to dirs? - Enable more warnings? - Use __cdecl in physfs.h? - Look for FIXMEs (many marked with "!!!" in comments). -- Find some way to relax or remove the security model for external tools. - fscanf and fprintf support in extras dir. - Sanity check byte order at runtime. - Memory locking? - General code audit. - Multiple write dirs with mount points? -- Replace code from SDL... -- Should file enumeration return an error or set error state? -- Write up a simple HOWTO on embedding physicsfs in another project. Other stuff I thought of... @@ -62,17 +51,9 @@ Other stuff I thought of... - Doxygen replacement? (manpages suck.) - Fix coding standards to match. - See if we can ditch some #include lines... -- We lost Vista symlink support when removing isSymLink(). Pull it back from - revision control. -- PHYSFS_exists() fails if you mountIo with a NULL filename. We need to decide - how this API should work. -- ZIP64 support? - LZMA support in zip archiver? - bzip2 support in zip archiver? -- rewrite 7zip archiver. -- ryanify iso9660 code. - Reduce the BAIL and GOTO macro use. A lot of these don't add anything. -- Modernize CMakeLists.txt - Change the term "search path" to something less confusing. Probably other stuff. Requests and recommendations are welcome. diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/AssemblyInfo.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/AssemblyInfo.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/AssemblyInfo.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/AssemblyInfo.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.NET.csproj b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.NET.csproj similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.NET.csproj rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.NET.csproj diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.NET.sln b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.NET.sln similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.NET.sln rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.NET.sln diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFSFileStream.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFSFileStream.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFSFileStream.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFSFileStream.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS_DLL.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS_DLL.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/PhysFS_DLL.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/PhysFS_DLL.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/README.txt b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/README.txt similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/README.txt rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/README.txt diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/App.ico b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/App.ico similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/App.ico rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/App.ico diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/AssemblyInfo.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/AssemblyInfo.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/AssemblyInfo.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/AssemblyInfo.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestApp.csproj b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestApp.csproj similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestApp.csproj rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestApp.csproj diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestApp.sln b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestApp.sln similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestApp.sln rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestApp.sln diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestAppForm.cs b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestAppForm.cs similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestAppForm.cs rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestAppForm.cs diff --git a/love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestAppForm.resx b/love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestAppForm.resx similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/PhysFS.NET/TestApp/TestAppForm.resx rename to love/src/jni/physfs-3.0.1/extras/PhysFS.NET/TestApp/TestAppForm.resx diff --git a/love/src/jni/physfs-3.0.1/extras/README-CSharp.txt b/love/src/jni/physfs-3.0.1/extras/README-CSharp.txt new file mode 100644 index 00000000..863c0db1 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/README-CSharp.txt @@ -0,0 +1,11 @@ +There used to be C# bindings in this directory, but they have been +unmaintained for many years. + +Instead, there is a more modern PhysicsFS wrapper for .NET available. + +You can find it at https://github.com/frabert/SharpPhysFS + +Thanks to Francesco Bertolaccini for his efforts on that project! + +--ryan. + diff --git a/love/src/jni/physfs-2.1.0/extras/abs-file.h b/love/src/jni/physfs-3.0.1/extras/abs-file.h similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/abs-file.h rename to love/src/jni/physfs-3.0.1/extras/abs-file.h diff --git a/love/src/jni/physfs-3.0.1/extras/buildbot-checker.sh b/love/src/jni/physfs-3.0.1/extras/buildbot-checker.sh new file mode 100755 index 00000000..6c9a5f76 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/buildbot-checker.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# This is a script used by some Buildbot buildslaves to push the project +# through Clang's static analyzer and prepare the output to be uploaded +# back to the buildmaster. You might find it useful too. + +# Install Clang (you already have it on Mac OS X, apt-get install clang +# on Ubuntu, etc), +# or download checker at http://clang-analyzer.llvm.org/ and unpack it in +# /usr/local ... update CHECKERDIR as appropriate. + +FINALDIR="$1" + +CHECKERDIR="/usr/local/checker-279" +if [ ! -d "$CHECKERDIR" ]; then + echo "$CHECKERDIR not found. Trying /usr/share/clang ..." 1>&2 + CHECKERDIR="/usr/share/clang/scan-build" +fi + +if [ ! -d "$CHECKERDIR" ]; then + echo "$CHECKERDIR not found. Giving up." 1>&2 + exit 1 +fi + +if [ -z "$MAKE" ]; then + OSTYPE=`uname -s` + if [ "$OSTYPE" == "Linux" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + elif [ "$OSTYPE" = "Darwin" ]; then + NCPU=`sysctl -n hw.ncpu` + elif [ "$OSTYPE" = "SunOS" ]; then + NCPU=`/usr/sbin/psrinfo |wc -l |sed -e 's/^ *//g;s/ *$//g'` + else + NCPU=1 + fi + + if [ -z "$NCPU" ]; then + NCPU=1 + elif [ "$NCPU" = "0" ]; then + NCPU=1 + fi + + MAKE="make -j$NCPU" +fi + +echo "\$MAKE is '$MAKE'" +MAKECMD="$MAKE" +unset MAKE # prevent warnings about jobserver mode. + +set -x +set -e + +cd `dirname "$0"` +cd .. + +rm -rf checker-buildbot analysis +if [ ! -z "$FINALDIR" ]; then + rm -rf "$FINALDIR" +fi + +mkdir checker-buildbot +cd checker-buildbot + +# We turn off deprecated declarations, because we don't care about these warnings during static analysis. +# The -Wno-liblto is new since our checker-279 upgrade, I think; checker otherwise warns "libLTO.dylib relative to clang installed dir not found" + +# You might want to do this for CMake-backed builds instead... +PATH="$CHECKERDIR/bin:$PATH" scan-build -o analysis cmake -Wno-dev -DPHYSFS_BUILD_SHARED=False -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS="-Wno-deprecated-declarations" -DCMAKE_EXE_LINKER_FLAGS="-Wno-liblto" .. + +# ...or run configure without the scan-build wrapper... +#CC="$CHECKERDIR/libexec/ccc-analyzer" CFLAGS="-O0 -Wno-deprecated-declarations" LDFLAGS="-Wno-liblto" ../configure --enable-assertions=enabled + +rm -rf analysis +PATH="$CHECKERDIR/bin:$PATH" scan-build -o analysis $MAKECMD + +if [ `ls -A analysis |wc -l` == 0 ] ; then + mkdir analysis/zarro + echo 'Zarro boogsStatic analysis: no issues to report.' >analysis/zarro/index.html +fi + +mv analysis/* ../analysis +rmdir analysis # Make sure this is empty. +cd .. +chmod -R a+r analysis +chmod -R go-w analysis +find analysis -type d -exec chmod a+x {} \; +if [ -x /usr/bin/xattr ]; then find analysis -exec /usr/bin/xattr -d com.apple.quarantine {} \; 2>/dev/null ; fi + +if [ ! -z "$FINALDIR" ]; then + mv analysis "$FINALDIR" +else + FINALDIR=analysis +fi + +rm -rf checker-buildbot + +echo "Done. Final output is in '$FINALDIR' ..." + +# end of checker-buildbot.sh ... + diff --git a/love/src/jni/physfs-3.0.1/extras/buildbot-emscripten.sh b/love/src/jni/physfs-3.0.1/extras/buildbot-emscripten.sh new file mode 100755 index 00000000..79f20a3e --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/buildbot-emscripten.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +if [ -z "$SDKDIR" ]; then + SDKDIR="/emsdk_portable" +fi + +ENVSCRIPT="$SDKDIR/emsdk_env.sh" +if [ ! -f "$ENVSCRIPT" ]; then + echo "ERROR: This script expects the Emscripten SDK to be in '$SDKDIR'." 1>&2 + echo "ERROR: Set the \$SDKDIR environment variable to override this." 1>&2 + exit 1 +fi + +TARBALL="$1" +if [ -z $1 ]; then + TARBALL=physfs-emscripten.tar.xz +fi + +cd `dirname "$0"` +cd .. +PHYSFSBASE=`pwd` + +if [ -z "$MAKE" ]; then + OSTYPE=`uname -s` + if [ "$OSTYPE" == "Linux" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + elif [ "$OSTYPE" = "Darwin" ]; then + NCPU=`sysctl -n hw.ncpu` + elif [ "$OSTYPE" = "SunOS" ]; then + NCPU=`/usr/sbin/psrinfo |wc -l |sed -e 's/^ *//g;s/ *$//g'` + else + NCPU=1 + fi + + if [ -z "$NCPU" ]; then + NCPU=1 + elif [ "$NCPU" = "0" ]; then + NCPU=1 + fi + + MAKE="make -j$NCPU" +fi + +echo "\$MAKE is '$MAKE'" +MAKECMD="$MAKE" +unset MAKE # prevent warnings about jobserver mode. + +echo "Setting up Emscripten SDK environment..." +source "$ENVSCRIPT" + +echo "Setting up..." +cd "$PHYSFSBASE" +rm -rf buildbot +mkdir buildbot +cd buildbot + +echo "Configuring..." +emcmake cmake -G "Unix Makefiles" -DPHYSFS_BUILD_SHARED=False -DCMAKE_BUILD_TYPE=MinSizeRel .. || exit $? + +echo "Building..." +emmake $MAKECMD || exit $? + +set -e +rm -rf "$TARBALL" physfs-emscripten +mkdir -p physfs-emscripten +echo "Archiving to '$TARBALL' ..." +cp ../src/physfs.h libphysfs.a physfs-emscripten +chmod -R a+r physfs-emscripten +chmod a+x physfs-emscripten +chmod -R go-w physfs-emscripten +tar -cJvvf "$TARBALL" physfs-emscripten +echo "Done." + +exit 0 + +# end of emscripten-buildbot.sh ... + diff --git a/love/src/jni/physfs-3.0.1/extras/buildbot-os2.sh b/love/src/jni/physfs-3.0.1/extras/buildbot-os2.sh new file mode 100755 index 00000000..4119c877 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/buildbot-os2.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# This is used by the buildbot to cross-compile for OS/2 from Linux, using +# OpenWatcom. In an ideal world, we wouldn't need this, but we need a few +# things to do this "properly" ... +# +# - OS/2 running as a VMware guest on the build machine +# - Buildbot-worker running on that OS/2 guest +# - CMake for OS/2 that... +# - ... has Open Watcom compiler support and... +# - ... a Watcom WMake project generator. +# +# Some of these things are doable (there is a CMake port for OS/2, you can +# use GCC with it), but since OpenWatcom will just target OS/2 on Linux just +# like it could on OS/2, it's easier and more efficient to just have a +# buildbot script compile it here. +# +# Note that we just blast all the C files through the wcc386 compiler and +# skip CMake entirely. We should fix this at some point. + +set -e + +ZIPFILE="$1" +if [ -z $ZIPFILE ]; then + ZIPFILE=physfs-os2.zip +fi + +export WATCOM="/usr/local/share/watcom" +export PATH="$PATH:$WATCOM/binl" + +CFLAGS="-i=\"$WATCOM/h;$WATCOM/h/os2;../src\" -wx -d0 -otexan -6r -zq -bt=os2 -fo=.obj -mf" +WLIBFLAGS="-b -c -n -q -p=512" + +cd `dirname "$0"` +cd .. +mkdir -p buildbot +cd buildbot + +rm -f test_physfs.obj + +OKAY="1" +for src in ../src/*.c ; do + echo wcc386 $src $CFLAGS + wcc386 $src $CFLAGS || OKAY="0" +done + +if [ "$OKAY" == "1" ]; then + echo wlib $WLIBFLAGS physfs.lib *.obj + wlib $WLIBFLAGS physfs.lib *.obj || OKAY="0" +fi + +echo wcc386 ../test/test_physfs.c $CFLAGS +wcc386 ../test/test_physfs.c $CFLAGS || OKAY="0" + +if [ "$OKAY" == "1" ]; then + LDFLAGS="name test_physfs d all sys os2v2 op m libr physfs op q op symf FIL test_physfs.obj" + echo wlink $LDFLAGS + wlink $LDFLAGS || OKAY="0" +fi + +if [ "$OKAY" == "1" ]; then + F=`file test_physfs.exe` + echo "$F" + if [ "$F" != 'test_physfs.exe: MS-DOS executable, LX for OS/2 (console) i80386' ]; then + echo 1>&2 "ERROR: final binary doesn't appear to be OS/2 executable." + OKAY=0 + fi +fi + +if [ "$OKAY" == "1" ]; then + echo 1>&2 "Build succeeded." + set -e + rm -rf "$ZIPFILE" physfs-os2 + mkdir -p physfs-os2 + echo "Zipping to '$ZIPFILE' ..." + cp ../src/physfs.h physfs.lib physfs-os2 + chmod -R a+r physfs-os2 + chmod a+x physfs-os2 + chmod -R go-w physfs-os2 + zip -9r "$ZIPFILE" physfs-os2 + echo "Done." + exit 0 +else + echo 1>&2 "Build failed." + exit 1 +fi + diff --git a/love/src/jni/physfs-3.0.1/extras/buildbot-raspberrypi.sh b/love/src/jni/physfs-3.0.1/extras/buildbot-raspberrypi.sh new file mode 100755 index 00000000..61064d62 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/buildbot-raspberrypi.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# This is the script physfs-buildbot.icculus.org uses to cross-compile +# PhysicsFS from x86 Linux to Raspberry Pi. This script was originally from +# Simple Directmedia Layer ( https://www.libsdl.org/ ). + +# The final tarball can be unpacked in the root directory of a RPi, +# so the PhysicsFS install lands in /usr/local. Run ldconfig, and then +# you should be able to build and run PhysicsFS-based software on your +# Pi. Standard configure scripts should be able to find PhysicsFS and +# build against it. + +TARBALL="$1" +if [ -z $1 ]; then + TARBALL=physfs-raspberrypi.tar.xz +fi + +OSTYPE=`uname -s` +if [ "$OSTYPE" != "Linux" ]; then + # !!! FIXME + echo "This only works on x86 or x64-64 Linux at the moment." 1>&2 + exit 1 +fi + +if [ "x$MAKE" == "x" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + MAKE="make -j$NCPU" +fi + +echo "\$MAKE is '$MAKE'" +MAKECMD="$MAKE" +unset MAKE # prevent warnings about jobserver mode. + +BUILDBOTDIR="raspberrypi-buildbot" +PARENTDIR="$PWD" + +set -e +set -x +rm -f $TARBALL +rm -rf $BUILDBOTDIR +mkdir -p $BUILDBOTDIR +pushd $BUILDBOTDIR + +SYSROOT="/opt/rpi-sysroot" +cmake -G "Unix Makefiles" \ + -DCMAKE_C_COMPILER="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc" \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_SYSROOT="$SYSROOT" \ + -DCMAKE_FIND_ROOT_PATH="$SYSROOT" \ + -DCMAKE_SYSTEM_NAME="Linux" \ + -DCMAKE_SYSTEM_VERSION=1 \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ + .. + +$MAKECMD + +rm -rf "$TARBALL" physfs-raspberrypi +mkdir -p physfs-raspberrypi +echo "Archiving to '$TARBALL' ..." +cp -a ../src/physfs.h libphysfs.a libphysfs.so* physfs-raspberrypi +chmod -R a+r physfs-raspberrypi +chmod a+x physfs-raspberrypi physfs-raspberrypi/*.so* +chmod -R go-w physfs-raspberrypi +tar -cJvvf "$TARBALL" physfs-raspberrypi + +set +x +echo "Done." + + diff --git a/love/src/jni/physfs-2.1.0/extras/casefolding.txt b/love/src/jni/physfs-3.0.1/extras/casefolding.txt similarity index 76% rename from love/src/jni/physfs-2.1.0/extras/casefolding.txt rename to love/src/jni/physfs-3.0.1/extras/casefolding.txt index f25d9bfe..0197a6c4 100644 --- a/love/src/jni/physfs-2.1.0/extras/casefolding.txt +++ b/love/src/jni/physfs-3.0.1/extras/casefolding.txt @@ -1,10 +1,10 @@ -# CaseFolding-4.1.0.txt -# Date: 2005-03-26, 00:24:43 GMT [MD] +# CaseFolding-8.0.0.txt +# Date: 2015-01-13, 18:16:36 GMT [MD] # # Unicode Character Database -# Copyright (c) 1991-2005 Unicode, Inc. +# Copyright (c) 1991-2015 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html -# For documentation, see UCD.html +# For documentation, see http://www.unicode.org/reports/tr44/ # # Case Folding Properties # @@ -23,8 +23,9 @@ # # NOTE: case folding does not preserve normalization formats! # -# For information on case folding, see -# UTR #21 Case Mappings, at http://www.unicode.org/unicode/reports/tr21/ +# For information on case folding, including how to have case folding +# preserve normalization formats, see Section 3.13 Default Case Algorithms in +# The Unicode Standard. # # ================================================================================ # Format @@ -52,6 +53,12 @@ # # ================================================================= +# Property: Case_Folding + +# All code points not explicitly listed for Case_Folding +# have the value C for the status field, and the code point itself for the mapping field. + +# ================================================================= 0041; C; 0061; # LATIN CAPITAL LETTER A 0042; C; 0062; # LATIN CAPITAL LETTER B 0043; C; 0063; # LATIN CAPITAL LETTER C @@ -272,10 +279,24 @@ 022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE 0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON 0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON +023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE 023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE 023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR -0241; C; 0294; # LATIN CAPITAL LETTER GLOTTAL STOP +023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP +0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE +0244; C; 0289; # LATIN CAPITAL LETTER U BAR +0245; C; 028C; # LATIN CAPITAL LETTER TURNED V +0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE +0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE +024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE +024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE 0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI +0370; C; 0371; # GREEK CAPITAL LETTER HETA +0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI +0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F; C; 03F3; # GREEK CAPITAL LETTER YOT 0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS 0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS 0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS @@ -312,6 +333,7 @@ 03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA +03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL 03D0; C; 03B2; # GREEK BETA SYMBOL 03D1; C; 03B8; # GREEK THETA SYMBOL 03D5; C; 03C6; # GREEK PHI SYMBOL @@ -335,6 +357,9 @@ 03F7; C; 03F8; # GREEK CAPITAL LETTER SHO 03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL 03FA; C; 03FB; # GREEK CAPITAL LETTER SAN +03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL 0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE 0401; C; 0451; # CYRILLIC CAPITAL LETTER IO 0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE @@ -427,6 +452,7 @@ 04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA 04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE 04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA 04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE 04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK 04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL @@ -455,6 +481,9 @@ 04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS 04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER 04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE 0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE 0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE 0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE @@ -463,6 +492,22 @@ 050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE 050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE 050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE +0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE +0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK +0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA +0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA +0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE +051A; C; 051B; # CYRILLIC CAPITAL LETTER QA +051C; C; 051D; # CYRILLIC CAPITAL LETTER WE +051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA +0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE +052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE +052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER 0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB 0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN 0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM @@ -540,6 +585,14 @@ 10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE 10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR 10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE +10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN +10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN +13F8; C; 13F0; # CHEROKEE SMALL LETTER YE +13F9; C; 13F1; # CHEROKEE SMALL LETTER YI +13FA; C; 13F2; # CHEROKEE SMALL LETTER YO +13FB; C; 13F3; # CHEROKEE SMALL LETTER YU +13FC; C; 13F4; # CHEROKEE SMALL LETTER YV +13FD; C; 13F5; # CHEROKEE SMALL LETTER MV 1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW 1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE 1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW @@ -621,6 +674,8 @@ 1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE 1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING 1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S +1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S 1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW 1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE 1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE @@ -666,6 +721,9 @@ 1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW 1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE +1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP 1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI 1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA 1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA @@ -845,6 +903,7 @@ 2126; C; 03C9; # OHM SIGN 212A; C; 006B; # KELVIN SIGN 212B; C; 00E5; # ANGSTROM SIGN +2132; C; 214E; # TURNED CAPITAL F 2160; C; 2170; # ROMAN NUMERAL ONE 2161; C; 2171; # ROMAN NUMERAL TWO 2162; C; 2172; # ROMAN NUMERAL THREE @@ -861,6 +920,7 @@ 216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED 216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED 216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND +2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED 24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A 24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B 24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C @@ -934,6 +994,21 @@ 2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE +2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL +2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER +2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER +2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA +2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK +2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A +2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA +2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK +2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H +2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL 2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA 2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA 2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA @@ -984,6 +1059,196 @@ 2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI 2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI 2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA +A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO +A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE +A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA +A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV +A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER +A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU +A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A +A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS +A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN +A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE +A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE +A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL +A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM +A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680; C; A681; # CYRILLIC CAPITAL LETTER DWE +A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE +A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE +A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE +A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE +A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE +A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE +A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE +A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE +A694; C; A695; # CYRILLIC CAPITAL LETTER HWE +A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE +A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O +A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O +A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726; C; A727; # LATIN CAPITAL LETTER HENG +A728; C; A729; # LATIN CAPITAL LETTER TZ +A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO +A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO +A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732; C; A733; # LATIN CAPITAL LETTER AA +A734; C; A735; # LATIN CAPITAL LETTER AO +A736; C; A737; # LATIN CAPITAL LETTER AU +A738; C; A739; # LATIN CAPITAL LETTER AV +A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C; C; A73D; # LATIN CAPITAL LETTER AY +A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT +A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE +A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746; C; A747; # LATIN CAPITAL LETTER BROKEN L +A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP +A74E; C; A74F; # LATIN CAPITAL LETTER OO +A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH +A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA +A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA +A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760; C; A761; # LATIN CAPITAL LETTER VY +A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z +A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE +A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768; C; A769; # LATIN CAPITAL LETTER VEND +A76A; C; A76B; # LATIN CAPITAL LETTER ET +A76C; C; A76D; # LATIN CAPITAL LETTER IS +A76E; C; A76F; # LATIN CAPITAL LETTER CON +A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D +A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F +A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G +A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G +A780; C; A781; # LATIN CAPITAL LETTER TURNED L +A782; C; A783; # LATIN CAPITAL LETTER INSULAR R +A784; C; A785; # LATIN CAPITAL LETTER INSULAR S +A786; C; A787; # LATIN CAPITAL LETTER INSULAR T +A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO +A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H +A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER +A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR +A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH +A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE +A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE +A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE +A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE +A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK +A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E +A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G +A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT +A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K +A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T +A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL +A7B3; C; AB53; # LATIN CAPITAL LETTER CHI +A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA +A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA +AB70; C; 13A0; # CHEROKEE SMALL LETTER A +AB71; C; 13A1; # CHEROKEE SMALL LETTER E +AB72; C; 13A2; # CHEROKEE SMALL LETTER I +AB73; C; 13A3; # CHEROKEE SMALL LETTER O +AB74; C; 13A4; # CHEROKEE SMALL LETTER U +AB75; C; 13A5; # CHEROKEE SMALL LETTER V +AB76; C; 13A6; # CHEROKEE SMALL LETTER GA +AB77; C; 13A7; # CHEROKEE SMALL LETTER KA +AB78; C; 13A8; # CHEROKEE SMALL LETTER GE +AB79; C; 13A9; # CHEROKEE SMALL LETTER GI +AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO +AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU +AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV +AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA +AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE +AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI +AB80; C; 13B0; # CHEROKEE SMALL LETTER HO +AB81; C; 13B1; # CHEROKEE SMALL LETTER HU +AB82; C; 13B2; # CHEROKEE SMALL LETTER HV +AB83; C; 13B3; # CHEROKEE SMALL LETTER LA +AB84; C; 13B4; # CHEROKEE SMALL LETTER LE +AB85; C; 13B5; # CHEROKEE SMALL LETTER LI +AB86; C; 13B6; # CHEROKEE SMALL LETTER LO +AB87; C; 13B7; # CHEROKEE SMALL LETTER LU +AB88; C; 13B8; # CHEROKEE SMALL LETTER LV +AB89; C; 13B9; # CHEROKEE SMALL LETTER MA +AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME +AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI +AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO +AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU +AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA +AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA +AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH +AB91; C; 13C1; # CHEROKEE SMALL LETTER NE +AB92; C; 13C2; # CHEROKEE SMALL LETTER NI +AB93; C; 13C3; # CHEROKEE SMALL LETTER NO +AB94; C; 13C4; # CHEROKEE SMALL LETTER NU +AB95; C; 13C5; # CHEROKEE SMALL LETTER NV +AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA +AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE +AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI +AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO +AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU +AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV +AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA +AB9D; C; 13CD; # CHEROKEE SMALL LETTER S +AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE +AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI +ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO +ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU +ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV +ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA +ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA +ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE +ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE +ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI +ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI +ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO +ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU +ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV +ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA +ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA +ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE +ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI +ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO +ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU +ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV +ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA +ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE +ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI +ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO +ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU +ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV +ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA +ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE +ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI +ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO +ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU +ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV +ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL @@ -1062,3 +1327,88 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 10425; C; 1044D; # DESERET CAPITAL LETTER ENG 10426; C; 1044E; # DESERET CAPITAL LETTER OI 10427; C; 1044F; # DESERET CAPITAL LETTER EW +10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A +10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA +10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB +10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB +10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC +10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC +10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS +10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED +10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND +10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E +10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E +10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE +10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF +10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG +10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY +10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH +10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I +10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II +10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ +10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK +10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK +10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK +10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL +10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY +10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM +10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN +10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY +10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O +10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO +10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE +10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE +10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE +10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP +10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP +10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER +10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER +10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES +10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ +10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET +10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT +10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY +10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH +10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U +10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU +10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE +10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE +10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV +10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ +10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS +10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN +10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US +118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA +118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A +118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI +118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU +118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA +118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO +118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II +118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU +118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E +118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O +118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG +118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA +118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO +118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY +118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ +118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC +118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN +118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD +118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE +118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG +118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA +118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT +118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM +118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU +118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU +118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO +118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO +118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR +118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR +118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU +118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII +118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO +# +# EOF diff --git a/love/src/jni/physfs-2.1.0/extras/globbing.c b/love/src/jni/physfs-3.0.1/extras/globbing.c similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/globbing.c rename to love/src/jni/physfs-3.0.1/extras/globbing.c diff --git a/love/src/jni/physfs-2.1.0/extras/globbing.h b/love/src/jni/physfs-3.0.1/extras/globbing.h similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/globbing.h rename to love/src/jni/physfs-3.0.1/extras/globbing.h diff --git a/love/src/jni/physfs-2.1.0/extras/ignorecase.c b/love/src/jni/physfs-3.0.1/extras/ignorecase.c similarity index 90% rename from love/src/jni/physfs-2.1.0/extras/ignorecase.c rename to love/src/jni/physfs-3.0.1/extras/ignorecase.c index afdd0023..3a58f1bd 100644 --- a/love/src/jni/physfs-2.1.0/extras/ignorecase.c +++ b/love/src/jni/physfs-3.0.1/extras/ignorecase.c @@ -27,25 +27,6 @@ * \author Ryan C. Gordon. */ -/* I'm not screwing around with stricmp vs. strcasecmp... */ -/* !!! FIXME: this will NOT work with UTF-8 strings in physfs2.0 */ -static int caseInsensitiveStringCompare(const char *x, const char *y) -{ - int ux, uy; - do - { - ux = toupper((int) *x); - uy = toupper((int) *y); - if (ux != uy) - return ((ux > uy) ? 1 : -1); - x++; - y++; - } while ((ux) && (uy)); - - return 0; -} /* caseInsensitiveStringCompare */ - - static int locateOneElement(char *buf) { char *ptr; @@ -71,7 +52,7 @@ static int locateOneElement(char *buf) for (i = rc; *i != NULL; i++) { - if (caseInsensitiveStringCompare(*i, ptr) == 0) + if (PHYSFS_utf8stricmp(*i, ptr) == 0) { strcpy(ptr, *i); /* found a match. Overwrite with this case. */ PHYSFS_freeList(rc); @@ -89,12 +70,11 @@ int PHYSFSEXT_locateCorrectCase(char *buf) { int rc; char *ptr; - char *prevptr; while (*buf == '/') /* skip any '/' at start of string... */ buf++; - ptr = prevptr = buf; + ptr = buf; if (*ptr == '\0') return 0; /* Uh...I guess that's success. */ diff --git a/love/src/jni/physfs-2.1.0/extras/ignorecase.h b/love/src/jni/physfs-3.0.1/extras/ignorecase.h similarity index 95% rename from love/src/jni/physfs-2.1.0/extras/ignorecase.h rename to love/src/jni/physfs-3.0.1/extras/ignorecase.h index f1188636..4e223bbc 100644 --- a/love/src/jni/physfs-2.1.0/extras/ignorecase.h +++ b/love/src/jni/physfs-3.0.1/extras/ignorecase.h @@ -18,14 +18,14 @@ * or file (which brings security considerations and potential bugs). This * code favours exact case matches, but you will lose access to otherwise * duplicate filenames, or you might go down a wrong directory tree, etc. - * In practive, this is rarely a problem, but you need to be aware of it. + * In practice, this is rarely a problem, but you need to be aware of it. * - This doesn't do _anything_ with the write directory; you're on your * own for opening the right files for writing. You can sort of get around * this by adding your write directory to the search path, but then the * interpolated directory tree can screw you up even more. * * This code should be considered an aid for legacy code. New development - * shouldn't do dumbass things that require this aid in the first place. :) + * shouldn't do things that require this aid in the first place. :) * * Usage: Set up PhysicsFS as you normally would, then use * PHYSFSEXT_locateCorrectCase() to get a "correct" pathname to pass to @@ -67,8 +67,7 @@ extern "C" { * existing match. If there is no match, the search aborts and reports an * error. Exact matches are favored over case-insensitive matches. * - * THIS IS RISKY. Please do not use this function for anything but crappy - * legacy code. + * THIS IS RISKY. Please do not use this function for anything but legacy code. * * \param buf Buffer with null-terminated string of path/file to locate. * This buffer will be modified by this function. diff --git a/love/src/jni/physfs-3.0.1/extras/makecasefoldhashtable.pl b/love/src/jni/physfs-3.0.1/extras/makecasefoldhashtable.pl new file mode 100755 index 00000000..4e0cd301 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/extras/makecasefoldhashtable.pl @@ -0,0 +1,276 @@ +#!/usr/bin/perl -w + +use warnings; +use strict; + +my $HASHBUCKETS1_16 = 256; +my $HASHBUCKETS1_32 = 16; +my $HASHBUCKETS2_16 = 16; +my $HASHBUCKETS3_16 = 4; + +print <<__EOF__; +/* + * This file is part of PhysicsFS (https://icculus.org/physfs/) + * + * This data generated by physfs/extras/makecasefoldhashtable.pl ... + * Do not manually edit this file! + * + * Please see the file LICENSE.txt in the source's root directory. + */ + +#ifndef _INCLUDE_PHYSFS_CASEFOLDING_H_ +#define _INCLUDE_PHYSFS_CASEFOLDING_H_ + +#ifndef __PHYSICSFS_INTERNAL__ +#error Do not include this header from your applications. +#endif + +/* We build three simple hashmaps here: one that maps Unicode codepoints to +a one, two, or three lowercase codepoints. To retrieve this info: look at +case_fold_hashX, where X is 1, 2, or 3. Most foldable codepoints fold to one, +a few dozen fold to two, and a handful fold to three. If the codepoint isn't +in any of these hashes, it doesn't fold (no separate upper and lowercase). + +Almost all these codepoints fit into 16 bits, so we hash them as such to save +memory. If a codepoint is > 0xFFFF, we have separate hashes for them, +since there are (currently) only about 120 of them and (currently) all of them +map to a single lowercase codepoint. */ + +typedef struct CaseFoldMapping1_32 +{ + PHYSFS_uint32 from; + PHYSFS_uint32 to0; +} CaseFoldMapping1_32; + +typedef struct CaseFoldMapping1_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; +} CaseFoldMapping1_16; + +typedef struct CaseFoldMapping2_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; + PHYSFS_uint16 to1; +} CaseFoldMapping2_16; + +typedef struct CaseFoldMapping3_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; + PHYSFS_uint16 to1; + PHYSFS_uint16 to2; +} CaseFoldMapping3_16; + +typedef struct CaseFoldHashBucket1_16 +{ + const CaseFoldMapping1_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket1_16; + +typedef struct CaseFoldHashBucket1_32 +{ + const CaseFoldMapping1_32 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket1_32; + +typedef struct CaseFoldHashBucket2_16 +{ + const CaseFoldMapping2_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket2_16; + +typedef struct CaseFoldHashBucket3_16 +{ + const CaseFoldMapping3_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket3_16; + +__EOF__ + + +my @foldPairs1_16; +my @foldPairs2_16; +my @foldPairs3_16; +my @foldPairs1_32; + +for (my $i = 0; $i < $HASHBUCKETS1_16; $i++) { + $foldPairs1_16[$i] = ''; +} + +for (my $i = 0; $i < $HASHBUCKETS1_32; $i++) { + $foldPairs1_32[$i] = ''; +} + +for (my $i = 0; $i < $HASHBUCKETS2_16; $i++) { + $foldPairs2_16[$i] = ''; +} + +for (my $i = 0; $i < $HASHBUCKETS3_16; $i++) { + $foldPairs3_16[$i] = ''; +} + +open(FH,'<','casefolding.txt') or die("failed to open casefolding.txt: $!\n"); +while () { + chomp; + # strip comments from textfile... + s/\#.*\Z//; + + # strip whitespace... + s/\A\s+//; + s/\s+\Z//; + + next if not /\A([a-fA-F0-9]+)\;\s*(.)\;\s*(.+)\;/; + my ($code, $status, $mapping) = ($1, $2, $3); + + my $hexxed = hex($code); + #print("// code '$code' status '$status' mapping '$mapping'\n"); + + if (($status eq 'C') or ($status eq 'F')) { + my ($map1, $map2, $map3) = (undef, undef, undef); + $map1 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; + $map2 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; + $map3 = $1 if $mapping =~ s/\A([a-fA-F0-9]+)(\s*|\Z)//; + die("mapping space too small for '$code'\n") if ($mapping ne ''); + die("problem parsing mapping for '$code'\n") if (not defined($map1)); + + if ($hexxed < 128) { + # Just ignore these, we'll handle the low-ASCII ones ourselves. + } elsif ($hexxed > 0xFFFF) { + # We just need to add the 32-bit 2 and/or 3 codepoint maps if this die()'s here. + die("Uhoh, a codepoint > 0xFFFF that folds to multiple codepoints! Fixme.") if defined($map2); + my $hashed = (($hexxed ^ ($hexxed >> 8)) & ($HASHBUCKETS1_32-1)); + #print("// hexxed '$hexxed' hashed1 '$hashed'\n"); + $foldPairs1_32[$hashed] .= " { 0x$code, 0x$map1 },\n"; + } elsif (not defined($map2)) { + my $hashed = (($hexxed ^ ($hexxed >> 8)) & ($HASHBUCKETS1_16-1)); + #print("// hexxed '$hexxed' hashed1 '$hashed'\n"); + $foldPairs1_16[$hashed] .= " { 0x$code, 0x$map1 },\n"; + } elsif (not defined($map3)) { + my $hashed = (($hexxed ^ ($hexxed >> 8)) & ($HASHBUCKETS2_16-1)); + #print("// hexxed '$hexxed' hashed2 '$hashed'\n"); + $foldPairs2_16[$hashed] .= " { 0x$code, 0x$map1, 0x$map2 },\n"; + } else { + my $hashed = (($hexxed ^ ($hexxed >> 8)) & ($HASHBUCKETS3_16-1)); + #print("// hexxed '$hexxed' hashed3 '$hashed'\n"); + $foldPairs3_16[$hashed] .= " { 0x$code, 0x$map1, 0x$map2, 0x$map3 },\n"; + } + } +} +close(FH); + +for (my $i = 0; $i < $HASHBUCKETS1_16; $i++) { + $foldPairs1_16[$i] =~ s/,\n\Z//; + my $str = $foldPairs1_16[$i]; + next if $str eq ''; + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold1_16_${num}"; + print("static const CaseFoldMapping1_16 ${sym}[] = {\n$str\n};\n\n"); +} + +for (my $i = 0; $i < $HASHBUCKETS1_32; $i++) { + $foldPairs1_32[$i] =~ s/,\n\Z//; + my $str = $foldPairs1_32[$i]; + next if $str eq ''; + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold1_32_${num}"; + print("static const CaseFoldMapping1_32 ${sym}[] = {\n$str\n};\n\n"); +} + +for (my $i = 0; $i < $HASHBUCKETS2_16; $i++) { + $foldPairs2_16[$i] =~ s/,\n\Z//; + my $str = $foldPairs2_16[$i]; + next if $str eq ''; + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold2_16_${num}"; + print("static const CaseFoldMapping2_16 ${sym}[] = {\n$str\n};\n\n"); +} + +for (my $i = 0; $i < $HASHBUCKETS3_16; $i++) { + $foldPairs3_16[$i] =~ s/,\n\Z//; + my $str = $foldPairs3_16[$i]; + next if $str eq ''; + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold3_16_${num}"; + print("static const CaseFoldMapping3_16 ${sym}[] = {\n$str\n};\n\n"); +} + +print("static const CaseFoldHashBucket1_16 case_fold_hash1_16[] = {\n"); + +for (my $i = 0; $i < $HASHBUCKETS1_16; $i++) { + my $str = $foldPairs1_16[$i]; + if ($str eq '') { + print(" { NULL, 0 },\n"); + } else { + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold1_16_${num}"; + print(" { $sym, __PHYSFS_ARRAYLEN($sym) },\n"); + } +} +print("};\n\n"); + + +print("static const CaseFoldHashBucket1_32 case_fold_hash1_32[] = {\n"); + +for (my $i = 0; $i < $HASHBUCKETS1_32; $i++) { + my $str = $foldPairs1_32[$i]; + if ($str eq '') { + print(" { NULL, 0 },\n"); + } else { + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold1_32_${num}"; + print(" { $sym, __PHYSFS_ARRAYLEN($sym) },\n"); + } +} +print("};\n\n"); + + +print("static const CaseFoldHashBucket2_16 case_fold_hash2_16[] = {\n"); + +for (my $i = 0; $i < $HASHBUCKETS2_16; $i++) { + my $str = $foldPairs2_16[$i]; + if ($str eq '') { + print(" { NULL, 0 },\n"); + } else { + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold2_16_${num}"; + print(" { $sym, __PHYSFS_ARRAYLEN($sym) },\n"); + } +} +print("};\n\n"); + +print("static const CaseFoldHashBucket3_16 case_fold_hash3_16[] = {\n"); + +for (my $i = 0; $i < $HASHBUCKETS3_16; $i++) { + my $str = $foldPairs3_16[$i]; + if ($str eq '') { + print(" { NULL, 0 },\n"); + } else { + my $num = '000' . $i; + $num =~ s/\A.*?(\d\d\d)\Z/$1/; + my $sym = "case_fold3_16_${num}"; + print(" { $sym, __PHYSFS_ARRAYLEN($sym) },\n"); + } +} +print("};\n\n"); + +print <<__EOF__; + +#endif /* _INCLUDE_PHYSFS_CASEFOLDING_H_ */ + +/* end of physfs_casefolding.h ... */ + +__EOF__ + +exit 0; + +# end of makecashfoldhashtable.pl ... + diff --git a/love/src/jni/physfs-2.1.0/extras/physfs-swig.i b/love/src/jni/physfs-3.0.1/extras/physfs-swig.i similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/physfs-swig.i rename to love/src/jni/physfs-3.0.1/extras/physfs-swig.i diff --git a/love/src/jni/physfs-2.1.0/extras/physfs.pc.in b/love/src/jni/physfs-3.0.1/extras/physfs.pc.in similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/physfs.pc.in rename to love/src/jni/physfs-3.0.1/extras/physfs.pc.in diff --git a/love/src/jni/physfs-2.1.0/extras/physfshttpd.c b/love/src/jni/physfs-3.0.1/extras/physfshttpd.c similarity index 62% rename from love/src/jni/physfs-2.1.0/extras/physfshttpd.c rename to love/src/jni/physfs-3.0.1/extras/physfshttpd.c index 6680d095..9e0df6bb 100644 --- a/love/src/jni/physfs-2.1.0/extras/physfshttpd.c +++ b/love/src/jni/physfs-3.0.1/extras/physfshttpd.c @@ -7,7 +7,7 @@ * ./physfshttpd archive1.zip archive2.zip /path/to/a/real/dir etc... * * The files are appended in order to the PhysicsFS search path, and when - * a client request comes it, it looks for the file in said search path. + * a client request comes in, it looks for the file in said search path. * * My goal was to make this work in less than 300 lines of C, so again, it's * not to be used for any serious purpose. Patches to make this application @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -54,7 +55,7 @@ #include "physfs.h" -#define DEFAULT_PORTNUM 6667 +#define DEFAULT_PORTNUM 8080 typedef struct { @@ -64,45 +65,153 @@ typedef struct } http_args; -static char *txt404 = -"HTTP/1.0 404 Not Found\n" -"Connection: close\n" -"Content-Type: text/html; charset=utf-8\n" -"\n" -"404 Not Found\n" -"Can't find that.\n\n"; +#define txt404 \ + "HTTP/1.0 404 Not Found\n" \ + "Connection: close\n" \ + "Content-Type: text/html; charset=utf-8\n" \ + "\n" \ + "404 Not Found\n" \ + "Can't find '%s'.\n\n" \ + +#define txt200 \ + "HTTP/1.0 200 OK\n" \ + "Connection: close\n" \ + "Content-Type: %s\n" \ + "\n" + +static const char *lastError(void) +{ + return PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode()); +} /* lastError */ + +static int writeAll(const char *ipstr, const int sock, void *buf, const size_t len) +{ + if (write(sock, buf, len) != len) + { + printf("%s: Write error to socket.\n", ipstr); + return 0; + } /* if */ + + return 1; +} /* writeAll */ + +static int writeString(const char *ipstr, const int sock, const char *fmt, ...) +{ + /* none of this is robust against large strings or HTML escaping. */ + char buffer[1024]; + int len; + va_list ap; + va_start(ap, fmt); + len = vsnprintf(buffer, sizeof (buffer), fmt, ap); + va_end(ap); + if (len < 0) + { + printf("uhoh, vsnprintf() failed!\n"); + return 0; + } /* if */ + + return writeAll(ipstr, sock, buffer, len); +} /* writeString */ static void feed_file_http(const char *ipstr, int sock, const char *fname) { PHYSFS_File *in = PHYSFS_openRead(fname); - char buffer[1024]; - printf("%s: requested [%s].\n", ipstr, fname); + if (in == NULL) { - printf("%s: Can't open [%s]: %s.\n", - ipstr, fname, PHYSFS_getLastError()); - write(sock, txt404, strlen(txt404)); /* !!! FIXME: Check retval */ + printf("%s: Can't open [%s]: %s.\n", ipstr, fname, lastError()); + writeString(ipstr, sock, txt404, fname); + return; } /* if */ - else + + /* !!! FIXME: mimetype */ + if (writeString(ipstr, sock, txt200, "text/plain; charset=utf-8")) { do { - PHYSFS_sint64 br = PHYSFS_read(in, buffer, 1, sizeof (buffer)); + char buffer[1024]; + PHYSFS_sint64 br = PHYSFS_readBytes(in, buffer, sizeof (buffer)); if (br == -1) { - printf("%s: Read error: %s.\n", ipstr, PHYSFS_getLastError()); + printf("%s: Read error: %s.\n", ipstr, lastError()); break; } /* if */ - write(sock, buffer, (int) br); /* !!! FIXME: CHECK THIS RETVAL! */ + else if (!writeAll(ipstr, sock, buffer, (size_t) br)) + { + break; + } /* else if */ } while (!PHYSFS_eof(in)); + } /* if */ - PHYSFS_close(in); - } /* else */ + PHYSFS_close(in); } /* feed_file_http */ +static void feed_dirlist_http(const char *ipstr, int sock, + const char *dname, char **list) +{ + int i; + + if (!writeString(ipstr, sock, txt200, "text/html; charset=utf-8")) + return; + + else if (!writeString(ipstr, sock, + "Directory %s" + "

Directory %s

\n"); +} /* feed_dirlist_http */ + +static void feed_dir_http(const char *ipstr, int sock, const char *dname) +{ + char **list = PHYSFS_enumerateFiles(dname); + if (list == NULL) + { + printf("%s: Can't enumerate directory [%s]: %s.\n", + ipstr, dname, lastError()); + writeString(ipstr, sock, txt404, dname); + return; + } /* if */ + + feed_dirlist_http(ipstr, sock, dname, list); + PHYSFS_freeList(list); +} /* feed_dir_http */ + +static void feed_http_request(const char *ipstr, int sock, const char *fname) +{ + PHYSFS_Stat statbuf; + + printf("%s: requested [%s].\n", ipstr, fname); + + if (!PHYSFS_stat(fname, &statbuf)) + { + printf("%s: Can't stat [%s]: %s.\n", ipstr, fname, lastError()); + writeString(ipstr, sock, txt404, fname); + return; + } /* if */ + + if (statbuf.filetype == PHYSFS_FILETYPE_DIRECTORY) + feed_dir_http(ipstr, sock, fname); + else + feed_file_http(ipstr, sock, fname); +} /* feed_http_request */ + + static void *do_http(void *_args) { http_args *args = (http_args *) _args; @@ -135,7 +244,7 @@ static void *do_http(void *_args) ptr = strchr(buffer + 5, ' '); if (ptr != NULL) *ptr = '\0'; - feed_file_http(ipstr, args->sock, buffer + 4); + feed_http_request(ipstr, args->sock, buffer + 4); } /* if */ } /* else */ @@ -194,7 +303,7 @@ static int create_listen_socket(short portnum) addr.sin_family = AF_INET; addr.sin_port = htons(portnum); addr.sin_addr.s_addr = INADDR_ANY; - if ((bind(retval, &addr, (socklen_t) sizeof (addr)) == -1) || + if ((bind(retval, (struct sockaddr *) &addr, (socklen_t) sizeof (addr)) == -1) || (listen(retval, 5) == -1)) { close(retval); @@ -219,7 +328,7 @@ void at_exit_cleanup(void) close(listensocket); if (!PHYSFS_deinit()) - printf("PHYSFS_deinit() failed: %s\n", PHYSFS_getLastError()); + printf("PHYSFS_deinit() failed: %s\n", lastError()); } /* at_exit_cleanup */ @@ -249,7 +358,7 @@ int main(int argc, char **argv) if (!PHYSFS_init(argv[0])) { - printf("PHYSFS_init() failed: %s\n", PHYSFS_getLastError()); + printf("PHYSFS_init() failed: %s\n", lastError()); return 42; } /* if */ @@ -258,7 +367,7 @@ int main(int argc, char **argv) for (i = 1; i < argc; i++) { - if (!PHYSFS_addToSearchPath(argv[i], 1)) + if (!PHYSFS_mount(argv[i], NULL, 1)) printf(" WARNING: failed to add [%s] to search path.\n", argv[i]); } /* else */ diff --git a/love/src/jni/physfs-2.1.0/extras/physfsrwops.c b/love/src/jni/physfs-3.0.1/extras/physfsrwops.c similarity index 82% rename from love/src/jni/physfs-2.1.0/extras/physfsrwops.c rename to love/src/jni/physfs-3.0.1/extras/physfsrwops.c index aff5f9bb..8e5857ce 100644 --- a/love/src/jni/physfs-2.1.0/extras/physfsrwops.c +++ b/love/src/jni/physfs-3.0.1/extras/physfsrwops.c @@ -16,7 +16,7 @@ * Please see LICENSE.txt in the root of the source tree. * * SDL 1.2 falls under the LGPL license. SDL 1.3+ is zlib, like PhysicsFS. - * You can get SDL at http://www.libsdl.org/ + * You can get SDL at https://www.libsdl.org/ * * This file was written by Ryan C. Gordon. (icculus@icculus.org). */ @@ -24,15 +24,30 @@ #include /* used for SEEK_SET, SEEK_CUR, SEEK_END ... */ #include "physfsrwops.h" -/* SDL's RWOPS interface changed a little in SDL 1.3... */ +/* SDL's RWOPS interface changed a little in SDL 2.0... */ #if defined(SDL_VERSION_ATLEAST) -#if SDL_VERSION_ATLEAST(1, 3, 0) -#define TARGET_SDL13 1 +#if SDL_VERSION_ATLEAST(2, 0, 0) +#define TARGET_SDL2 1 #endif #endif -#if TARGET_SDL13 -static long SDLCALL physfsrwops_seek(struct SDL_RWops *rw, long offset, int whence) +#if !TARGET_SDL2 +#define RW_SEEK_SET SEEK_SET +#define RW_SEEK_CUR SEEK_CUR +#define RW_SEEK_END SEEK_END +#endif + +#if TARGET_SDL2 +static Sint64 SDLCALL physfsrwops_size(struct SDL_RWops *rw) +{ + PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; + return (Sint64) PHYSFS_fileLength(handle); +} /* physfsrwops_size */ +#endif + + +#if TARGET_SDL2 +static Sint64 SDLCALL physfsrwops_seek(struct SDL_RWops *rw, Sint64 offset, int whence) #else static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) #endif @@ -40,10 +55,10 @@ static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; PHYSFS_sint64 pos = 0; - if (whence == SEEK_SET) + if (whence == RW_SEEK_SET) pos = (PHYSFS_sint64) offset; - else if (whence == SEEK_CUR) + else if (whence == RW_SEEK_CUR) { const PHYSFS_sint64 current = PHYSFS_tell(handle); if (current == -1) @@ -55,8 +70,8 @@ static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) if (offset == 0) /* this is a "tell" call. We're done. */ { - #if TARGET_SDL13 - return (long) current; + #if TARGET_SDL2 + return (Sint64) current; #else return (int) current; #endif @@ -65,7 +80,7 @@ static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) pos = current + ((PHYSFS_sint64) offset); } /* else if */ - else if (whence == SEEK_END) + else if (whence == RW_SEEK_END) { const PHYSFS_sint64 len = PHYSFS_fileLength(handle); if (len == -1) @@ -95,15 +110,15 @@ static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) return -1; } /* if */ - #if TARGET_SDL13 - return (long) pos; + #if TARGET_SDL2 + return (Sint64) pos; #else return (int) pos; #endif } /* physfsrwops_seek */ -#if TARGET_SDL13 +#if TARGET_SDL2 static size_t SDLCALL physfsrwops_read(struct SDL_RWops *rw, void *ptr, size_t size, size_t maxnum) #else @@ -116,18 +131,26 @@ static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum) if (rc != ((PHYSFS_sint64) readlen)) { if (!PHYSFS_eof(handle)) /* not EOF? Must be an error. */ + { SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); + + #if TARGET_SDL2 + return 0; + #else + return -1; + #endif + } /* if */ } /* if */ - #if TARGET_SDL13 - return (size_t) rc; + #if TARGET_SDL2 + return (size_t) rc / size; #else - return (int) rc; + return (int) rc / size; #endif } /* physfsrwops_read */ -#if TARGET_SDL13 +#if TARGET_SDL2 static size_t SDLCALL physfsrwops_write(struct SDL_RWops *rw, const void *ptr, size_t size, size_t num) #else @@ -140,7 +163,7 @@ static int physfsrwops_write(SDL_RWops *rw, const void *ptr, int size, int num) if (rc != ((PHYSFS_sint64) writelen)) SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); - #if TARGET_SDL13 + #if TARGET_SDL2 return (size_t) rc; #else return (int) rc; @@ -173,6 +196,9 @@ static SDL_RWops *create_rwops(PHYSFS_File *handle) retval = SDL_AllocRW(); if (retval != NULL) { + #if TARGET_SDL2 + retval->size = physfsrwops_size; + #endif retval->seek = physfsrwops_seek; retval->read = physfsrwops_read; retval->write = physfsrwops_write; diff --git a/love/src/jni/physfs-2.1.0/extras/physfsrwops.h b/love/src/jni/physfs-3.0.1/extras/physfsrwops.h similarity index 96% rename from love/src/jni/physfs-2.1.0/extras/physfsrwops.h rename to love/src/jni/physfs-3.0.1/extras/physfsrwops.h index e44ec83d..54b08a7e 100644 --- a/love/src/jni/physfs-2.1.0/extras/physfsrwops.h +++ b/love/src/jni/physfs-3.0.1/extras/physfsrwops.h @@ -15,7 +15,8 @@ * Unless otherwise stated, the rest of PhysicsFS falls under the zlib license. * Please see LICENSE.txt in the root of the source tree. * - * SDL falls under the LGPL license. You can get SDL at http://www.libsdl.org/ + * SDL 1.2 falls under the LGPL license. SDL 1.3+ is zlib, like PhysicsFS. + * You can get SDL at https://www.libsdl.org/ * * This file was written by Ryan C. Gordon. (icculus@icculus.org). */ diff --git a/love/src/jni/physfs-2.1.0/extras/physfsunpack.c b/love/src/jni/physfs-3.0.1/extras/physfsunpack.c similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/physfsunpack.c rename to love/src/jni/physfs-3.0.1/extras/physfsunpack.c diff --git a/love/src/jni/physfs-2.1.0/extras/selfextract.c b/love/src/jni/physfs-3.0.1/extras/selfextract.c similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/selfextract.c rename to love/src/jni/physfs-3.0.1/extras/selfextract.c diff --git a/love/src/jni/physfs-2.1.0/extras/uninstall.sh b/love/src/jni/physfs-3.0.1/extras/uninstall.sh similarity index 100% rename from love/src/jni/physfs-2.1.0/extras/uninstall.sh rename to love/src/jni/physfs-3.0.1/extras/uninstall.sh diff --git a/love/src/jni/physfs-2.1.0/src/physfs.c b/love/src/jni/physfs-3.0.1/src/physfs.c similarity index 70% rename from love/src/jni/physfs-2.1.0/src/physfs.c rename to love/src/jni/physfs-3.0.1/src/physfs.c index a1abbc88..19148ad5 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs.c +++ b/love/src/jni/physfs-3.0.1/src/physfs.c @@ -8,12 +8,38 @@ * This file written by Ryan C. Gordon. */ -/* !!! FIXME: ERR_PAST_EOF shouldn't trigger for reads. Just return zero. */ -/* !!! FIXME: use snprintf(), not sprintf(). */ - #define __PHYSICSFS_INTERNAL__ #include "physfs_internal.h" +#if defined(_MSC_VER) +#include + +/* this code came from https://stackoverflow.com/a/8712996 */ +int __PHYSFS_msvc_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +int __PHYSFS_msvc_snprintf(char *outBuf, size_t size, const char *format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = __PHYSFS_msvc_vsnprintf(outBuf, size, format, ap); + va_end(ap); + + return count; +} +#endif + typedef struct __PHYSFS_DIRHANDLE__ { @@ -31,9 +57,9 @@ typedef struct __PHYSFS_FILEHANDLE__ PHYSFS_uint8 forReading; /* Non-zero if reading, zero if write/append */ const DirHandle *dirHandle; /* Archiver instance that created this */ PHYSFS_uint8 *buffer; /* Buffer, if set (NULL otherwise). Don't touch! */ - PHYSFS_uint32 bufsize; /* Bufsize, if set (0 otherwise). Don't touch! */ - PHYSFS_uint32 buffill; /* Buffer fill size. Don't touch! */ - PHYSFS_uint32 bufpos; /* Buffer position. Don't touch! */ + size_t bufsize; /* Bufsize, if set (0 otherwise). Don't touch! */ + size_t buffill; /* Buffer fill size. Don't touch! */ + size_t bufpos; /* Buffer position. Don't touch! */ struct __PHYSFS_FILEHANDLE__ *next; /* linked list stuff. */ } FileHandle; @@ -57,8 +83,8 @@ static char *baseDir = NULL; static char *userDir = NULL; static char *prefDir = NULL; static int allowSymLinks = 0; -static const PHYSFS_Archiver **archivers = NULL; -static const PHYSFS_ArchiveInfo **archiveInfo = NULL; +static PHYSFS_Archiver **archivers = NULL; +static PHYSFS_ArchiveInfo **archiveInfo = NULL; static volatile size_t numArchivers = 0; /* mutexes ... */ @@ -70,6 +96,30 @@ static int externalAllocator = 0; PHYSFS_Allocator allocator; +#ifdef PHYSFS_NEED_ATOMIC_OP_FALLBACK +static inline int __PHYSFS_atomicAdd(int *ptrval, const int val) +{ + int retval; + __PHYSFS_platformGrabMutex(stateLock); + retval = *ptrval; + *ptrval = retval + val; + __PHYSFS_platformReleaseMutex(stateLock); + return retval; +} /* __PHYSFS_atomicAdd */ + +int __PHYSFS_ATOMIC_INCR(int *ptrval) +{ + return __PHYSFS_atomicAdd(ptrval, 1); +} /* __PHYSFS_ATOMIC_INCR */ + +int __PHYSFS_ATOMIC_DECR(int *ptrval) +{ + return __PHYSFS_atomicAdd(ptrval, -1); +} /* __PHYSFS_ATOMIC_DECR */ +#endif + + + /* PHYSFS_Io implementation for i/o to physical filesystem... */ /* !!! FIXME: maybe refcount the paths in a string pool? */ @@ -119,7 +169,8 @@ static PHYSFS_Io *nativeIo_duplicate(PHYSFS_Io *io) static int nativeIo_flush(PHYSFS_Io *io) { - return __PHYSFS_platformFlush(io->opaque); + NativeIoInfo *info = (NativeIoInfo *) io->opaque; + return __PHYSFS_platformFlush(info->handle); } /* nativeIo_flush */ static void nativeIo_destroy(PHYSFS_Io *io) @@ -154,11 +205,11 @@ PHYSFS_Io *__PHYSFS_createNativeIo(const char *path, const int mode) assert((mode == 'r') || (mode == 'w') || (mode == 'a')); io = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - GOTO_IF_MACRO(!io, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); + GOTO_IF(!io, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); info = (NativeIoInfo *) allocator.Malloc(sizeof (NativeIoInfo)); - GOTO_IF_MACRO(!info, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); + GOTO_IF(!info, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); pathdup = (char *) allocator.Malloc(strlen(path) + 1); - GOTO_IF_MACRO(!pathdup, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); + GOTO_IF(!pathdup, PHYSFS_ERR_OUT_OF_MEMORY, createNativeIo_failed); if (mode == 'r') handle = __PHYSFS_platformOpenRead(path); @@ -167,7 +218,7 @@ PHYSFS_Io *__PHYSFS_createNativeIo(const char *path, const int mode) else if (mode == 'a') handle = __PHYSFS_platformOpenAppend(path); - GOTO_IF_MACRO(!handle, ERRPASS, createNativeIo_failed); + GOTO_IF_ERRPASS(!handle, createNativeIo_failed); strcpy(pathdup, path); info->handle = handle; @@ -194,7 +245,7 @@ typedef struct __PHYSFS_MemoryIoInfo PHYSFS_uint64 len; PHYSFS_uint64 pos; PHYSFS_Io *parent; - volatile PHYSFS_uint32 refcount; + int refcount; void (*destruct)(void *); } MemoryIoInfo; @@ -218,13 +269,13 @@ static PHYSFS_sint64 memoryIo_read(PHYSFS_Io *io, void *buf, PHYSFS_uint64 len) static PHYSFS_sint64 memoryIo_write(PHYSFS_Io *io, const void *buffer, PHYSFS_uint64 len) { - BAIL_MACRO(PHYSFS_ERR_OPEN_FOR_READING, -1); + BAIL(PHYSFS_ERR_OPEN_FOR_READING, -1); } /* memoryIo_write */ static int memoryIo_seek(PHYSFS_Io *io, PHYSFS_uint64 offset) { MemoryIoInfo *info = (MemoryIoInfo *) io->opaque; - BAIL_IF_MACRO(offset > info->len, PHYSFS_ERR_PAST_EOF, 0); + BAIL_IF(offset > info->len, PHYSFS_ERR_PAST_EOF, 0); info->pos = offset; return 1; } /* memoryIo_seek */ @@ -258,18 +309,15 @@ static PHYSFS_Io *memoryIo_duplicate(PHYSFS_Io *io) /* we're the parent. */ retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); newinfo = (MemoryIoInfo *) allocator.Malloc(sizeof (MemoryIoInfo)); if (!newinfo) { allocator.Free(retval); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); } /* if */ - /* !!! FIXME: want lockless atomic increment. */ - __PHYSFS_platformGrabMutex(stateLock); - info->refcount++; - __PHYSFS_platformReleaseMutex(stateLock); + __PHYSFS_ATOMIC_INCR(&info->refcount); memset(newinfo, '\0', sizeof (*info)); newinfo->buf = info->buf; @@ -290,7 +338,6 @@ static void memoryIo_destroy(PHYSFS_Io *io) { MemoryIoInfo *info = (MemoryIoInfo *) io->opaque; PHYSFS_Io *parent = info->parent; - int should_die = 0; if (parent != NULL) { @@ -307,13 +354,7 @@ static void memoryIo_destroy(PHYSFS_Io *io) /* we _are_ the parent. */ assert(info->refcount > 0); /* even in a race, we hold a reference. */ - /* !!! FIXME: want lockless atomic decrement. */ - __PHYSFS_platformGrabMutex(stateLock); - info->refcount--; - should_die = (info->refcount == 0); - __PHYSFS_platformReleaseMutex(stateLock); - - if (should_die) + if (__PHYSFS_ATOMIC_DECR(&info->refcount) == 0) { void (*destruct)(void *) = info->destruct; void *buf = (void *) info->buf; @@ -346,9 +387,9 @@ PHYSFS_Io *__PHYSFS_createMemoryIo(const void *buf, PHYSFS_uint64 len, MemoryIoInfo *info = NULL; io = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - GOTO_IF_MACRO(!io, PHYSFS_ERR_OUT_OF_MEMORY, createMemoryIo_failed); + GOTO_IF(!io, PHYSFS_ERR_OUT_OF_MEMORY, createMemoryIo_failed); info = (MemoryIoInfo *) allocator.Malloc(sizeof (MemoryIoInfo)); - GOTO_IF_MACRO(!info, PHYSFS_ERR_OUT_OF_MEMORY, createMemoryIo_failed); + GOTO_IF(!info, PHYSFS_ERR_OUT_OF_MEMORY, createMemoryIo_failed); memset(info, '\0', sizeof (*info)); info->buf = (const PHYSFS_uint8 *) buf; @@ -407,24 +448,24 @@ static PHYSFS_Io *handleIo_duplicate(PHYSFS_Io *io) FileHandle *newfh = (FileHandle *) allocator.Malloc(sizeof (FileHandle)); PHYSFS_Io *retval = NULL; - GOTO_IF_MACRO(!newfh, PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); + GOTO_IF(!newfh, PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); memset(newfh, '\0', sizeof (*newfh)); retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - GOTO_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); + GOTO_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); #if 0 /* we don't buffer the duplicate, at least not at the moment. */ if (origfh->buffer != NULL) { newfh->buffer = (PHYSFS_uint8 *) allocator.Malloc(origfh->bufsize); if (!newfh->buffer) - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); + GOTO(PHYSFS_ERR_OUT_OF_MEMORY, handleIo_dupe_failed); newfh->bufsize = origfh->bufsize; } /* if */ #endif newfh->io = origfh->io->duplicate(origfh->io); - GOTO_IF_MACRO(!newfh->io, ERRPASS, handleIo_dupe_failed); + GOTO_IF_ERRPASS(!newfh->io, handleIo_dupe_failed); newfh->forReading = origfh->forReading; newfh->dirHandle = origfh->dirHandle; @@ -485,7 +526,7 @@ static const PHYSFS_Io __PHYSFS_handleIoInterface = static PHYSFS_Io *__PHYSFS_createHandleIo(PHYSFS_File *f) { PHYSFS_Io *io = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - BAIL_IF_MACRO(!io, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!io, PHYSFS_ERR_OUT_OF_MEMORY, NULL); memcpy(io, &__PHYSFS_handleIoInterface, sizeof (*io)); io->opaque = f; return io; @@ -534,7 +575,7 @@ static char **doEnumStringList(void (*func)(PHYSFS_StringCallback, void *)) EnumStringListCallbackData ecd; memset(&ecd, '\0', sizeof (ecd)); ecd.list = (char **) allocator.Malloc(sizeof (char *)); - BAIL_IF_MACRO(!ecd.list, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!ecd.list, PHYSFS_ERR_OUT_OF_MEMORY, NULL); func(enumStringListCallback, &ecd); if (ecd.errcode) @@ -614,7 +655,7 @@ void __PHYSFS_sort(void *entries, size_t max, { /* * Quicksort w/ Bubblesort fallback algorithm inspired by code from here: - * http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html + * https://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html */ if (max > 0) __PHYSFS_quick_sort(entries, 0, max - 1, cmpfn, swapfn); @@ -701,6 +742,8 @@ PHYSFS_DECL const char *PHYSFS_getErrorByCode(PHYSFS_ErrorCode code) case PHYSFS_ERR_DIR_NOT_EMPTY: return "directory isn't empty"; case PHYSFS_ERR_OS_ERROR: return "OS reported an error"; case PHYSFS_ERR_DUPLICATE: return "duplicate resource"; + case PHYSFS_ERR_BAD_PASSWORD: return "bad password"; + case PHYSFS_ERR_APP_CALLBACK: return "app callback reported error"; } /* switch */ return NULL; /* don't know this error code. */ @@ -796,15 +839,15 @@ static const char *find_filename_extension(const char *fname) static DirHandle *tryOpenDir(PHYSFS_Io *io, const PHYSFS_Archiver *funcs, - const char *d, int forWriting) + const char *d, int forWriting, int *_claimed) { DirHandle *retval = NULL; void *opaque = NULL; if (io != NULL) - BAIL_IF_MACRO(!io->seek(io, 0), ERRPASS, NULL); + BAIL_IF_ERRPASS(!io->seek(io, 0), NULL); - opaque = funcs->openArchive(io, d, forWriting); + opaque = funcs->openArchive(io, d, forWriting, _claimed); if (opaque != NULL) { retval = (DirHandle *) allocator.Malloc(sizeof (DirHandle)); @@ -826,48 +869,56 @@ static DirHandle *tryOpenDir(PHYSFS_Io *io, const PHYSFS_Archiver *funcs, static DirHandle *openDirectory(PHYSFS_Io *io, const char *d, int forWriting) { DirHandle *retval = NULL; - const PHYSFS_Archiver **i; + PHYSFS_Archiver **i; const char *ext; + int created_io = 0; + int claimed = 0; + PHYSFS_ErrorCode errcode; assert((io != NULL) || (d != NULL)); if (io == NULL) { /* DIR gets first shot (unlike the rest, it doesn't deal with files). */ - extern const PHYSFS_Archiver __PHYSFS_Archiver_DIR; - retval = tryOpenDir(io, &__PHYSFS_Archiver_DIR, d, forWriting); - if (retval != NULL) + retval = tryOpenDir(io, &__PHYSFS_Archiver_DIR, d, forWriting, &claimed); + if (retval || claimed) return retval; io = __PHYSFS_createNativeIo(d, forWriting ? 'w' : 'r'); - BAIL_IF_MACRO(!io, ERRPASS, 0); + BAIL_IF_ERRPASS(!io, 0); + created_io = 1; } /* if */ ext = find_filename_extension(d); if (ext != NULL) { /* Look for archivers with matching file extensions first... */ - for (i = archivers; (*i != NULL) && (retval == NULL); i++) + for (i = archivers; (*i != NULL) && (retval == NULL) && !claimed; i++) { - if (__PHYSFS_utf8stricmp(ext, (*i)->info.extension) == 0) - retval = tryOpenDir(io, *i, d, forWriting); + if (PHYSFS_utf8stricmp(ext, (*i)->info.extension) == 0) + retval = tryOpenDir(io, *i, d, forWriting, &claimed); } /* for */ /* failing an exact file extension match, try all the others... */ - for (i = archivers; (*i != NULL) && (retval == NULL); i++) + for (i = archivers; (*i != NULL) && (retval == NULL) && !claimed; i++) { - if (__PHYSFS_utf8stricmp(ext, (*i)->info.extension) != 0) - retval = tryOpenDir(io, *i, d, forWriting); + if (PHYSFS_utf8stricmp(ext, (*i)->info.extension) != 0) + retval = tryOpenDir(io, *i, d, forWriting, &claimed); } /* for */ } /* if */ else /* no extension? Try them all. */ { - for (i = archivers; (*i != NULL) && (retval == NULL); i++) - retval = tryOpenDir(io, *i, d, forWriting); + for (i = archivers; (*i != NULL) && (retval == NULL) && !claimed; i++) + retval = tryOpenDir(io, *i, d, forWriting, &claimed); } /* else */ - BAIL_IF_MACRO(!retval, PHYSFS_ERR_UNSUPPORTED, NULL); + errcode = currentErrorCode(); + + if ((!retval) && (created_io)) + io->destroy(io); + + BAIL_IF(!retval, claimed ? errcode : PHYSFS_ERR_UNSUPPORTED, NULL); return retval; } /* openDirectory */ @@ -888,19 +939,23 @@ static int sanitizePlatformIndependentPath(const char *src, char *dst) while (*src == '/') /* skip initial '/' chars... */ src++; + /* Make sure the entire string isn't "." or ".." */ + if ((strcmp(src, ".") == 0) || (strcmp(src, "..") == 0)) + BAIL(PHYSFS_ERR_BAD_FILENAME, 0); + prev = dst; do { ch = *(src++); if ((ch == ':') || (ch == '\\')) /* illegal chars in a physfs path. */ - BAIL_MACRO(PHYSFS_ERR_BAD_FILENAME, 0); + BAIL(PHYSFS_ERR_BAD_FILENAME, 0); if (ch == '/') /* path separator. */ { *dst = '\0'; /* "." and ".." are illegal pathnames. */ if ((strcmp(prev, ".") == 0) || (strcmp(prev, "..") == 0)) - BAIL_MACRO(PHYSFS_ERR_BAD_FILENAME, 0); + BAIL(PHYSFS_ERR_BAD_FILENAME, 0); while (*src == '/') /* chop out doubles... */ src++; @@ -929,7 +984,6 @@ static int sanitizePlatformIndependentPath(const char *src, char *dst) */ static int partOfMountPoint(DirHandle *h, char *fname) { - /* !!! FIXME: This code feels gross. */ int rc; size_t len, mntpntlen; @@ -962,34 +1016,30 @@ static DirHandle *createDirHandle(PHYSFS_Io *io, const char *newDir, DirHandle *dirHandle = NULL; char *tmpmntpnt = NULL; + assert(newDir != NULL); /* should have caught this higher up. */ + if (mountPoint != NULL) { const size_t len = strlen(mountPoint) + 1; tmpmntpnt = (char *) __PHYSFS_smallAlloc(len); - GOTO_IF_MACRO(!tmpmntpnt, PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); + GOTO_IF(!tmpmntpnt, PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); if (!sanitizePlatformIndependentPath(mountPoint, tmpmntpnt)) goto badDirHandle; mountPoint = tmpmntpnt; /* sanitized version. */ } /* if */ dirHandle = openDirectory(io, newDir, forWriting); - GOTO_IF_MACRO(!dirHandle, ERRPASS, badDirHandle); + GOTO_IF_ERRPASS(!dirHandle, badDirHandle); - if (newDir == NULL) - dirHandle->dirName = NULL; - else - { - dirHandle->dirName = (char *) allocator.Malloc(strlen(newDir) + 1); - if (!dirHandle->dirName) - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); - strcpy(dirHandle->dirName, newDir); - } /* else */ + dirHandle->dirName = (char *) allocator.Malloc(strlen(newDir) + 1); + GOTO_IF(!dirHandle->dirName, PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); + strcpy(dirHandle->dirName, newDir); if ((mountPoint != NULL) && (*mountPoint != '\0')) { dirHandle->mountPoint = (char *)allocator.Malloc(strlen(mountPoint)+2); if (!dirHandle->mountPoint) - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); + GOTO(PHYSFS_ERR_OUT_OF_MEMORY, badDirHandle); strcpy(dirHandle->mountPoint, mountPoint); strcat(dirHandle->mountPoint, "/"); } /* if */ @@ -1020,7 +1070,7 @@ static int freeDirHandle(DirHandle *dh, FileHandle *openList) return 1; for (i = openList; i != NULL; i = i->next) - BAIL_IF_MACRO(i->dirHandle == dh, PHYSFS_ERR_FILES_STILL_OPEN, 0); + BAIL_IF(i->dirHandle == dh, PHYSFS_ERR_FILES_STILL_OPEN, 0); dh->funcs->closeArchive(dh->opaque); allocator.Free(dh->dirName); @@ -1042,21 +1092,21 @@ static char *calculateBaseDir(const char *argv0) return retval; /* We need argv0 to go on. */ - BAIL_IF_MACRO(argv0 == NULL, PHYSFS_ERR_ARGV0_IS_NULL, NULL); + BAIL_IF(argv0 == NULL, PHYSFS_ERR_ARGV0_IS_NULL, NULL); ptr = strrchr(argv0, dirsep); if (ptr != NULL) { const size_t size = ((size_t) (ptr - argv0)) + 1; retval = (char *) allocator.Malloc(size + 1); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); memcpy(retval, argv0, size); retval[size] = '\0'; return retval; } /* if */ /* argv0 wasn't helpful. */ - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, NULL); } /* calculateBaseDir */ @@ -1089,7 +1139,6 @@ static int doRegisterArchiver(const PHYSFS_Archiver *_archiver); static int initStaticArchivers(void) { #define REGISTER_STATIC_ARCHIVER(arc) { \ - extern const PHYSFS_Archiver __PHYSFS_Archiver_##arc; \ if (!doRegisterArchiver(&__PHYSFS_Archiver_##arc)) { \ return 0; \ } \ @@ -1099,7 +1148,8 @@ static int initStaticArchivers(void) REGISTER_STATIC_ARCHIVER(ZIP); #endif #if PHYSFS_SUPPORTS_7Z - REGISTER_STATIC_ARCHIVER(LZMA); + SZIP_global_init(); + REGISTER_STATIC_ARCHIVER(7Z); #endif #if PHYSFS_SUPPORTS_GRP REGISTER_STATIC_ARCHIVER(GRP); @@ -1122,6 +1172,9 @@ static int initStaticArchivers(void) #if PHYSFS_SUPPORTS_ISO9660 REGISTER_STATIC_ARCHIVER(ISO9660); #endif + #if PHYSFS_SUPPORTS_VDF + REGISTER_STATIC_ARCHIVER(VDF) + #endif #undef REGISTER_STATIC_ARCHIVER @@ -1134,7 +1187,7 @@ static int doDeinit(void); int PHYSFS_init(const char *argv0) { - BAIL_IF_MACRO(initialized, PHYSFS_ERR_IS_INITIALIZED, 0); + BAIL_IF(initialized, PHYSFS_ERR_IS_INITIALIZED, 0); if (!externalAllocator) setDefaultAllocator(); @@ -1187,7 +1240,7 @@ static int closeFileHandleList(FileHandle **list) PHYSFS_Io *io = i->io; next = i->next; - if (!io->flush(io)) + if (io->flush && !io->flush(io)) { *list = i; return 0; @@ -1240,12 +1293,12 @@ static int archiverInUse(const PHYSFS_Archiver *arc, const DirHandle *list) static int doDeregisterArchiver(const size_t idx) { const size_t len = (numArchivers - idx) * sizeof (void *); - const PHYSFS_ArchiveInfo *info = archiveInfo[idx]; - const PHYSFS_Archiver *arc = archivers[idx]; + PHYSFS_ArchiveInfo *info = archiveInfo[idx]; + PHYSFS_Archiver *arc = archivers[idx]; /* make sure nothing is still using this archiver */ if (archiverInUse(arc, searchPath) || archiverInUse(arc, writeDir)) - BAIL_MACRO(PHYSFS_ERR_FILES_STILL_OPEN, 0); + BAIL(PHYSFS_ERR_FILES_STILL_OPEN, 0); allocator.Free((void *) info->extension); allocator.Free((void *) info->description); @@ -1268,8 +1321,8 @@ static void freeArchivers(void) { while (numArchivers > 0) { - const int rc = doDeregisterArchiver(numArchivers - 1); - assert(rc); /* nothing should be mounted during shutdown. */ + if (!doDeregisterArchiver(numArchivers - 1)) + assert(!"nothing should be mounted during shutdown."); } /* while */ allocator.Free(archivers); @@ -1281,10 +1334,8 @@ static void freeArchivers(void) static int doDeinit(void) { - BAIL_IF_MACRO(!__PHYSFS_platformDeinit(), ERRPASS, 0); - closeFileHandleList(&openWriteList); - BAIL_IF_MACRO(!PHYSFS_setWriteDir(NULL), PHYSFS_ERR_FILES_STILL_OPEN, 0); + BAIL_IF(!PHYSFS_setWriteDir(NULL), PHYSFS_ERR_FILES_STILL_OPEN, 0); freeSearchPath(); freeArchivers(); @@ -1330,13 +1381,16 @@ static int doDeinit(void) allocator.Deinit(); errorLock = stateLock = NULL; + + __PHYSFS_platformDeinit(); + return 1; } /* doDeinit */ int PHYSFS_deinit(void) { - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); return doDeinit(); } /* PHYSFS_deinit */ @@ -1356,6 +1410,15 @@ char *__PHYSFS_strdup(const char *str) } /* __PHYSFS_strdup */ +PHYSFS_uint32 __PHYSFS_hashString(const char *str, size_t len) +{ + PHYSFS_uint32 hash = 5381; + while (len--) + hash = ((hash << 5) + hash) ^ *(str++); + return hash; +} /* __PHYSFS_hashString */ + + /* MAKE SURE you hold stateLock before calling this! */ static int doRegisterArchiver(const PHYSFS_Archiver *_archiver) { @@ -1367,32 +1430,32 @@ static int doRegisterArchiver(const PHYSFS_Archiver *_archiver) void *ptr = NULL; size_t i; - BAIL_IF_MACRO(!_archiver, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(_archiver->version > maxver, PHYSFS_ERR_UNSUPPORTED, 0); - BAIL_IF_MACRO(!_archiver->info.extension, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->info.description, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->info.author, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->info.url, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->openArchive, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->enumerateFiles, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->openRead, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->openWrite, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->openAppend, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->remove, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->mkdir, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->closeArchive, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!_archiver->stat, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(_archiver->version > maxver, PHYSFS_ERR_UNSUPPORTED, 0); + BAIL_IF(!_archiver->info.extension, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->info.description, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->info.author, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->info.url, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->openArchive, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->enumerate, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->openRead, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->openWrite, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->openAppend, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->remove, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->mkdir, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->closeArchive, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_archiver->stat, PHYSFS_ERR_INVALID_ARGUMENT, 0); ext = _archiver->info.extension; for (i = 0; i < numArchivers; i++) { - if (__PHYSFS_utf8stricmp(archiveInfo[i]->extension, ext) == 0) - BAIL_MACRO(PHYSFS_ERR_DUPLICATE, 0); // !!! FIXME: better error? ERR_IN_USE? + if (PHYSFS_utf8stricmp(archiveInfo[i]->extension, ext) == 0) + BAIL(PHYSFS_ERR_DUPLICATE, 0); } /* for */ /* make a copy of the data. */ archiver = (PHYSFS_Archiver *) allocator.Malloc(sizeof (*archiver)); - GOTO_IF_MACRO(!archiver, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); + GOTO_IF(!archiver, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); /* Must copy sizeof (OLD_VERSION_OF_STRUCT) when version changes! */ memcpy(archiver, _archiver, sizeof (*archiver)); @@ -1401,7 +1464,7 @@ static int doRegisterArchiver(const PHYSFS_Archiver *_archiver) memset(info, '\0', sizeof (*info)); /* NULL in case an alloc fails. */ #define CPYSTR(item) \ info->item = __PHYSFS_strdup(_archiver->info.item); \ - GOTO_IF_MACRO(!info->item, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); + GOTO_IF(!info->item, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); CPYSTR(extension); CPYSTR(description); CPYSTR(author); @@ -1410,12 +1473,12 @@ static int doRegisterArchiver(const PHYSFS_Archiver *_archiver) #undef CPYSTR ptr = allocator.Realloc(archiveInfo, len); - GOTO_IF_MACRO(!ptr, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); - archiveInfo = (const PHYSFS_ArchiveInfo **) ptr; + GOTO_IF(!ptr, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); + archiveInfo = (PHYSFS_ArchiveInfo **) ptr; ptr = allocator.Realloc(archivers, len); - GOTO_IF_MACRO(!ptr, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); - archivers = (const PHYSFS_Archiver **) ptr; + GOTO_IF(!ptr, PHYSFS_ERR_OUT_OF_MEMORY, regfailed); + archivers = (PHYSFS_Archiver **) ptr; archiveInfo[numArchivers] = info; archiveInfo[numArchivers + 1] = NULL; @@ -1444,7 +1507,7 @@ regfailed: int PHYSFS_registerArchiver(const PHYSFS_Archiver *archiver) { int retval; - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); __PHYSFS_platformGrabMutex(stateLock); retval = doRegisterArchiver(archiver); __PHYSFS_platformReleaseMutex(stateLock); @@ -1456,13 +1519,13 @@ int PHYSFS_deregisterArchiver(const char *ext) { size_t i; - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); - BAIL_IF_MACRO(!ext, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); + BAIL_IF(!ext, PHYSFS_ERR_INVALID_ARGUMENT, 0); __PHYSFS_platformGrabMutex(stateLock); for (i = 0; i < numArchivers; i++) { - if (__PHYSFS_utf8stricmp(archiveInfo[i]->extension, ext) == 0) + if (PHYSFS_utf8stricmp(archiveInfo[i]->extension, ext) == 0) { const int retval = doDeregisterArchiver(i); __PHYSFS_platformReleaseMutex(stateLock); @@ -1471,14 +1534,14 @@ int PHYSFS_deregisterArchiver(const char *ext) } /* for */ __PHYSFS_platformReleaseMutex(stateLock); - BAIL_MACRO(PHYSFS_ERR_NOT_FOUND, 0); + BAIL(PHYSFS_ERR_NOT_FOUND, 0); } /* PHYSFS_deregisterArchiver */ const PHYSFS_ArchiveInfo **PHYSFS_supportedArchiveTypes(void) { - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, NULL); - return archiveInfo; + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, NULL); + return (const PHYSFS_ArchiveInfo **) archiveInfo; } /* PHYSFS_supportedArchiveTypes */ @@ -1521,22 +1584,22 @@ const char *PHYSFS_getPrefDir(const char *org, const char *app) char *ptr = NULL; char *endstr = NULL; - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); - BAIL_IF_MACRO(!org, PHYSFS_ERR_INVALID_ARGUMENT, NULL); - BAIL_IF_MACRO(*org == '\0', PHYSFS_ERR_INVALID_ARGUMENT, NULL); - BAIL_IF_MACRO(!app, PHYSFS_ERR_INVALID_ARGUMENT, NULL); - BAIL_IF_MACRO(*app == '\0', PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); + BAIL_IF(!org, PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL_IF(*org == '\0', PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL_IF(!app, PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL_IF(*app == '\0', PHYSFS_ERR_INVALID_ARGUMENT, NULL); allocator.Free(prefDir); prefDir = __PHYSFS_platformCalcPrefDir(org, app); - BAIL_IF_MACRO(!prefDir, ERRPASS, NULL); + BAIL_IF_ERRPASS(!prefDir, NULL); assert(strlen(prefDir) > 0); endstr = prefDir + (strlen(prefDir) - 1); assert(*endstr == dirsep); *endstr = '\0'; /* mask out the final dirsep for now. */ - if (!__PHYSFS_platformStat(prefDir, &statbuf)) + if (!__PHYSFS_platformStat(prefDir, &statbuf, 1)) { for (ptr = strchr(prefDir, dirsep); ptr; ptr = strchr(ptr+1, dirsep)) { @@ -1597,14 +1660,13 @@ int PHYSFS_setWriteDir(const char *newDir) if (writeDir != NULL) { - BAIL_IF_MACRO_MUTEX(!freeDirHandle(writeDir, openWriteList), ERRPASS, + BAIL_IF_MUTEX_ERRPASS(!freeDirHandle(writeDir, openWriteList), stateLock, 0); writeDir = NULL; } /* if */ if (newDir != NULL) { - /* !!! FIXME: PHYSFS_Io shouldn't be NULL */ writeDir = createDirHandle(NULL, newDir, NULL, 1); retval = (writeDir != NULL); } /* if */ @@ -1622,24 +1684,23 @@ static int doMount(PHYSFS_Io *io, const char *fname, DirHandle *prev = NULL; DirHandle *i; + BAIL_IF(!fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + if (mountPoint == NULL) mountPoint = "/"; __PHYSFS_platformGrabMutex(stateLock); - if (fname != NULL) + for (i = searchPath; i != NULL; i = i->next) { - for (i = searchPath; i != NULL; i = i->next) - { - /* already in search path? */ - if ((i->dirName != NULL) && (strcmp(fname, i->dirName) == 0)) - BAIL_MACRO_MUTEX(ERRPASS, stateLock, 1); - prev = i; - } /* for */ - } /* if */ + /* already in search path? */ + if ((i->dirName != NULL) && (strcmp(fname, i->dirName) == 0)) + BAIL_MUTEX_ERRPASS(stateLock, 1); + prev = i; + } /* for */ dh = createDirHandle(io, fname, mountPoint, 0); - BAIL_IF_MACRO_MUTEX(!dh, ERRPASS, stateLock, 0); + BAIL_IF_MUTEX_ERRPASS(!dh, stateLock, 0); if (appendToPath) { @@ -1662,8 +1723,9 @@ static int doMount(PHYSFS_Io *io, const char *fname, int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname, const char *mountPoint, int appendToPath) { - BAIL_IF_MACRO(!io, PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(io->version != 0, PHYSFS_ERR_UNSUPPORTED, 0); + BAIL_IF(!io, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(io->version != 0, PHYSFS_ERR_UNSUPPORTED, 0); return doMount(io, fname, mountPoint, appendToPath); } /* PHYSFS_mountIo */ @@ -1675,10 +1737,11 @@ int PHYSFS_mountMemory(const void *buf, PHYSFS_uint64 len, void (*del)(void *), int retval = 0; PHYSFS_Io *io = NULL; - BAIL_IF_MACRO(!buf, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!buf, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); io = __PHYSFS_createMemoryIo(buf, len, del); - BAIL_IF_MACRO(!io, ERRPASS, 0); + BAIL_IF_ERRPASS(!io, 0); retval = doMount(io, fname, mountPoint, appendToPath); if (!retval) { @@ -1698,10 +1761,11 @@ int PHYSFS_mountHandle(PHYSFS_File *file, const char *fname, int retval = 0; PHYSFS_Io *io = NULL; - BAIL_IF_MACRO(file == NULL, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!file, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); io = __PHYSFS_createHandleIo(file); - BAIL_IF_MACRO(!io, ERRPASS, 0); + BAIL_IF_ERRPASS(!io, 0); retval = doMount(io, fname, mountPoint, appendToPath); if (!retval) { @@ -1716,14 +1780,14 @@ int PHYSFS_mountHandle(PHYSFS_File *file, const char *fname, int PHYSFS_mount(const char *newDir, const char *mountPoint, int appendToPath) { - BAIL_IF_MACRO(!newDir, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!newDir, PHYSFS_ERR_INVALID_ARGUMENT, 0); return doMount(NULL, newDir, mountPoint, appendToPath); } /* PHYSFS_mount */ int PHYSFS_addToSearchPath(const char *newDir, int appendToPath) { - return doMount(NULL, newDir, NULL, appendToPath); + return PHYSFS_mount(newDir, NULL, appendToPath); } /* PHYSFS_addToSearchPath */ @@ -1739,7 +1803,7 @@ int PHYSFS_unmount(const char *oldDir) DirHandle *prev = NULL; DirHandle *next = NULL; - BAIL_IF_MACRO(oldDir == NULL, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(oldDir == NULL, PHYSFS_ERR_INVALID_ARGUMENT, 0); __PHYSFS_platformGrabMutex(stateLock); for (i = searchPath; i != NULL; i = i->next) @@ -1747,7 +1811,7 @@ int PHYSFS_unmount(const char *oldDir) if (strcmp(i->dirName, oldDir) == 0) { next = i->next; - BAIL_IF_MACRO_MUTEX(!freeDirHandle(i, openReadList), ERRPASS, + BAIL_IF_MUTEX_ERRPASS(!freeDirHandle(i, openReadList), stateLock, 0); if (prev == NULL) @@ -1755,12 +1819,12 @@ int PHYSFS_unmount(const char *oldDir) else prev->next = next; - BAIL_MACRO_MUTEX(ERRPASS, stateLock, 1); + BAIL_MUTEX_ERRPASS(stateLock, 1); } /* if */ prev = i; } /* for */ - BAIL_MACRO_MUTEX(PHYSFS_ERR_NOT_MOUNTED, stateLock, 0); + BAIL_MUTEX(PHYSFS_ERR_NOT_MOUNTED, stateLock, 0); } /* PHYSFS_unmount */ @@ -1785,7 +1849,7 @@ const char *PHYSFS_getMountPoint(const char *dir) } /* for */ __PHYSFS_platformReleaseMutex(stateLock); - BAIL_MACRO(PHYSFS_ERR_NOT_MOUNTED, NULL); + BAIL(PHYSFS_ERR_NOT_MOUNTED, NULL); } /* PHYSFS_getMountPoint */ @@ -1802,39 +1866,68 @@ void PHYSFS_getSearchPathCallback(PHYSFS_StringCallback callback, void *data) } /* PHYSFS_getSearchPathCallback */ -/* Split out to avoid stack allocation in a loop. */ -static void setSaneCfgAddPath(const char *i, const size_t l, const char *dirsep, - int archivesFirst) +typedef struct setSaneCfgEnumData { - const char *d = PHYSFS_getRealDir(i); - const size_t allocsize = strlen(d) + strlen(dirsep) + l + 1; - char *str = (char *) __PHYSFS_smallAlloc(allocsize); - if (str != NULL) + const char *archiveExt; + size_t archiveExtLen; + int archivesFirst; + PHYSFS_ErrorCode errcode; +} setSaneCfgEnumData; + +static PHYSFS_EnumerateCallbackResult setSaneCfgEnumCallback(void *_data, + const char *dir, const char *f) +{ + setSaneCfgEnumData *data = (setSaneCfgEnumData *) _data; + const size_t extlen = data->archiveExtLen; + const size_t l = strlen(f); + const char *ext; + + if ((l > extlen) && (f[l - extlen - 1] == '.')) { - sprintf(str, "%s%s%s", d, dirsep, i); - PHYSFS_mount(str, NULL, archivesFirst == 0); - __PHYSFS_smallFree(str); + ext = f + (l - extlen); + if (PHYSFS_utf8stricmp(ext, data->archiveExt) == 0) + { + const char dirsep = __PHYSFS_platformDirSeparator; + const char *d = PHYSFS_getRealDir(f); + const size_t allocsize = strlen(d) + l + 2; + char *str = (char *) __PHYSFS_smallAlloc(allocsize); + if (str == NULL) + data->errcode = PHYSFS_ERR_OUT_OF_MEMORY; + else + { + snprintf(str, allocsize, "%s%c%s", d, dirsep, f); + if (!PHYSFS_mount(str, NULL, data->archivesFirst == 0)) + data->errcode = currentErrorCode(); + __PHYSFS_smallFree(str); + } /* else */ + } /* if */ } /* if */ -} /* setSaneCfgAddPath */ + + /* !!! FIXME: if we want to abort on errors... */ + /*return (data->errcode != PHYSFS_ERR_OK) ? PHYSFS_ENUM_ERROR : PHYSFS_ENUM_OK;*/ + + return PHYSFS_ENUM_OK; /* keep going */ +} /* setSaneCfgEnumCallback */ int PHYSFS_setSaneConfig(const char *organization, const char *appName, const char *archiveExt, int includeCdRoms, int archivesFirst) { - const char *dirsep = PHYSFS_getDirSeparator(); const char *basedir; const char *prefdir; - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, 0); prefdir = PHYSFS_getPrefDir(organization, appName); - BAIL_IF_MACRO(!prefdir, ERRPASS, 0); + BAIL_IF_ERRPASS(!prefdir, 0); basedir = PHYSFS_getBaseDir(); - BAIL_IF_MACRO(!basedir, ERRPASS, 0); + BAIL_IF_ERRPASS(!basedir, 0); - BAIL_IF_MACRO(!PHYSFS_setWriteDir(prefdir), PHYSFS_ERR_NO_WRITE_DIR, 0); + BAIL_IF(!PHYSFS_setWriteDir(prefdir), PHYSFS_ERR_NO_WRITE_DIR, 0); + + /* !!! FIXME: these can fail and we should report that... */ /* Put write dir first in search path... */ PHYSFS_mount(prefdir, NULL, 0); @@ -1855,23 +1948,19 @@ int PHYSFS_setSaneConfig(const char *organization, const char *appName, /* Root out archives, and add them to search path... */ if (archiveExt != NULL) { - char **rc = PHYSFS_enumerateFiles("/"); - char **i; - size_t extlen = strlen(archiveExt); - char *ext; - - for (i = rc; *i != NULL; i++) + setSaneCfgEnumData data; + memset(&data, '\0', sizeof (data)); + data.archiveExt = archiveExt; + data.archiveExtLen = strlen(archiveExt); + data.archivesFirst = archivesFirst; + data.errcode = PHYSFS_ERR_OK; + if (!PHYSFS_enumerate("/", setSaneCfgEnumCallback, &data)) { - size_t l = strlen(*i); - if ((l > extlen) && ((*i)[l - extlen - 1] == '.')) - { - ext = (*i) + (l - extlen); - if (__PHYSFS_utf8stricmp(ext, archiveExt) == 0) - setSaneCfgAddPath(*i, l, dirsep, archivesFirst); - } /* if */ - } /* for */ - - PHYSFS_freeList(rc); + /* !!! FIXME: use this if we're reporting errors. + PHYSFS_ErrorCode errcode = currentErrorCode(); + if (errcode == PHYSFS_ERR_APP_CALLBACK) + errcode = data->errcode; */ + } /* if */ } /* if */ return 1; @@ -1927,12 +2016,12 @@ static int verifyPath(DirHandle *h, char **_fname, int allowMissing) size_t len = strlen(fname); assert(mntpntlen > 1); /* root mount points should be NULL. */ /* not under the mountpoint, so skip this archive. */ - BAIL_IF_MACRO(len < mntpntlen-1, PHYSFS_ERR_NOT_FOUND, 0); + BAIL_IF(len < mntpntlen-1, PHYSFS_ERR_NOT_FOUND, 0); /* !!! FIXME: Case insensitive? */ retval = strncmp(h->mountPoint, fname, mntpntlen-1); - BAIL_IF_MACRO(retval != 0, PHYSFS_ERR_NOT_FOUND, 0); + BAIL_IF(retval != 0, PHYSFS_ERR_NOT_FOUND, 0); if (len > mntpntlen-1) /* corner case... */ - BAIL_IF_MACRO(fname[mntpntlen-1]!='/', PHYSFS_ERR_NOT_FOUND, 0); + BAIL_IF(fname[mntpntlen-1]!='/', PHYSFS_ERR_NOT_FOUND, 0); fname += mntpntlen-1; /* move to start of actual archive path. */ if (*fname == '/') fname++; @@ -1959,7 +2048,7 @@ static int verifyPath(DirHandle *h, char **_fname, int allowMissing) if (end != NULL) *end = '/'; /* insecure path (has a disallowed symlink in it)? */ - BAIL_IF_MACRO(rc, PHYSFS_ERR_SYMLINK_FORBIDDEN, 0); + BAIL_IF(rc, PHYSFS_ERR_SYMLINK_FORBIDDEN, 0); /* break out early if path element is missing. */ if (!retval) @@ -1993,12 +2082,12 @@ static int doMkdir(const char *_dname, char *dname) int retval = 0; int exists = 1; /* force existance check on first path element. */ - BAIL_IF_MACRO(!sanitizePlatformIndependentPath(_dname, dname), ERRPASS, 0); + BAIL_IF_ERRPASS(!sanitizePlatformIndependentPath(_dname, dname), 0); __PHYSFS_platformGrabMutex(stateLock); - BAIL_IF_MACRO_MUTEX(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, stateLock, 0); + BAIL_IF_MUTEX(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, stateLock, 0); h = writeDir; - BAIL_IF_MACRO_MUTEX(!verifyPath(h, &dname, 1), ERRPASS, stateLock, 0); + BAIL_IF_MUTEX_ERRPASS(!verifyPath(h, &dname, 1), stateLock, 0); start = dname; while (1) @@ -2041,10 +2130,10 @@ int PHYSFS_mkdir(const char *_dname) char *dname; size_t len; - BAIL_IF_MACRO(!_dname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_dname, PHYSFS_ERR_INVALID_ARGUMENT, 0); len = strlen(_dname) + 1; dname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!dname, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!dname, PHYSFS_ERR_OUT_OF_MEMORY, 0); retval = doMkdir(_dname, dname); __PHYSFS_smallFree(dname); return retval; @@ -2055,13 +2144,13 @@ static int doDelete(const char *_fname, char *fname) { int retval; DirHandle *h; - BAIL_IF_MACRO(!sanitizePlatformIndependentPath(_fname, fname), ERRPASS, 0); + BAIL_IF_ERRPASS(!sanitizePlatformIndependentPath(_fname, fname), 0); __PHYSFS_platformGrabMutex(stateLock); - BAIL_IF_MACRO_MUTEX(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, stateLock, 0); + BAIL_IF_MUTEX(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, stateLock, 0); h = writeDir; - BAIL_IF_MACRO_MUTEX(!verifyPath(h, &fname, 0), ERRPASS, stateLock, 0); + BAIL_IF_MUTEX_ERRPASS(!verifyPath(h, &fname, 0), stateLock, 0); retval = h->funcs->remove(h->opaque, fname); __PHYSFS_platformReleaseMutex(stateLock); @@ -2075,26 +2164,26 @@ int PHYSFS_delete(const char *_fname) char *fname; size_t len; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); len = strlen(_fname) + 1; fname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); retval = doDelete(_fname, fname); __PHYSFS_smallFree(fname); return retval; } /* PHYSFS_delete */ -const char *PHYSFS_getRealDir(const char *_fname) +static DirHandle *getRealDirHandle(const char *_fname) { - const char *retval = NULL; + DirHandle *retval = NULL; char *fname = NULL; size_t len; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, NULL); + BAIL_IF(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, NULL); len = strlen(_fname) + 1; fname = __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, NULL); if (sanitizePlatformIndependentPath(_fname, fname)) { DirHandle *i; @@ -2104,7 +2193,7 @@ const char *PHYSFS_getRealDir(const char *_fname) char *arcfname = fname; if (partOfMountPoint(i, arcfname)) { - retval = i->dirName; + retval = i; break; } /* if */ else if (verifyPath(i, &arcfname, 0)) @@ -2112,7 +2201,7 @@ const char *PHYSFS_getRealDir(const char *_fname) PHYSFS_Stat statbuf; if (i->funcs->stat(i->opaque, arcfname, &statbuf)) { - retval = i->dirName; + retval = i; break; } /* if */ } /* if */ @@ -2122,6 +2211,12 @@ const char *PHYSFS_getRealDir(const char *_fname) __PHYSFS_smallFree(fname); return retval; +} /* getRealDirHandle */ + +const char *PHYSFS_getRealDir(const char *fname) +{ + DirHandle *dh = getRealDirHandle(fname); + return dh ? dh->dirName : NULL; } /* PHYSFS_getRealDir */ @@ -2157,7 +2252,8 @@ static int locateInStringList(const char *str, } /* locateInStringList */ -static void enumFilesCallback(void *data, const char *origdir, const char *str) +static PHYSFS_EnumerateCallbackResult enumFilesCallback(void *data, + const char *origdir, const char *str) { PHYSFS_uint32 pos; void *ptr; @@ -2170,7 +2266,7 @@ static void enumFilesCallback(void *data, const char *origdir, const char *str) */ pos = pecd->size; if (locateInStringList(str, pecd->list, &pos)) - return; /* already in the list. */ + return PHYSFS_ENUM_OK; /* already in the list, but keep going. */ ptr = allocator.Realloc(pecd->list, (pecd->size + 2) * sizeof (char *)); newstr = (char *) allocator.Malloc(strlen(str) + 1); @@ -2178,7 +2274,13 @@ static void enumFilesCallback(void *data, const char *origdir, const char *str) pecd->list = (char **) ptr; if ((ptr == NULL) || (newstr == NULL)) - return; /* better luck next time. */ + { + if (newstr) + allocator.Free(newstr); + + pecd->errcode = PHYSFS_ERR_OUT_OF_MEMORY; + return PHYSFS_ENUM_ERROR; /* better luck next time. */ + } /* if */ strcpy(newstr, str); @@ -2190,6 +2292,8 @@ static void enumFilesCallback(void *data, const char *origdir, const char *str) pecd->list[pos] = newstr; pecd->size++; + + return PHYSFS_ENUM_OK; } /* enumFilesCallback */ @@ -2198,8 +2302,18 @@ char **PHYSFS_enumerateFiles(const char *path) EnumStringListCallbackData ecd; memset(&ecd, '\0', sizeof (ecd)); ecd.list = (char **) allocator.Malloc(sizeof (char *)); - BAIL_IF_MACRO(!ecd.list, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - PHYSFS_enumerateFilesCallback(path, enumFilesCallback, &ecd); + BAIL_IF(!ecd.list, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + if (!PHYSFS_enumerate(path, enumFilesCallback, &ecd)) + { + const PHYSFS_ErrorCode errcode = currentErrorCode(); + PHYSFS_uint32 i; + for (i = 0; i < ecd.size; i++) + allocator.Free(ecd.list[i]); + allocator.Free(ecd.list); + BAIL_IF(errcode == PHYSFS_ERR_APP_CALLBACK, ecd.errcode, NULL); + return NULL; + } /* if */ + ecd.list[ecd.size] = NULL; return ecd.list; } /* PHYSFS_enumerateFiles */ @@ -2208,78 +2322,100 @@ char **PHYSFS_enumerateFiles(const char *path) /* * Broke out to seperate function so we can use stack allocation gratuitously. */ -static void enumerateFromMountPoint(DirHandle *i, const char *arcfname, - PHYSFS_EnumFilesCallback callback, +static PHYSFS_EnumerateCallbackResult enumerateFromMountPoint(DirHandle *i, + const char *arcfname, + PHYSFS_EnumerateCallback callback, const char *_fname, void *data) { + PHYSFS_EnumerateCallbackResult retval; const size_t len = strlen(arcfname); char *ptr = NULL; char *end = NULL; const size_t slen = strlen(i->mountPoint) + 1; char *mountPoint = (char *) __PHYSFS_smallAlloc(slen); - if (mountPoint == NULL) - return; /* oh well. */ + BAIL_IF(!mountPoint, PHYSFS_ERR_OUT_OF_MEMORY, PHYSFS_ENUM_ERROR); strcpy(mountPoint, i->mountPoint); ptr = mountPoint + ((len) ? len + 1 : 0); end = strchr(ptr, '/'); assert(end); /* should always find a terminating '/'. */ *end = '\0'; - callback(data, _fname, ptr); + retval = callback(data, _fname, ptr); __PHYSFS_smallFree(mountPoint); + + BAIL_IF(retval == PHYSFS_ENUM_ERROR, PHYSFS_ERR_APP_CALLBACK, retval); + return retval; } /* enumerateFromMountPoint */ typedef struct SymlinkFilterData { - PHYSFS_EnumFilesCallback callback; + PHYSFS_EnumerateCallback callback; void *callbackData; DirHandle *dirhandle; + const char *arcfname; + PHYSFS_ErrorCode errcode; } SymlinkFilterData; -static void enumCallbackFilterSymLinks(void *_data, const char *origdir, - const char *fname) +static PHYSFS_EnumerateCallbackResult enumCallbackFilterSymLinks(void *_data, + const char *origdir, const char *fname) { - const char *trimmedDir = (*origdir == '/') ? (origdir+1) : origdir; + SymlinkFilterData *data = (SymlinkFilterData *) _data; + const DirHandle *dh = data->dirhandle; + const char *arcfname = data->arcfname; + PHYSFS_Stat statbuf; + const char *trimmedDir = (*arcfname == '/') ? (arcfname + 1) : arcfname; const size_t slen = strlen(trimmedDir) + strlen(fname) + 2; char *path = (char *) __PHYSFS_smallAlloc(slen); + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; - if (path != NULL) + if (path == NULL) { - SymlinkFilterData *data = (SymlinkFilterData *) _data; - const DirHandle *dh = data->dirhandle; - PHYSFS_Stat statbuf; - - sprintf(path, "%s%s%s", trimmedDir, *trimmedDir ? "/" : "", fname); - if (dh->funcs->stat(dh->opaque, path, &statbuf)) - { - /* Pass it on to the application if it's not a symlink. */ - if (statbuf.filetype != PHYSFS_FILETYPE_SYMLINK) - data->callback(data->callbackData, origdir, fname); - } /* if */ - - __PHYSFS_smallFree(path); + data->errcode = PHYSFS_ERR_OUT_OF_MEMORY; + return PHYSFS_ENUM_ERROR; } /* if */ + + snprintf(path, slen, "%s%s%s", trimmedDir, *trimmedDir ? "/" : "", fname); + + if (!dh->funcs->stat(dh->opaque, path, &statbuf)) + { + data->errcode = currentErrorCode(); + retval = PHYSFS_ENUM_ERROR; + } /* if */ + else + { + /* Pass it on to the application if it's not a symlink. */ + if (statbuf.filetype != PHYSFS_FILETYPE_SYMLINK) + { + retval = data->callback(data->callbackData, origdir, fname); + if (retval == PHYSFS_ENUM_ERROR) + data->errcode = PHYSFS_ERR_APP_CALLBACK; + } /* if */ + } /* else */ + + __PHYSFS_smallFree(path); + + return retval; } /* enumCallbackFilterSymLinks */ -/* !!! FIXME: this should report error conditions. */ -void PHYSFS_enumerateFilesCallback(const char *_fname, - PHYSFS_EnumFilesCallback callback, - void *data) +int PHYSFS_enumerate(const char *_fn, PHYSFS_EnumerateCallback cb, void *data) { + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; size_t len; char *fname; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, ) /*0*/; - BAIL_IF_MACRO(!callback, PHYSFS_ERR_INVALID_ARGUMENT, ) /*0*/; + BAIL_IF(!_fn, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!cb, PHYSFS_ERR_INVALID_ARGUMENT, 0); - len = strlen(_fname) + 1; + len = strlen(_fn) + 1; fname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, ) /*0*/; + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); - if (sanitizePlatformIndependentPath(_fname, fname)) + if (!sanitizePlatformIndependentPath(_fn, fname)) + retval = PHYSFS_ENUM_STOP; + else { DirHandle *i; SymlinkFilterData filterdata; @@ -2289,49 +2425,95 @@ void PHYSFS_enumerateFilesCallback(const char *_fname, if (!allowSymLinks) { memset(&filterdata, '\0', sizeof (filterdata)); - filterdata.callback = callback; + filterdata.callback = cb; filterdata.callbackData = data; } /* if */ - for (i = searchPath; i != NULL; i = i->next) + for (i = searchPath; (retval == PHYSFS_ENUM_OK) && i; i = i->next) { char *arcfname = fname; + if (partOfMountPoint(i, arcfname)) - enumerateFromMountPoint(i, arcfname, callback, _fname, data); + retval = enumerateFromMountPoint(i, arcfname, cb, _fn, data); else if (verifyPath(i, &arcfname, 0)) { - if ((!allowSymLinks) && (i->funcs->info.supportsSymlinks)) + PHYSFS_Stat statbuf; + if (!i->funcs->stat(i->opaque, arcfname, &statbuf)) + { + if (currentErrorCode() == PHYSFS_ERR_NOT_FOUND) + continue; /* no such dir in this archive, skip it. */ + } /* if */ + + if (statbuf.filetype != PHYSFS_FILETYPE_DIRECTORY) + continue; /* not a directory in this archive, skip it. */ + + else if ((!allowSymLinks) && (i->funcs->info.supportsSymlinks)) { filterdata.dirhandle = i; - i->funcs->enumerateFiles(i->opaque, arcfname, - enumCallbackFilterSymLinks, - _fname, &filterdata); - } /* if */ + filterdata.arcfname = arcfname; + filterdata.errcode = PHYSFS_ERR_OK; + retval = i->funcs->enumerate(i->opaque, arcfname, + enumCallbackFilterSymLinks, + _fn, &filterdata); + if (retval == PHYSFS_ENUM_ERROR) + { + if (currentErrorCode() == PHYSFS_ERR_APP_CALLBACK) + PHYSFS_setErrorCode(filterdata.errcode); + } /* if */ + } /* else if */ else { - i->funcs->enumerateFiles(i->opaque, arcfname, - callback, _fname, data); + retval = i->funcs->enumerate(i->opaque, arcfname, + cb, _fn, data); } /* else */ } /* else if */ } /* for */ + __PHYSFS_platformReleaseMutex(stateLock); } /* if */ __PHYSFS_smallFree(fname); + + return (retval == PHYSFS_ENUM_ERROR) ? 0 : 1; +} /* PHYSFS_enumerate */ + + +typedef struct +{ + PHYSFS_EnumFilesCallback callback; + void *data; +} LegacyEnumFilesCallbackData; + +static PHYSFS_EnumerateCallbackResult enumFilesCallbackAlwaysSucceed(void *d, + const char *origdir, const char *fname) +{ + LegacyEnumFilesCallbackData *cbdata = (LegacyEnumFilesCallbackData *) d; + cbdata->callback(cbdata->data, origdir, fname); + return PHYSFS_ENUM_OK; +} /* enumFilesCallbackAlwaysSucceed */ + +void PHYSFS_enumerateFilesCallback(const char *fname, + PHYSFS_EnumFilesCallback callback, + void *data) +{ + LegacyEnumFilesCallbackData cbdata; + cbdata.callback = callback; + cbdata.data = data; + (void) PHYSFS_enumerate(fname, enumFilesCallbackAlwaysSucceed, &cbdata); } /* PHYSFS_enumerateFilesCallback */ int PHYSFS_exists(const char *fname) { - return (PHYSFS_getRealDir(fname) != NULL); + return (getRealDirHandle(fname) != NULL); } /* PHYSFS_exists */ PHYSFS_sint64 PHYSFS_getLastModTime(const char *fname) { PHYSFS_Stat statbuf; - BAIL_IF_MACRO(!PHYSFS_stat(fname, &statbuf), ERRPASS, -1); + BAIL_IF_ERRPASS(!PHYSFS_stat(fname, &statbuf), -1); return statbuf.modtime; } /* PHYSFS_getLastModTime */ @@ -2339,7 +2521,7 @@ PHYSFS_sint64 PHYSFS_getLastModTime(const char *fname) int PHYSFS_isDirectory(const char *fname) { PHYSFS_Stat statbuf; - BAIL_IF_MACRO(!PHYSFS_stat(fname, &statbuf), ERRPASS, 0); + BAIL_IF_ERRPASS(!PHYSFS_stat(fname, &statbuf), 0); return (statbuf.filetype == PHYSFS_FILETYPE_DIRECTORY); } /* PHYSFS_isDirectory */ @@ -2347,7 +2529,7 @@ int PHYSFS_isDirectory(const char *fname) int PHYSFS_isSymbolicLink(const char *fname) { PHYSFS_Stat statbuf; - BAIL_IF_MACRO(!PHYSFS_stat(fname, &statbuf), ERRPASS, 0); + BAIL_IF_ERRPASS(!PHYSFS_stat(fname, &statbuf), 0); return (statbuf.filetype == PHYSFS_FILETYPE_SYMLINK); } /* PHYSFS_isSymbolicLink */ @@ -2358,10 +2540,10 @@ static PHYSFS_File *doOpenWrite(const char *_fname, int appending) size_t len; char *fname; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); len = strlen(_fname) + 1; fname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); if (sanitizePlatformIndependentPath(_fname, fname)) { @@ -2371,10 +2553,10 @@ static PHYSFS_File *doOpenWrite(const char *_fname, int appending) __PHYSFS_platformGrabMutex(stateLock); - GOTO_IF_MACRO(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, doOpenWriteEnd); + GOTO_IF(!writeDir, PHYSFS_ERR_NO_WRITE_DIR, doOpenWriteEnd); h = writeDir; - GOTO_IF_MACRO(!verifyPath(h, &fname, 0), ERRPASS, doOpenWriteEnd); + GOTO_IF_ERRPASS(!verifyPath(h, &fname, 0), doOpenWriteEnd); f = h->funcs; if (appending) @@ -2382,13 +2564,13 @@ static PHYSFS_File *doOpenWrite(const char *_fname, int appending) else io = f->openWrite(h->opaque, fname); - GOTO_IF_MACRO(!io, ERRPASS, doOpenWriteEnd); + GOTO_IF_ERRPASS(!io, doOpenWriteEnd); fh = (FileHandle *) allocator.Malloc(sizeof (FileHandle)); if (fh == NULL) { io->destroy(io); - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, doOpenWriteEnd); + GOTO(PHYSFS_ERR_OUT_OF_MEMORY, doOpenWriteEnd); } /* if */ else { @@ -2426,10 +2608,10 @@ PHYSFS_File *PHYSFS_openRead(const char *_fname) char *fname; size_t len; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); len = strlen(_fname) + 1; fname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); if (sanitizePlatformIndependentPath(_fname, fname)) { @@ -2438,7 +2620,7 @@ PHYSFS_File *PHYSFS_openRead(const char *_fname) __PHYSFS_platformGrabMutex(stateLock); - GOTO_IF_MACRO(!searchPath, PHYSFS_ERR_NOT_FOUND, openReadEnd); + GOTO_IF(!searchPath, PHYSFS_ERR_NOT_FOUND, openReadEnd); for (i = searchPath; i != NULL; i = i->next) { @@ -2451,13 +2633,13 @@ PHYSFS_File *PHYSFS_openRead(const char *_fname) } /* if */ } /* for */ - GOTO_IF_MACRO(!io, ERRPASS, openReadEnd); + GOTO_IF_ERRPASS(!io, openReadEnd); fh = (FileHandle *) allocator.Malloc(sizeof (FileHandle)); if (fh == NULL) { io->destroy(io); - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, openReadEnd); + GOTO(PHYSFS_ERR_OUT_OF_MEMORY, openReadEnd); } /* if */ memset(fh, '\0', sizeof (FileHandle)); @@ -2520,72 +2702,56 @@ int PHYSFS_close(PHYSFS_File *_handle) /* -1 == close failure. 0 == not found. 1 == success. */ rc = closeHandleInOpenList(&openReadList, handle); - BAIL_IF_MACRO_MUTEX(rc == -1, ERRPASS, stateLock, 0); + BAIL_IF_MUTEX_ERRPASS(rc == -1, stateLock, 0); if (!rc) { rc = closeHandleInOpenList(&openWriteList, handle); - BAIL_IF_MACRO_MUTEX(rc == -1, ERRPASS, stateLock, 0); + BAIL_IF_MUTEX_ERRPASS(rc == -1, stateLock, 0); } /* if */ __PHYSFS_platformReleaseMutex(stateLock); - BAIL_IF_MACRO(!rc, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!rc, PHYSFS_ERR_INVALID_ARGUMENT, 0); return 1; } /* PHYSFS_close */ -static PHYSFS_sint64 doBufferedRead(FileHandle *fh, void *buffer, - PHYSFS_uint64 len) +static PHYSFS_sint64 doBufferedRead(FileHandle *fh, void *_buffer, size_t len) { - PHYSFS_Io *io = NULL; + PHYSFS_uint8 *buffer = (PHYSFS_uint8 *) _buffer; PHYSFS_sint64 retval = 0; - PHYSFS_uint32 buffered = 0; - PHYSFS_sint64 rc = 0; - if (len == 0) - return 0; - - buffered = fh->buffill - fh->bufpos; - if (buffered >= len) /* totally in the buffer, just copy and return! */ + while (len > 0) { - memcpy(buffer, fh->buffer + fh->bufpos, (size_t) len); - fh->bufpos += (PHYSFS_uint32) len; - return (PHYSFS_sint64) len; - } /* else if */ + const size_t avail = fh->buffill - fh->bufpos; + if (avail > 0) /* data available in the buffer. */ + { + const size_t cpy = (len < avail) ? len : avail; + memcpy(buffer, fh->buffer + fh->bufpos, cpy); + assert(len >= cpy); + buffer += cpy; + len -= cpy; + fh->bufpos += cpy; + retval += cpy; + } /* if */ - if (buffered > 0) /* partially in the buffer... */ - { - memcpy(buffer, fh->buffer + fh->bufpos, (size_t) buffered); - buffer = ((PHYSFS_uint8 *) buffer) + buffered; - len -= buffered; - retval = buffered; - fh->buffill = fh->bufpos = 0; - } /* if */ + else /* buffer is empty, refill it. */ + { + PHYSFS_Io *io = fh->io; + const PHYSFS_sint64 rc = io->read(io, fh->buffer, fh->bufsize); + fh->bufpos = 0; + if (rc > 0) + fh->buffill = (size_t) rc; + else + { + fh->buffill = 0; + if (retval == 0) /* report already-read data, or failure. */ + retval = rc; + break; + } /* else */ + } /* else */ + } /* while */ - /* if you got here, the buffer is drained and we still need bytes. */ - assert(len > 0); - - io = fh->io; - if (len >= fh->bufsize) /* need more than the buffer takes. */ - { - /* leave buffer empty, go right to output instead. */ - rc = io->read(io, buffer, len); - if (rc < 0) - return ((retval == 0) ? rc : retval); - return retval + rc; - } /* if */ - - /* need less than buffer can take. Fill buffer. */ - rc = io->read(io, fh->buffer, fh->bufsize); - if (rc < 0) - return ((retval == 0) ? rc : retval); - - assert(fh->bufpos == 0); - fh->buffill = (PHYSFS_uint32) rc; - rc = doBufferedRead(fh, buffer, len); /* go from the start, again. */ - if (rc < 0) - return ((retval == 0) ? rc : retval); - - return retval + rc; + return retval; } /* doBufferedRead */ @@ -2599,8 +2765,9 @@ PHYSFS_sint64 PHYSFS_read(PHYSFS_File *handle, void *buffer, PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer, - PHYSFS_uint64 len) + PHYSFS_uint64 _len) { + const size_t len = (size_t) _len; FileHandle *fh = (FileHandle *) handle; #ifdef PHYSFS_NO_64BIT_SUPPORT @@ -2609,12 +2776,12 @@ PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer, const PHYSFS_uint64 maxlen = __PHYSFS_UI64(0x7FFFFFFFFFFFFFFF); #endif - if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + if (!__PHYSFS_ui64FitsAddressSpace(_len)) + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); - BAIL_IF_MACRO(len > maxlen, PHYSFS_ERR_INVALID_ARGUMENT, -1); - BAIL_IF_MACRO(!fh->forReading, PHYSFS_ERR_OPEN_FOR_WRITING, -1); - BAIL_IF_MACRO(len == 0, ERRPASS, 0); + BAIL_IF(_len > maxlen, PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL_IF(!fh->forReading, PHYSFS_ERR_OPEN_FOR_WRITING, -1); + BAIL_IF_ERRPASS(len == 0, 0); if (fh->buffer) return doBufferedRead(fh, buffer, len); @@ -2623,20 +2790,20 @@ PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer, static PHYSFS_sint64 doBufferedWrite(PHYSFS_File *handle, const void *buffer, - PHYSFS_uint64 len) + const size_t len) { FileHandle *fh = (FileHandle *) handle; /* whole thing fits in the buffer? */ - if ( (((PHYSFS_uint64) fh->buffill) + len) < fh->bufsize ) + if ((fh->buffill + len) < fh->bufsize) { - memcpy(fh->buffer + fh->buffill, buffer, (size_t) len); - fh->buffill += (PHYSFS_uint32) len; + memcpy(fh->buffer + fh->buffill, buffer, len); + fh->buffill += len; return (PHYSFS_sint64) len; } /* if */ /* would overflow buffer. Flush and then write the new objects, too. */ - BAIL_IF_MACRO(!PHYSFS_flush(handle), ERRPASS, -1); + BAIL_IF_ERRPASS(!PHYSFS_flush(handle), -1); return fh->io->write(fh->io, buffer, len); } /* doBufferedWrite */ @@ -2651,8 +2818,9 @@ PHYSFS_sint64 PHYSFS_write(PHYSFS_File *handle, const void *buffer, PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle, const void *buffer, - PHYSFS_uint64 len) + PHYSFS_uint64 _len) { + const size_t len = (size_t) _len; FileHandle *fh = (FileHandle *) handle; #ifdef PHYSFS_NO_64BIT_SUPPORT @@ -2661,12 +2829,12 @@ PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle, const void *buffer, const PHYSFS_uint64 maxlen = __PHYSFS_UI64(0x7FFFFFFFFFFFFFFF); #endif - if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + if (!__PHYSFS_ui64FitsAddressSpace(_len)) + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); - BAIL_IF_MACRO(len > maxlen, PHYSFS_ERR_INVALID_ARGUMENT, -1); - BAIL_IF_MACRO(fh->forReading, PHYSFS_ERR_OPEN_FOR_READING, -1); - BAIL_IF_MACRO(len == 0, ERRPASS, 0); + BAIL_IF(_len > maxlen, PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL_IF(fh->forReading, PHYSFS_ERR_OPEN_FOR_READING, -1); + BAIL_IF_ERRPASS(len == 0, 0); if (fh->buffer) return doBufferedWrite(handle, buffer, len); @@ -2711,17 +2879,19 @@ PHYSFS_sint64 PHYSFS_tell(PHYSFS_File *handle) int PHYSFS_seek(PHYSFS_File *handle, PHYSFS_uint64 pos) { FileHandle *fh = (FileHandle *) handle; - BAIL_IF_MACRO(!PHYSFS_flush(handle), ERRPASS, 0); + BAIL_IF_ERRPASS(!PHYSFS_flush(handle), 0); if (fh->buffer && fh->forReading) { /* avoid throwing away our precious buffer if seeking within it. */ PHYSFS_sint64 offset = pos - PHYSFS_tell(handle); if ( /* seeking within the already-buffered range? */ - ((offset >= 0) && (offset <= fh->buffill - fh->bufpos)) /* fwd */ - || ((offset < 0) && (-offset <= fh->bufpos)) /* backward */ ) + /* forward? */ + ((offset >= 0) && (((size_t)offset) <= fh->buffill-fh->bufpos)) || + /* backward? */ + ((offset < 0) && (((size_t) -offset) <= fh->bufpos)) ) { - fh->bufpos += (PHYSFS_uint32) offset; + fh->bufpos = (size_t) (((PHYSFS_sint64) fh->bufpos) + offset); return 1; /* successful seek */ } /* if */ } /* if */ @@ -2742,14 +2912,12 @@ PHYSFS_sint64 PHYSFS_fileLength(PHYSFS_File *handle) int PHYSFS_setBuffer(PHYSFS_File *handle, PHYSFS_uint64 _bufsize) { FileHandle *fh = (FileHandle *) handle; - PHYSFS_uint32 bufsize; + const size_t bufsize = (size_t) _bufsize; - /* !!! FIXME: actually, why use 32 bits here? */ - /*BAIL_IF_MACRO(_bufsize > 0xFFFFFFFF, "buffer must fit in 32-bits", 0);*/ - BAIL_IF_MACRO(_bufsize > 0xFFFFFFFF, PHYSFS_ERR_INVALID_ARGUMENT, 0); - bufsize = (PHYSFS_uint32) _bufsize; + if (!__PHYSFS_ui64FitsAddressSpace(_bufsize)) + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, 0); - BAIL_IF_MACRO(!PHYSFS_flush(handle), ERRPASS, 0); + BAIL_IF_ERRPASS(!PHYSFS_flush(handle), 0); /* * For reads, we need to move the file pointer to where it would be @@ -2760,9 +2928,9 @@ int PHYSFS_setBuffer(PHYSFS_File *handle, PHYSFS_uint64 _bufsize) { PHYSFS_uint64 pos; const PHYSFS_sint64 curpos = fh->io->tell(fh->io); - BAIL_IF_MACRO(curpos == -1, ERRPASS, 0); + BAIL_IF_ERRPASS(curpos == -1, 0); pos = ((curpos - fh->buffill) + fh->bufpos); - BAIL_IF_MACRO(!fh->io->seek(fh->io, pos), ERRPASS, 0); + BAIL_IF_ERRPASS(!fh->io->seek(fh->io, pos), 0); } /* if */ if (bufsize == 0) /* delete existing buffer. */ @@ -2778,7 +2946,7 @@ int PHYSFS_setBuffer(PHYSFS_File *handle, PHYSFS_uint64 _bufsize) { PHYSFS_uint8 *newbuf; newbuf = (PHYSFS_uint8 *) allocator.Realloc(fh->buffer, bufsize); - BAIL_IF_MACRO(!newbuf, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!newbuf, PHYSFS_ERR_OUT_OF_MEMORY, 0); fh->buffer = newbuf; } /* else */ @@ -2800,9 +2968,9 @@ int PHYSFS_flush(PHYSFS_File *handle) /* dump buffer to disk. */ io = fh->io; rc = io->write(io, fh->buffer + fh->bufpos, fh->buffill - fh->bufpos); - BAIL_IF_MACRO(rc <= 0, ERRPASS, 0); + BAIL_IF_ERRPASS(rc <= 0, 0); fh->bufpos = fh->buffill = 0; - return io->flush(io); + return io->flush ? io->flush(io) : 1; } /* PHYSFS_flush */ @@ -2812,11 +2980,11 @@ int PHYSFS_stat(const char *_fname, PHYSFS_Stat *stat) char *fname; size_t len; - BAIL_IF_MACRO(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, -1); - BAIL_IF_MACRO(!stat, PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL_IF(!_fname, PHYSFS_ERR_INVALID_ARGUMENT, 0); + BAIL_IF(!stat, PHYSFS_ERR_INVALID_ARGUMENT, 0); len = strlen(_fname) + 1; fname = (char *) __PHYSFS_smallAlloc(len); - BAIL_IF_MACRO(!fname, PHYSFS_ERR_OUT_OF_MEMORY, -1); + BAIL_IF(!fname, PHYSFS_ERR_OUT_OF_MEMORY, 0); /* set some sane defaults... */ stat->filesize = -1; @@ -2824,7 +2992,7 @@ int PHYSFS_stat(const char *_fname, PHYSFS_Stat *stat) stat->createtime = -1; stat->accesstime = -1; stat->filetype = PHYSFS_FILETYPE_OTHER; - stat->readonly = 1; /* !!! FIXME */ + stat->readonly = 1; if (sanitizePlatformIndependentPath(_fname, fname)) { @@ -2846,14 +3014,11 @@ int PHYSFS_stat(const char *_fname, PHYSFS_Stat *stat) if (exists) { stat->filetype = PHYSFS_FILETYPE_DIRECTORY; - stat->readonly = 1; /* !!! FIXME */ + stat->readonly = 1; retval = 1; } /* if */ else if (verifyPath(i, &arcfname, 0)) { - /* !!! FIXME: this test is wrong and should be elsewhere. */ - stat->readonly = !(writeDir && - (strcmp(writeDir->dirName, i->dirName) == 0)); retval = i->funcs->stat(i->opaque, arcfname, stat); if ((retval) || (currentErrorCode() != PHYSFS_ERR_NOT_FOUND)) exists = 1; @@ -2868,13 +3033,14 @@ int PHYSFS_stat(const char *_fname, PHYSFS_Stat *stat) } /* PHYSFS_stat */ -int __PHYSFS_readAll(PHYSFS_Io *io, void *buf, const PHYSFS_uint64 len) +int __PHYSFS_readAll(PHYSFS_Io *io, void *buf, const size_t _len) { + const PHYSFS_uint64 len = (PHYSFS_uint64) _len; return (io->read(io, buf, len) == len); } /* __PHYSFS_readAll */ -void *__PHYSFS_initSmallAlloc(void *ptr, PHYSFS_uint64 len) +void *__PHYSFS_initSmallAlloc(void *ptr, const size_t len) { void *useHeap = ((ptr == NULL) ? ((void *) 1) : ((void *) 0)); if (useHeap) /* too large for stack allocation or alloca() failed. */ @@ -2883,8 +3049,8 @@ void *__PHYSFS_initSmallAlloc(void *ptr, PHYSFS_uint64 len) if (ptr != NULL) { void **retval = (void **) ptr; - /*printf("%s alloc'd (%d) bytes at (%p).\n", - useHeap ? "heap" : "stack", (int) len, ptr);*/ + /*printf("%s alloc'd (%lld) bytes at (%p).\n", + useHeap ? "heap" : "stack", (long long) len, ptr);*/ *retval = useHeap; return retval + 1; } /* if */ @@ -2898,7 +3064,7 @@ void __PHYSFS_smallFree(void *ptr) if (ptr != NULL) { void **block = ((void **) ptr) - 1; - const int useHeap = (*block != 0); + const int useHeap = (*block != NULL); if (useHeap) allocator.Free(block); /*printf("%s free'd (%p).\n", useHeap ? "heap" : "stack", block);*/ @@ -2908,7 +3074,7 @@ void __PHYSFS_smallFree(void *ptr) int PHYSFS_setAllocator(const PHYSFS_Allocator *a) { - BAIL_IF_MACRO(initialized, PHYSFS_ERR_IS_INITIALIZED, 0); + BAIL_IF(initialized, PHYSFS_ERR_IS_INITIALIZED, 0); externalAllocator = (a != NULL); if (externalAllocator) memcpy(&allocator, a, sizeof (PHYSFS_Allocator)); @@ -2919,7 +3085,7 @@ int PHYSFS_setAllocator(const PHYSFS_Allocator *a) const PHYSFS_Allocator *PHYSFS_getAllocator(void) { - BAIL_IF_MACRO(!initialized, PHYSFS_ERR_NOT_INITIALIZED, NULL); + BAIL_IF(!initialized, PHYSFS_ERR_NOT_INITIALIZED, NULL); return &allocator; } /* PHYSFS_getAllocator */ @@ -2927,7 +3093,7 @@ const PHYSFS_Allocator *PHYSFS_getAllocator(void) static void *mallocAllocatorMalloc(PHYSFS_uint64 s) { if (!__PHYSFS_ui64FitsAddressSpace(s)) - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); #undef malloc return malloc((size_t) s); } /* mallocAllocatorMalloc */ @@ -2936,7 +3102,7 @@ static void *mallocAllocatorMalloc(PHYSFS_uint64 s) static void *mallocAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { if (!__PHYSFS_ui64FitsAddressSpace(s)) - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); #undef realloc return realloc(ptr, (size_t) s); } /* mallocAllocatorRealloc */ @@ -2952,15 +3118,185 @@ static void mallocAllocatorFree(void *ptr) static void setDefaultAllocator(void) { assert(!externalAllocator); - if (!__PHYSFS_platformSetDefaultAllocator(&allocator)) - { - allocator.Init = NULL; - allocator.Deinit = NULL; - allocator.Malloc = mallocAllocatorMalloc; - allocator.Realloc = mallocAllocatorRealloc; - allocator.Free = mallocAllocatorFree; - } /* if */ + allocator.Init = NULL; + allocator.Deinit = NULL; + allocator.Malloc = mallocAllocatorMalloc; + allocator.Realloc = mallocAllocatorRealloc; + allocator.Free = mallocAllocatorFree; } /* setDefaultAllocator */ + +int __PHYSFS_DirTreeInit(__PHYSFS_DirTree *dt, const size_t entrylen) +{ + static char rootpath[2] = { '/', '\0' }; + size_t alloclen; + + assert(entrylen >= sizeof (__PHYSFS_DirTreeEntry)); + + memset(dt, '\0', sizeof (*dt)); + + dt->root = (__PHYSFS_DirTreeEntry *) allocator.Malloc(entrylen); + BAIL_IF(!dt->root, PHYSFS_ERR_OUT_OF_MEMORY, 0); + memset(dt->root, '\0', entrylen); + dt->root->name = rootpath; + dt->root->isdir = 1; + dt->hashBuckets = 64; + if (!dt->hashBuckets) + dt->hashBuckets = 1; + dt->entrylen = entrylen; + + alloclen = dt->hashBuckets * sizeof (__PHYSFS_DirTreeEntry *); + dt->hash = (__PHYSFS_DirTreeEntry **) allocator.Malloc(alloclen); + BAIL_IF(!dt->hash, PHYSFS_ERR_OUT_OF_MEMORY, 0); + memset(dt->hash, '\0', alloclen); + + return 1; +} /* __PHYSFS_DirTreeInit */ + + +static inline PHYSFS_uint32 hashPathName(__PHYSFS_DirTree *dt, const char *name) +{ + return __PHYSFS_hashString(name, strlen(name)) % dt->hashBuckets; +} /* hashPathName */ + + +/* Fill in missing parent directories. */ +static __PHYSFS_DirTreeEntry *addAncestors(__PHYSFS_DirTree *dt, char *name) +{ + __PHYSFS_DirTreeEntry *retval = dt->root; + char *sep = strrchr(name, '/'); + + if (sep) + { + *sep = '\0'; /* chop off last piece. */ + retval = (__PHYSFS_DirTreeEntry *) __PHYSFS_DirTreeFind(dt, name); + + if (retval != NULL) + { + *sep = '/'; + BAIL_IF(!retval->isdir, PHYSFS_ERR_CORRUPT, NULL); + return retval; /* already hashed. */ + } /* if */ + + /* okay, this is a new dir. Build and hash us. */ + retval = (__PHYSFS_DirTreeEntry*)__PHYSFS_DirTreeAdd(dt, name, 1); + *sep = '/'; + } /* if */ + + return retval; +} /* addAncestors */ + + +void *__PHYSFS_DirTreeAdd(__PHYSFS_DirTree *dt, char *name, const int isdir) +{ + __PHYSFS_DirTreeEntry *retval = __PHYSFS_DirTreeFind(dt, name); + if (!retval) + { + const size_t alloclen = strlen(name) + 1 + dt->entrylen; + PHYSFS_uint32 hashval; + __PHYSFS_DirTreeEntry *parent = addAncestors(dt, name); + BAIL_IF_ERRPASS(!parent, NULL); + assert(dt->entrylen >= sizeof (__PHYSFS_DirTreeEntry)); + retval = (__PHYSFS_DirTreeEntry *) allocator.Malloc(alloclen); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + memset(retval, '\0', dt->entrylen); + retval->name = ((char *) retval) + dt->entrylen; + strcpy(retval->name, name); + hashval = hashPathName(dt, name); + retval->hashnext = dt->hash[hashval]; + dt->hash[hashval] = retval; + retval->sibling = parent->children; + retval->isdir = isdir; + parent->children = retval; + } /* if */ + + return retval; +} /* __PHYSFS_DirTreeAdd */ + + +/* Find the __PHYSFS_DirTreeEntry for a path in platform-independent notation. */ +void *__PHYSFS_DirTreeFind(__PHYSFS_DirTree *dt, const char *path) +{ + PHYSFS_uint32 hashval; + __PHYSFS_DirTreeEntry *prev = NULL; + __PHYSFS_DirTreeEntry *retval; + + if (*path == '\0') + return dt->root; + + hashval = hashPathName(dt, path); + for (retval = dt->hash[hashval]; retval; retval = retval->hashnext) + { + if (strcmp(retval->name, path) == 0) + { + if (prev != NULL) /* move this to the front of the list */ + { + prev->hashnext = retval->hashnext; + retval->hashnext = dt->hash[hashval]; + dt->hash[hashval] = retval; + } /* if */ + + return retval; + } /* if */ + + prev = retval; + } /* for */ + + BAIL(PHYSFS_ERR_NOT_FOUND, NULL); +} /* __PHYSFS_DirTreeFind */ + +PHYSFS_EnumerateCallbackResult __PHYSFS_DirTreeEnumerate(void *opaque, + const char *dname, PHYSFS_EnumerateCallback cb, + const char *origdir, void *callbackdata) +{ + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; + __PHYSFS_DirTree *tree = (__PHYSFS_DirTree *) opaque; + const __PHYSFS_DirTreeEntry *entry = __PHYSFS_DirTreeFind(tree, dname); + BAIL_IF(!entry, PHYSFS_ERR_NOT_FOUND, PHYSFS_ENUM_ERROR); + + entry = entry->children; + + while (entry && (retval == PHYSFS_ENUM_OK)) + { + const char *name = entry->name; + const char *ptr = strrchr(name, '/'); + retval = cb(callbackdata, origdir, ptr ? ptr + 1 : name); + BAIL_IF(retval == PHYSFS_ENUM_ERROR, PHYSFS_ERR_APP_CALLBACK, retval); + entry = entry->sibling; + } /* while */ + + return retval; +} /* __PHYSFS_DirTreeEnumerate */ + + +void __PHYSFS_DirTreeDeinit(__PHYSFS_DirTree *dt) +{ + if (!dt) + return; + + if (dt->root) + { + assert(dt->root->sibling == NULL); + assert(dt->hash || (dt->root->children == NULL)); + allocator.Free(dt->root); + } /* if */ + + if (dt->hash) + { + size_t i; + for (i = 0; i < dt->hashBuckets; i++) + { + __PHYSFS_DirTreeEntry *entry; + __PHYSFS_DirTreeEntry *next; + for (entry = dt->hash[i]; entry; entry = next) + { + next = entry->hashnext; + allocator.Free(entry); + } /* for */ + } /* for */ + allocator.Free(dt->hash); + } /* if */ +} /* __PHYSFS_DirTreeDeinit */ + /* end of physfs.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/physfs.h b/love/src/jni/physfs-3.0.1/src/physfs.h similarity index 81% rename from love/src/jni/physfs-2.1.0/src/physfs.h rename to love/src/jni/physfs-3.0.1/src/physfs.h index 904a624f..91696075 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs.h +++ b/love/src/jni/physfs-3.0.1/src/physfs.h @@ -8,7 +8,7 @@ * \mainpage PhysicsFS * * The latest version of PhysicsFS can be found at: - * http://icculus.org/physfs/ + * https://icculus.org/physfs/ * * PhysicsFS; a portable, flexible file i/o abstraction. * @@ -122,16 +122,17 @@ * game...keeping external content on a tight leash in this manner can be of * utmost importance to some applications. * - * PhysicsFS is mostly thread safe. The error messages returned by - * PHYSFS_getLastError() are unique by thread, and library-state-setting + * PhysicsFS is mostly thread safe. The errors returned by + * PHYSFS_getLastErrorCode() are unique by thread, and library-state-setting * functions are mutex'd. For efficiency, individual file accesses are * not locked, so you can not safely read/write/seek/close/etc the same * file from two threads at the same time. Other race conditions are bugs * that should be reported/patched. * * While you CAN use stdio/syscall file access in a program that has PHYSFS_* - * calls, doing so is not recommended, and you can not use system - * filehandles with PhysicsFS and vice versa. + * calls, doing so is not recommended, and you can not directly use system + * filehandles with PhysicsFS and vice versa (but as of PhysicsFS 2.1, you + * can wrap them in a PHYSFS_Io interface yourself if you wanted to). * * Note that archives need not be named as such: if you have a ZIP file and * rename it with a .PKG extension, the file will still be recognized as a @@ -147,7 +148,8 @@ * - .HOG (Descent I/II HOG file archives) * - .MVL (Descent II movielib archives) * - .WAD (DOOM engine archives) - * + * - .VDF (Gothic I/II engine archives) + * - .SLB (Independence War archives) * * String policy for PhysicsFS 2.0 and later: * @@ -168,14 +170,14 @@ * should convert them to UTF-8 before handing them to PhysicsFS with * PHYSFS_utf8FromUtf16(), which handles both UTF-16 and UCS-2. If you're * using Unix or Mac OS X, your wchar_t strings are four bytes per character - * ("UCS-4 encoding"). Use PHYSFS_utf8FromUcs4(). Mac OS X can give you UTF-8 - * directly from a CFString or NSString, and many Unixes generally give you C - * strings in UTF-8 format everywhere. If you have a single-byte high ASCII - * charset, like so-many European "codepages" you may be out of luck. We'll - * convert from "Latin1" to UTF-8 only, and never back to Latin1. If you're - * above ASCII 127, all bets are off: move to Unicode or use your platform's - * facilities. Passing a C string with high-ASCII data that isn't UTF-8 - * encoded will NOT do what you expect! + * ("UCS-4 encoding", sometimes called "UTF-32"). Use PHYSFS_utf8FromUcs4(). + * Mac OS X can give you UTF-8 directly from a CFString or NSString, and many + * Unixes generally give you C strings in UTF-8 format everywhere. If you + * have a single-byte high ASCII charset, like so-many European "codepages" + * you may be out of luck. We'll convert from "Latin1" to UTF-8 only, and + * never back to Latin1. If you're above ASCII 127, all bets are off: move + * to Unicode or use your platform's facilities. Passing a C string with + * high-ASCII data that isn't UTF-8 encoded will NOT do what you expect! * * Naturally, there's also PHYSFS_utf8ToUcs2(), PHYSFS_utf8ToUtf16(), and * PHYSFS_utf8ToUcs4() to get data back into a format you like. Behind the @@ -186,11 +188,11 @@ * PhysicsFS offers basic encoding conversion support, but not a whole string * library. Get your stuff into whatever format you can work with. * - * All platforms supported by PhysicsFS 2.1 and later fully support Unicode. - * We have dropped platforms that don't (OS/2, Mac OS 9, Windows 95, etc), as - * even an OS that's over a decade old should be expected to handle this well. - * If you absolutely must support one of these platforms, you should use an - * older release of PhysicsFS. + * Most platforms supported by PhysicsFS 2.1 and later fully support Unicode. + * Some older platforms have been dropped (Windows 95, Mac OS 9). Some, like + * OS/2, might be able to convert to a local codepage or will just fail to + * open/create the file. Modern OSes (macOS, Linux, Windows, etc) should all + * be fine. * * Many game-specific archivers are seriously unprepared for Unicode (the * Descent HOG/MVL and Build Engine GRP archivers, for example, only offer a @@ -223,8 +225,6 @@ extern "C" { #if defined(PHYSFS_DECL) /* do nothing. */ -#elif (defined SWIG) -#define PHYSFS_DECL extern #elif (defined _MSC_VER) #define PHYSFS_DECL __declspec(dllexport) #elif (defined __SUNPRO_C) @@ -237,8 +237,6 @@ extern "C" { #if defined(PHYSFS_DEPRECATED) /* do nothing. */ -#elif (defined SWIG) /* ignore deprecated, since bindings use everything. */ -#define PHYSFS_DEPRECATED #elif (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ #define PHYSFS_DEPRECATED __attribute__((deprecated)) #else @@ -250,6 +248,8 @@ extern "C" { /* do nothing. */ #elif defined(__WIN32__) && !defined(__GNUC__) #define PHYSFS_CALL __cdecl +#elif defined(__OS2__) || defined(OS2) /* should work across all compilers. */ +#define PHYSFS_CALL _System #else #define PHYSFS_CALL #endif @@ -318,28 +318,26 @@ typedef signed long long PHYSFS_sint64; #endif -#ifndef SWIG #ifndef DOXYGEN_SHOULD_IGNORE_THIS /* Make sure the types really have the right sizes */ -#define PHYSFS_COMPILE_TIME_ASSERT(name, x) \ - typedef int PHYSFS_dummy_ ## name[(x) * 2 - 1] +#define PHYSFS_COMPILE_TIME_ASSERT(name, x) \ + typedef int PHYSFS_compile_time_assert_##name[(x) * 2 - 1] -PHYSFS_COMPILE_TIME_ASSERT(uint8, sizeof(PHYSFS_uint8) == 1); -PHYSFS_COMPILE_TIME_ASSERT(sint8, sizeof(PHYSFS_sint8) == 1); -PHYSFS_COMPILE_TIME_ASSERT(uint16, sizeof(PHYSFS_uint16) == 2); -PHYSFS_COMPILE_TIME_ASSERT(sint16, sizeof(PHYSFS_sint16) == 2); -PHYSFS_COMPILE_TIME_ASSERT(uint32, sizeof(PHYSFS_uint32) == 4); -PHYSFS_COMPILE_TIME_ASSERT(sint32, sizeof(PHYSFS_sint32) == 4); +PHYSFS_COMPILE_TIME_ASSERT(uint8IsOneByte, sizeof(PHYSFS_uint8) == 1); +PHYSFS_COMPILE_TIME_ASSERT(sint8IsOneByte, sizeof(PHYSFS_sint8) == 1); +PHYSFS_COMPILE_TIME_ASSERT(uint16IsTwoBytes, sizeof(PHYSFS_uint16) == 2); +PHYSFS_COMPILE_TIME_ASSERT(sint16IsTwoBytes, sizeof(PHYSFS_sint16) == 2); +PHYSFS_COMPILE_TIME_ASSERT(uint32IsFourBytes, sizeof(PHYSFS_uint32) == 4); +PHYSFS_COMPILE_TIME_ASSERT(sint32IsFourBytes, sizeof(PHYSFS_sint32) == 4); #ifndef PHYSFS_NO_64BIT_SUPPORT -PHYSFS_COMPILE_TIME_ASSERT(uint64, sizeof(PHYSFS_uint64) == 8); -PHYSFS_COMPILE_TIME_ASSERT(sint64, sizeof(PHYSFS_sint64) == 8); +PHYSFS_COMPILE_TIME_ASSERT(uint64IsEightBytes, sizeof(PHYSFS_uint64) == 8); +PHYSFS_COMPILE_TIME_ASSERT(sint64IsEightBytes, sizeof(PHYSFS_sint64) == 8); #endif #undef PHYSFS_COMPILE_TIME_ASSERT #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ -#endif /* SWIG */ /** @@ -433,12 +431,10 @@ typedef struct PHYSFS_Version } PHYSFS_Version; -#ifndef SWIG /* not available from scripting languages. */ - #ifndef DOXYGEN_SHOULD_IGNORE_THIS -#define PHYSFS_VER_MAJOR 2 -#define PHYSFS_VER_MINOR 1 -#define PHYSFS_VER_PATCH 0 +#define PHYSFS_VER_MAJOR 3 +#define PHYSFS_VER_MINOR 0 +#define PHYSFS_VER_PATCH 1 #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ @@ -467,8 +463,6 @@ typedef struct PHYSFS_Version (x)->patch = PHYSFS_VER_PATCH; \ } -#endif /* SWIG */ - /** * \fn void PHYSFS_getLinkedVersion(PHYSFS_Version *ver) @@ -611,6 +605,8 @@ PHYSFS_DECL void PHYSFS_freeList(void *listVar); * \fn const char *PHYSFS_getLastError(void) * \brief Get human-readable error information. * + * \deprecated Use PHYSFS_getLastErrorCode() and PHYSFS_getErrorByCode() instead. + * * \warning As of PhysicsFS 2.1, this function has been nerfed. * Before PhysicsFS 2.1, this function was the only way to get * error details beyond a given function's basic return value. @@ -655,7 +651,7 @@ PHYSFS_DECL void PHYSFS_freeList(void *listVar); * \sa PHYSFS_getLastErrorCode * \sa PHYSFS_getErrorByCode */ -PHYSFS_DECL const char *PHYSFS_getLastError(void); +PHYSFS_DECL const char *PHYSFS_getLastError(void) PHYSFS_DEPRECATED; /** @@ -712,7 +708,6 @@ PHYSFS_DECL const char *PHYSFS_getDirSeparator(void); PHYSFS_DECL void PHYSFS_permitSymbolicLinks(int allow); -/* !!! FIXME: const this? */ /** * \fn char **PHYSFS_getCdRomDirs(void) * \brief Get an array of paths to available CD-ROM drives. @@ -826,7 +821,7 @@ PHYSFS_DECL const char *PHYSFS_getWriteDir(void); * writing via PhysicsFS. * \return non-zero on success, zero on failure. All attempts to open a file * for writing via PhysicsFS will fail until this call succeeds. - * Specifics of the error can be gleaned from PHYSFS_getLastError(). + * Use PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_getWriteDir */ @@ -966,10 +961,10 @@ PHYSFS_DECL char **PHYSFS_getSearchPath(void); * yourself. * * \param archivesFirst Non-zero to prepend the archives to the search path. - * Zero to append them. Ignored if !(archiveExt). + * Zero to append them. Ignored if !(archiveExt). * - * \return nonzero on success, zero on error. Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on error. Use PHYSFS_getLastErrorCode() + * to obtain the specific error. */ PHYSFS_DECL int PHYSFS_setSaneConfig(const char *organization, const char *appName, @@ -996,8 +991,8 @@ PHYSFS_DECL int PHYSFS_setSaneConfig(const char *organization, * created directory behind and reports failure. * * \param dirName New dir to create. - * \return nonzero on success, zero on error. Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on error. Use + * PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_delete */ @@ -1031,8 +1026,8 @@ PHYSFS_DECL int PHYSFS_mkdir(const char *dirName); * a security method or anything. :) * * \param filename Filename to delete. - * \return nonzero on success, zero on error. Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on error. Use PHYSFS_getLastErrorCode() + * to obtain the specific error. */ PHYSFS_DECL int PHYSFS_delete(const char *filename); @@ -1074,6 +1069,17 @@ PHYSFS_DECL const char *PHYSFS_getRealDir(const char *filename); * \fn char **PHYSFS_enumerateFiles(const char *dir) * \brief Get a file listing of a search path's directory. * + * \warning In PhysicsFS versions prior to 2.1, this function would return + * as many items as it could in the face of a failure condition + * (out of memory, disk i/o error, etc). Since this meant apps + * couldn't distinguish between complete success and partial failure, + * and since the function could always return NULL to report + * catastrophic failures anyway, in PhysicsFS 2.1 this function's + * policy changed: it will either return a list of complete results + * or it will return NULL for any failure of any kind, so we can + * guarantee that the enumeration ran to completion and has no gaps + * in its results. + * * Matching directories are interpolated. That is, if "C:\mydir" is in the * search path and contains a directory "savegames" that contains "x.sav", * "y.sav", and "z.sav", and there is also a "C:\userdir" in the search path @@ -1097,16 +1103,18 @@ PHYSFS_DECL const char *PHYSFS_getRealDir(const char *filename); * We've got [z.sav]. * We've got [w.sav].\endverbatim * - * Feel free to sort the list however you like. We only promise there will - * be no duplicates, but not what order the final list will come back in. + * Feel free to sort the list however you like. However, the returned data + * will always contain no duplicates, and will be always sorted in alphabetic + * (rather: case-sensitive Unicode) order for you. * * Don't forget to call PHYSFS_freeList() with the return value from this * function when you are done with it. * * \param dir directory in platform-independent notation to enumerate. - * \return Null-terminated array of null-terminated strings. + * \return Null-terminated array of null-terminated strings, or NULL for + * failure cases. * - * \sa PHYSFS_enumerateFilesCallback + * \sa PHYSFS_enumerate */ PHYSFS_DECL char **PHYSFS_enumerateFiles(const char *dir); @@ -1215,8 +1223,8 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_getLastModTime(const char *filename) * symlink with this function will fail in such a case. * * \param filename File to open. - * \return A valid PhysicsFS filehandle on success, NULL on error. Specifics - * of the error can be gleaned from PHYSFS_getLastError(). + * \return A valid PhysicsFS filehandle on success, NULL on error. Use + * PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_openRead * \sa PHYSFS_openAppend @@ -1241,8 +1249,8 @@ PHYSFS_DECL PHYSFS_File *PHYSFS_openWrite(const char *filename); * symlink with this function will fail in such a case. * * \param filename File to open. - * \return A valid PhysicsFS filehandle on success, NULL on error. Specifics - * of the error can be gleaned from PHYSFS_getLastError(). + * \return A valid PhysicsFS filehandle on success, NULL on error. Use + * PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_openRead * \sa PHYSFS_openWrite @@ -1266,8 +1274,8 @@ PHYSFS_DECL PHYSFS_File *PHYSFS_openAppend(const char *filename); * symlink with this function will fail in such a case. * * \param filename File to open. - * \return A valid PhysicsFS filehandle on success, NULL on error. Specifics - * of the error can be gleaned from PHYSFS_getLastError(). + * \return A valid PhysicsFS filehandle on success, NULL on error. + * Use PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_openWrite * \sa PHYSFS_openAppend @@ -1288,8 +1296,8 @@ PHYSFS_DECL PHYSFS_File *PHYSFS_openRead(const char *filename); * return value from the close call in addition to every writing call! * * \param handle handle returned from PHYSFS_open*(). - * \return nonzero on success, zero on error. Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on error. Use PHYSFS_getLastErrorCode() + * to obtain the specific error. * * \sa PHYSFS_openRead * \sa PHYSFS_openWrite @@ -1315,9 +1323,9 @@ PHYSFS_DECL int PHYSFS_close(PHYSFS_File *handle); * \param buffer buffer to store read data into. * \param objSize size in bytes of objects being read from (handle). * \param objCount number of (objSize) objects to read from (handle). - * \return number of objects read. PHYSFS_getLastError() can shed light on - * the reason this might be < (objCount), as can PHYSFS_eof(). - * -1 if complete failure. + * \return number of objects read. PHYSFS_getLastErrorCode() can shed light + * on the reason this might be < (objCount), as can PHYSFS_eof(). + * -1 if complete failure. * * \sa PHYSFS_readBytes * \sa PHYSFS_eof @@ -1345,8 +1353,9 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_read(PHYSFS_File *handle, * \param buffer buffer of bytes to write to (handle). * \param objSize size in bytes of objects being written to (handle). * \param objCount number of (objSize) objects to write to (handle). - * \return number of objects written. PHYSFS_getLastError() can shed light on - * the reason this might be < (objCount). -1 if complete failure. + * \return number of objects written. PHYSFS_getLastErrorCode() can shed + * light on the reason this might be < (objCount). -1 if complete + * failure. * * \sa PHYSFS_writeBytes */ @@ -1380,7 +1389,7 @@ PHYSFS_DECL int PHYSFS_eof(PHYSFS_File *handle); * * \param handle handle returned from PHYSFS_open*(). * \return offset in bytes from start of file. -1 if error occurred. - * Specifics of the error can be gleaned from PHYSFS_getLastError(). + * Use PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_seek */ @@ -1396,8 +1405,8 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_tell(PHYSFS_File *handle); * * \param handle handle returned from PHYSFS_open*(). * \param pos number of bytes from start of file to seek to. - * \return nonzero on success, zero on error. Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on error. Use PHYSFS_getLastErrorCode() + * to obtain the specific error. * * \sa PHYSFS_tell */ @@ -1487,8 +1496,6 @@ PHYSFS_DECL int PHYSFS_flush(PHYSFS_File *handle); /* Byteorder stuff... */ -#ifndef SWIG /* not available from scripting languages. */ - /** * \fn PHYSFS_sint16 PHYSFS_swapSLE16(PHYSFS_sint16 val) * \brief Swap littleendian signed 16 to platform's native byte order. @@ -1549,7 +1556,7 @@ PHYSFS_DECL PHYSFS_uint32 PHYSFS_swapULE32(PHYSFS_uint32 val); * \param val value to convert * \return converted value. * - * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without + * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. */ PHYSFS_DECL PHYSFS_sint64 PHYSFS_swapSLE64(PHYSFS_sint64 val); @@ -1632,7 +1639,7 @@ PHYSFS_DECL PHYSFS_uint32 PHYSFS_swapUBE32(PHYSFS_uint32 val); * \param val value to convert * \return converted value. * - * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without + * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. */ PHYSFS_DECL PHYSFS_sint64 PHYSFS_swapSBE64(PHYSFS_sint64 val); @@ -1653,8 +1660,6 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_swapSBE64(PHYSFS_sint64 val); */ PHYSFS_DECL PHYSFS_uint64 PHYSFS_swapUBE64(PHYSFS_uint64 val); -#endif /* SWIG */ - /** * \fn int PHYSFS_readSLE16(PHYSFS_File *file, PHYSFS_sint16 *val) @@ -1667,7 +1672,7 @@ PHYSFS_DECL PHYSFS_uint64 PHYSFS_swapUBE64(PHYSFS_uint64 val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_readSLE16(PHYSFS_File *file, PHYSFS_sint16 *val); @@ -1683,7 +1688,7 @@ PHYSFS_DECL int PHYSFS_readSLE16(PHYSFS_File *file, PHYSFS_sint16 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * */ PHYSFS_DECL int PHYSFS_readULE16(PHYSFS_File *file, PHYSFS_uint16 *val); @@ -1700,7 +1705,7 @@ PHYSFS_DECL int PHYSFS_readULE16(PHYSFS_File *file, PHYSFS_uint16 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_readSBE16(PHYSFS_File *file, PHYSFS_sint16 *val); @@ -1716,7 +1721,7 @@ PHYSFS_DECL int PHYSFS_readSBE16(PHYSFS_File *file, PHYSFS_sint16 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * */ PHYSFS_DECL int PHYSFS_readUBE16(PHYSFS_File *file, PHYSFS_uint16 *val); @@ -1733,7 +1738,7 @@ PHYSFS_DECL int PHYSFS_readUBE16(PHYSFS_File *file, PHYSFS_uint16 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_readSLE32(PHYSFS_File *file, PHYSFS_sint32 *val); @@ -1749,7 +1754,7 @@ PHYSFS_DECL int PHYSFS_readSLE32(PHYSFS_File *file, PHYSFS_sint32 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * */ PHYSFS_DECL int PHYSFS_readULE32(PHYSFS_File *file, PHYSFS_uint32 *val); @@ -1766,7 +1771,7 @@ PHYSFS_DECL int PHYSFS_readULE32(PHYSFS_File *file, PHYSFS_uint32 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_readSBE32(PHYSFS_File *file, PHYSFS_sint32 *val); @@ -1782,7 +1787,7 @@ PHYSFS_DECL int PHYSFS_readSBE32(PHYSFS_File *file, PHYSFS_sint32 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * */ PHYSFS_DECL int PHYSFS_readUBE32(PHYSFS_File *file, PHYSFS_uint32 *val); @@ -1799,7 +1804,7 @@ PHYSFS_DECL int PHYSFS_readUBE32(PHYSFS_File *file, PHYSFS_uint32 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -1818,7 +1823,7 @@ PHYSFS_DECL int PHYSFS_readSLE64(PHYSFS_File *file, PHYSFS_sint64 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -1837,7 +1842,7 @@ PHYSFS_DECL int PHYSFS_readULE64(PHYSFS_File *file, PHYSFS_uint64 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -1856,7 +1861,7 @@ PHYSFS_DECL int PHYSFS_readSBE64(PHYSFS_File *file, PHYSFS_sint64 *val); * \param val pointer to where value should be stored. * \return zero on failure, non-zero on success. If successful, (*val) will * store the result. On failure, you can find out what went wrong - * from PHYSFS_getLastError(). + * from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -1874,7 +1879,7 @@ PHYSFS_DECL int PHYSFS_readUBE64(PHYSFS_File *file, PHYSFS_uint64 *val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeSLE16(PHYSFS_File *file, PHYSFS_sint16 val); @@ -1889,7 +1894,7 @@ PHYSFS_DECL int PHYSFS_writeSLE16(PHYSFS_File *file, PHYSFS_sint16 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeULE16(PHYSFS_File *file, PHYSFS_uint16 val); @@ -1904,7 +1909,7 @@ PHYSFS_DECL int PHYSFS_writeULE16(PHYSFS_File *file, PHYSFS_uint16 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeSBE16(PHYSFS_File *file, PHYSFS_sint16 val); @@ -1919,7 +1924,7 @@ PHYSFS_DECL int PHYSFS_writeSBE16(PHYSFS_File *file, PHYSFS_sint16 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeUBE16(PHYSFS_File *file, PHYSFS_uint16 val); @@ -1934,7 +1939,7 @@ PHYSFS_DECL int PHYSFS_writeUBE16(PHYSFS_File *file, PHYSFS_uint16 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeSLE32(PHYSFS_File *file, PHYSFS_sint32 val); @@ -1949,7 +1954,7 @@ PHYSFS_DECL int PHYSFS_writeSLE32(PHYSFS_File *file, PHYSFS_sint32 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeULE32(PHYSFS_File *file, PHYSFS_uint32 val); @@ -1964,7 +1969,7 @@ PHYSFS_DECL int PHYSFS_writeULE32(PHYSFS_File *file, PHYSFS_uint32 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeSBE32(PHYSFS_File *file, PHYSFS_sint32 val); @@ -1979,7 +1984,7 @@ PHYSFS_DECL int PHYSFS_writeSBE32(PHYSFS_File *file, PHYSFS_sint32 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). */ PHYSFS_DECL int PHYSFS_writeUBE32(PHYSFS_File *file, PHYSFS_uint32 val); @@ -1994,9 +1999,9 @@ PHYSFS_DECL int PHYSFS_writeUBE32(PHYSFS_File *file, PHYSFS_uint32 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). * - * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without + * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. */ PHYSFS_DECL int PHYSFS_writeSLE64(PHYSFS_File *file, PHYSFS_sint64 val); @@ -2012,7 +2017,7 @@ PHYSFS_DECL int PHYSFS_writeSLE64(PHYSFS_File *file, PHYSFS_sint64 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -2030,9 +2035,9 @@ PHYSFS_DECL int PHYSFS_writeULE64(PHYSFS_File *file, PHYSFS_uint64 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). * - * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without + * \warning Remember, PHYSFS_sint64 is only 32 bits on platforms without * any sort of 64-bit support. */ PHYSFS_DECL int PHYSFS_writeSBE64(PHYSFS_File *file, PHYSFS_sint64 val); @@ -2048,7 +2053,7 @@ PHYSFS_DECL int PHYSFS_writeSBE64(PHYSFS_File *file, PHYSFS_sint64 val); * \param file PhysicsFS file handle to which to write. * \param val Value to convert and write. * \return zero on failure, non-zero on success. On failure, you can - * find out what went wrong from PHYSFS_getLastError(). + * find out what went wrong from PHYSFS_getLastErrorCode(). * * \warning Remember, PHYSFS_uint64 is only 32 bits on platforms without * any sort of 64-bit support. @@ -2090,8 +2095,6 @@ PHYSFS_DECL int PHYSFS_isInit(void); PHYSFS_DECL int PHYSFS_symbolicLinksPermitted(void); -#ifndef SWIG /* not available from scripting languages. */ - /** * \struct PHYSFS_Allocator * \brief PhysicsFS allocation function pointers. @@ -2151,8 +2154,6 @@ typedef struct PHYSFS_Allocator */ PHYSFS_DECL int PHYSFS_setAllocator(const PHYSFS_Allocator *allocator); -#endif /* SWIG */ - /** * \fn int PHYSFS_mount(const char *newDir, const char *mountPoint, int appendToPath) @@ -2175,11 +2176,15 @@ PHYSFS_DECL int PHYSFS_setAllocator(const PHYSFS_Allocator *allocator); * or each other, for example. * * The mountpoint does not need to exist prior to mounting, which is different - * than those familiar with the Unix concept of "mounting" may not expect. + * than those familiar with the Unix concept of "mounting" may expect. * As well, more than one archive can be mounted to the same mountpoint, or * mountpoints and archive contents can overlap...the interpolation mechanism * still functions as usual. * + * Specifying a symbolic link to an archive or directory is allowed here, + * regardless of the state of PHYSFS_permitSymbolicLinks(). That function + * only deals with symlinks inside the mounted directory or archive. + * * \param newDir directory or archive to add to the path, in * platform-dependent notation. * \param mountPoint Location in the interpolated tree that this archive @@ -2187,8 +2192,8 @@ PHYSFS_DECL int PHYSFS_setAllocator(const PHYSFS_Allocator *allocator); * NULL or "" is equivalent to "/". * \param appendToPath nonzero to append to search path, zero to prepend. * \return nonzero if added to path, zero on failure (bogus archive, dir - * missing, etc). Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * missing, etc). Use PHYSFS_getLastErrorCode() to obtain + * the specific error. * * \sa PHYSFS_removeFromSearchPath * \sa PHYSFS_getSearchPath @@ -2214,8 +2219,8 @@ PHYSFS_DECL int PHYSFS_mount(const char *newDir, * used when adding, even if your string would also reference * the same file with a different string of characters. * \return READ-ONLY string of mount point if added to path, NULL on failure - * (bogus archive, etc) Specifics of the error can be gleaned from - * PHYSFS_getLastError(). + * (bogus archive, etc). Use PHYSFS_getLastErrorCode() to obtain the + * specific error. * * \sa PHYSFS_removeFromSearchPath * \sa PHYSFS_getSearchPath @@ -2224,8 +2229,6 @@ PHYSFS_DECL int PHYSFS_mount(const char *newDir, PHYSFS_DECL const char *PHYSFS_getMountPoint(const char *dir); -#ifndef SWIG /* not available from scripting languages. */ - /** * \typedef PHYSFS_StringCallback * \brief Function signature for callbacks that report strings. @@ -2257,6 +2260,9 @@ typedef void (*PHYSFS_StringCallback)(void *data, const char *str); * \typedef PHYSFS_EnumFilesCallback * \brief Function signature for callbacks that enumerate files. * + * \warning As of PhysicsFS 2.1, Use PHYSFS_EnumerateCallback with + * PHYSFS_enumerate() instead; it gives you more control over the process. + * * These are used to report a list of directory entries to an original caller, * one file/dir/symlink per callback. All strings are UTF-8 encoded. * Functions should not try to modify or free any string's memory. @@ -2266,9 +2272,10 @@ typedef void (*PHYSFS_StringCallback)(void *data, const char *str); * PHYSFS_freeList(). The callback means that the library doesn't need to * allocate an entire list and all the strings up front. * - * Be aware that promises data ordering in the list versions are not + * Be aware that promised data ordering in the list versions are not * necessarily so in the callback versions. Check the documentation on - * specific APIs, but strings may not be sorted as you expect. + * specific APIs, but strings may not be sorted as you expect and you might + * get duplicate strings. * * \param data User-defined data pointer, passed through from the API * that eventually called the callback. @@ -2362,54 +2369,32 @@ PHYSFS_DECL void PHYSFS_getSearchPathCallback(PHYSFS_StringCallback c, void *d); * \fn void PHYSFS_enumerateFilesCallback(const char *dir, PHYSFS_EnumFilesCallback c, void *d) * \brief Get a file listing of a search path's directory, using an application-defined callback. * - * Internally, PHYSFS_enumerateFiles() just calls this function and then builds - * a list before returning to the application, so functionality is identical - * except for how the information is represented to the application. + * \deprecated As of PhysicsFS 2.1, use PHYSFS_enumerate() instead. This + * function has no way to report errors (or to have the callback signal an + * error or request a stop), so if data will be lost, your callback has no + * way to direct the process, and your calling app has no way to know. * - * Unlike PHYSFS_enumerateFiles(), this function does not return an array. - * Rather, it calls a function specified by the application once per - * element of the search path: + * As of PhysicsFS 2.1, this function just wraps PHYSFS_enumerate() and + * ignores errors. Consider using PHYSFS_enumerate() or + * PHYSFS_enumerateFiles() instead. * - * \code - * - * static void printDir(void *data, const char *origdir, const char *fname) - * { - * printf(" * We've got [%s] in [%s].\n", fname, origdir); - * } - * - * // ... - * PHYSFS_enumerateFilesCallback("/some/path", printDir, NULL); - * \endcode - * - * !!! FIXME: enumerateFiles() does not promise alphabetical sorting by - * !!! FIXME: case-sensitivity in the code, and doesn't promise sorting at - * !!! FIXME: all in the above docs. - * - * Items sent to the callback are not guaranteed to be in any order whatsoever. - * There is no sorting done at this level, and if you need that, you should - * probably use PHYSFS_enumerateFiles() instead, which guarantees - * alphabetical sorting. This form reports whatever is discovered in each - * archive before moving on to the next. Even within one archive, we can't - * guarantee what order it will discover data. Any sorting you find in - * these callbacks is just pure luck. Do not rely on it. As this walks - * the entire list of archives, you may receive duplicate filenames. - * - * \param dir Directory, in platform-independent notation, to enumerate. - * \param c Callback function to notify about search path elements. - * \param d Application-defined data passed to callback. Can be NULL. - * - * \sa PHYSFS_EnumFilesCallback + * \sa PHYSFS_enumerate * \sa PHYSFS_enumerateFiles + * \sa PHYSFS_EnumFilesCallback */ PHYSFS_DECL void PHYSFS_enumerateFilesCallback(const char *dir, PHYSFS_EnumFilesCallback c, - void *d); + void *d) PHYSFS_DEPRECATED; /** * \fn void PHYSFS_utf8FromUcs4(const PHYSFS_uint32 *src, char *dst, PHYSFS_uint64 len) * \brief Convert a UCS-4 string to a UTF-8 string. * - * UCS-4 strings are 32-bits per character: \c wchar_t on Unix. + * \warning This function will not report an error if there are invalid UCS-4 + * values in the source string. It will replace them with a '?' + * character and continue on. + * + * UCS-4 (aka UTF-32) strings are 32-bits per character: \c wchar_t on Unix. * * To ensure that the destination buffer is large enough for the conversion, * please allocate a buffer that is the same size as the source buffer. UTF-8 @@ -2431,7 +2416,11 @@ PHYSFS_DECL void PHYSFS_utf8FromUcs4(const PHYSFS_uint32 *src, char *dst, * \fn void PHYSFS_utf8ToUcs4(const char *src, PHYSFS_uint32 *dst, PHYSFS_uint64 len) * \brief Convert a UTF-8 string to a UCS-4 string. * - * UCS-4 strings are 32-bits per character: \c wchar_t on Unix. + * \warning This function will not report an error if there are invalid UTF-8 + * sequences in the source string. It will replace them with a '?' + * character and continue on. + * + * UCS-4 (aka UTF-32) strings are 32-bits per character: \c wchar_t on Unix. * * To ensure that the destination buffer is large enough for the conversion, * please allocate a buffer that is four times the size of the source buffer. @@ -2456,6 +2445,10 @@ PHYSFS_DECL void PHYSFS_utf8ToUcs4(const char *src, PHYSFS_uint32 *dst, * \warning you almost certainly should use PHYSFS_utf8FromUtf16(), which * became available in PhysicsFS 2.1, unless you know what you're doing. * + * \warning This function will not report an error if there are invalid UCS-2 + * values in the source string. It will replace them with a '?' + * character and continue on. + * * UCS-2 strings are 16-bits per character: \c TCHAR on Windows, when building * with Unicode support. Please note that modern versions of Windows use * UTF-16, which is an extended form of UCS-2, and not UCS-2 itself. You @@ -2486,6 +2479,10 @@ PHYSFS_DECL void PHYSFS_utf8FromUcs2(const PHYSFS_uint16 *src, char *dst, * \warning you almost certainly should use PHYSFS_utf8ToUtf16(), which * became available in PhysicsFS 2.1, unless you know what you're doing. * + * \warning This function will not report an error if there are invalid UTF-8 + * sequences in the source string. It will replace them with a '?' + * character and continue on. + * * UCS-2 strings are 16-bits per character: \c TCHAR on Windows, when building * with Unicode support. Please note that modern versions of Windows use * UTF-16, which is an extended form of UCS-2, and not UCS-2 itself. You @@ -2538,6 +2535,222 @@ PHYSFS_DECL void PHYSFS_utf8FromLatin1(const char *src, char *dst, /* Everything above this line is part of the PhysicsFS 2.0 API. */ +/** + * \fn int PHYSFS_caseFold(const PHYSFS_uint32 from, PHYSFS_uint32 *to) + * \brief "Fold" a Unicode codepoint to a lowercase equivalent. + * + * (This is for limited, hardcore use. If you don't immediately see a need + * for it, you can probably ignore this forever.) + * + * This will convert a Unicode codepoint into its lowercase equivalent. + * Bogus codepoints and codepoints without a lowercase equivalent will + * be returned unconverted. + * + * Note that you might get multiple codepoints in return! The German Eszett, + * for example, will fold down to two lowercase latin 's' codepoints. The + * theory is that if you fold two strings, one with an Eszett and one with + * "SS" down, they will match. + * + * \warning Anyone that is a student of Unicode knows about the "Turkish I" + * problem. This API does not handle it. Assume this one letter + * in all of Unicode will definitely fold sort of incorrectly. If + * you don't know what this is about, you can probably ignore this + * problem for most of the planet, but perfection is impossible. + * + * \param from The codepoint to fold. + * \param to Buffer to store the folded codepoint values into. This should + * point to space for at least 3 PHYSFS_uint32 slots. + * \return The number of codepoints the folding produced. Between 1 and 3. + */ +PHYSFS_DECL int PHYSFS_caseFold(const PHYSFS_uint32 from, PHYSFS_uint32 *to); + + +/** + * \fn int PHYSFS_utf8stricmp(const char *str1, const char *str2) + * \brief Case-insensitive compare of two UTF-8 strings. + * + * This is a strcasecmp/stricmp replacement that expects both strings + * to be in UTF-8 encoding. It will do "case folding" to decide if the + * Unicode codepoints in the strings match. + * + * If both strings are exclusively low-ASCII characters, this will do the + * right thing, as that is also valid UTF-8. If there are any high-ASCII + * chars, this will not do what you expect! + * + * It will report which string is "greater than" the other, but be aware that + * this doesn't necessarily mean anything: 'a' may be "less than" 'b', but + * a Japanese kuten has no meaningful alphabetically relationship to + * a Greek lambda, but being able to assign a reliable "value" makes sorting + * algorithms possible, if not entirely sane. Most cases should treat the + * return value as "equal" or "not equal". + * + * Like stricmp, this expects both strings to be NULL-terminated. + * + * \param str1 First string to compare. + * \param str2 Second string to compare. + * \return -1 if str1 is "less than" str2, 1 if "greater than", 0 if equal. + */ +PHYSFS_DECL int PHYSFS_utf8stricmp(const char *str1, const char *str2); + +/** + * \fn int PHYSFS_utf16stricmp(const PHYSFS_uint16 *str1, const PHYSFS_uint16 *str2) + * \brief Case-insensitive compare of two UTF-16 strings. + * + * This is a strcasecmp/stricmp replacement that expects both strings + * to be in UTF-16 encoding. It will do "case folding" to decide if the + * Unicode codepoints in the strings match. + * + * It will report which string is "greater than" the other, but be aware that + * this doesn't necessarily mean anything: 'a' may be "less than" 'b', but + * a Japanese kuten has no meaningful alphabetically relationship to + * a Greek lambda, but being able to assign a reliable "value" makes sorting + * algorithms possible, if not entirely sane. Most cases should treat the + * return value as "equal" or "not equal". + * + * Like stricmp, this expects both strings to be NULL-terminated. + * + * \param str1 First string to compare. + * \param str2 Second string to compare. + * \return -1 if str1 is "less than" str2, 1 if "greater than", 0 if equal. + */ +PHYSFS_DECL int PHYSFS_utf16stricmp(const PHYSFS_uint16 *str1, + const PHYSFS_uint16 *str2); + +/** + * \fn int PHYSFS_ucs4stricmp(const PHYSFS_uint32 *str1, const PHYSFS_uint32 *str2) + * \brief Case-insensitive compare of two UCS-4 strings. + * + * This is a strcasecmp/stricmp replacement that expects both strings + * to be in UCS-4 (aka UTF-32) encoding. It will do "case folding" to decide + * if the Unicode codepoints in the strings match. + * + * It will report which string is "greater than" the other, but be aware that + * this doesn't necessarily mean anything: 'a' may be "less than" 'b', but + * a Japanese kuten has no meaningful alphabetically relationship to + * a Greek lambda, but being able to assign a reliable "value" makes sorting + * algorithms possible, if not entirely sane. Most cases should treat the + * return value as "equal" or "not equal". + * + * Like stricmp, this expects both strings to be NULL-terminated. + * + * \param str1 First string to compare. + * \param str2 Second string to compare. + * \return -1 if str1 is "less than" str2, 1 if "greater than", 0 if equal. + */ +PHYSFS_DECL int PHYSFS_ucs4stricmp(const PHYSFS_uint32 *str1, + const PHYSFS_uint32 *str2); + + +/** + * \typedef PHYSFS_EnumerateCallback + * \brief Possible return values from PHYSFS_EnumerateCallback. + * + * These values dictate if an enumeration callback should continue to fire, + * or stop (and why it is stopping). + * + * \sa PHYSFS_EnumerateCallback + * \sa PHYSFS_enumerate + */ +typedef enum PHYSFS_EnumerateCallbackResult +{ + PHYSFS_ENUM_ERROR = -1, /**< Stop enumerating, report error to app. */ + PHYSFS_ENUM_STOP = 0, /**< Stop enumerating, report success to app. */ + PHYSFS_ENUM_OK = 1 /**< Keep enumerating, no problems */ +} PHYSFS_EnumerateCallbackResult; + +/** + * \typedef PHYSFS_EnumerateCallback + * \brief Function signature for callbacks that enumerate and return results. + * + * This is the same thing as PHYSFS_EnumFilesCallback from PhysicsFS 2.0, + * except it can return a result from the callback: namely: if you're looking + * for something specific, once you find it, you can tell PhysicsFS to stop + * enumerating further. This is used with PHYSFS_enumerate(), which we + * hopefully got right this time. :) + * + * \param data User-defined data pointer, passed through from the API + * that eventually called the callback. + * \param origdir A string containing the full path, in platform-independent + * notation, of the directory containing this file. In most + * cases, this is the directory on which you requested + * enumeration, passed in the callback for your convenience. + * \param fname The filename that is being enumerated. It may not be in + * alphabetical order compared to other callbacks that have + * fired, and it will not contain the full path. You can + * recreate the fullpath with $origdir/$fname ... The file + * can be a subdirectory, a file, a symlink, etc. + * \return A value from PHYSFS_EnumerateCallbackResult. + * All other values are (currently) undefined; don't use them. + * + * \sa PHYSFS_enumerate + * \sa PHYSFS_EnumerateCallbackResult + */ +typedef PHYSFS_EnumerateCallbackResult (*PHYSFS_EnumerateCallback)(void *data, + const char *origdir, const char *fname); + +/** + * \fn int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, void *d) + * \brief Get a file listing of a search path's directory, using an application-defined callback, with errors reported. + * + * Internally, PHYSFS_enumerateFiles() just calls this function and then builds + * a list before returning to the application, so functionality is identical + * except for how the information is represented to the application. + * + * Unlike PHYSFS_enumerateFiles(), this function does not return an array. + * Rather, it calls a function specified by the application once per + * element of the search path: + * + * \code + * + * static int printDir(void *data, const char *origdir, const char *fname) + * { + * printf(" * We've got [%s] in [%s].\n", fname, origdir); + * return 1; // give me more data, please. + * } + * + * // ... + * PHYSFS_enumerate("/some/path", printDir, NULL); + * \endcode + * + * Items sent to the callback are not guaranteed to be in any order whatsoever. + * There is no sorting done at this level, and if you need that, you should + * probably use PHYSFS_enumerateFiles() instead, which guarantees + * alphabetical sorting. This form reports whatever is discovered in each + * archive before moving on to the next. Even within one archive, we can't + * guarantee what order it will discover data. Any sorting you find in + * these callbacks is just pure luck. Do not rely on it. As this walks + * the entire list of archives, you may receive duplicate filenames. + * + * This API and the callbacks themselves are capable of reporting errors. + * Prior to this API, callbacks had to accept every enumerated item, even if + * they were only looking for a specific thing and wanted to stop after that, + * or had a serious error and couldn't alert anyone. Furthermore, if + * PhysicsFS itself had a problem (disk error or whatnot), it couldn't report + * it to the calling app, it would just have to skip items or stop + * enumerating outright, and the caller wouldn't know it had lost some data + * along the way. + * + * Now the caller can be sure it got a complete data set, and its callback has + * control if it wants enumeration to stop early. See the documentation for + * PHYSFS_EnumerateCallback for details on how your callback should behave. + * + * \param dir Directory, in platform-independent notation, to enumerate. + * \param c Callback function to notify about search path elements. + * \param d Application-defined data passed to callback. Can be NULL. + * \return non-zero on success, zero on failure. Use + * PHYSFS_getLastErrorCode() to obtain the specific error. If the + * callback returns PHYSFS_ENUM_STOP to stop early, this will be + * considered success. Callbacks returning PHYSFS_ENUM_ERROR will + * make this function return zero and set the error code to + * PHYSFS_ERR_APP_CALLBACK. + * + * \sa PHYSFS_EnumerateCallback + * \sa PHYSFS_enumerateFiles + */ +PHYSFS_DECL int PHYSFS_enumerate(const char *dir, PHYSFS_EnumerateCallback c, + void *d); + + /** * \fn int PHYSFS_unmount(const char *oldDir) * \brief Remove a directory or archive from the search path. @@ -2551,15 +2764,22 @@ PHYSFS_DECL void PHYSFS_utf8FromLatin1(const char *src, char *dst, * This call will fail (and fail to remove from the path) if the element still * has files open in it. * + * \warning This function wants the path to the archive or directory that was + * mounted (the same string used for the "newDir" argument of + * PHYSFS_addToSearchPath or any of the mount functions), not the + * path where it is mounted in the tree (the "mountPoint" argument + * to any of the mount functions). + * * \param oldDir dir/archive to remove. - * \return nonzero on success, zero on failure. - * Specifics of the error can be gleaned from PHYSFS_getLastError(). + * \return nonzero on success, zero on failure. Use + * PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_getSearchPath * \sa PHYSFS_mount */ PHYSFS_DECL int PHYSFS_unmount(const char *oldDir); + /** * \fn const PHYSFS_Allocator *PHYSFS_getAllocator(void) * \brief Discover the current allocator. @@ -2595,7 +2815,6 @@ PHYSFS_DECL int PHYSFS_unmount(const char *oldDir); */ PHYSFS_DECL const PHYSFS_Allocator *PHYSFS_getAllocator(void); -#endif /* SWIG */ /** * \enum PHYSFS_FileType @@ -2622,9 +2841,10 @@ typedef enum PHYSFS_FileType * data will be either the number of seconds since the Unix epoch (midnight, * Jan 1, 1970), or -1 if the information isn't available or applicable. * The (filesize) field is measured in bytes. - * The (readonly) field tells you whether when you open a file for writing you - * are writing to the same file as if you were opening it, given you have - * enough filesystem rights to do that. !!! FIXME: this might change. + * The (readonly) field tells you whether the archive thinks a file is + * not writable, but tends to be only an estimate (for example, your write + * dir might overlap with a .zip file, meaning you _can_ successfully open + * that path for writing, as it gets created elsewhere. * * \sa PHYSFS_stat * \sa PHYSFS_FileType @@ -2661,12 +2881,14 @@ typedef struct PHYSFS_Stat PHYSFS_DECL int PHYSFS_stat(const char *fname, PHYSFS_Stat *stat); -#ifndef SWIG /* not available from scripting languages. */ - /** * \fn void PHYSFS_utf8FromUtf16(const PHYSFS_uint16 *src, char *dst, PHYSFS_uint64 len) * \brief Convert a UTF-16 string to a UTF-8 string. * + * \warning This function will not report an error if there are invalid UTF-16 + * sequences in the source string. It will replace them with a '?' + * character and continue on. + * * UTF-16 strings are 16-bits per character (except some chars, which are * 32-bits): \c TCHAR on Windows, when building with Unicode support. Modern * Windows releases use UTF-16. Windows releases before 2000 used TCHAR, but @@ -2694,6 +2916,10 @@ PHYSFS_DECL void PHYSFS_utf8FromUtf16(const PHYSFS_uint16 *src, char *dst, * \fn PHYSFS_utf8ToUtf16(const char *src, PHYSFS_uint16 *dst, PHYSFS_uint64 len) * \brief Convert a UTF-8 string to a UTF-16 string. * + * \warning This function will not report an error if there are invalid UTF-8 + * sequences in the source string. It will replace them with a '?' + * character and continue on. + * * UTF-16 strings are 16-bits per character (except some chars, which are * 32-bits): \c TCHAR on Windows, when building with Unicode support. Modern * Windows releases use UTF-16. Windows releases before 2000 used TCHAR, but @@ -2722,8 +2948,6 @@ PHYSFS_DECL void PHYSFS_utf8FromUtf16(const PHYSFS_uint16 *src, char *dst, PHYSFS_DECL void PHYSFS_utf8ToUtf16(const char *src, PHYSFS_uint16 *dst, PHYSFS_uint64 len); -#endif /* SWIG */ - /** * \fn PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer, PHYSFS_uint64 len) @@ -2736,7 +2960,7 @@ PHYSFS_DECL void PHYSFS_utf8ToUtf16(const char *src, PHYSFS_uint16 *dst, * \param len number of bytes being read from (handle). * \return number of bytes read. This may be less than (len); this does not * signify an error, necessarily (a short read may mean EOF). - * PHYSFS_getLastError() can shed light on the reason this might + * PHYSFS_getLastErrorCode() can shed light on the reason this might * be < (len), as can PHYSFS_eof(). -1 if complete failure. * * \sa PHYSFS_eof @@ -2763,16 +2987,15 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer, * \param len number of bytes being written to (handle). * \return number of bytes written. This may be less than (len); in the case * of an error, the system may try to write as many bytes as possible, - * so an incomplete write might occur. PHYSFS_getLastError() can shed - * light on the reason this might be < (len). -1 if complete failure. + * so an incomplete write might occur. PHYSFS_getLastErrorCode() can + * shed light on the reason this might be < (len). -1 if complete + * failure. */ PHYSFS_DECL PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle, const void *buffer, PHYSFS_uint64 len); -#ifndef SWIG /* not available from scripting languages. */ - /** * \struct PHYSFS_Io * \brief An abstract i/o interface. @@ -2806,7 +3029,11 @@ PHYSFS_DECL PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle, * * ...in short, you're probably not going to write an HTTP implementation. * - * Thread safety: TO BE DECIDED. !!! FIXME + * Thread safety: PHYSFS_Io implementations are not guaranteed to be thread + * safe in themselves. Under the hood where PhysicsFS uses them, the library + * provides its own locks. If you plan to use them directly from separate + * threads, you should either use mutexes to protect them, or don't use the + * same PHYSFS_Io from two threads at the same time. * * \sa PHYSFS_mountIo */ @@ -2919,7 +3146,15 @@ typedef struct PHYSFS_Io /** * \brief Duplicate this i/o instance. * - * // !!! FIXME: write me. + * This needs to result in a full copy of this PHYSFS_Io, that can live + * completely independently. The copy needs to be able to perform all + * its operations without altering the original, including either object + * being destroyed separately (so, for example: they can't share a file + * handle; they each need their own). + * + * If you can't duplicate a handle, it's legal to return NULL, but you + * almost certainly need this functionality if you want to use this to + * PHYSFS_Io to back an archive. * * \param io The i/o instance to duplicate. * \return A new value for a stream's (opaque) field, or NULL on error. @@ -2963,7 +3198,7 @@ typedef struct PHYSFS_Io /** - * \fn int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname, const char *mountPoint, int appendToPath) + * \fn int PHYSFS_mountIo(PHYSFS_Io *io, const char *newDir, const char *mountPoint, int appendToPath) * \brief Add an archive, built on a PHYSFS_Io, to the search path. * * \warning Unless you have some special, low-level need, you should be using @@ -2973,11 +3208,14 @@ typedef struct PHYSFS_Io * instead of a pathname. Behind the scenes, PHYSFS_mount() calls this * function with a physical-filesystem-based PHYSFS_Io. * - * (filename) is only used here to optimize archiver selection (if you name it - * XXXXX.zip, we might try the ZIP archiver first, for example). It doesn't - * need to refer to a real file at all, and can even be NULL. If the filename - * isn't helpful, the system will try every archiver until one works or none - * of them do. + * (newDir) must be a unique string to identify this archive. It is used + * to optimize archiver selection (if you name it XXXXX.zip, we might try + * the ZIP archiver first, for example, or directly choose an archiver that + * can only trust the data is valid by filename extension). It doesn't + * need to refer to a real file at all. If the filename extension isn't + * helpful, the system will try every archiver until one works or none + * of them do. This filename must be unique, as the system won't allow you + * to have two archives with the same name. * * (io) must remain until the archive is unmounted. When the archive is * unmounted, the system will call (io)->destroy(io), which will give you @@ -2986,26 +3224,25 @@ typedef struct PHYSFS_Io * If this function fails, (io)->destroy(io) is not called. * * \param io i/o instance for archive to add to the path. - * \param fname Filename that can represent this stream. Can be NULL. + * \param newDir Filename that can represent this stream. * \param mountPoint Location in the interpolated tree that this archive * will be "mounted", in platform-independent notation. * NULL or "" is equivalent to "/". * \param appendToPath nonzero to append to search path, zero to prepend. * \return nonzero if added to path, zero on failure (bogus archive, stream - * i/o issue, etc). Specifics of the error can be - * gleaned from PHYSFS_getLastError(). + * i/o issue, etc). Use PHYSFS_getLastErrorCode() to obtain + * the specific error. * * \sa PHYSFS_unmount * \sa PHYSFS_getSearchPath * \sa PHYSFS_getMountPoint */ -PHYSFS_DECL int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname, +PHYSFS_DECL int PHYSFS_mountIo(PHYSFS_Io *io, const char *newDir, const char *mountPoint, int appendToPath); -#endif /* SWIG */ /** - * \fn int PHYSFS_mountMemory(const void *ptr, PHYSFS_uint64 len, void (*del)(void *), const char *fname, const char *mountPoint, int appendToPath) + * \fn int PHYSFS_mountMemory(const void *buf, PHYSFS_uint64 len, void (*del)(void *), const char *newDir, const char *mountPoint, int appendToPath) * \brief Add an archive, contained in a memory buffer, to the search path. * * \warning Unless you have some special, low-level need, you should be using @@ -3015,11 +3252,14 @@ PHYSFS_DECL int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname, * instead of a pathname. This buffer contains all the data of the archive, * and is used instead of a real file in the physical filesystem. * - * (filename) is only used here to optimize archiver selection (if you name it - * XXXXX.zip, we might try the ZIP archiver first, for example). It doesn't - * need to refer to a real file at all, and can even be NULL. If the filename - * isn't helpful, the system will try every archiver until one works or none - * of them do. + * (newDir) must be a unique string to identify this archive. It is used + * to optimize archiver selection (if you name it XXXXX.zip, we might try + * the ZIP archiver first, for example, or directly choose an archiver that + * can only trust the data is valid by filename extension). It doesn't + * need to refer to a real file at all. If the filename extension isn't + * helpful, the system will try every archiver until one works or none + * of them do. This filename must be unique, as the system won't allow you + * to have two archives with the same name. * * (ptr) must remain until the archive is unmounted. When the archive is * unmounted, the system will call (del)(ptr), which will notify you that @@ -3029,29 +3269,28 @@ PHYSFS_DECL int PHYSFS_mountIo(PHYSFS_Io *io, const char *fname, * * If this function fails, (del) is not called. * - * \param ptr Address of the memory buffer containing the archive data. + * \param buf Address of the memory buffer containing the archive data. * \param len Size of memory buffer, in bytes. * \param del A callback that triggers upon unmount. Can be NULL. - * \param fname Filename that can represent this stream. Can be NULL. + * \param newDir Filename that can represent this stream. * \param mountPoint Location in the interpolated tree that this archive * will be "mounted", in platform-independent notation. * NULL or "" is equivalent to "/". * \param appendToPath nonzero to append to search path, zero to prepend. * \return nonzero if added to path, zero on failure (bogus archive, etc). - * Specifics of the error can be gleaned from - * PHYSFS_getLastError(). + * Use PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_unmount * \sa PHYSFS_getSearchPath * \sa PHYSFS_getMountPoint */ PHYSFS_DECL int PHYSFS_mountMemory(const void *buf, PHYSFS_uint64 len, - void (*del)(void *), const char *fname, + void (*del)(void *), const char *newDir, const char *mountPoint, int appendToPath); /** - * \fn int PHYSFS_mountHandle(PHYSFS_File *file, const char *fname, const char *mountPoint, int appendToPath) + * \fn int PHYSFS_mountHandle(PHYSFS_File *file, const char *newDir, const char *mountPoint, int appendToPath) * \brief Add an archive, contained in a PHYSFS_File handle, to the search path. * * \warning Unless you have some special, low-level need, you should be using @@ -3074,11 +3313,14 @@ PHYSFS_DECL int PHYSFS_mountMemory(const void *buf, PHYSFS_uint64 len, * but isn't necessarily. The most popular use for this is likely to mount * archives stored inside other archives. * - * (filename) is only used here to optimize archiver selection (if you name it - * XXXXX.zip, we might try the ZIP archiver first, for example). It doesn't - * need to refer to a real file at all, and can even be NULL. If the filename - * isn't helpful, the system will try every archiver until one works or none - * of them do. + * (newDir) must be a unique string to identify this archive. It is used + * to optimize archiver selection (if you name it XXXXX.zip, we might try + * the ZIP archiver first, for example, or directly choose an archiver that + * can only trust the data is valid by filename extension). It doesn't + * need to refer to a real file at all. If the filename extension isn't + * helpful, the system will try every archiver until one works or none + * of them do. This filename must be unique, as the system won't allow you + * to have two archives with the same name. * * (file) must remain until the archive is unmounted. When the archive is * unmounted, the system will call PHYSFS_close(file). If you need this @@ -3088,20 +3330,19 @@ PHYSFS_DECL int PHYSFS_mountMemory(const void *buf, PHYSFS_uint64 len, * If this function fails, PHYSFS_close(file) is not called. * * \param file The PHYSFS_File handle containing archive data. - * \param fname Filename that can represent this stream. Can be NULL. + * \param newDir Filename that can represent this stream. * \param mountPoint Location in the interpolated tree that this archive * will be "mounted", in platform-independent notation. * NULL or "" is equivalent to "/". * \param appendToPath nonzero to append to search path, zero to prepend. * \return nonzero if added to path, zero on failure (bogus archive, etc). - * Specifics of the error can be gleaned from - * PHYSFS_getLastError(). + * Use PHYSFS_getLastErrorCode() to obtain the specific error. * * \sa PHYSFS_unmount * \sa PHYSFS_getSearchPath * \sa PHYSFS_getMountPoint */ -PHYSFS_DECL int PHYSFS_mountHandle(PHYSFS_File *file, const char *fname, +PHYSFS_DECL int PHYSFS_mountHandle(PHYSFS_File *file, const char *newDir, const char *mountPoint, int appendToPath); @@ -3152,7 +3393,9 @@ typedef enum PHYSFS_ErrorCode PHYSFS_ERR_BUSY, /**< Tried to modify a file the OS needs. */ PHYSFS_ERR_DIR_NOT_EMPTY, /**< Tried to delete dir with files in it. */ PHYSFS_ERR_OS_ERROR, /**< Unspecified OS-level error. */ - PHYSFS_ERR_DUPLICATE /**< Duplicate entry. */ + PHYSFS_ERR_DUPLICATE, /**< Duplicate entry. */ + PHYSFS_ERR_BAD_PASSWORD, /**< Bad password. */ + PHYSFS_ERR_APP_CALLBACK /**< Application callback reported error. */ } PHYSFS_ErrorCode; @@ -3178,7 +3421,7 @@ typedef enum PHYSFS_ErrorCode * you're expecting and plan to handle. But with most things that involve * file systems, the best course of action is usually to give up, report the * problem to the user, and let them figure out what should be done about it. - * For that, you might prefer PHYSFS_getLastError() instead. + * For that, you might prefer PHYSFS_getErrorByCode() instead. * * \return Enumeration value that represents last reported error. * @@ -3358,7 +3601,14 @@ PHYSFS_DECL const char *PHYSFS_getPrefDir(const char *org, const char *app); * PHYSFS_setErrorCode() before returning. PhysicsFS will pass these errors * back to the application unmolested in most cases. * - * Thread safety: TO BE DECIDED. !!! FIXME + * Thread safety: PHYSFS_Archiver implementations are not guaranteed to be + * thread safe in themselves. PhysicsFS provides thread safety when it calls + * into a given archiver inside the library, but it does not promise that + * using the same PHYSFS_File from two threads at once is thread-safe; as + * such, your PHYSFS_Archiver can assume that locking is handled for you + * so long as the PHYSFS_Io you return from PHYSFS_open* doesn't change any + * of your Archiver state, as the PHYSFS_Io won't be as aggressively + * protected. * * \sa PHYSFS_registerArchiver * \sa PHYSFS_deregisterArchiver @@ -3366,9 +3616,6 @@ PHYSFS_DECL const char *PHYSFS_getPrefDir(const char *org, const char *app); */ typedef struct PHYSFS_Archiver { - -// !!! FIXME: split read/write interfaces? - /** * \brief Binary compatibility information. * @@ -3387,41 +3634,67 @@ typedef struct PHYSFS_Archiver */ PHYSFS_ArchiveInfo info; -// !!! FIXME: documentation: \brief? /** - * \brief + * \brief Open an archive provided by (io). * - * Open an archive provided by (io). - * (name) is a filename associated with (io), but doesn't necessarily + * This is where resources are allocated and data is parsed when mounting + * an archive. + * (name) is a filename associated with (io), but doesn't necessarily * map to anything, let alone a real filename. This possibly- * meaningless name is in platform-dependent notation. * (forWrite) is non-zero if this is to be used for * the write directory, and zero if this is to be used for an * element of the search path. - * Return NULL on failure. We ignore any error code you set here; - * when PHYSFS_mount() returns, the error will be PHYSFS_ERR_UNSUPPORTED - * (no Archivers could handle this data). // !!! FIXME: yeah? - * Returns non-NULL on success. The pointer returned will be + * (claimed) should be set to 1 if this is definitely an archive your + * archiver implementation can handle, even if it fails. We use to + * decide if we should stop trying other archivers if you fail to open + * it. For example: the .zip archiver will set this to 1 for something + * that's got a .zip file signature, even if it failed because the file + * was also truncated. No sense in trying other archivers here, we + * already tried to handle it with the appropriate implementation!. + * Return NULL on failure and set (claimed) appropriately. If no archiver + * opened the archive or set (claimed), PHYSFS_mount() will report + * PHYSFS_ERR_UNSUPPORTED. Otherwise, it will report the error from the + * archiver that claimed the data through (claimed). + * Return non-NULL on success. The pointer returned will be * passed as the "opaque" parameter for later calls. */ - void *(*openArchive)(PHYSFS_Io *io, const char *name, int forWrite); + void *(*openArchive)(PHYSFS_Io *io, const char *name, + int forWrite, int *claimed); /** - * List all files in (dirname). Each file is passed to (cb), - * where a copy is made if appropriate, so you should dispose of - * it properly upon return from the callback. - * If you have a failure, report as much as you can. - * (dirname) is in platform-independent notation. + * \brief List all files in (dirname). + * + * Each file is passed to (cb), where a copy is made if appropriate, so + * you can dispose of it upon return from the callback. (dirname) is in + * platform-independent notation. + * If you have a failure, call PHYSFS_SetErrorCode() with whatever code + * seem appropriate and return PHYSFS_ENUM_ERROR. + * If the callback returns PHYSFS_ENUM_ERROR, please call + * PHYSFS_SetErrorCode(PHYSFS_ERR_APP_CALLBACK) and then return + * PHYSFS_ENUM_ERROR as well. Don't call the callback again in any + * circumstances. + * If the callback returns PHYSFS_ENUM_STOP, stop enumerating and return + * PHYSFS_ENUM_STOP as well. Don't call the callback again in any + * circumstances. Don't set an error code in this case. + * Callbacks are only supposed to return a value from + * PHYSFS_EnumerateCallbackResult. Any other result has undefined + * behavior. + * As long as the callback returned PHYSFS_ENUM_OK and you haven't + * experienced any errors of your own, keep enumerating until you're done + * and then return PHYSFS_ENUM_OK without setting an error code. + * + * \warning PHYSFS_enumerate returns zero or non-zero (success or failure), + * so be aware this function pointer returns different values! */ - void (*enumerateFiles)(void *opaque, const char *dirname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata); + PHYSFS_EnumerateCallbackResult (*enumerate)(void *opaque, + const char *dirname, PHYSFS_EnumerateCallback cb, + const char *origdir, void *callbackdata); /** - * Open file for reading. - * This filename, (fnm), is in platform-independent notation. - * If you can't handle multiple opens of the same file, - * you can opt to fail for the second call. + * \brief Open a file in this archive for reading. + * + * This filename, (fnm), is in platform-independent notation. * Fail if the file does not exist. * Returns NULL on failure, and calls PHYSFS_setErrorCode(). * Returns non-NULL on success. The pointer returned will be @@ -3430,13 +3703,13 @@ typedef struct PHYSFS_Archiver PHYSFS_Io *(*openRead)(void *opaque, const char *fnm); /** - * Open file for writing. + * \brief Open a file in this archive for writing. + * * If the file does not exist, it should be created. If it exists, - * it should be truncated to zero bytes. The writing - * offset should be the start of the file. + * it should be truncated to zero bytes. The writing offset should + * be the start of the file. + * If the archive is read-only, this operation should fail. * This filename is in platform-independent notation. - * If you can't handle multiple opens of the same file, - * you can opt to fail for the second call. * Returns NULL on failure, and calls PHYSFS_setErrorCode(). * Returns non-NULL on success. The pointer returned will be * passed as the "opaque" parameter for later file calls. @@ -3444,12 +3717,12 @@ typedef struct PHYSFS_Archiver PHYSFS_Io *(*openWrite)(void *opaque, const char *filename); /** - * Open file for appending. + * \brief Open a file in this archive for appending. + * * If the file does not exist, it should be created. The writing * offset should be the end of the file. + * If the archive is read-only, this operation should fail. * This filename is in platform-independent notation. - * If you can't handle multiple opens of the same file, - * you can opt to fail for the second call. * Returns NULL on failure, and calls PHYSFS_setErrorCode(). * Returns non-NULL on success. The pointer returned will be * passed as the "opaque" parameter for later file calls. @@ -3457,35 +3730,48 @@ typedef struct PHYSFS_Archiver PHYSFS_Io *(*openAppend)(void *opaque, const char *filename); /** - * Delete a file in the archive/directory. - * Return non-zero on success, zero on failure. - * This filename is in platform-independent notation. - * This method may be NULL. + * \brief Delete a file or directory in the archive. + * + * This same call is used for both files and directories; there is not a + * separate rmdir() call. Directories are only meant to be removed if + * they are empty. + * If the archive is read-only, this operation should fail. + * + * Return non-zero on success, zero on failure. + * This filename is in platform-independent notation. * On failure, call PHYSFS_setErrorCode(). */ int (*remove)(void *opaque, const char *filename); /** - * Create a directory in the archive/directory. - * If the application is trying to make multiple dirs, PhysicsFS + * \brief Create a directory in the archive. + * + * If the application is trying to make multiple dirs, PhysicsFS * will split them up into multiple calls before passing them to * your driver. - * Return non-zero on success, zero on failure. + * If the archive is read-only, this operation should fail. + * Return non-zero on success, zero on failure. * This filename is in platform-independent notation. - * This method may be NULL. * On failure, call PHYSFS_setErrorCode(). */ int (*mkdir)(void *opaque, const char *filename); /** - * Obtain basic file metadata. - * Returns non-zero on success, zero on failure. - * On failure, call PHYSFS_setErrorCode(). + * \brief Obtain basic file metadata. + * + * On success, fill in all the fields in (stat), using + * reasonable defaults for fields that apply to your archive. + * + * Returns non-zero on success, zero on failure. + * This filename is in platform-independent notation. + * On failure, call PHYSFS_setErrorCode(). */ int (*stat)(void *opaque, const char *fn, PHYSFS_Stat *stat); /** - * Close directories/archives, and free any associated memory, + * \brief Destruct a previously-opened archive. + * + * Close this archive, and free any associated memory, * including the original PHYSFS_Io and (opaque) itself, if * applicable. Implementation can assume that it won't be called if * there are still files open from this archive. @@ -3497,7 +3783,17 @@ typedef struct PHYSFS_Archiver * \fn int PHYSFS_registerArchiver(const PHYSFS_Archiver *archiver) * \brief Add a new archiver to the system. * - * !!! FIXME: write me. + * \warning This is advanced, hardcore stuff. You don't need this unless you + * really know what you're doing. Most apps will not need this. + * + * If you want to provide your own archiver (for example, a custom archive + * file format, or some virtual thing you want to make look like a filesystem + * that you can access through the usual PhysicsFS APIs), this is where you + * start. Once an archiver is successfully registered, then you can use + * PHYSFS_mount() to add archives that your archiver supports to the + * search path, or perhaps use it as the write dir. Internally, PhysicsFS + * uses this function to register its own built-in archivers, like .zip + * support, etc. * * You may not have two archivers that handle the same extension. If you are * going to have a clash, you can deregister the other archiver (including @@ -3506,6 +3802,9 @@ typedef struct PHYSFS_Archiver * The data in (archiver) is copied; you may free this pointer when this * function returns. * + * Once this function returns successfully, PhysicsFS will be able to support + * archives of this type until you deregister the archiver again. + * * \param archiver The archiver to register. * \return Zero on error, non-zero on success. * @@ -3518,10 +3817,22 @@ PHYSFS_DECL int PHYSFS_registerArchiver(const PHYSFS_Archiver *archiver); * \fn int PHYSFS_deregisterArchiver(const char *ext) * \brief Remove an archiver from the system. * - * !!! FIXME: write me. + * If for some reason, you only need your previously-registered archiver to + * live for a portion of your app's lifetime, you can remove it from the + * system once you're done with it through this function. * * This fails if there are any archives still open that use this archiver. * + * This function can also remove internally-supplied archivers, like .zip + * support or whatnot. This could be useful in some situations, like + * disabling support for them outright or overriding them with your own + * implementation. Once an internal archiver is disabled like this, + * PhysicsFS provides no mechanism to recover them, short of calling + * PHYSFS_deinit() and PHYSFS_init() again. + * + * PHYSFS_deinit() will automatically deregister all archivers, so you don't + * need to explicitly deregister yours if you otherwise shut down cleanly. + * * \param ext Filename extension that the archiver handles. * \return Zero on error, non-zero on success. * diff --git a/love/src/jni/physfs-3.0.1/src/physfs_archiver_7z.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_7z.c new file mode 100644 index 00000000..f35a0b10 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_7z.c @@ -0,0 +1,428 @@ +/* + * 7zip support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file was written by Ryan C. Gordon. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_internal.h" + +#if PHYSFS_SUPPORTS_7Z + +#include "physfs_lzmasdk.h" + +typedef struct +{ + ISeekInStream seekStream; /* lzma sdk i/o interface (lower level). */ + PHYSFS_Io *io; /* physfs i/o interface for this archive. */ + CLookToRead lookStream; /* lzma sdk i/o interface (higher level). */ +} SZIPLookToRead; + +/* One SZIPentry is kept for each file in an open 7zip archive. */ +typedef struct +{ + __PHYSFS_DirTreeEntry tree; /* manages directory tree */ + PHYSFS_uint32 dbidx; /* index into lzma sdk database */ +} SZIPentry; + +/* One SZIPinfo is kept for each open 7zip archive. */ +typedef struct +{ + __PHYSFS_DirTree tree; /* manages directory tree. */ + PHYSFS_Io *io; /* physfs i/o interface for this archive. */ + CSzArEx db; /* lzma sdk archive database object. */ +} SZIPinfo; + + +static PHYSFS_ErrorCode szipErrorCode(const SRes rc) +{ + switch (rc) + { + case SZ_OK: return PHYSFS_ERR_OK; + case SZ_ERROR_DATA: return PHYSFS_ERR_CORRUPT; + case SZ_ERROR_MEM: return PHYSFS_ERR_OUT_OF_MEMORY; + case SZ_ERROR_CRC: return PHYSFS_ERR_CORRUPT; + case SZ_ERROR_UNSUPPORTED: return PHYSFS_ERR_UNSUPPORTED; + case SZ_ERROR_INPUT_EOF: return PHYSFS_ERR_CORRUPT; + case SZ_ERROR_OUTPUT_EOF: return PHYSFS_ERR_IO; + case SZ_ERROR_READ: return PHYSFS_ERR_IO; + case SZ_ERROR_WRITE: return PHYSFS_ERR_IO; + case SZ_ERROR_ARCHIVE: return PHYSFS_ERR_CORRUPT; + case SZ_ERROR_NO_ARCHIVE: return PHYSFS_ERR_UNSUPPORTED; + default: break; + } /* switch */ + + return PHYSFS_ERR_OTHER_ERROR; +} /* szipErrorCode */ + + +/* LZMA SDK's ISzAlloc interface ... */ + +static void *SZIP_ISzAlloc_Alloc(void *p, size_t size) +{ + return allocator.Malloc(size ? size : 1); +} /* SZIP_ISzAlloc_Alloc */ + +static void SZIP_ISzAlloc_Free(void *p, void *address) +{ + if (address) + allocator.Free(address); +} /* SZIP_ISzAlloc_Free */ + +static ISzAlloc SZIP_SzAlloc = { + SZIP_ISzAlloc_Alloc, SZIP_ISzAlloc_Free +}; + + +/* we implement ISeekInStream, and then wrap that in LZMA SDK's CLookToRead, + which implements the higher-level ILookInStream on top of that, handling + buffering and such for us. */ + +/* LZMA SDK's ISeekInStream interface ... */ + +static SRes SZIP_ISeekInStream_Read(void *p, void *buf, size_t *size) +{ + SZIPLookToRead *stream = (SZIPLookToRead *) p; + PHYSFS_Io *io = stream->io; + const PHYSFS_uint64 len = (PHYSFS_uint64) *size; + const PHYSFS_sint64 rc = (len == 0) ? 0 : io->read(io, buf, len); + + if (rc < 0) + { + *size = 0; + return SZ_ERROR_READ; + } /* if */ + + *size = (size_t) rc; + return SZ_OK; +} /* SZIP_ISeekInStream_Read */ + +static SRes SZIP_ISeekInStream_Seek(void *p, Int64 *pos, ESzSeek origin) +{ + SZIPLookToRead *stream = (SZIPLookToRead *) p; + PHYSFS_Io *io = stream->io; + PHYSFS_sint64 base; + PHYSFS_uint64 newpos; + + switch (origin) + { + case SZ_SEEK_SET: + base = 0; + break; + + case SZ_SEEK_CUR: + base = io->tell(io); + break; + + case SZ_SEEK_END: + base = io->length(io); + break; + + default: + return SZ_ERROR_FAIL; + } /* switch */ + + if (base < 0) + return SZ_ERROR_FAIL; + else if ((*pos < 0) && (((Int64) base) < -*pos)) + return SZ_ERROR_FAIL; + + newpos = (PHYSFS_uint64) (((Int64) base) + *pos); + if (!io->seek(io, newpos)) + return SZ_ERROR_FAIL; + + *pos = (Int64) newpos; + return SZ_OK; +} /* SZIP_ISeekInStream_Seek */ + + +static void szipInitStream(SZIPLookToRead *stream, PHYSFS_Io *io) +{ + stream->seekStream.Read = SZIP_ISeekInStream_Read; + stream->seekStream.Seek = SZIP_ISeekInStream_Seek; + + stream->io = io; + + /* !!! FIXME: can we use lookahead? Is there value to it? */ + LookToRead_Init(&stream->lookStream); + LookToRead_CreateVTable(&stream->lookStream, False); + stream->lookStream.realStream = &stream->seekStream; +} /* szipInitStream */ + + +/* Do this in a separate function so we can smallAlloc without looping. */ +static int szipLoadEntry(SZIPinfo *info, const PHYSFS_uint32 idx) +{ + const size_t utf16len = SzArEx_GetFileNameUtf16(&info->db, idx, NULL); + const size_t utf16buflen = utf16len * 2; + PHYSFS_uint16 *utf16 = (PHYSFS_uint16 *) __PHYSFS_smallAlloc(utf16buflen); + const size_t utf8buflen = utf16len * 4; + char *utf8 = (char *) __PHYSFS_smallAlloc(utf8buflen); + int retval = 0; + + if (utf16 && utf8) + { + const int isdir = SzArEx_IsDir(&info->db, idx) != 0; + SZIPentry *entry; + SzArEx_GetFileNameUtf16(&info->db, idx, (UInt16 *) utf16); + PHYSFS_utf8FromUtf16(utf16, utf8, utf8buflen); + entry = (SZIPentry*) __PHYSFS_DirTreeAdd(&info->tree, utf8, isdir); + retval = (entry != NULL); + if (retval) + entry->dbidx = idx; + } /* if */ + + __PHYSFS_smallFree(utf8); + __PHYSFS_smallFree(utf16); + + return retval; +} /* szipLoadEntry */ + + +static int szipLoadEntries(SZIPinfo *info) +{ + int retval = 0; + + if (__PHYSFS_DirTreeInit(&info->tree, sizeof (SZIPentry))) + { + const PHYSFS_uint32 count = info->db.NumFiles; + PHYSFS_uint32 i; + for (i = 0; i < count; i++) + BAIL_IF_ERRPASS(!szipLoadEntry(info, i), 0); + retval = 1; + } /* if */ + + return retval; +} /* szipLoadEntries */ + + +static void SZIP_closeArchive(void *opaque) +{ + SZIPinfo *info = (SZIPinfo *) opaque; + if (info) + { + SzArEx_Free(&info->db, &SZIP_SzAlloc); + __PHYSFS_DirTreeDeinit(&info->tree); + allocator.Free(info); + } /* if */ +} /* SZIP_closeArchive */ + + +static void *SZIP_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) +{ + static const PHYSFS_uint8 wantedsig[] = { '7','z',0xBC,0xAF,0x27,0x1C }; + SZIPLookToRead stream; + ISzAlloc *alloc = &SZIP_SzAlloc; + SZIPinfo *info = NULL; + SRes rc; + PHYSFS_uint8 sig[6]; + PHYSFS_sint64 pos; + + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + pos = io->tell(io); + BAIL_IF_ERRPASS(pos == -1, NULL); + BAIL_IF_ERRPASS(io->read(io, sig, 6) != 6, NULL); + *claimed = (memcmp(sig, wantedsig, 6) == 0); + BAIL_IF_ERRPASS(!io->seek(io, pos), NULL); + + info = (SZIPinfo *) allocator.Malloc(sizeof (SZIPinfo)); + BAIL_IF(!info, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + memset(info, '\0', sizeof (*info)); + + SzArEx_Init(&info->db); + + info->io = io; + + szipInitStream(&stream, io); + rc = SzArEx_Open(&info->db, &stream.lookStream.s, alloc, alloc); + GOTO_IF(rc != SZ_OK, szipErrorCode(rc), failed); + + GOTO_IF_ERRPASS(!szipLoadEntries(info), failed); + + return info; + +failed: + info->io = NULL; /* don't let cleanup destroy the PHYSFS_Io. */ + SZIP_closeArchive(info); + return NULL; +} /* SZIP_openArchive */ + + +static PHYSFS_Io *SZIP_openRead(void *opaque, const char *path) +{ + /* !!! FIXME: the current lzma sdk C API only allows you to decompress + !!! FIXME: the entire file at once, which isn't ideal. Fix this in the + !!! FIXME: SDK and then convert this all to a streaming interface. */ + + SZIPinfo *info = (SZIPinfo *) opaque; + SZIPentry *entry = (SZIPentry *) __PHYSFS_DirTreeFind(&info->tree, path); + ISzAlloc *alloc = &SZIP_SzAlloc; + SZIPLookToRead stream; + PHYSFS_Io *retval = NULL; + PHYSFS_Io *io = NULL; + UInt32 blockIndex = 0xFFFFFFFF; + Byte *outBuffer = NULL; + size_t outBufferSize = 0; + size_t offset = 0; + size_t outSizeProcessed = 0; + void *buf = NULL; + SRes rc; + + BAIL_IF_ERRPASS(!entry, NULL); + BAIL_IF(entry->tree.isdir, PHYSFS_ERR_NOT_A_FILE, NULL); + + io = info->io->duplicate(info->io); + GOTO_IF_ERRPASS(!io, SZIP_openRead_failed); + + szipInitStream(&stream, io); + + rc = SzArEx_Extract(&info->db, &stream.lookStream.s, entry->dbidx, + &blockIndex, &outBuffer, &outBufferSize, &offset, + &outSizeProcessed, alloc, alloc); + GOTO_IF(rc != SZ_OK, szipErrorCode(rc), SZIP_openRead_failed); + + io->destroy(io); + io = NULL; + + buf = allocator.Malloc(outSizeProcessed); + GOTO_IF(rc != SZ_OK, PHYSFS_ERR_OUT_OF_MEMORY, SZIP_openRead_failed); + memcpy(buf, outBuffer + offset, outSizeProcessed); + + alloc->Free(alloc, outBuffer); + outBuffer = NULL; + + retval = __PHYSFS_createMemoryIo(buf, outSizeProcessed, allocator.Free); + GOTO_IF_ERRPASS(!retval, SZIP_openRead_failed); + + return retval; + +SZIP_openRead_failed: + if (io != NULL) + io->destroy(io); + + if (buf) + allocator.Free(buf); + + if (outBuffer) + alloc->Free(alloc, outBuffer); + + return NULL; +} /* SZIP_openRead */ + + +static PHYSFS_Io *SZIP_openWrite(void *opaque, const char *filename) +{ + BAIL(PHYSFS_ERR_READ_ONLY, NULL); +} /* SZIP_openWrite */ + + +static PHYSFS_Io *SZIP_openAppend(void *opaque, const char *filename) +{ + BAIL(PHYSFS_ERR_READ_ONLY, NULL); +} /* SZIP_openAppend */ + + +static int SZIP_remove(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, 0); +} /* SZIP_remove */ + + +static int SZIP_mkdir(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, 0); +} /* SZIP_mkdir */ + + +static inline PHYSFS_uint64 lzmasdkTimeToPhysfsTime(const CNtfsFileTime *t) +{ + const PHYSFS_uint64 winEpochToUnixEpoch = __PHYSFS_UI64(0x019DB1DED53E8000); + const PHYSFS_uint64 nanosecToMillisec = __PHYSFS_UI64(10000000); + const PHYSFS_uint64 quad = (((PHYSFS_uint64) t->High) << 32) | t->Low; + return (quad - winEpochToUnixEpoch) / nanosecToMillisec; +} /* lzmasdkTimeToPhysfsTime */ + + +static int SZIP_stat(void *opaque, const char *path, PHYSFS_Stat *stat) +{ + SZIPinfo *info = (SZIPinfo *) opaque; + SZIPentry *entry; + PHYSFS_uint32 idx; + + entry = (SZIPentry *) __PHYSFS_DirTreeFind(&info->tree, path); + BAIL_IF_ERRPASS(!entry, 0); + idx = entry->dbidx; + + if (entry->tree.isdir) + { + stat->filesize = -1; + stat->filetype = PHYSFS_FILETYPE_DIRECTORY; + } /* if */ + else + { + stat->filesize = (PHYSFS_sint64) SzArEx_GetFileSize(&info->db, idx); + stat->filetype = PHYSFS_FILETYPE_REGULAR; + } /* else */ + + if (info->db.MTime.Vals != NULL) + stat->modtime = lzmasdkTimeToPhysfsTime(&info->db.MTime.Vals[idx]); + else if (info->db.CTime.Vals != NULL) + stat->modtime = lzmasdkTimeToPhysfsTime(&info->db.CTime.Vals[idx]); + else + stat->modtime = -1; + + if (info->db.CTime.Vals != NULL) + stat->createtime = lzmasdkTimeToPhysfsTime(&info->db.CTime.Vals[idx]); + else if (info->db.MTime.Vals != NULL) + stat->createtime = lzmasdkTimeToPhysfsTime(&info->db.MTime.Vals[idx]); + else + stat->createtime = -1; + + stat->accesstime = -1; + stat->readonly = 1; + + return 1; +} /* SZIP_stat */ + + +void SZIP_global_init(void) +{ + /* this just needs to calculate some things, so it only ever + has to run once, even after a deinit. */ + static int generatedTable = 0; + if (!generatedTable) + { + generatedTable = 1; + CrcGenerateTable(); + } /* if */ +} /* SZIP_global_init */ + + +const PHYSFS_Archiver __PHYSFS_Archiver_7Z = +{ + CURRENT_PHYSFS_ARCHIVER_API_VERSION, + { + "7Z", + "7zip archives", + "Ryan C. Gordon ", + "https://icculus.org/physfs/", + 0, /* supportsSymlinks */ + }, + SZIP_openArchive, + __PHYSFS_DirTreeEnumerate, + SZIP_openRead, + SZIP_openWrite, + SZIP_openAppend, + SZIP_remove, + SZIP_mkdir, + SZIP_stat, + SZIP_closeArchive +}; + +#endif /* defined PHYSFS_SUPPORTS_7Z */ + +/* end of physfs_archiver_7z.c ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/archiver_dir.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_dir.c similarity index 71% rename from love/src/jni/physfs-2.1.0/src/archiver_dir.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_dir.c index ae52921e..61c0da3f 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_dir.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_dir.c @@ -13,17 +13,20 @@ -static char *cvtToDependent(const char *prepend, const char *path, char *buf) +static char *cvtToDependent(const char *prepend, const char *path, + char *buf, const size_t buflen) { - BAIL_IF_MACRO(buf == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - sprintf(buf, "%s%s", prepend ? prepend : "", path); + BAIL_IF(buf == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + snprintf(buf, buflen, "%s%s", prepend ? prepend : "", path); - if (__PHYSFS_platformDirSeparator != '/') + #if !__PHYSFS_STANDARD_DIRSEP + assert(__PHYSFS_platformDirSeparator != '/'); { char *p; for (p = strchr(buf, '/'); p != NULL; p = strchr(p + 1, '/')) *p = __PHYSFS_platformDirSeparator; } /* if */ + #endif return buf; } /* cvtToDependent */ @@ -31,12 +34,13 @@ static char *cvtToDependent(const char *prepend, const char *path, char *buf) #define CVT_TO_DEPENDENT(buf, pre, dir) { \ const size_t len = ((pre) ? strlen((char *) pre) : 0) + strlen(dir) + 1; \ - buf = cvtToDependent((char*)pre,dir,(char*)__PHYSFS_smallAlloc(len)); \ + buf = cvtToDependent((char*)pre,dir,(char*)__PHYSFS_smallAlloc(len),len); \ } -static void *DIR_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *DIR_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { PHYSFS_Stat st; const char dirsep = __PHYSFS_platformDirSeparator; @@ -45,12 +49,14 @@ static void *DIR_openArchive(PHYSFS_Io *io, const char *name, int forWriting) const size_t seplen = 1; assert(io == NULL); /* shouldn't create an Io for these. */ - BAIL_IF_MACRO(!__PHYSFS_platformStat(name, &st), ERRPASS, NULL); - if (st.filetype != PHYSFS_FILETYPE_DIRECTORY) - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_platformStat(name, &st, 1), NULL); + if (st.filetype != PHYSFS_FILETYPE_DIRECTORY) + BAIL(PHYSFS_ERR_UNSUPPORTED, NULL); + + *claimed = 1; retval = allocator.Malloc(namelen + seplen + 1); - BAIL_IF_MACRO(retval == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(retval == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); strcpy(retval, name); @@ -65,19 +71,18 @@ static void *DIR_openArchive(PHYSFS_Io *io, const char *name, int forWriting) } /* DIR_openArchive */ -static void DIR_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata) +static PHYSFS_EnumerateCallbackResult DIR_enumerate(void *opaque, + const char *dname, PHYSFS_EnumerateCallback cb, + const char *origdir, void *callbackdata) { char *d; - + PHYSFS_EnumerateCallbackResult retval; CVT_TO_DEPENDENT(d, opaque, dname); - if (d != NULL) - { - __PHYSFS_platformEnumerateFiles(d, cb, origdir, callbackdata); - __PHYSFS_smallFree(d); - } /* if */ -} /* DIR_enumerateFiles */ + BAIL_IF_ERRPASS(!d, PHYSFS_ENUM_ERROR); + retval = __PHYSFS_platformEnumerate(d, cb, origdir, callbackdata); + __PHYSFS_smallFree(d); + return retval; +} /* DIR_enumerate */ static PHYSFS_Io *doOpen(void *opaque, const char *name, const int mode) @@ -86,14 +91,14 @@ static PHYSFS_Io *doOpen(void *opaque, const char *name, const int mode) char *f = NULL; CVT_TO_DEPENDENT(f, opaque, name); - BAIL_IF_MACRO(!f, ERRPASS, NULL); + BAIL_IF_ERRPASS(!f, NULL); io = __PHYSFS_createNativeIo(f, mode); if (io == NULL) { const PHYSFS_ErrorCode err = PHYSFS_getLastErrorCode(); PHYSFS_Stat statbuf; - __PHYSFS_platformStat(f, &statbuf); + __PHYSFS_platformStat(f, &statbuf, 0); /* !!! FIXME: why are we stating here? */ PHYSFS_setErrorCode(err); } /* if */ @@ -127,7 +132,7 @@ static int DIR_remove(void *opaque, const char *name) char *f; CVT_TO_DEPENDENT(f, opaque, name); - BAIL_IF_MACRO(!f, ERRPASS, 0); + BAIL_IF_ERRPASS(!f, 0); retval = __PHYSFS_platformDelete(f); __PHYSFS_smallFree(f); return retval; @@ -140,7 +145,7 @@ static int DIR_mkdir(void *opaque, const char *name) char *f; CVT_TO_DEPENDENT(f, opaque, name); - BAIL_IF_MACRO(!f, ERRPASS, 0); + BAIL_IF_ERRPASS(!f, 0); retval = __PHYSFS_platformMkDir(f); __PHYSFS_smallFree(f); return retval; @@ -159,8 +164,8 @@ static int DIR_stat(void *opaque, const char *name, PHYSFS_Stat *stat) char *d; CVT_TO_DEPENDENT(d, opaque, name); - BAIL_IF_MACRO(!d, ERRPASS, 0); - retval = __PHYSFS_platformStat(d, stat); + BAIL_IF_ERRPASS(!d, 0); + retval = __PHYSFS_platformStat(d, stat, 0); __PHYSFS_smallFree(d); return retval; } /* DIR_stat */ @@ -173,11 +178,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_DIR = "", "Non-archive, direct filesystem I/O", "Ryan C. Gordon ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 1, /* supportsSymlinks */ }, DIR_openArchive, - DIR_enumerateFiles, + DIR_enumerate, DIR_openRead, DIR_openWrite, DIR_openAppend, @@ -187,5 +192,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_DIR = DIR_closeArchive }; -/* end of archiver_dir.c ... */ +/* end of physfs_archiver_dir.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/archiver_grp.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_grp.c similarity index 55% rename from love/src/jni/physfs-2.1.0/src/archiver_grp.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_grp.c index 1beb6d4c..758475e4 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_grp.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_grp.c @@ -29,59 +29,63 @@ #if PHYSFS_SUPPORTS_GRP -static UNPKentry *grpLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 fileCount) +static int grpLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, void *arc) { - PHYSFS_uint32 location = 16; /* sizeof sig. */ - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; - char *ptr = NULL; + PHYSFS_uint32 pos = 16 + (16 * count); /* past sig+metadata. */ + PHYSFS_uint32 i; - entries = (UNPKentry *) allocator.Malloc(sizeof (UNPKentry) * fileCount); - BAIL_IF_MACRO(entries == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - location += (16 * fileCount); - - for (entry = entries; fileCount > 0; fileCount--, entry++) + for (i = 0; i < count; i++) { - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->name, 12), ERRPASS, failed); - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->size, 4), ERRPASS, failed); - entry->name[12] = '\0'; /* name isn't null-terminated in file. */ - if ((ptr = strchr(entry->name, ' ')) != NULL) + char *ptr; + char name[13]; + PHYSFS_uint32 size; + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, 12), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + + name[12] = '\0'; /* name isn't null-terminated in file. */ + if ((ptr = strchr(name, ' ')) != NULL) *ptr = '\0'; /* trim extra spaces. */ - entry->size = PHYSFS_swapULE32(entry->size); - entry->startPos = location; - location += entry->size; + size = PHYSFS_swapULE32(size); + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); + + pos += size; } /* for */ - return entries; - -failed: - allocator.Free(entries); - return NULL; + return 1; } /* grpLoadEntries */ -static void *GRP_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *GRP_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { PHYSFS_uint8 buf[12]; PHYSFS_uint32 count = 0; - UNPKentry *entries = NULL; + void *unpkarc = NULL; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, buf, sizeof (buf)), ERRPASS, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, buf, sizeof (buf)), NULL); if (memcmp(buf, "KenSilverman", sizeof (buf)) != 0) - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); + BAIL(PHYSFS_ERR_UNSUPPORTED, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &count, sizeof(count)), ERRPASS, NULL); + *claimed = 1; + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &count, sizeof(count)), NULL); count = PHYSFS_swapULE32(count); - entries = grpLoadEntries(io, count); - BAIL_IF_MACRO(!entries, ERRPASS, NULL); - return UNPK_openArchive(io, entries, count); + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!grpLoadEntries(io, count, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; } /* GRP_openArchive */ @@ -92,11 +96,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_GRP = "GRP", "Build engine Groupfile format", "Ryan C. Gordon ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 0, /* supportsSymlinks */ }, GRP_openArchive, - UNPK_enumerateFiles, + UNPK_enumerate, UNPK_openRead, UNPK_openWrite, UNPK_openAppend, @@ -108,5 +112,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_GRP = #endif /* defined PHYSFS_SUPPORTS_GRP */ -/* end of archiver_grp.c ... */ +/* end of physfs_archiver_grp.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/archiver_hog.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_hog.c similarity index 57% rename from love/src/jni/physfs-2.1.0/src/archiver_hog.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_hog.c index 0ec25998..832209f8 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_hog.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_hog.c @@ -34,60 +34,56 @@ #if PHYSFS_SUPPORTS_HOG -static UNPKentry *hogLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 *_entCount) +static int hogLoadEntries(PHYSFS_Io *io, void *arc) { const PHYSFS_uint64 iolen = io->length(io); - PHYSFS_uint32 entCount = 0; - void *ptr = NULL; - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; - PHYSFS_uint32 size = 0; PHYSFS_uint32 pos = 3; while (pos < iolen) { - entCount++; - ptr = allocator.Realloc(ptr, sizeof (UNPKentry) * entCount); - GOTO_IF_MACRO(ptr == NULL, PHYSFS_ERR_OUT_OF_MEMORY, failed); - entries = (UNPKentry *) ptr; - entry = &entries[entCount-1]; + PHYSFS_uint32 size; + char name[13]; - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &entry->name, 13), ERRPASS, failed); - pos += 13; - GOTO_IF_MACRO(!__PHYSFS_readAll(io, &size, 4), ERRPASS, failed); - pos += 4; + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, 13), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + name[12] = '\0'; /* just in case. */ + pos += 13 + 4; - entry->size = PHYSFS_swapULE32(size); - entry->startPos = pos; + size = PHYSFS_swapULE32(size); + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); pos += size; /* skip over entry */ - GOTO_IF_MACRO(!io->seek(io, pos), ERRPASS, failed); + BAIL_IF_ERRPASS(!io->seek(io, pos), 0); } /* while */ - *_entCount = entCount; - return entries; - -failed: - allocator.Free(entries); - return NULL; + return 1; } /* hogLoadEntries */ -static void *HOG_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *HOG_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { PHYSFS_uint8 buf[3]; - PHYSFS_uint32 count = 0; - UNPKentry *entries = NULL; + void *unpkarc = NULL; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, buf, 3), ERRPASS, NULL); - BAIL_IF_MACRO(memcmp(buf, "DHF", 3) != 0, PHYSFS_ERR_UNSUPPORTED, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, buf, 3), NULL); + BAIL_IF(memcmp(buf, "DHF", 3) != 0, PHYSFS_ERR_UNSUPPORTED, NULL); - entries = hogLoadEntries(io, &count); - BAIL_IF_MACRO(!entries, ERRPASS, NULL); - return UNPK_openArchive(io, entries, count); + *claimed = 1; + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!hogLoadEntries(io, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; } /* HOG_openArchive */ @@ -98,11 +94,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_HOG = "HOG", "Descent I/II HOG file format", "Bradley Bell ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 0, /* supportsSymlinks */ }, HOG_openArchive, - UNPK_enumerateFiles, + UNPK_enumerate, UNPK_openRead, UNPK_openWrite, UNPK_openAppend, @@ -114,5 +110,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_HOG = #endif /* defined PHYSFS_SUPPORTS_HOG */ -/* end of archiver_hog.c ... */ +/* end of physfs_archiver_hog.c ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_archiver_iso9660.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_iso9660.c new file mode 100644 index 00000000..965c83f6 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_iso9660.c @@ -0,0 +1,386 @@ +/* + * ISO9660 support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file originally written by Christoph Nelles, but was largely + * rewritten by Ryan C. Gordon (so please harass Ryan about bugs and not + * Christoph). + */ + +/* + * Handles CD-ROM disk images (and raw CD-ROM devices). + * + * Not supported: + * - Rock Ridge (needed for sparse files, device nodes and symlinks, etc). + * - Non 2048 Sectors + * - TRANS.TBL (maps 8.3 filenames on old discs to long filenames). + * - Multiextents (4gb max file size without it). + * - UDF + * + * Deviations from the standard + * - Ignores mandatory sort order + * - Allows various invalid file names + * + * Problems + * - Ambiguities in the standard + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_internal.h" + +#if PHYSFS_SUPPORTS_ISO9660 + +#include + +/* ISO9660 often stores values in both big and little endian formats: little + first, followed by big. While technically there might be different values + in each, we just always use the littleendian ones and swap ourselves. The + fields aren't aligned anyhow, so you have to serialize them in any case + to avoid crashes on many CPU archs in any case. */ + +static int iso9660LoadEntries(PHYSFS_Io *io, const int joliet, + const char *base, const PHYSFS_uint64 dirstart, + const PHYSFS_uint64 dirend, void *unpkarc); + +static int iso9660AddEntry(PHYSFS_Io *io, const int joliet, const int isdir, + const char *base, PHYSFS_uint8 *fname, + const int fnamelen, const PHYSFS_sint64 ts, + const PHYSFS_uint64 pos, const PHYSFS_uint64 len, + void *unpkarc) +{ + char *fullpath; + char *fnamecpy; + size_t baselen; + size_t fullpathlen; + void *entry; + int i; + + if (fnamelen == 1 && ((fname[0] == 0) || (fname[0] == 1))) + return 1; /* Magic that represents "." and "..", ignore */ + + BAIL_IF(fnamelen == 0, PHYSFS_ERR_CORRUPT, 0); + assert(fnamelen > 0); + assert(fnamelen <= 255); + BAIL_IF(joliet && (fnamelen % 2), PHYSFS_ERR_CORRUPT, 0); + + /* Joliet is UCS-2, so at most UTF-8 will double the byte size */ + baselen = strlen(base); + fullpathlen = baselen + (fnamelen * (joliet ? 2 : 1)) + 2; + fullpath = (char *) __PHYSFS_smallAlloc(fullpathlen); + BAIL_IF(!fullpath, PHYSFS_ERR_OUT_OF_MEMORY, 0); + fnamecpy = fullpath; + if (baselen > 0) + { + snprintf(fullpath, fullpathlen, "%s/", base); + fnamecpy += baselen + 1; + fullpathlen -= baselen - 1; + } /* if */ + + if (joliet) + { + PHYSFS_uint16 *ucs2 = (PHYSFS_uint16 *) fname; + int total = fnamelen / 2; + for (i = 0; i < total; i++) + ucs2[i] = PHYSFS_swapUBE16(ucs2[i]); + ucs2[total] = '\0'; + PHYSFS_utf8FromUcs2(ucs2, fnamecpy, fullpathlen); + } /* if */ + else + { + for (i = 0; i < fnamelen; i++) + { + /* We assume the filenames are low-ASCII; consider the archive + corrupt if we see something above 127, since we don't know the + encoding. (We can change this later if we find out these exist + and are intended to be, say, latin-1 or UTF-8 encoding). */ + BAIL_IF(fname[i] > 127, PHYSFS_ERR_CORRUPT, 0); + fnamecpy[i] = fname[i]; + } /* for */ + fnamecpy[fnamelen] = '\0'; + + if (!isdir) + { + /* find last SEPARATOR2 */ + char *ptr = strrchr(fnamecpy, ';'); + if (ptr && (ptr != fnamecpy)) + *(ptr--) = '\0'; + else + ptr = fnamecpy + (fnamelen - 1); + + /* chop out any trailing '.', as done in all implementations */ + if (*ptr == '.') + *ptr = '\0'; + } /* if */ + } /* else */ + + entry = UNPK_addEntry(unpkarc, fullpath, isdir, ts, ts, pos, len); + if ((entry) && (isdir)) + { + if (!iso9660LoadEntries(io, joliet, fullpath, pos, pos + len, unpkarc)) + entry = NULL; /* so we report a failure later. */ + } /* if */ + + __PHYSFS_smallFree(fullpath); + return entry != NULL; +} /* iso9660AddEntry */ + +static int iso9660LoadEntries(PHYSFS_Io *io, const int joliet, + const char *base, const PHYSFS_uint64 dirstart, + const PHYSFS_uint64 dirend, void *unpkarc) +{ + PHYSFS_uint64 readpos = dirstart; + + while (1) + { + PHYSFS_uint8 recordlen; + PHYSFS_uint8 extattrlen; + PHYSFS_uint32 extent; + PHYSFS_uint32 datalen; + PHYSFS_uint8 ignore[4]; + PHYSFS_uint8 year, month, day, hour, minute, second, offset; + PHYSFS_uint8 flags; + PHYSFS_uint8 fnamelen; + PHYSFS_uint8 fname[256]; + PHYSFS_sint64 timestamp; + struct tm t; + int isdir; + int multiextent; + + BAIL_IF_ERRPASS(!io->seek(io, readpos), 0); + + /* recordlen = 0 -> no more entries or fill entry */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &recordlen, 1), 0); + if (recordlen > 0) + readpos += recordlen; /* ready to seek to next record. */ + else + { + PHYSFS_uint64 nextpos; + + /* if we are in the last sector of the directory & it's 0 -> end */ + if ((dirend - 2048) <= (readpos - 1)) + break; /* finished */ + + /* else skip to the next sector & continue; */ + nextpos = (((readpos - 1) / 2048) + 1) * 2048; + + /* whoops, can't make forward progress! */ + BAIL_IF(nextpos == readpos, PHYSFS_ERR_CORRUPT, 0); + + readpos = nextpos; + continue; /* start back at upper loop. */ + } /* else */ + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &extattrlen, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &extent, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* extent be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &datalen, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* datalen be */ + + /* record timestamp */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &year, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &month, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &day, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &hour, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &minute, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &second, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &offset, 1), 0); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &flags, 1), 0); + isdir = (flags & (1 << 1)) != 0; + multiextent = (flags & (1 << 7)) != 0; + BAIL_IF(multiextent, PHYSFS_ERR_UNSUPPORTED, 0); /* !!! FIXME */ + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 1), 0); /* unit size */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 1), 0); /* interleave gap */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* seqnum le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* seqnum be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &fnamelen, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, fname, fnamelen), 0); + + t.tm_sec = second; + t.tm_min = minute; + t.tm_hour = hour; + t.tm_mday = day; + t.tm_mon = month - 1; + t.tm_year = year; + t.tm_wday = 0; + t.tm_yday = 0; + t.tm_isdst = -1; + timestamp = (PHYSFS_sint64) mktime(&t); + + extent += extattrlen; /* skip extended attribute record. */ + + /* infinite loop, corrupt file? */ + BAIL_IF((extent * 2048) == dirstart, PHYSFS_ERR_CORRUPT, 0); + + if (!iso9660AddEntry(io, joliet, isdir, base, fname, fnamelen, + timestamp, extent * 2048, datalen, unpkarc)) + { + return 0; + } /* if */ + } /* while */ + + return 1; +} /* iso9660LoadEntries */ + + +static int parseVolumeDescriptor(PHYSFS_Io *io, PHYSFS_uint64 *_rootpos, + PHYSFS_uint64 *_rootlen, int *_joliet, + int *_claimed) +{ + PHYSFS_uint64 pos = 32768; /* start at the Primary Volume Descriptor */ + int found = 0; + int done = 0; + + *_joliet = 0; + + while (!done) + { + PHYSFS_uint8 type; + PHYSFS_uint8 identifier[5]; + PHYSFS_uint8 version; + PHYSFS_uint8 flags; + PHYSFS_uint8 escapeseqs[32]; + PHYSFS_uint8 ignore[32]; + PHYSFS_uint16 blocksize; + PHYSFS_uint32 extent; + PHYSFS_uint32 datalen; + + BAIL_IF_ERRPASS(!io->seek(io, pos), 0); + pos += 2048; /* each volume descriptor is 2048 bytes */ + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &type, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &identifier, 5), 0); + + if (memcmp(identifier, "CD001", 5) != 0) /* maybe not an iso? */ + { + BAIL_IF(!*_claimed, PHYSFS_ERR_UNSUPPORTED, 0); + continue; /* just skip this one */ + } /* if */ + + *_claimed = 1; /* okay, this is probably an iso. */ + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &version, 1), 0); /* version */ + BAIL_IF(version != 1, PHYSFS_ERR_UNSUPPORTED, 0); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &flags, 1), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 32), 0); /* system id */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 32), 0); /* volume id */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 8), 0); /* reserved */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* space le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* space be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, escapeseqs, 32), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* setsize le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* setsize be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* seq num le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* seq num be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &blocksize, 2), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 2), 0); /* blocklen be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* pthtablen le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* pthtablen be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* pthtabpos le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* optpthtabpos le */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* pthtabpos be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* optpthtabpos be */ + + /* root directory record... */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 1), 0); /* len */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 1), 0); /* attr len */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &extent, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* extent be */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &datalen, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), 0); /* datalen be */ + + /* !!! FIXME: deal with this properly. */ + blocksize = PHYSFS_swapULE32(blocksize); + BAIL_IF(blocksize && (blocksize != 2048), PHYSFS_ERR_UNSUPPORTED, 0); + + switch (type) + { + case 1: /* Primary Volume Descriptor */ + case 2: /* Supplementary Volume Descriptor */ + if (found < type) + { + *_rootpos = PHYSFS_swapULE32(extent) * 2048; + *_rootlen = PHYSFS_swapULE32(datalen); + found = type; + + if (found == 2) /* possible Joliet volume */ + { + const PHYSFS_uint8 *s = escapeseqs; + *_joliet = !(flags & 1) && + (s[0] == 0x25) && (s[1] == 0x2F) && + ((s[2] == 0x40) || (s[2] == 0x43) || (s[2] == 0x45)); + } /* if */ + } /* if */ + break; + + case 255: /* type 255 terminates the volume descriptor list */ + done = 1; + break; + + default: + break; /* skip unknown types. */ + } /* switch */ + } /* while */ + + BAIL_IF(!found, PHYSFS_ERR_CORRUPT, 0); + + return 1; +} /* parseVolumeDescriptor */ + + +static void *ISO9660_openArchive(PHYSFS_Io *io, const char *filename, + int forWriting, int *claimed) +{ + PHYSFS_uint64 rootpos = 0; + PHYSFS_uint64 len = 0; + int joliet = 0; + void *unpkarc = NULL; + + assert(io != NULL); /* shouldn't ever happen. */ + + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + + if (!parseVolumeDescriptor(io, &rootpos, &len, &joliet, claimed)) + return NULL; + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!iso9660LoadEntries(io, joliet, "", rootpos, rootpos + len, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; +} /* ISO9660_openArchive */ + + +const PHYSFS_Archiver __PHYSFS_Archiver_ISO9660 = +{ + CURRENT_PHYSFS_ARCHIVER_API_VERSION, + { + "ISO", + "ISO9660 image file", + "Ryan C. Gordon ", + "https://icculus.org/physfs/", + 0, /* supportsSymlinks */ + }, + ISO9660_openArchive, + UNPK_enumerate, + UNPK_openRead, + UNPK_openWrite, + UNPK_openAppend, + UNPK_remove, + UNPK_mkdir, + UNPK_stat, + UNPK_closeArchive +}; + +#endif /* defined PHYSFS_SUPPORTS_ISO9660 */ + +/* end of physfs_archiver_iso9660.c ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/archiver_mvl.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_mvl.c similarity index 53% rename from love/src/jni/physfs-2.1.0/src/archiver_mvl.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_mvl.c index 835381a2..78b59f1a 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_mvl.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_mvl.c @@ -32,49 +32,54 @@ #if PHYSFS_SUPPORTS_MVL -static UNPKentry *mvlLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 fileCount) +static int mvlLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, void *arc) { - PHYSFS_uint32 location = 8; /* sizeof sig. */ - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; + PHYSFS_uint32 pos = 8 + (17 * count); /* past sig+metadata. */ + PHYSFS_uint32 i; - entries = (UNPKentry *) allocator.Malloc(sizeof (UNPKentry) * fileCount); - BAIL_IF_MACRO(entries == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - location += (17 * fileCount); - - for (entry = entries; fileCount > 0; fileCount--, entry++) + for (i = 0; i < count; i++) { - if (!__PHYSFS_readAll(io, &entry->name, 13)) goto failed; - if (!__PHYSFS_readAll(io, &entry->size, 4)) goto failed; - entry->size = PHYSFS_swapULE32(entry->size); - entry->startPos = location; - location += entry->size; + PHYSFS_uint32 size; + char name[13]; + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, 13), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + name[12] = '\0'; /* just in case. */ + size = PHYSFS_swapULE32(size); + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); + pos += size; } /* for */ - return entries; - -failed: - allocator.Free(entries); - return NULL; + return 1; } /* mvlLoadEntries */ -static void *MVL_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *MVL_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { PHYSFS_uint8 buf[4]; PHYSFS_uint32 count = 0; - UNPKentry *entries = NULL; + void *unpkarc; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, buf, 4), ERRPASS, NULL); - BAIL_IF_MACRO(memcmp(buf, "DMVL", 4) != 0, PHYSFS_ERR_UNSUPPORTED, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &count, sizeof(count)), ERRPASS, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, buf, 4), NULL); + BAIL_IF(memcmp(buf, "DMVL", 4) != 0, PHYSFS_ERR_UNSUPPORTED, NULL); + *claimed = 1; + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &count, sizeof(count)), NULL); count = PHYSFS_swapULE32(count); - entries = mvlLoadEntries(io, count); - return (!entries) ? NULL : UNPK_openArchive(io, entries, count); + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!mvlLoadEntries(io, count, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; } /* MVL_openArchive */ @@ -85,11 +90,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_MVL = "MVL", "Descent II Movielib format", "Bradley Bell ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 0, /* supportsSymlinks */ }, MVL_openArchive, - UNPK_enumerateFiles, + UNPK_enumerate, UNPK_openRead, UNPK_openWrite, UNPK_openAppend, @@ -101,5 +106,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_MVL = #endif /* defined PHYSFS_SUPPORTS_MVL */ -/* end of archiver_mvl.c ... */ +/* end of physfs_archiver_mvl.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/archiver_qpak.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_qpak.c similarity index 50% rename from love/src/jni/physfs-2.1.0/src/archiver_qpak.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_qpak.c index 14758372..15a5f2df 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_qpak.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_qpak.c @@ -2,13 +2,13 @@ * QPAK support routines for PhysicsFS. * * This archiver handles the archive format utilized by Quake 1 and 2. - * Quake3-based games use the PkZip/Info-Zip format (which our zip.c - * archiver handles). + * Quake3-based games use the PkZip/Info-Zip format (which our + * physfs_archiver_zip.c handles). * * ======================================================================== * * This format info (in more detail) comes from: - * http://debian.fmi.uni-sofia.bg/~sergei/cgsr/docs/pak.txt + * https://web.archive.org/web/20040209101748/http://debian.fmi.uni-sofia.bg/~sergei/cgsr/docs/pak.txt * * Quake PAK Format * @@ -36,61 +36,66 @@ #define QPAK_SIG 0x4B434150 /* "PACK" in ASCII. */ -static UNPKentry *qpakLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 fileCount) +static int qpakLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, void *arc) { - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; - - entries = (UNPKentry *) allocator.Malloc(sizeof (UNPKentry) * fileCount); - BAIL_IF_MACRO(entries == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - for (entry = entries; fileCount > 0; fileCount--, entry++) + PHYSFS_uint32 i; + for (i = 0; i < count; i++) { - if (!__PHYSFS_readAll(io, &entry->name, 56)) goto failed; - if (!__PHYSFS_readAll(io, &entry->startPos, 4)) goto failed; - if (!__PHYSFS_readAll(io, &entry->size, 4)) goto failed; - entry->size = PHYSFS_swapULE32(entry->size); - entry->startPos = PHYSFS_swapULE32(entry->startPos); + PHYSFS_uint32 size; + PHYSFS_uint32 pos; + char name[56]; + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, 56), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &pos, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + size = PHYSFS_swapULE32(size); + pos = PHYSFS_swapULE32(pos); + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); } /* for */ - return entries; - -failed: - allocator.Free(entries); - return NULL; + return 1; } /* qpakLoadEntries */ -static void *QPAK_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *QPAK_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { - UNPKentry *entries = NULL; PHYSFS_uint32 val = 0; PHYSFS_uint32 pos = 0; PHYSFS_uint32 count = 0; + void *unpkarc; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &val, 4), ERRPASS, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &val, 4), NULL); if (PHYSFS_swapULE32(val) != QPAK_SIG) - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); + BAIL(PHYSFS_ERR_UNSUPPORTED, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &val, 4), ERRPASS, NULL); + *claimed = 1; + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &val, 4), NULL); pos = PHYSFS_swapULE32(val); /* directory table offset. */ - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &val, 4), ERRPASS, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &val, 4), NULL); count = PHYSFS_swapULE32(val); /* corrupted archive? */ - BAIL_IF_MACRO((count % 64) != 0, PHYSFS_ERR_CORRUPT, NULL); + BAIL_IF((count % 64) != 0, PHYSFS_ERR_CORRUPT, NULL); count /= 64; - BAIL_IF_MACRO(!io->seek(io, pos), ERRPASS, NULL); + BAIL_IF_ERRPASS(!io->seek(io, pos), NULL); - entries = qpakLoadEntries(io, count); - BAIL_IF_MACRO(!entries, ERRPASS, NULL); - return UNPK_openArchive(io, entries, count); + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!qpakLoadEntries(io, count, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; } /* QPAK_openArchive */ @@ -101,11 +106,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_QPAK = "PAK", "Quake I/II format", "Ryan C. Gordon ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 0, /* supportsSymlinks */ }, QPAK_openArchive, - UNPK_enumerateFiles, + UNPK_enumerate, UNPK_openRead, UNPK_openWrite, UNPK_openAppend, @@ -117,5 +122,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_QPAK = #endif /* defined PHYSFS_SUPPORTS_QPAK */ -/* end of archiver_qpak.c ... */ +/* end of physfs_archiver_qpak.c ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_archiver_slb.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_slb.c new file mode 100644 index 00000000..4fc28d40 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_slb.c @@ -0,0 +1,135 @@ +/* + * SLB support routines for PhysicsFS. + * + * This driver handles SLB archives ("slab files"). This uncompressed format + * is used in I-War / Independence War and Independence War: Defiance. + * + * The format begins with four zero bytes (version?), the file count and the + * location of the table of contents. Each ToC entry contains a 64-byte buffer + * containing a zero-terminated filename, the offset of the data, and its size. + * All the filenames begin with the separator character '\'. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file written by Aleksi Nurmi, based on the GRP archiver by + * Ryan C. Gordon. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_internal.h" + +#if PHYSFS_SUPPORTS_SLB + +static int slbLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, void *arc) +{ + PHYSFS_uint32 i; + for (i = 0; i < count; i++) + { + PHYSFS_uint32 pos; + PHYSFS_uint32 size; + char name[64]; + char backslash; + char *ptr; + + /* don't include the '\' in the beginning */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &backslash, 1), 0); + BAIL_IF(backslash != '\\', PHYSFS_ERR_CORRUPT, 0); + + /* read the rest of the buffer, 63 bytes */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &name, 63), 0); + name[63] = '\0'; /* in case the name lacks the null terminator */ + + /* convert backslashes */ + for (ptr = name; *ptr; ptr++) + { + if (*ptr == '\\') + *ptr = '/'; + } /* for */ + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &pos, 4), 0); + pos = PHYSFS_swapULE32(pos); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + size = PHYSFS_swapULE32(size); + + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); + } /* for */ + + return 1; +} /* slbLoadEntries */ + + +static void *SLB_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) +{ + PHYSFS_uint32 version; + PHYSFS_uint32 count; + PHYSFS_uint32 tocPos; + void *unpkarc; + + /* There's no identifier on an SLB file, so we assume it's _not_ if the + file count or tocPos is zero. Beyond that, we'll assume it's + bogus/corrupt if the entries' filenames don't start with '\' or the + tocPos is past the end of the file (seek will fail). This probably + covers all meaningful cases where we would accidentally accept a non-SLB + file with this archiver. */ + + assert(io != NULL); /* shouldn't ever happen. */ + + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &version, sizeof (version)), NULL); + version = PHYSFS_swapULE32(version); + BAIL_IF(version != 0, PHYSFS_ERR_UNSUPPORTED, NULL); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &count, sizeof (count)), NULL); + count = PHYSFS_swapULE32(count); + BAIL_IF(!count, PHYSFS_ERR_UNSUPPORTED, NULL); + + /* offset of the table of contents */ + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &tocPos, sizeof (tocPos)), NULL); + tocPos = PHYSFS_swapULE32(tocPos); + BAIL_IF(!tocPos, PHYSFS_ERR_UNSUPPORTED, NULL); + + /* seek to the table of contents */ + BAIL_IF_ERRPASS(!io->seek(io, tocPos), NULL); + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!slbLoadEntries(io, count, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + *claimed = 1; /* oh well. */ + + return unpkarc; +} /* SLB_openArchive */ + + +const PHYSFS_Archiver __PHYSFS_Archiver_SLB = +{ + CURRENT_PHYSFS_ARCHIVER_API_VERSION, + { + "SLB", + "I-War / Independence War Slab file", + "Aleksi Nurmi ", + "https://bitbucket.org/ahnurmi/", + 0, /* supportsSymlinks */ + }, + SLB_openArchive, + UNPK_enumerate, + UNPK_openRead, + UNPK_openWrite, + UNPK_openAppend, + UNPK_remove, + UNPK_mkdir, + UNPK_stat, + UNPK_closeArchive +}; + +#endif /* defined PHYSFS_SUPPORTS_SLB */ + +/* end of physfs_archiver_slb.c ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_archiver_unpacked.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_unpacked.c new file mode 100644 index 00000000..575efef3 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_unpacked.c @@ -0,0 +1,305 @@ +/* + * High-level PhysicsFS archiver for simple unpacked file formats. + * + * This is a framework that basic archivers build on top of. It's for simple + * formats that can just hand back a list of files and the offsets of their + * uncompressed data. There are an alarming number of formats like this. + * + * RULES: Archive entries must be uncompressed. Dirs and files allowed, but no + * symlinks, etc. We can relax some of these rules as necessary. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file written by Ryan C. Gordon. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_internal.h" + +typedef struct +{ + __PHYSFS_DirTree tree; + PHYSFS_Io *io; +} UNPKinfo; + +typedef struct +{ + __PHYSFS_DirTreeEntry tree; + PHYSFS_uint64 startPos; + PHYSFS_uint64 size; + PHYSFS_sint64 ctime; + PHYSFS_sint64 mtime; +} UNPKentry; + +typedef struct +{ + PHYSFS_Io *io; + UNPKentry *entry; + PHYSFS_uint32 curPos; +} UNPKfileinfo; + + +void UNPK_closeArchive(void *opaque) +{ + UNPKinfo *info = ((UNPKinfo *) opaque); + if (info) + { + __PHYSFS_DirTreeDeinit(&info->tree); + + if (info->io) + info->io->destroy(info->io); + + allocator.Free(info); + } /* if */ +} /* UNPK_closeArchive */ + +void UNPK_abandonArchive(void *opaque) +{ + UNPKinfo *info = ((UNPKinfo *) opaque); + if (info) + { + info->io = NULL; + UNPK_closeArchive(info); + } /* if */ +} /* UNPK_abandonArchive */ + +static PHYSFS_sint64 UNPK_read(PHYSFS_Io *io, void *buffer, PHYSFS_uint64 len) +{ + UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; + const UNPKentry *entry = finfo->entry; + const PHYSFS_uint64 bytesLeft = (PHYSFS_uint64)(entry->size-finfo->curPos); + PHYSFS_sint64 rc; + + if (bytesLeft < len) + len = bytesLeft; + + rc = finfo->io->read(finfo->io, buffer, len); + if (rc > 0) + finfo->curPos += (PHYSFS_uint32) rc; + + return rc; +} /* UNPK_read */ + + +static PHYSFS_sint64 UNPK_write(PHYSFS_Io *io, const void *b, PHYSFS_uint64 len) +{ + BAIL(PHYSFS_ERR_READ_ONLY, -1); +} /* UNPK_write */ + + +static PHYSFS_sint64 UNPK_tell(PHYSFS_Io *io) +{ + return ((UNPKfileinfo *) io->opaque)->curPos; +} /* UNPK_tell */ + + +static int UNPK_seek(PHYSFS_Io *io, PHYSFS_uint64 offset) +{ + UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; + const UNPKentry *entry = finfo->entry; + int rc; + + BAIL_IF(offset >= entry->size, PHYSFS_ERR_PAST_EOF, 0); + rc = finfo->io->seek(finfo->io, entry->startPos + offset); + if (rc) + finfo->curPos = (PHYSFS_uint32) offset; + + return rc; +} /* UNPK_seek */ + + +static PHYSFS_sint64 UNPK_length(PHYSFS_Io *io) +{ + const UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; + return ((PHYSFS_sint64) finfo->entry->size); +} /* UNPK_length */ + + +static PHYSFS_Io *UNPK_duplicate(PHYSFS_Io *_io) +{ + UNPKfileinfo *origfinfo = (UNPKfileinfo *) _io->opaque; + PHYSFS_Io *io = NULL; + PHYSFS_Io *retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); + UNPKfileinfo *finfo = (UNPKfileinfo *) allocator.Malloc(sizeof (UNPKfileinfo)); + GOTO_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_duplicate_failed); + GOTO_IF(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_duplicate_failed); + + io = origfinfo->io->duplicate(origfinfo->io); + if (!io) goto UNPK_duplicate_failed; + finfo->io = io; + finfo->entry = origfinfo->entry; + finfo->curPos = 0; + memcpy(retval, _io, sizeof (PHYSFS_Io)); + retval->opaque = finfo; + return retval; + +UNPK_duplicate_failed: + if (finfo != NULL) allocator.Free(finfo); + if (retval != NULL) allocator.Free(retval); + if (io != NULL) io->destroy(io); + return NULL; +} /* UNPK_duplicate */ + +static int UNPK_flush(PHYSFS_Io *io) { return 1; /* no write support. */ } + +static void UNPK_destroy(PHYSFS_Io *io) +{ + UNPKfileinfo *finfo = (UNPKfileinfo *) io->opaque; + finfo->io->destroy(finfo->io); + allocator.Free(finfo); + allocator.Free(io); +} /* UNPK_destroy */ + + +static const PHYSFS_Io UNPK_Io = +{ + CURRENT_PHYSFS_IO_API_VERSION, NULL, + UNPK_read, + UNPK_write, + UNPK_seek, + UNPK_tell, + UNPK_length, + UNPK_duplicate, + UNPK_flush, + UNPK_destroy +}; + + +static inline UNPKentry *findEntry(UNPKinfo *info, const char *path) +{ + return (UNPKentry *) __PHYSFS_DirTreeFind(&info->tree, path); +} /* findEntry */ + + +PHYSFS_Io *UNPK_openRead(void *opaque, const char *name) +{ + PHYSFS_Io *retval = NULL; + UNPKinfo *info = (UNPKinfo *) opaque; + UNPKfileinfo *finfo = NULL; + UNPKentry *entry = findEntry(info, name); + + BAIL_IF_ERRPASS(!entry, NULL); + BAIL_IF(entry->tree.isdir, PHYSFS_ERR_NOT_A_FILE, NULL); + + retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); + GOTO_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_openRead_failed); + + finfo = (UNPKfileinfo *) allocator.Malloc(sizeof (UNPKfileinfo)); + GOTO_IF(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, UNPK_openRead_failed); + + finfo->io = info->io->duplicate(info->io); + GOTO_IF_ERRPASS(!finfo->io, UNPK_openRead_failed); + + if (!finfo->io->seek(finfo->io, entry->startPos)) + goto UNPK_openRead_failed; + + finfo->curPos = 0; + finfo->entry = entry; + + memcpy(retval, &UNPK_Io, sizeof (*retval)); + retval->opaque = finfo; + return retval; + +UNPK_openRead_failed: + if (finfo != NULL) + { + if (finfo->io != NULL) + finfo->io->destroy(finfo->io); + allocator.Free(finfo); + } /* if */ + + if (retval != NULL) + allocator.Free(retval); + + return NULL; +} /* UNPK_openRead */ + + +PHYSFS_Io *UNPK_openWrite(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, NULL); +} /* UNPK_openWrite */ + + +PHYSFS_Io *UNPK_openAppend(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, NULL); +} /* UNPK_openAppend */ + + +int UNPK_remove(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, 0); +} /* UNPK_remove */ + + +int UNPK_mkdir(void *opaque, const char *name) +{ + BAIL(PHYSFS_ERR_READ_ONLY, 0); +} /* UNPK_mkdir */ + + +int UNPK_stat(void *opaque, const char *path, PHYSFS_Stat *stat) +{ + UNPKinfo *info = (UNPKinfo *) opaque; + const UNPKentry *entry = findEntry(info, path); + + BAIL_IF_ERRPASS(!entry, 0); + + if (entry->tree.isdir) + { + stat->filetype = PHYSFS_FILETYPE_DIRECTORY; + stat->filesize = 0; + } /* if */ + else + { + stat->filetype = PHYSFS_FILETYPE_REGULAR; + stat->filesize = entry->size; + } /* else */ + + stat->modtime = entry->mtime; + stat->createtime = entry->ctime; + stat->accesstime = -1; + stat->readonly = 1; + + return 1; +} /* UNPK_stat */ + + +void *UNPK_addEntry(void *opaque, char *name, const int isdir, + const PHYSFS_sint64 ctime, const PHYSFS_sint64 mtime, + const PHYSFS_uint64 pos, const PHYSFS_uint64 len) +{ + UNPKinfo *info = (UNPKinfo *) opaque; + UNPKentry *entry; + + entry = (UNPKentry *) __PHYSFS_DirTreeAdd(&info->tree, name, isdir); + BAIL_IF_ERRPASS(!entry, NULL); + + entry->startPos = isdir ? 0 : pos; + entry->size = isdir ? 0 : len; + entry->ctime = ctime; + entry->mtime = mtime; + + return entry; +} /* UNPK_addEntry */ + + +void *UNPK_openArchive(PHYSFS_Io *io) +{ + UNPKinfo *info = (UNPKinfo *) allocator.Malloc(sizeof (UNPKinfo)); + BAIL_IF(!info, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + if (!__PHYSFS_DirTreeInit(&info->tree, sizeof (UNPKentry))) + { + allocator.Free(info); + return NULL; + } /* if */ + + info->io = io; + + return info; +} /* UNPK_openArchive */ + +/* end of physfs_archiver_unpacked.c ... */ + diff --git a/love/src/jni/physfs-3.0.1/src/physfs_archiver_vdf.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_vdf.c new file mode 100644 index 00000000..99bbb2a6 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_vdf.c @@ -0,0 +1,168 @@ +/* + * VDF support routines for PhysicsFS. + * + * This driver handles Gothic I/II VDF archives. + * This format (but not this driver) was designed by Piranha Bytes for + * use wih the ZenGin engine. + * + * This file was written by Francesco Bertolaccini, based on the UNPK archiver + * by Ryan C. Gordon and the works of degenerated1123 and Nico Bendlin. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_internal.h" + +#if PHYSFS_SUPPORTS_VDF + +#include + +#define VDF_COMMENT_LENGTH 256 +#define VDF_SIGNATURE_LENGTH 16 +#define VDF_ENTRY_NAME_LENGTH 64 +#define VDF_ENTRY_DIR 0x80000000 + +static const char* VDF_SIGNATURE_G1 = "PSVDSC_V2.00\r\n\r\n"; +static const char* VDF_SIGNATURE_G2 = "PSVDSC_V2.00\n\r\n\r"; + + +static inline int readui32(PHYSFS_Io *io, PHYSFS_uint32 *val) +{ + PHYSFS_uint32 v; + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &v, sizeof (v)), 0); + *val = PHYSFS_swapULE32(v); + return 1; +} /* readui32 */ + + +static PHYSFS_sint64 vdfDosTimeToEpoch(const PHYSFS_uint32 dostime) +{ + /* VDF stores timestamps as 32bit DOS dates: the seconds are counted in + 2-seconds intervals and the years are counted since 1 Jan. 1980 */ + struct tm t; + memset(&t, '\0', sizeof (t)); + t.tm_year = ((int) ((dostime >> 25) & 0x7F)) + 80; /* 1980 to 1900 */ + t.tm_mon = ((int) ((dostime >> 21) & 0xF)) - 1; /* 1-12 to 0-11 */ + t.tm_mday = (int) ((dostime >> 16) & 0x1F); + t.tm_hour = (int) ((dostime >> 11) & 0x1F); + t.tm_min = (int) ((dostime >> 5) & 0x3F); + t.tm_sec = ((int) ((dostime >> 0) & 0x1F)) * 2; /* 2 seconds to 1. */ + return (PHYSFS_sint64) mktime(&t); +} /* vdfDosTimeToEpoch */ + + +static int vdfLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, + const PHYSFS_sint64 ts, void *arc) +{ + PHYSFS_uint32 i; + + for (i = 0; i < count; i++) + { + char name[VDF_ENTRY_NAME_LENGTH + 1]; + int namei; + PHYSFS_uint32 jump, size, type, attr; + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, sizeof (name) - 1), 0); + BAIL_IF_ERRPASS(!readui32(io, &jump), 0); + BAIL_IF_ERRPASS(!readui32(io, &size), 0); + BAIL_IF_ERRPASS(!readui32(io, &type), 0); + BAIL_IF_ERRPASS(!readui32(io, &attr), 0); + + /* Trim whitespace off the end of the filename */ + name[VDF_ENTRY_NAME_LENGTH] = '\0'; /* always null-terminated. */ + for (namei = VDF_ENTRY_NAME_LENGTH - 1; namei >= 0; namei--) + { + /* We assume the filenames are low-ASCII; consider the archive + corrupt if we see something above 127, since we don't know the + encoding. (We can change this later if we find out these exist + and are intended to be, say, latin-1 or UTF-8 encoding). */ + BAIL_IF(((PHYSFS_uint8) name[namei]) > 127, PHYSFS_ERR_CORRUPT, 0); + + if (name[namei] == ' ') + name[namei] = '\0'; + else + break; + } /* for */ + + BAIL_IF(!name[0], PHYSFS_ERR_CORRUPT, 0); + if (!(type & VDF_ENTRY_DIR)) { + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, ts, ts, jump, size), 0); + } + } /* for */ + + return 1; +} /* vdfLoadEntries */ + + +static void *VDF_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) +{ + PHYSFS_uint8 ignore[16]; + PHYSFS_uint8 sig[VDF_SIGNATURE_LENGTH]; + PHYSFS_uint32 count, timestamp, version, dataSize, rootCatOffset; + void *unpkarc; + + assert(io != NULL); /* shouldn't ever happen. */ + + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + + /* skip the 256-byte comment field. */ + BAIL_IF_ERRPASS(!io->seek(io, VDF_COMMENT_LENGTH), NULL); + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, sig, sizeof (sig)), NULL); + + if ((memcmp(sig, VDF_SIGNATURE_G1, VDF_SIGNATURE_LENGTH) != 0) && + (memcmp(sig, VDF_SIGNATURE_G2, VDF_SIGNATURE_LENGTH) != 0)) + { + BAIL(PHYSFS_ERR_UNSUPPORTED, NULL); + } /* if */ + + *claimed = 1; + + BAIL_IF_ERRPASS(!readui32(io, &count), NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, ignore, 4), NULL); /* numFiles */ + BAIL_IF_ERRPASS(!readui32(io, ×tamp), NULL); + BAIL_IF_ERRPASS(!readui32(io, &dataSize), NULL); /* dataSize */ + BAIL_IF_ERRPASS(!readui32(io, &rootCatOffset), NULL); /* rootCatOff */ + BAIL_IF_ERRPASS(!readui32(io, &version), NULL); + + BAIL_IF(version != 0x50, PHYSFS_ERR_UNSUPPORTED, NULL); + + BAIL_IF_ERRPASS(!io->seek(io, rootCatOffset), NULL); + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!vdfLoadEntries(io, count, vdfDosTimeToEpoch(timestamp), unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; +} /* VDF_openArchive */ + + +const PHYSFS_Archiver __PHYSFS_Archiver_VDF = +{ + CURRENT_PHYSFS_ARCHIVER_API_VERSION, + { + "VDF", + "Gothic I/II engine format", + "Francesco Bertolaccini ", + "https://github.com/frabert", + 0, /* supportsSymlinks */ + }, + VDF_openArchive, + UNPK_enumerate, + UNPK_openRead, + UNPK_openWrite, + UNPK_openAppend, + UNPK_remove, + UNPK_mkdir, + UNPK_stat, + UNPK_closeArchive +}; + +#endif /* defined PHYSFS_SUPPORTS_VDF */ + +/* end of physfs_archiver_vdf.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/archiver_wad.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_wad.c similarity index 56% rename from love/src/jni/physfs-2.1.0/src/archiver_wad.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_wad.c index 2fe22f97..b094c5b8 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_wad.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_wad.c @@ -16,15 +16,15 @@ * * The header consists of three four-byte parts: * (a) an ASCII string which must be either "IWAD" or "PWAD" - * (b) a 4-byte (long) integer which is the number of lumps in the wad - * (c) a long integer which is the file offset to the start of + * (b) a uint32 which is the number of lumps in the wad + * (c) a uint32 which is the file offset to the start of * the directory * * The directory has one 16-byte entry for every lump. Each entry consists * of three parts: * - * (a) a long integer, the file offset to the start of the lump - * (b) a long integer, the size of the lump in bytes + * (a) a uint32, the file offset to the start of the lump + * (b) a uint32, the size of the lump in bytes * (c) an 8-byte ASCII string, the name of the lump, padded with zeros. * For example, the "DEMO1" entry in hexadecimal would be * (44 45 4D 4F 31 00 00 00) @@ -47,58 +47,64 @@ #if PHYSFS_SUPPORTS_WAD -static UNPKentry *wadLoadEntries(PHYSFS_Io *io, PHYSFS_uint32 fileCount) +static int wadLoadEntries(PHYSFS_Io *io, const PHYSFS_uint32 count, void *arc) { - PHYSFS_uint32 directoryOffset; - UNPKentry *entries = NULL; - UNPKentry *entry = NULL; - - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &directoryOffset, 4), ERRPASS, 0); - directoryOffset = PHYSFS_swapULE32(directoryOffset); - - BAIL_IF_MACRO(!io->seek(io, directoryOffset), ERRPASS, 0); - - entries = (UNPKentry *) allocator.Malloc(sizeof (UNPKentry) * fileCount); - BAIL_IF_MACRO(!entries, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - - for (entry = entries; fileCount > 0; fileCount--, entry++) + PHYSFS_uint32 i; + for (i = 0; i < count; i++) { - if (!__PHYSFS_readAll(io, &entry->startPos, 4)) goto failed; - if (!__PHYSFS_readAll(io, &entry->size, 4)) goto failed; - if (!__PHYSFS_readAll(io, &entry->name, 8)) goto failed; + PHYSFS_uint32 pos; + PHYSFS_uint32 size; + char name[9]; - entry->name[8] = '\0'; /* name might not be null-terminated in file. */ - entry->size = PHYSFS_swapULE32(entry->size); - entry->startPos = PHYSFS_swapULE32(entry->startPos); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &pos, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &size, 4), 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, name, 8), 0); + + name[8] = '\0'; /* name might not be null-terminated in file. */ + size = PHYSFS_swapULE32(size); + pos = PHYSFS_swapULE32(pos); + BAIL_IF_ERRPASS(!UNPK_addEntry(arc, name, 0, -1, -1, pos, size), 0); } /* for */ - return entries; - -failed: - allocator.Free(entries); - return NULL; + return 1; } /* wadLoadEntries */ -static void *WAD_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void *WAD_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { PHYSFS_uint8 buf[4]; - UNPKentry *entries = NULL; - PHYSFS_uint32 count = 0; + PHYSFS_uint32 count; + PHYSFS_uint32 directoryOffset; + void *unpkarc; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, buf, sizeof (buf)), ERRPASS, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, buf, sizeof (buf)), NULL); if ((memcmp(buf, "IWAD", 4) != 0) && (memcmp(buf, "PWAD", 4) != 0)) - BAIL_MACRO(PHYSFS_ERR_UNSUPPORTED, NULL); + BAIL(PHYSFS_ERR_UNSUPPORTED, NULL); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &count, sizeof (count)), ERRPASS, NULL); + *claimed = 1; + + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &count, sizeof (count)), NULL); count = PHYSFS_swapULE32(count); - entries = wadLoadEntries(io, count); - BAIL_IF_MACRO(!entries, ERRPASS, NULL); - return UNPK_openArchive(io, entries, count); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &directoryOffset, 4), 0); + directoryOffset = PHYSFS_swapULE32(directoryOffset); + + BAIL_IF_ERRPASS(!io->seek(io, directoryOffset), 0); + + unpkarc = UNPK_openArchive(io); + BAIL_IF_ERRPASS(!unpkarc, NULL); + + if (!wadLoadEntries(io, count, unpkarc)) + { + UNPK_abandonArchive(unpkarc); + return NULL; + } /* if */ + + return unpkarc; } /* WAD_openArchive */ @@ -113,7 +119,7 @@ const PHYSFS_Archiver __PHYSFS_Archiver_WAD = 0, /* supportsSymlinks */ }, WAD_openArchive, - UNPK_enumerateFiles, + UNPK_enumerate, UNPK_openRead, UNPK_openWrite, UNPK_openAppend, @@ -125,5 +131,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_WAD = #endif /* defined PHYSFS_SUPPORTS_WAD */ -/* end of archiver_wad.c ... */ +/* end of physfs_archiver_wad.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/archiver_zip.c b/love/src/jni/physfs-3.0.1/src/physfs_archiver_zip.c similarity index 63% rename from love/src/jni/physfs-2.1.0/src/archiver_zip.c rename to love/src/jni/physfs-3.0.1/src/physfs_archiver_zip.c index 399677e1..9972628f 100644 --- a/love/src/jni/physfs-2.1.0/src/archiver_zip.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_archiver_zip.c @@ -15,12 +15,7 @@ #include #include -#define USE_MINIZ 1 -#if USE_MINIZ #include "physfs_miniz.h" -#else -#include -#endif /* * A buffer of ZIP_READBUFSIZE is allocated for each compressed file opened, @@ -51,6 +46,7 @@ typedef enum ZIP_UNRESOLVED_SYMLINK, ZIP_RESOLVING, ZIP_RESOLVED, + ZIP_DIRECTORY, ZIP_BROKEN_FILE, ZIP_BROKEN_SYMLINK } ZipResolveType; @@ -61,17 +57,19 @@ typedef enum */ typedef struct _ZIPentry { - char *name; /* Name of file in archive */ + __PHYSFS_DirTreeEntry tree; /* manages directory tree */ struct _ZIPentry *symlink; /* NULL or file we symlink to */ ZipResolveType resolved; /* Have we resolved file/symlink? */ PHYSFS_uint64 offset; /* offset of data in archive */ PHYSFS_uint16 version; /* version made by */ PHYSFS_uint16 version_needed; /* version needed to extract */ + PHYSFS_uint16 general_bits; /* general purpose bits */ PHYSFS_uint16 compression_method; /* compression method */ PHYSFS_uint32 crc; /* crc-32 */ PHYSFS_uint64 compressed_size; /* compressed size */ PHYSFS_uint64 uncompressed_size; /* uncompressed size */ PHYSFS_sint64 last_mod_time; /* last file mod time */ + PHYSFS_uint32 dos_mod_time; /* original MS-DOS style mod time */ } ZIPentry; /* @@ -79,10 +77,10 @@ typedef struct _ZIPentry */ typedef struct { - PHYSFS_Io *io; - int zip64; /* non-zero if this is a Zip64 archive. */ - PHYSFS_uint64 entryCount; /* Number of files in ZIP. */ - ZIPentry *entries; /* info on all files in ZIP. */ + __PHYSFS_DirTree tree; /* manages directory tree. */ + PHYSFS_Io *io; /* the i/o interface for this archive. */ + int zip64; /* non-zero if this is a Zip64 archive. */ + int has_crypto; /* non-zero if any entry uses encryption. */ } ZIPinfo; /* @@ -95,6 +93,8 @@ typedef struct PHYSFS_uint32 compressed_position; /* offset in compressed data. */ PHYSFS_uint32 uncompressed_position; /* tell() position. */ PHYSFS_uint8 *buffer; /* decompression buffer. */ + PHYSFS_uint32 crypto_keys[3]; /* for "traditional" crypto. */ + PHYSFS_uint32 initial_crypto_keys[3]; /* for "traditional" crypto. */ z_stream stream; /* zlib stream state. */ } ZIPfileinfo; @@ -115,6 +115,103 @@ typedef struct #define UNIX_FILETYPE_MASK 0170000 #define UNIX_FILETYPE_SYMLINK 0120000 +#define ZIP_GENERAL_BITS_TRADITIONAL_CRYPTO (1 << 0) +#define ZIP_GENERAL_BITS_IGNORE_LOCAL_HEADER (1 << 3) + +/* support for "traditional" PKWARE encryption. */ +static int zip_entry_is_tradional_crypto(const ZIPentry *entry) +{ + return (entry->general_bits & ZIP_GENERAL_BITS_TRADITIONAL_CRYPTO) != 0; +} /* zip_entry_is_traditional_crypto */ + +static int zip_entry_ignore_local_header(const ZIPentry *entry) +{ + return (entry->general_bits & ZIP_GENERAL_BITS_IGNORE_LOCAL_HEADER) != 0; +} /* zip_entry_is_traditional_crypto */ + +static PHYSFS_uint32 zip_crypto_crc32(const PHYSFS_uint32 crc, const PHYSFS_uint8 val) +{ + int i; + PHYSFS_uint32 xorval = (crc ^ ((PHYSFS_uint32) val)) & 0xFF; + for (i = 0; i < 8; i++) + xorval = ((xorval & 1) ? (0xEDB88320 ^ (xorval >> 1)) : (xorval >> 1)); + return xorval ^ (crc >> 8); +} /* zip_crc32 */ + +static void zip_update_crypto_keys(PHYSFS_uint32 *keys, const PHYSFS_uint8 val) +{ + keys[0] = zip_crypto_crc32(keys[0], val); + keys[1] = keys[1] + (keys[0] & 0x000000FF); + keys[1] = (keys[1] * 134775813) + 1; + keys[2] = zip_crypto_crc32(keys[2], (PHYSFS_uint8) ((keys[1] >> 24) & 0xFF)); +} /* zip_update_crypto_keys */ + +static PHYSFS_uint8 zip_decrypt_byte(const PHYSFS_uint32 *keys) +{ + const PHYSFS_uint16 tmp = keys[2] | 2; + return (PHYSFS_uint8) ((tmp * (tmp ^ 1)) >> 8); +} /* zip_decrypt_byte */ + +static PHYSFS_sint64 zip_read_decrypt(ZIPfileinfo *finfo, void *buf, PHYSFS_uint64 len) +{ + PHYSFS_Io *io = finfo->io; + const PHYSFS_sint64 br = io->read(io, buf, len); + + /* Decompression the new data if necessary. */ + if (zip_entry_is_tradional_crypto(finfo->entry) && (br > 0)) + { + PHYSFS_uint32 *keys = finfo->crypto_keys; + PHYSFS_uint8 *ptr = (PHYSFS_uint8 *) buf; + PHYSFS_sint64 i; + for (i = 0; i < br; i++, ptr++) + { + const PHYSFS_uint8 ch = *ptr ^ zip_decrypt_byte(keys); + zip_update_crypto_keys(keys, ch); + *ptr = ch; + } /* for */ + } /* if */ + + return br; +} /* zip_read_decrypt */ + +static int zip_prep_crypto_keys(ZIPfileinfo *finfo, const PHYSFS_uint8 *crypto_header, const PHYSFS_uint8 *password) +{ + /* It doesn't appear to be documented in PKWare's APPNOTE.TXT, but you + need to use a different byte in the header to verify the password + if general purpose bit 3 is set. Discovered this from Info-Zip. + That's what the (verifier) value is doing, below. */ + + PHYSFS_uint32 *keys = finfo->crypto_keys; + const ZIPentry *entry = finfo->entry; + const int usedate = zip_entry_ignore_local_header(entry); + const PHYSFS_uint8 verifier = (PHYSFS_uint8) ((usedate ? (entry->dos_mod_time >> 8) : (entry->crc >> 24)) & 0xFF); + PHYSFS_uint8 finalbyte = 0; + int i = 0; + + /* initialize vector with defaults, then password, then header. */ + keys[0] = 305419896; + keys[1] = 591751049; + keys[2] = 878082192; + + while (*password) + zip_update_crypto_keys(keys, *(password++)); + + for (i = 0; i < 12; i++) + { + const PHYSFS_uint8 c = crypto_header[i] ^ zip_decrypt_byte(keys); + zip_update_crypto_keys(keys, c); + finalbyte = c; + } /* for */ + + /* you have a 1/256 chance of passing this test incorrectly. :/ */ + if (finalbyte != verifier) + BAIL(PHYSFS_ERR_BAD_PASSWORD, 0); + + /* save the initial vector for seeking purposes. Not secure!! */ + memcpy(finfo->initial_crypto_keys, finfo->crypto_keys, 12); + return 1; +} /* zip_prep_crypto_keys */ + /* * Bridge physfs allocation functions to zlib's format... @@ -167,14 +264,13 @@ static int zlib_err(const int rc) return rc; } /* zlib_err */ - /* * Read an unsigned 64-bit int and swap to native byte order. */ static int readui64(PHYSFS_Io *io, PHYSFS_uint64 *val) { PHYSFS_uint64 v; - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &v, sizeof (v)), ERRPASS, 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &v, sizeof (v)), 0); *val = PHYSFS_swapULE64(v); return 1; } /* readui64 */ @@ -185,7 +281,7 @@ static int readui64(PHYSFS_Io *io, PHYSFS_uint64 *val) static int readui32(PHYSFS_Io *io, PHYSFS_uint32 *val) { PHYSFS_uint32 v; - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &v, sizeof (v)), ERRPASS, 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &v, sizeof (v)), 0); *val = PHYSFS_swapULE32(v); return 1; } /* readui32 */ @@ -197,7 +293,7 @@ static int readui32(PHYSFS_Io *io, PHYSFS_uint32 *val) static int readui16(PHYSFS_Io *io, PHYSFS_uint16 *val) { PHYSFS_uint16 v; - BAIL_IF_MACRO(!__PHYSFS_readAll(io, &v, sizeof (v)), ERRPASS, 0); + BAIL_IF_ERRPASS(!__PHYSFS_readAll(io, &v, sizeof (v)), 0); *val = PHYSFS_swapULE16(v); return 1; } /* readui16 */ @@ -206,7 +302,6 @@ static int readui16(PHYSFS_Io *io, PHYSFS_uint16 *val) static PHYSFS_sint64 ZIP_read(PHYSFS_Io *_io, void *buf, PHYSFS_uint64 len) { ZIPfileinfo *finfo = (ZIPfileinfo *) _io->opaque; - PHYSFS_Io *io = finfo->io; ZIPentry *entry = finfo->entry; PHYSFS_sint64 retval = 0; PHYSFS_sint64 maxread = (PHYSFS_sint64) len; @@ -216,10 +311,10 @@ static PHYSFS_sint64 ZIP_read(PHYSFS_Io *_io, void *buf, PHYSFS_uint64 len) if (avail < maxread) maxread = avail; - BAIL_IF_MACRO(maxread == 0, ERRPASS, 0); /* quick rejection. */ + BAIL_IF_ERRPASS(maxread == 0, 0); /* quick rejection. */ if (entry->compression_method == COMPMETH_NONE) - retval = io->read(io, buf, maxread); + retval = zip_read_decrypt(finfo, buf, maxread); else { finfo->stream.next_out = buf; @@ -227,7 +322,7 @@ static PHYSFS_sint64 ZIP_read(PHYSFS_Io *_io, void *buf, PHYSFS_uint64 len) while (retval < maxread) { - PHYSFS_uint32 before = finfo->stream.total_out; + const PHYSFS_uint32 before = (PHYSFS_uint32) finfo->stream.total_out; int rc; if (finfo->stream.avail_in == 0) @@ -240,13 +335,13 @@ static PHYSFS_sint64 ZIP_read(PHYSFS_Io *_io, void *buf, PHYSFS_uint64 len) if (br > ZIP_READBUFSIZE) br = ZIP_READBUFSIZE; - br = io->read(io, finfo->buffer, (PHYSFS_uint64) br); + br = zip_read_decrypt(finfo, finfo->buffer, (PHYSFS_uint64) br); if (br <= 0) break; finfo->compressed_position += (PHYSFS_uint32) br; finfo->stream.next_in = finfo->buffer; - finfo->stream.avail_in = (PHYSFS_uint32) br; + finfo->stream.avail_in = (unsigned int) br; } /* if */ } /* if */ @@ -267,7 +362,7 @@ static PHYSFS_sint64 ZIP_read(PHYSFS_Io *_io, void *buf, PHYSFS_uint64 len) static PHYSFS_sint64 ZIP_write(PHYSFS_Io *io, const void *b, PHYSFS_uint64 len) { - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, -1); + BAIL(PHYSFS_ERR_READ_ONLY, -1); } /* ZIP_write */ @@ -282,13 +377,14 @@ static int ZIP_seek(PHYSFS_Io *_io, PHYSFS_uint64 offset) ZIPfileinfo *finfo = (ZIPfileinfo *) _io->opaque; ZIPentry *entry = finfo->entry; PHYSFS_Io *io = finfo->io; + const int encrypted = zip_entry_is_tradional_crypto(entry); - BAIL_IF_MACRO(offset > entry->uncompressed_size, PHYSFS_ERR_PAST_EOF, 0); + BAIL_IF(offset > entry->uncompressed_size, PHYSFS_ERR_PAST_EOF, 0); - if (entry->compression_method == COMPMETH_NONE) + if (!encrypted && (entry->compression_method == COMPMETH_NONE)) { - const PHYSFS_sint64 newpos = offset + entry->offset; - BAIL_IF_MACRO(!io->seek(io, newpos), ERRPASS, 0); + PHYSFS_sint64 newpos = offset + entry->offset; + BAIL_IF_ERRPASS(!io->seek(io, newpos), 0); finfo->uncompressed_position = (PHYSFS_uint32) offset; } /* if */ @@ -308,12 +404,15 @@ static int ZIP_seek(PHYSFS_Io *_io, PHYSFS_uint64 offset) if (zlib_err(inflateInit2(&str, -MAX_WBITS)) != Z_OK) return 0; - if (!io->seek(io, entry->offset)) + if (!io->seek(io, entry->offset + (encrypted ? 12 : 0))) return 0; inflateEnd(&finfo->stream); memcpy(&finfo->stream, &str, sizeof (z_stream)); finfo->uncompressed_position = finfo->compressed_position = 0; + + if (encrypted) + memcpy(finfo->crypto_keys, finfo->initial_crypto_keys, 12); } /* if */ while (finfo->uncompressed_position != offset) @@ -348,18 +447,19 @@ static PHYSFS_Io *ZIP_duplicate(PHYSFS_Io *io) ZIPfileinfo *origfinfo = (ZIPfileinfo *) io->opaque; PHYSFS_Io *retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); ZIPfileinfo *finfo = (ZIPfileinfo *) allocator.Malloc(sizeof (ZIPfileinfo)); - GOTO_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, failed); - GOTO_IF_MACRO(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, failed); + GOTO_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, failed); + GOTO_IF(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, failed); memset(finfo, '\0', sizeof (*finfo)); finfo->entry = origfinfo->entry; finfo->io = zip_get_io(origfinfo->io, NULL, finfo->entry); - GOTO_IF_MACRO(!finfo->io, ERRPASS, failed); + GOTO_IF_ERRPASS(!finfo->io, failed); + initializeZStream(&finfo->stream); if (finfo->entry->compression_method != COMPMETH_NONE) { finfo->buffer = (PHYSFS_uint8 *) allocator.Malloc(ZIP_READBUFSIZE); - GOTO_IF_MACRO(!finfo->buffer, PHYSFS_ERR_OUT_OF_MEMORY, failed); + GOTO_IF(!finfo->buffer, PHYSFS_ERR_OUT_OF_MEMORY, failed); if (zlib_err(inflateInit2(&finfo->stream, -MAX_WBITS)) != Z_OK) goto failed; } /* if */ @@ -434,7 +534,7 @@ static PHYSFS_sint64 zip_find_end_of_central_dir(PHYSFS_Io *io, PHYSFS_sint64 *l int found = 0; filelen = io->length(io); - BAIL_IF_MACRO(filelen == -1, ERRPASS, 0); + BAIL_IF_ERRPASS(filelen == -1, -1); /* * Jump to the end of the file and start reading backwards. @@ -461,7 +561,7 @@ static PHYSFS_sint64 zip_find_end_of_central_dir(PHYSFS_Io *io, PHYSFS_sint64 *l while ((totalread < filelen) && (totalread < 65557)) { - BAIL_IF_MACRO(!io->seek(io, filepos), ERRPASS, -1); + BAIL_IF_ERRPASS(!io->seek(io, filepos), -1); /* make sure we catch a signature between buffers. */ if (totalread != 0) @@ -500,7 +600,7 @@ static PHYSFS_sint64 zip_find_end_of_central_dir(PHYSFS_Io *io, PHYSFS_sint64 *l filepos = 0; } /* while */ - BAIL_IF_MACRO(!found, PHYSFS_ERR_UNSUPPORTED, -1); + BAIL_IF(!found, PHYSFS_ERR_UNSUPPORTED, -1); if (len != NULL) *len = filelen; @@ -536,78 +636,10 @@ static int isZip(PHYSFS_Io *io) } /* isZip */ -static void zip_free_entries(ZIPentry *entries, PHYSFS_uint64 max) -{ - PHYSFS_uint64 i; - for (i = 0; i < max; i++) - { - ZIPentry *entry = &entries[i]; - if (entry->name != NULL) - allocator.Free(entry->name); - } /* for */ - - allocator.Free(entries); -} /* zip_free_entries */ - - -/* - * This will find the ZIPentry associated with a path in platform-independent - * notation. Directories don't have ZIPentries associated with them, but - * (*isDir) will be set to non-zero if a dir was hit. - */ -static ZIPentry *zip_find_entry(const ZIPinfo *info, const char *path, - int *isDir) -{ - ZIPentry *a = info->entries; - PHYSFS_sint32 pathlen = (PHYSFS_sint32) strlen(path); - PHYSFS_sint64 lo = 0; - PHYSFS_sint64 hi = (PHYSFS_sint64) (info->entryCount - 1); - PHYSFS_sint64 middle; - const char *thispath = NULL; - int rc; - - while (lo <= hi) - { - middle = lo + ((hi - lo) / 2); - thispath = a[middle].name; - rc = strncmp(path, thispath, pathlen); - - if (rc > 0) - lo = middle + 1; - - else if (rc < 0) - hi = middle - 1; - - else /* substring match...might be dir or entry or nothing. */ - { - if (isDir != NULL) - { - *isDir = (thispath[pathlen] == '/'); - if (*isDir) - return NULL; - } /* if */ - - if (thispath[pathlen] == '\0') /* found entry? */ - return &a[middle]; - /* adjust search params, try again. */ - else if (thispath[pathlen] > '/') - hi = middle - 1; - else - lo = middle + 1; - } /* if */ - } /* while */ - - if (isDir != NULL) - *isDir = 0; - - BAIL_MACRO(PHYSFS_ERR_NOT_FOUND, NULL); -} /* zip_find_entry */ - - /* Convert paths from old, buggy DOS zippers... */ -static void zip_convert_dos_path(ZIPentry *entry, char *path) +static void zip_convert_dos_path(const PHYSFS_uint16 entryversion, char *path) { - PHYSFS_uint8 hosttype = (PHYSFS_uint8) ((entry->version >> 8) & 0xFF); + const PHYSFS_uint8 hosttype = (PHYSFS_uint8) ((entryversion >> 8) & 0xFF); if (hosttype == 0) /* FS_FAT_ */ { while (*path) @@ -678,6 +710,12 @@ static void zip_expand_symlink_path(char *path) } /* while */ } /* zip_expand_symlink_path */ + +static inline ZIPentry *zip_find_entry(ZIPinfo *info, const char *path) +{ + return (ZIPentry *) __PHYSFS_DirTreeFind(&info->tree, path); +} /* zip_find_entry */ + /* (forward reference: zip_follow_symlink and zip_resolve call each other.) */ static int zip_resolve(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry); @@ -692,7 +730,7 @@ static ZIPentry *zip_follow_symlink(PHYSFS_Io *io, ZIPinfo *info, char *path) ZIPentry *entry; zip_expand_symlink_path(path); - entry = zip_find_entry(info, path, NULL); + entry = zip_find_entry(info, path); if (entry != NULL) { if (!zip_resolve(io, info, entry)) /* recursive! */ @@ -710,7 +748,7 @@ static ZIPentry *zip_follow_symlink(PHYSFS_Io *io, ZIPinfo *info, char *path) static int zip_resolve_symlink(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) { - const PHYSFS_uint64 size = entry->uncompressed_size; + const size_t size = (size_t) entry->uncompressed_size; char *path = NULL; int rc = 0; @@ -720,10 +758,10 @@ static int zip_resolve_symlink(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) * follow it. */ - BAIL_IF_MACRO(!io->seek(io, entry->offset), ERRPASS, 0); + BAIL_IF_ERRPASS(!io->seek(io, entry->offset), 0); path = (char *) __PHYSFS_smallAlloc(size + 1); - BAIL_IF_MACRO(!path, PHYSFS_ERR_OUT_OF_MEMORY, 0); + BAIL_IF(!path, PHYSFS_ERR_OUT_OF_MEMORY, 0); if (entry->compression_method == COMPMETH_NONE) rc = __PHYSFS_readAll(io, path, size); @@ -731,7 +769,7 @@ static int zip_resolve_symlink(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) else /* symlink target path is compressed... */ { z_stream stream; - const PHYSFS_uint64 complen = entry->compressed_size; + const size_t complen = (size_t) entry->compressed_size; PHYSFS_uint8 *compressed = (PHYSFS_uint8*) __PHYSFS_smallAlloc(complen); if (compressed != NULL) { @@ -739,9 +777,9 @@ static int zip_resolve_symlink(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) { initializeZStream(&stream); stream.next_in = compressed; - stream.avail_in = complen; + stream.avail_in = (unsigned int) complen; stream.next_out = (unsigned char *) path; - stream.avail_out = size; + stream.avail_out = (unsigned int) size; if (zlib_err(inflateInit2(&stream, -MAX_WBITS)) == Z_OK) { rc = zlib_err(inflate(&stream, Z_FINISH)); @@ -758,7 +796,7 @@ static int zip_resolve_symlink(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) if (rc) { path[entry->uncompressed_size] = '\0'; /* null-terminate it. */ - zip_convert_dos_path(entry, path); + zip_convert_dos_path(entry->version, path); entry->symlink = zip_follow_symlink(io, info, path); } /* else */ @@ -787,28 +825,32 @@ static int zip_parse_local(PHYSFS_Io *io, ZIPentry *entry) * possible that's a Zip64 thing. */ - BAIL_IF_MACRO(!io->seek(io, entry->offset), ERRPASS, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != ZIP_LOCAL_FILE_SIG, PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); - BAIL_IF_MACRO(ui16 != entry->version_needed, PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); /* general bits. */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); - BAIL_IF_MACRO(ui16 != entry->compression_method, PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); /* date/time */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 && (ui32 != entry->crc), PHYSFS_ERR_CORRUPT, 0); + /* !!! FIXME: apparently these are zero if general purpose bit 3 is set, + !!! FIXME: which is probably true for Jar files, fwiw, but we don't + !!! FIXME: care about these values anyhow. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 && (ui32 != 0xFFFFFFFF) && + BAIL_IF_ERRPASS(!io->seek(io, entry->offset), 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != ZIP_LOCAL_FILE_SIG, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); + BAIL_IF(ui16 != entry->version_needed, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); /* general bits. */ + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); + BAIL_IF(ui16 != entry->compression_method, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); /* date/time */ + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 && (ui32 != entry->crc), PHYSFS_ERR_CORRUPT, 0); + + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 && (ui32 != 0xFFFFFFFF) && (ui32 != entry->compressed_size), PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 && (ui32 != 0xFFFFFFFF) && + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 && (ui32 != 0xFFFFFFFF) && (ui32 != entry->uncompressed_size), PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(!readui16(io, &fnamelen), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &extralen), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &fnamelen), 0); + BAIL_IF_ERRPASS(!readui16(io, &extralen), 0); entry->offset += fnamelen + extralen + 30; return 1; @@ -818,14 +860,17 @@ static int zip_parse_local(PHYSFS_Io *io, ZIPentry *entry) static int zip_resolve(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) { int retval = 1; - ZipResolveType resolve_type = entry->resolved; + const ZipResolveType resolve_type = entry->resolved; + + if (resolve_type == ZIP_DIRECTORY) + return 1; /* we're good. */ /* Don't bother if we've failed to resolve this entry before. */ - BAIL_IF_MACRO(resolve_type == ZIP_BROKEN_FILE, PHYSFS_ERR_CORRUPT, 0); - BAIL_IF_MACRO(resolve_type == ZIP_BROKEN_SYMLINK, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF(resolve_type == ZIP_BROKEN_FILE, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF(resolve_type == ZIP_BROKEN_SYMLINK, PHYSFS_ERR_CORRUPT, 0); /* uhoh...infinite symlink loop! */ - BAIL_IF_MACRO(resolve_type == ZIP_RESOLVING, PHYSFS_ERR_SYMLINK_LOOP, 0); + BAIL_IF(resolve_type == ZIP_RESOLVING, PHYSFS_ERR_SYMLINK_LOOP, 0); /* * We fix up the offset to point to the actual data on the @@ -836,7 +881,11 @@ static int zip_resolve(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) */ if (resolve_type != ZIP_RESOLVED) { - entry->resolved = ZIP_RESOLVING; + if (entry->tree.isdir) /* an ancestor dir that DirTree filled in? */ + { + entry->resolved = ZIP_DIRECTORY; + return 1; + } /* if */ retval = zip_parse_local(io, entry); if (retval) @@ -860,6 +909,14 @@ static int zip_resolve(PHYSFS_Io *io, ZIPinfo *info, ZIPentry *entry) } /* zip_resolve */ +static int zip_entry_is_symlink(const ZIPentry *entry) +{ + return ((entry->resolved == ZIP_UNRESOLVED_SYMLINK) || + (entry->resolved == ZIP_BROKEN_SYMLINK) || + (entry->symlink)); +} /* zip_entry_is_symlink */ + + static int zip_version_does_symlinks(PHYSFS_uint32 version) { int retval = 0; @@ -892,15 +949,8 @@ static int zip_version_does_symlinks(PHYSFS_uint32 version) } /* zip_version_does_symlinks */ -static int zip_entry_is_symlink(const ZIPentry *entry) -{ - return ((entry->resolved == ZIP_UNRESOLVED_SYMLINK) || - (entry->resolved == ZIP_BROKEN_SYMLINK) || - (entry->symlink)); -} /* zip_entry_is_symlink */ - - -static int zip_has_symlink_attr(ZIPentry *entry, PHYSFS_uint32 extern_attr) +static inline int zip_has_symlink_attr(const ZIPentry *entry, + const PHYSFS_uint32 extern_attr) { PHYSFS_uint16 xattr = ((extern_attr >> 16) & 0xFFFF); return ( (zip_version_does_symlinks(entry->version)) && @@ -935,9 +985,12 @@ static PHYSFS_sint64 zip_dos_time_to_physfs_time(PHYSFS_uint32 dostime) } /* zip_dos_time_to_physfs_time */ -static int zip_load_entry(PHYSFS_Io *io, const int zip64, ZIPentry *entry, - PHYSFS_uint64 ofs_fixup) +static ZIPentry *zip_load_entry(ZIPinfo *info, const int zip64, + const PHYSFS_uint64 ofs_fixup) { + PHYSFS_Io *io = info->io; + ZIPentry entry; + ZIPentry *retval = NULL; PHYSFS_uint16 fnamelen, extralen, commentlen; PHYSFS_uint32 external_attr; PHYSFS_uint32 starting_disk; @@ -945,74 +998,102 @@ static int zip_load_entry(PHYSFS_Io *io, const int zip64, ZIPentry *entry, PHYSFS_uint16 ui16; PHYSFS_uint32 ui32; PHYSFS_sint64 si64; + char *name = NULL; + int isdir = 0; /* sanity check with central directory signature... */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != ZIP_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), NULL); + BAIL_IF(ui32 != ZIP_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, NULL); + + memset(&entry, '\0', sizeof (entry)); /* Get the pertinent parts of the record... */ - BAIL_IF_MACRO(!readui16(io, &entry->version), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &entry->version_needed), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); /* general bits */ - BAIL_IF_MACRO(!readui16(io, &entry->compression_method), ERRPASS, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - entry->last_mod_time = zip_dos_time_to_physfs_time(ui32); - BAIL_IF_MACRO(!readui32(io, &entry->crc), ERRPASS, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - entry->compressed_size = (PHYSFS_uint64) ui32; - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - entry->uncompressed_size = (PHYSFS_uint64) ui32; - BAIL_IF_MACRO(!readui16(io, &fnamelen), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &extralen), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &commentlen), ERRPASS, 0); - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &entry.version), NULL); + BAIL_IF_ERRPASS(!readui16(io, &entry.version_needed), NULL); + BAIL_IF_ERRPASS(!readui16(io, &entry.general_bits), NULL); /* general bits */ + BAIL_IF_ERRPASS(!readui16(io, &entry.compression_method), NULL); + BAIL_IF_ERRPASS(!readui32(io, &entry.dos_mod_time), NULL); + entry.last_mod_time = zip_dos_time_to_physfs_time(entry.dos_mod_time); + BAIL_IF_ERRPASS(!readui32(io, &entry.crc), NULL); + BAIL_IF_ERRPASS(!readui32(io, &ui32), NULL); + entry.compressed_size = (PHYSFS_uint64) ui32; + BAIL_IF_ERRPASS(!readui32(io, &ui32), NULL); + entry.uncompressed_size = (PHYSFS_uint64) ui32; + BAIL_IF_ERRPASS(!readui16(io, &fnamelen), NULL); + BAIL_IF_ERRPASS(!readui16(io, &extralen), NULL); + BAIL_IF_ERRPASS(!readui16(io, &commentlen), NULL); + BAIL_IF_ERRPASS(!readui16(io, &ui16), NULL); starting_disk = (PHYSFS_uint32) ui16; - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); /* internal file attribs */ - BAIL_IF_MACRO(!readui32(io, &external_attr), ERRPASS, 0); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), NULL); /* internal file attribs */ + BAIL_IF_ERRPASS(!readui32(io, &external_attr), NULL); + BAIL_IF_ERRPASS(!readui32(io, &ui32), NULL); offset = (PHYSFS_uint64) ui32; - entry->symlink = NULL; /* will be resolved later, if necessary. */ - entry->resolved = (zip_has_symlink_attr(entry, external_attr)) ? - ZIP_UNRESOLVED_SYMLINK : ZIP_UNRESOLVED_FILE; + name = (char *) __PHYSFS_smallAlloc(fnamelen + 1); + BAIL_IF(!name, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + if (!__PHYSFS_readAll(io, name, fnamelen)) + { + __PHYSFS_smallFree(name); + return NULL; + } /* if */ - entry->name = (char *) allocator.Malloc(fnamelen + 1); - BAIL_IF_MACRO(entry->name == NULL, PHYSFS_ERR_OUT_OF_MEMORY, 0); - if (!__PHYSFS_readAll(io, entry->name, fnamelen)) - goto zip_load_entry_puked; + if (name[fnamelen - 1] == '/') + { + name[fnamelen - 1] = '\0'; + isdir = 1; + } /* if */ + name[fnamelen] = '\0'; /* null-terminate the filename. */ - entry->name[fnamelen] = '\0'; /* null-terminate the filename. */ - zip_convert_dos_path(entry, entry->name); + zip_convert_dos_path(entry.version, name); + + retval = (ZIPentry *) __PHYSFS_DirTreeAdd(&info->tree, name, isdir); + __PHYSFS_smallFree(name); + + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + /* It's okay to BAIL without freeing retval, because it's stored in the + __PHYSFS_DirTree and will be freed later anyhow. */ + BAIL_IF(retval->last_mod_time != 0, PHYSFS_ERR_CORRUPT, NULL); /* dupe? */ + + /* Move the data we already read into place in the official object. */ + memcpy(((PHYSFS_uint8 *) retval) + sizeof (__PHYSFS_DirTreeEntry), + ((PHYSFS_uint8 *) &entry) + sizeof (__PHYSFS_DirTreeEntry), + sizeof (*retval) - sizeof (__PHYSFS_DirTreeEntry)); + + retval->symlink = NULL; /* will be resolved later, if necessary. */ + + if (isdir) + retval->resolved = ZIP_DIRECTORY; + else + { + retval->resolved = (zip_has_symlink_attr(retval, external_attr)) ? + ZIP_UNRESOLVED_SYMLINK : ZIP_UNRESOLVED_FILE; + } /* else */ si64 = io->tell(io); - if (si64 == -1) - goto zip_load_entry_puked; + BAIL_IF_ERRPASS(si64 == -1, NULL); - /* - * The actual sizes didn't fit in 32-bits; look for the Zip64 - * extended information extra field... - */ + /* If the actual sizes didn't fit in 32-bits, look for the Zip64 + extended information extra field... */ if ( (zip64) && ((offset == 0xFFFFFFFF) || (starting_disk == 0xFFFFFFFF) || - (entry->compressed_size == 0xFFFFFFFF) || - (entry->uncompressed_size == 0xFFFFFFFF)) ) + (retval->compressed_size == 0xFFFFFFFF) || + (retval->uncompressed_size == 0xFFFFFFFF)) ) { int found = 0; - PHYSFS_uint16 sig, len; + PHYSFS_uint16 sig = 0; + PHYSFS_uint16 len = 0; while (extralen > 4) { - if (!readui16(io, &sig)) - goto zip_load_entry_puked; - else if (!readui16(io, &len)) - goto zip_load_entry_puked; + BAIL_IF_ERRPASS(!readui16(io, &sig), NULL); + BAIL_IF_ERRPASS(!readui16(io, &len), NULL); si64 += 4 + len; extralen -= 4 + len; if (sig != ZIP64_EXTENDED_INFO_EXTRA_FIELD_SIG) { - if (!io->seek(io, si64)) - goto zip_load_entry_puked; + BAIL_IF_ERRPASS(!io->seek(io, si64), NULL); continue; } /* if */ @@ -1020,108 +1101,70 @@ static int zip_load_entry(PHYSFS_Io *io, const int zip64, ZIPentry *entry, break; } /* while */ - GOTO_IF_MACRO(!found, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); + BAIL_IF(!found, PHYSFS_ERR_CORRUPT, NULL); - if (entry->uncompressed_size == 0xFFFFFFFF) + if (retval->uncompressed_size == 0xFFFFFFFF) { - GOTO_IF_MACRO(len < 8, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); - if (!readui64(io, &entry->uncompressed_size)) - goto zip_load_entry_puked; + BAIL_IF(len < 8, PHYSFS_ERR_CORRUPT, NULL); + BAIL_IF_ERRPASS(!readui64(io, &retval->uncompressed_size), NULL); len -= 8; } /* if */ - if (entry->compressed_size == 0xFFFFFFFF) + if (retval->compressed_size == 0xFFFFFFFF) { - GOTO_IF_MACRO(len < 8, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); - if (!readui64(io, &entry->compressed_size)) - goto zip_load_entry_puked; + BAIL_IF(len < 8, PHYSFS_ERR_CORRUPT, NULL); + BAIL_IF_ERRPASS(!readui64(io, &retval->compressed_size), NULL); len -= 8; } /* if */ if (offset == 0xFFFFFFFF) { - GOTO_IF_MACRO(len < 8, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); - if (!readui64(io, &offset)) - goto zip_load_entry_puked; + BAIL_IF(len < 8, PHYSFS_ERR_CORRUPT, NULL); + BAIL_IF_ERRPASS(!readui64(io, &offset), NULL); len -= 8; } /* if */ if (starting_disk == 0xFFFFFFFF) { - GOTO_IF_MACRO(len < 8, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); - if (!readui32(io, &starting_disk)) - goto zip_load_entry_puked; + BAIL_IF(len < 8, PHYSFS_ERR_CORRUPT, NULL); + BAIL_IF_ERRPASS(!readui32(io, &starting_disk), NULL); len -= 4; } /* if */ - GOTO_IF_MACRO(len != 0, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); + BAIL_IF(len != 0, PHYSFS_ERR_CORRUPT, NULL); } /* if */ - GOTO_IF_MACRO(starting_disk != 0, PHYSFS_ERR_CORRUPT, zip_load_entry_puked); + BAIL_IF(starting_disk != 0, PHYSFS_ERR_CORRUPT, NULL); - entry->offset = offset + ofs_fixup; + retval->offset = offset + ofs_fixup; /* seek to the start of the next entry in the central directory... */ - if (!io->seek(io, si64 + extralen + commentlen)) - goto zip_load_entry_puked; + BAIL_IF_ERRPASS(!io->seek(io, si64 + extralen + commentlen), NULL); - return 1; /* success. */ - -zip_load_entry_puked: - allocator.Free(entry->name); - return 0; /* failure. */ + return retval; /* success. */ } /* zip_load_entry */ -static int zip_entry_cmp(void *_a, size_t one, size_t two) -{ - if (one != two) - { - const ZIPentry *a = (const ZIPentry *) _a; - return strcmp(a[one].name, a[two].name); - } /* if */ - - return 0; -} /* zip_entry_cmp */ - - -static void zip_entry_swap(void *_a, size_t one, size_t two) -{ - if (one != two) - { - ZIPentry tmp; - ZIPentry *first = &(((ZIPentry *) _a)[one]); - ZIPentry *second = &(((ZIPentry *) _a)[two]); - memcpy(&tmp, first, sizeof (ZIPentry)); - memcpy(first, second, sizeof (ZIPentry)); - memcpy(second, &tmp, sizeof (ZIPentry)); - } /* if */ -} /* zip_entry_swap */ - - -static int zip_load_entries(PHYSFS_Io *io, ZIPinfo *info, +/* This leaves things allocated on error; the caller will clean up the mess. */ +static int zip_load_entries(ZIPinfo *info, const PHYSFS_uint64 data_ofs, - const PHYSFS_uint64 central_ofs) + const PHYSFS_uint64 central_ofs, + const PHYSFS_uint64 entry_count) { - const PHYSFS_uint64 max = info->entryCount; + PHYSFS_Io *io = info->io; const int zip64 = info->zip64; PHYSFS_uint64 i; - BAIL_IF_MACRO(!io->seek(io, central_ofs), ERRPASS, 0); + BAIL_IF_ERRPASS(!io->seek(io, central_ofs), 0); - info->entries = (ZIPentry *) allocator.Malloc(sizeof (ZIPentry) * max); - BAIL_IF_MACRO(!info->entries, PHYSFS_ERR_OUT_OF_MEMORY, 0); - - for (i = 0; i < max; i++) + for (i = 0; i < entry_count; i++) { - if (!zip_load_entry(io, zip64, &info->entries[i], data_ofs)) - { - zip_free_entries(info->entries, i); - return 0; - } /* if */ + ZIPentry *entry = zip_load_entry(info, zip64, data_ofs); + BAIL_IF_ERRPASS(!entry, 0); + if (zip_entry_is_tradional_crypto(entry)) + info->has_crypto = 1; } /* for */ - __PHYSFS_sort(info->entries, (size_t) max, zip_entry_cmp, zip_entry_swap); return 1; } /* zip_load_entries */ @@ -1152,8 +1195,8 @@ static PHYSFS_sint64 zip64_find_end_of_central_dir(PHYSFS_Io *io, /* Try offset specified in the Zip64 end of central directory locator. */ /* This works if the entire PHYSFS_Io is the zip file. */ - BAIL_IF_MACRO(!io->seek(io, offset), ERRPASS, -1); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, -1); + BAIL_IF_ERRPASS(!io->seek(io, offset), -1); + BAIL_IF_ERRPASS(!readui32(io, &ui32), -1); if (ui32 == ZIP64_END_OF_CENTRAL_DIR_SIG) return offset; @@ -1161,8 +1204,8 @@ static PHYSFS_sint64 zip64_find_end_of_central_dir(PHYSFS_Io *io, /* This works if the record isn't variable length and is version 1. */ if (pos > 56) { - BAIL_IF_MACRO(!io->seek(io, pos-56), ERRPASS, -1); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, -1); + BAIL_IF_ERRPASS(!io->seek(io, pos-56), -1); + BAIL_IF_ERRPASS(!readui32(io, &ui32), -1); if (ui32 == ZIP64_END_OF_CENTRAL_DIR_SIG) return pos-56; } /* if */ @@ -1171,8 +1214,8 @@ static PHYSFS_sint64 zip64_find_end_of_central_dir(PHYSFS_Io *io, /* This works if the record isn't variable length and is version 2. */ if (pos > 84) { - BAIL_IF_MACRO(!io->seek(io, pos-84), ERRPASS, -1); - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, -1); + BAIL_IF_ERRPASS(!io->seek(io, pos-84), -1); + BAIL_IF_ERRPASS(!readui32(io, &ui32), -1); if (ui32 == ZIP64_END_OF_CENTRAL_DIR_SIG) return pos-84; } /* if */ @@ -1181,36 +1224,47 @@ static PHYSFS_sint64 zip64_find_end_of_central_dir(PHYSFS_Io *io, /* Just try moving back at most 256k. Oh well. */ if ((offset < pos) && (pos > 4)) { - /* we assume you can eat this stack if you handle Zip64 files. */ - PHYSFS_uint8 buf[256 * 1024]; - PHYSFS_uint64 len = pos - offset; + const size_t maxbuflen = 256 * 1024; + size_t len = (size_t) (pos - offset); + PHYSFS_uint8 *buf = NULL; PHYSFS_sint32 i; - if (len > sizeof (buf)) - len = sizeof (buf); + if (len > maxbuflen) + len = maxbuflen; + + buf = (PHYSFS_uint8 *) __PHYSFS_smallAlloc(len); + BAIL_IF(!buf, PHYSFS_ERR_OUT_OF_MEMORY, -1); + + if (!io->seek(io, pos - len) || !__PHYSFS_readAll(io, buf, len)) + { + __PHYSFS_smallFree(buf); + return -1; /* error was set elsewhere. */ + } /* if */ - BAIL_IF_MACRO(!io->seek(io, pos - len), ERRPASS, -1); - BAIL_IF_MACRO(!__PHYSFS_readAll(io, buf, len), ERRPASS, -1); for (i = (PHYSFS_sint32) (len - 4); i >= 0; i--) { - if (buf[i] != 0x50) - continue; - if ( (buf[i+1] == 0x4b) && - (buf[i+2] == 0x06) && - (buf[i+3] == 0x06) ) - return pos - (len - i); + if ( (buf[i] == 0x50) && (buf[i+1] == 0x4b) && + (buf[i+2] == 0x06) && (buf[i+3] == 0x06) ) + { + __PHYSFS_smallFree(buf); + return pos - ((PHYSFS_sint64) (len - i)); + } /* if */ } /* for */ + + __PHYSFS_smallFree(buf); } /* if */ - BAIL_MACRO(PHYSFS_ERR_CORRUPT, -1); /* didn't find it. */ + BAIL(PHYSFS_ERR_CORRUPT, -1); /* didn't find it. */ } /* zip64_find_end_of_central_dir */ -static int zip64_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, +static int zip64_parse_end_of_central_dir(ZIPinfo *info, PHYSFS_uint64 *data_start, PHYSFS_uint64 *dir_ofs, + PHYSFS_uint64 *entry_count, PHYSFS_sint64 pos) { + PHYSFS_Io *io = info->io; PHYSFS_uint64 ui64; PHYSFS_uint32 ui32; PHYSFS_uint16 ui16; @@ -1220,22 +1274,22 @@ static int zip64_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, if ((pos < 0) || (!io->seek(io, pos))) return 0; - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); if (ui32 != ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIG) return -1; /* it's not a Zip64 archive. Not an error, though! */ info->zip64 = 1; /* number of the disk with the start of the central directory. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); /* offset of Zip64 end of central directory record. */ - BAIL_IF_MACRO(!readui64(io, &ui64), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui64(io, &ui64), 0); /* total number of disks */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != 1, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != 1, PHYSFS_ERR_CORRUPT, 0); pos = zip64_find_end_of_central_dir(io, pos, ui64); if (pos < 0) @@ -1251,41 +1305,41 @@ static int zip64_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, assert(((PHYSFS_uint64) pos) >= ui64); *data_start = ((PHYSFS_uint64) pos) - ui64; - BAIL_IF_MACRO(!io->seek(io, pos), ERRPASS, 0); + BAIL_IF_ERRPASS(!io->seek(io, pos), 0); /* check signature again, just in case. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != ZIP64_END_OF_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != ZIP64_END_OF_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, 0); /* size of Zip64 end of central directory record. */ - BAIL_IF_MACRO(!readui64(io, &ui64), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui64(io, &ui64), 0); /* version made by. */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); /* version needed to extract. */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); /* number of this disk. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); /* number of disk with start of central directory record. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != 0, PHYSFS_ERR_CORRUPT, 0); /* total number of entries in the central dir on this disk */ - BAIL_IF_MACRO(!readui64(io, &ui64), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui64(io, &ui64), 0); /* total number of entries in the central dir */ - BAIL_IF_MACRO(!readui64(io, &info->entryCount), ERRPASS, 0); - BAIL_IF_MACRO(ui64 != info->entryCount, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui64(io, entry_count), 0); + BAIL_IF(ui64 != *entry_count, PHYSFS_ERR_CORRUPT, 0); /* size of the central directory */ - BAIL_IF_MACRO(!readui64(io, &ui64), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui64(io, &ui64), 0); /* offset of central directory */ - BAIL_IF_MACRO(!readui64(io, dir_ofs), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui64(io, dir_ofs), 0); /* Since we know the difference, fix up the central dir offset... */ *dir_ofs += *data_start; @@ -1299,10 +1353,12 @@ static int zip64_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, } /* zip64_parse_end_of_central_dir */ -static int zip_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, +static int zip_parse_end_of_central_dir(ZIPinfo *info, PHYSFS_uint64 *data_start, - PHYSFS_uint64 *dir_ofs) + PHYSFS_uint64 *dir_ofs, + PHYSFS_uint64 *entry_count) { + PHYSFS_Io *io = info->io; PHYSFS_uint16 entryCount16; PHYSFS_uint32 offset32; PHYSFS_uint32 ui32; @@ -1313,49 +1369,51 @@ static int zip_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, /* find the end-of-central-dir record, and seek to it. */ pos = zip_find_end_of_central_dir(io, &len); - BAIL_IF_MACRO(pos == -1, ERRPASS, 0); - BAIL_IF_MACRO(!io->seek(io, pos), ERRPASS, 0); + BAIL_IF_ERRPASS(pos == -1, 0); + BAIL_IF_ERRPASS(!io->seek(io, pos), 0); /* check signature again, just in case. */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); - BAIL_IF_MACRO(ui32 != ZIP_END_OF_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); + BAIL_IF(ui32 != ZIP_END_OF_CENTRAL_DIR_SIG, PHYSFS_ERR_CORRUPT, 0); /* Seek back to see if "Zip64 end of central directory locator" exists. */ /* this record is 20 bytes before end-of-central-dir */ - rc = zip64_parse_end_of_central_dir(io, info, data_start, dir_ofs, pos-20); - BAIL_IF_MACRO(rc == 0, ERRPASS, 0); - if (rc == 1) - return 1; /* we're done here. */ + rc = zip64_parse_end_of_central_dir(info, data_start, dir_ofs, + entry_count, pos - 20); + + /* Error or success? Bounce out of here. Keep going if not zip64. */ + if ((rc == 0) || (rc == 1)) + return rc; assert(rc == -1); /* no error, just not a Zip64 archive. */ /* Not Zip64? Seek back to where we were and keep processing. */ - BAIL_IF_MACRO(!io->seek(io, pos + 4), ERRPASS, 0); + BAIL_IF_ERRPASS(!io->seek(io, pos + 4), 0); /* number of this disk */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); - BAIL_IF_MACRO(ui16 != 0, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); + BAIL_IF(ui16 != 0, PHYSFS_ERR_CORRUPT, 0); /* number of the disk with the start of the central directory */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); - BAIL_IF_MACRO(ui16 != 0, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); + BAIL_IF(ui16 != 0, PHYSFS_ERR_CORRUPT, 0); /* total number of entries in the central dir on this disk */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); /* total number of entries in the central dir */ - BAIL_IF_MACRO(!readui16(io, &entryCount16), ERRPASS, 0); - BAIL_IF_MACRO(ui16 != entryCount16, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF_ERRPASS(!readui16(io, &entryCount16), 0); + BAIL_IF(ui16 != entryCount16, PHYSFS_ERR_CORRUPT, 0); - info->entryCount = entryCount16; + *entry_count = entryCount16; /* size of the central directory */ - BAIL_IF_MACRO(!readui32(io, &ui32), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui32(io, &ui32), 0); /* offset of central directory */ - BAIL_IF_MACRO(!readui32(io, &offset32), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui32(io, &offset32), 0); *dir_ofs = (PHYSFS_uint64) offset32; - BAIL_IF_MACRO(pos < (*dir_ofs + ui32), PHYSFS_ERR_CORRUPT, 0); + BAIL_IF(((PHYSFS_uint64) pos) < (*dir_ofs + ui32), PHYSFS_ERR_CORRUPT, 0); /* * For self-extracting archives, etc, there's crapola in the file @@ -1371,172 +1429,85 @@ static int zip_parse_end_of_central_dir(PHYSFS_Io *io, ZIPinfo *info, *dir_ofs += *data_start; /* zipfile comment length */ - BAIL_IF_MACRO(!readui16(io, &ui16), ERRPASS, 0); + BAIL_IF_ERRPASS(!readui16(io, &ui16), 0); /* * Make sure that the comment length matches to the end of file... * If it doesn't, we're either in the wrong part of the file, or the * file is corrupted, but we give up either way. */ - BAIL_IF_MACRO((pos + 22 + ui16) != len, PHYSFS_ERR_CORRUPT, 0); + BAIL_IF((pos + 22 + ui16) != len, PHYSFS_ERR_CORRUPT, 0); return 1; /* made it. */ } /* zip_parse_end_of_central_dir */ -static void *ZIP_openArchive(PHYSFS_Io *io, const char *name, int forWriting) +static void ZIP_closeArchive(void *opaque) +{ + ZIPinfo *info = (ZIPinfo *) (opaque); + + if (!info) + return; + + if (info->io) + info->io->destroy(info->io); + + __PHYSFS_DirTreeDeinit(&info->tree); + + allocator.Free(info); +} /* ZIP_closeArchive */ + + +static void *ZIP_openArchive(PHYSFS_Io *io, const char *name, + int forWriting, int *claimed) { ZIPinfo *info = NULL; - PHYSFS_uint64 data_start; - PHYSFS_uint64 cent_dir_ofs; + ZIPentry *root = NULL; + PHYSFS_uint64 dstart = 0; /* data start */ + PHYSFS_uint64 cdir_ofs; /* central dir offset */ + PHYSFS_uint64 count; assert(io != NULL); /* shouldn't ever happen. */ - BAIL_IF_MACRO(forWriting, PHYSFS_ERR_READ_ONLY, NULL); - BAIL_IF_MACRO(!isZip(io), ERRPASS, NULL); + BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL); + BAIL_IF_ERRPASS(!isZip(io), NULL); + + *claimed = 1; info = (ZIPinfo *) allocator.Malloc(sizeof (ZIPinfo)); - BAIL_IF_MACRO(!info, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!info, PHYSFS_ERR_OUT_OF_MEMORY, NULL); memset(info, '\0', sizeof (ZIPinfo)); + info->io = io; - if (!zip_parse_end_of_central_dir(io, info, &data_start, ¢_dir_ofs)) + if (!zip_parse_end_of_central_dir(info, &dstart, &cdir_ofs, &count)) + goto ZIP_openarchive_failed; + else if (!__PHYSFS_DirTreeInit(&info->tree, sizeof (ZIPentry))) goto ZIP_openarchive_failed; - if (!zip_load_entries(io, info, data_start, cent_dir_ofs)) + root = (ZIPentry *) info->tree.root; + root->resolved = ZIP_DIRECTORY; + + if (!zip_load_entries(info, dstart, cdir_ofs, count)) goto ZIP_openarchive_failed; + assert(info->tree.root->sibling == NULL); return info; ZIP_openarchive_failed: - if (info != NULL) - allocator.Free(info); - + info->io = NULL; /* don't let ZIP_closeArchive destroy (io). */ + ZIP_closeArchive(info); return NULL; } /* ZIP_openArchive */ -static PHYSFS_sint64 zip_find_start_of_dir(ZIPinfo *info, const char *path, - int stop_on_first_find) -{ - PHYSFS_sint64 lo = 0; - PHYSFS_sint64 hi = (PHYSFS_sint64) (info->entryCount - 1); - PHYSFS_sint64 middle; - PHYSFS_uint32 dlen = (PHYSFS_uint32) strlen(path); - PHYSFS_sint64 retval = -1; - const char *name; - int rc; - - if (*path == '\0') /* root dir? */ - return 0; - - if ((dlen > 0) && (path[dlen - 1] == '/')) /* ignore trailing slash. */ - dlen--; - - while (lo <= hi) - { - middle = lo + ((hi - lo) / 2); - name = info->entries[middle].name; - rc = strncmp(path, name, dlen); - if (rc == 0) - { - char ch = name[dlen]; - if ('/' < ch) /* make sure this isn't just a substr match. */ - rc = -1; - else if ('/' > ch) - rc = 1; - else - { - if (stop_on_first_find) /* Just checking dir's existance? */ - return middle; - - if (name[dlen + 1] == '\0') /* Skip initial dir entry. */ - return (middle + 1); - - /* there might be more entries earlier in the list. */ - retval = middle; - hi = middle - 1; - } /* else */ - } /* if */ - - if (rc > 0) - lo = middle + 1; - else - hi = middle - 1; - } /* while */ - - return retval; -} /* zip_find_start_of_dir */ - - -/* - * Moved to seperate function so we can use alloca then immediately throw - * away the allocated stack space... - */ -static void doEnumCallback(PHYSFS_EnumFilesCallback cb, void *callbackdata, - const char *odir, const char *str, PHYSFS_sint32 ln) -{ - char *newstr = __PHYSFS_smallAlloc(ln + 1); - if (newstr == NULL) - return; - - memcpy(newstr, str, ln); - newstr[ln] = '\0'; - cb(callbackdata, odir, newstr); - __PHYSFS_smallFree(newstr); -} /* doEnumCallback */ - - -static void ZIP_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata) -{ - ZIPinfo *info = ((ZIPinfo *) opaque); - PHYSFS_sint32 dlen, dlen_inc; - PHYSFS_sint64 i, max; - - i = zip_find_start_of_dir(info, dname, 0); - if (i == -1) /* no such directory. */ - return; - - dlen = (PHYSFS_sint32) strlen(dname); - if ((dlen > 0) && (dname[dlen - 1] == '/')) /* ignore trailing slash. */ - dlen--; - - dlen_inc = ((dlen > 0) ? 1 : 0) + dlen; - max = (PHYSFS_sint64) info->entryCount; - while (i < max) - { - char *e = info->entries[i].name; - if ((dlen) && ((strncmp(e, dname, dlen) != 0) || (e[dlen] != '/'))) - break; /* past end of this dir; we're done. */ - else - { - char *add = e + dlen_inc; - char *ptr = strchr(add, '/'); - PHYSFS_sint32 ln = (PHYSFS_sint32) ((ptr) ? ptr-add : strlen(add)); - doEnumCallback(cb, callbackdata, origdir, add, ln); - ln += dlen_inc; /* point past entry to children... */ - - /* increment counter and skip children of subdirs... */ - while ((++i < max) && (ptr != NULL)) - { - char *e_new = info->entries[i].name; - if ((strncmp(e, e_new, ln) != 0) || (e_new[ln] != '/')) - break; - } /* while */ - } /* else */ - } /* while */ -} /* ZIP_enumerateFiles */ - - static PHYSFS_Io *zip_get_io(PHYSFS_Io *io, ZIPinfo *inf, ZIPentry *entry) { int success; PHYSFS_Io *retval = io->duplicate(io); - BAIL_IF_MACRO(!retval, ERRPASS, NULL); + BAIL_IF_ERRPASS(!retval, NULL); - /* !!! FIXME: if you open a dir here, it should bail ERR_NOT_A_FILE */ + assert(!entry->tree.isdir); /* should have been checked before calling. */ /* (inf) can be NULL if we already resolved. */ success = (inf == NULL) || zip_resolve(retval, inf, entry); @@ -1561,20 +1532,44 @@ static PHYSFS_Io *ZIP_openRead(void *opaque, const char *filename) { PHYSFS_Io *retval = NULL; ZIPinfo *info = (ZIPinfo *) opaque; - ZIPentry *entry = zip_find_entry(info, filename, NULL); + ZIPentry *entry = zip_find_entry(info, filename); ZIPfileinfo *finfo = NULL; + PHYSFS_Io *io = NULL; + PHYSFS_uint8 *password = NULL; - BAIL_IF_MACRO(!entry, ERRPASS, NULL); + /* if not found, see if maybe "$PASSWORD" is appended. */ + if ((!entry) && (info->has_crypto)) + { + const char *ptr = strrchr(filename, '$'); + if (ptr != NULL) + { + const size_t len = (size_t) (ptr - filename); + char *str = (char *) __PHYSFS_smallAlloc(len + 1); + BAIL_IF(!str, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + memcpy(str, filename, len); + str[len] = '\0'; + entry = zip_find_entry(info, str); + __PHYSFS_smallFree(str); + password = (PHYSFS_uint8 *) (ptr + 1); + } /* if */ + } /* if */ + + BAIL_IF_ERRPASS(!entry, NULL); + + BAIL_IF_ERRPASS(!zip_resolve(info->io, info, entry), NULL); + + BAIL_IF(entry->tree.isdir, PHYSFS_ERR_NOT_A_FILE, NULL); retval = (PHYSFS_Io *) allocator.Malloc(sizeof (PHYSFS_Io)); - GOTO_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); + GOTO_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); finfo = (ZIPfileinfo *) allocator.Malloc(sizeof (ZIPfileinfo)); - GOTO_IF_MACRO(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); + GOTO_IF(!finfo, PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); memset(finfo, '\0', sizeof (ZIPfileinfo)); - finfo->io = zip_get_io(info->io, info, entry); - GOTO_IF_MACRO(!finfo->io, ERRPASS, ZIP_openRead_failed); + io = zip_get_io(info->io, info, entry); + GOTO_IF_ERRPASS(!io, ZIP_openRead_failed); + finfo->io = io; finfo->entry = ((entry->symlink != NULL) ? entry->symlink : entry); initializeZStream(&finfo->stream); @@ -1582,11 +1577,23 @@ static PHYSFS_Io *ZIP_openRead(void *opaque, const char *filename) { finfo->buffer = (PHYSFS_uint8 *) allocator.Malloc(ZIP_READBUFSIZE); if (!finfo->buffer) - GOTO_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); + GOTO(PHYSFS_ERR_OUT_OF_MEMORY, ZIP_openRead_failed); else if (zlib_err(inflateInit2(&finfo->stream, -MAX_WBITS)) != Z_OK) goto ZIP_openRead_failed; } /* if */ + if (!zip_entry_is_tradional_crypto(entry)) + GOTO_IF(password != NULL, PHYSFS_ERR_BAD_PASSWORD, ZIP_openRead_failed); + else + { + PHYSFS_uint8 crypto_header[12]; + GOTO_IF(password == NULL, PHYSFS_ERR_BAD_PASSWORD, ZIP_openRead_failed); + if (io->read(io, crypto_header, 12) != 12) + goto ZIP_openRead_failed; + else if (!zip_prep_crypto_keys(finfo, crypto_header, password)) + goto ZIP_openRead_failed; + } /* if */ + memcpy(retval, &ZIP_Io, sizeof (PHYSFS_Io)); retval->opaque = finfo; @@ -1616,49 +1623,40 @@ ZIP_openRead_failed: static PHYSFS_Io *ZIP_openWrite(void *opaque, const char *filename) { - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); + BAIL(PHYSFS_ERR_READ_ONLY, NULL); } /* ZIP_openWrite */ static PHYSFS_Io *ZIP_openAppend(void *opaque, const char *filename) { - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, NULL); + BAIL(PHYSFS_ERR_READ_ONLY, NULL); } /* ZIP_openAppend */ -static void ZIP_closeArchive(void *opaque) -{ - ZIPinfo *zi = (ZIPinfo *) (opaque); - zi->io->destroy(zi->io); - zip_free_entries(zi->entries, zi->entryCount); - allocator.Free(zi); -} /* ZIP_closeArchive */ - - static int ZIP_remove(void *opaque, const char *name) { - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); + BAIL(PHYSFS_ERR_READ_ONLY, 0); } /* ZIP_remove */ static int ZIP_mkdir(void *opaque, const char *name) { - BAIL_MACRO(PHYSFS_ERR_READ_ONLY, 0); + BAIL(PHYSFS_ERR_READ_ONLY, 0); } /* ZIP_mkdir */ static int ZIP_stat(void *opaque, const char *filename, PHYSFS_Stat *stat) { - int isDir = 0; - const ZIPinfo *info = (const ZIPinfo *) opaque; - const ZIPentry *entry = zip_find_entry(info, filename, &isDir); + ZIPinfo *info = (ZIPinfo *) opaque; + ZIPentry *entry = zip_find_entry(info, filename); - /* !!! FIXME: does this need to resolve entries here? */ - - if ((!isDir) && (entry == NULL)) + if (entry == NULL) return 0; - else if (isDir) + else if (!zip_resolve(info->io, info, entry)) + return 0; + + else if (entry->resolved == ZIP_DIRECTORY) { stat->filesize = 0; stat->filetype = PHYSFS_FILETYPE_DIRECTORY; @@ -1678,7 +1676,7 @@ static int ZIP_stat(void *opaque, const char *filename, PHYSFS_Stat *stat) stat->modtime = ((entry) ? entry->last_mod_time : 0); stat->createtime = stat->modtime; - stat->accesstime = 0; + stat->accesstime = -1; stat->readonly = 1; /* .zip files are always read only */ return 1; @@ -1692,11 +1690,11 @@ const PHYSFS_Archiver __PHYSFS_Archiver_ZIP = "ZIP", "PkZip/WinZip/Info-Zip compatible", "Ryan C. Gordon ", - "http://icculus.org/physfs/", + "https://icculus.org/physfs/", 1, /* supportsSymlinks */ }, ZIP_openArchive, - ZIP_enumerateFiles, + __PHYSFS_DirTreeEnumerate, ZIP_openRead, ZIP_openWrite, ZIP_openAppend, @@ -1708,5 +1706,5 @@ const PHYSFS_Archiver __PHYSFS_Archiver_ZIP = #endif /* defined PHYSFS_SUPPORTS_ZIP */ -/* end of archiver_zip.c ... */ +/* end of physfs_archiver_zip.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/physfs_byteorder.c b/love/src/jni/physfs-3.0.1/src/physfs_byteorder.c similarity index 95% rename from love/src/jni/physfs-2.1.0/src/physfs_byteorder.c rename to love/src/jni/physfs-3.0.1/src/physfs_byteorder.c index b3706ffd..b2d3a2cf 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs_byteorder.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_byteorder.c @@ -88,8 +88,8 @@ static inline int readAll(PHYSFS_File *file, void *val, const size_t len) #define PHYSFS_BYTEORDER_READ(datatype, swaptype) \ int PHYSFS_read##swaptype(PHYSFS_File *file, PHYSFS_##datatype *val) { \ PHYSFS_##datatype in; \ - BAIL_IF_MACRO(val == NULL, PHYSFS_ERR_INVALID_ARGUMENT, 0); \ - BAIL_IF_MACRO(!readAll(file, &in, sizeof (in)), ERRPASS, 0); \ + BAIL_IF(val == NULL, PHYSFS_ERR_INVALID_ARGUMENT, 0); \ + BAIL_IF_ERRPASS(!readAll(file, &in, sizeof (in)), 0); \ *val = PHYSFS_swap##swaptype(in); \ return 1; \ } @@ -116,7 +116,7 @@ static inline int writeAll(PHYSFS_File *f, const void *val, const size_t len) #define PHYSFS_BYTEORDER_WRITE(datatype, swaptype) \ int PHYSFS_write##swaptype(PHYSFS_File *file, PHYSFS_##datatype val) { \ const PHYSFS_##datatype out = PHYSFS_swap##swaptype(val); \ - BAIL_IF_MACRO(!writeAll(file, &out, sizeof (out)), ERRPASS, 0); \ + BAIL_IF_ERRPASS(!writeAll(file, &out, sizeof (out)), 0); \ return 1; \ } diff --git a/love/src/jni/physfs-3.0.1/src/physfs_casefolding.h b/love/src/jni/physfs-3.0.1/src/physfs_casefolding.h new file mode 100644 index 00000000..bb6ac189 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_casefolding.h @@ -0,0 +1,2572 @@ +/* + * This file is part of PhysicsFS (https://icculus.org/physfs/) + * + * This data generated by physfs/extras/makecasefoldhashtable.pl ... + * Do not manually edit this file! + * + * Please see the file LICENSE.txt in the source's root directory. + */ + +#ifndef _INCLUDE_PHYSFS_CASEFOLDING_H_ +#define _INCLUDE_PHYSFS_CASEFOLDING_H_ + +#ifndef __PHYSICSFS_INTERNAL__ +#error Do not include this header from your applications. +#endif + +/* We build three simple hashmaps here: one that maps Unicode codepoints to +a one, two, or three lowercase codepoints. To retrieve this info: look at +case_fold_hashX, where X is 1, 2, or 3. Most foldable codepoints fold to one, +a few dozen fold to two, and a handful fold to three. If the codepoint isn't +in any of these hashes, it doesn't fold (no separate upper and lowercase). + +Almost all these codepoints fit into 16 bits, so we hash them as such to save +memory. If a codepoint is > 0xFFFF, we have separate hashes for them, +since there are (currently) only about 120 of them and (currently) all of them +map to a single lowercase codepoint. */ + +typedef struct CaseFoldMapping1_32 +{ + PHYSFS_uint32 from; + PHYSFS_uint32 to0; +} CaseFoldMapping1_32; + +typedef struct CaseFoldMapping1_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; +} CaseFoldMapping1_16; + +typedef struct CaseFoldMapping2_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; + PHYSFS_uint16 to1; +} CaseFoldMapping2_16; + +typedef struct CaseFoldMapping3_16 +{ + PHYSFS_uint16 from; + PHYSFS_uint16 to0; + PHYSFS_uint16 to1; + PHYSFS_uint16 to2; +} CaseFoldMapping3_16; + +typedef struct CaseFoldHashBucket1_16 +{ + const CaseFoldMapping1_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket1_16; + +typedef struct CaseFoldHashBucket1_32 +{ + const CaseFoldMapping1_32 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket1_32; + +typedef struct CaseFoldHashBucket2_16 +{ + const CaseFoldMapping2_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket2_16; + +typedef struct CaseFoldHashBucket3_16 +{ + const CaseFoldMapping3_16 *list; + const PHYSFS_uint8 count; +} CaseFoldHashBucket3_16; + +static const CaseFoldMapping1_16 case_fold1_16_000[] = { + { 0x0202, 0x0203 }, + { 0x0404, 0x0454 }, + { 0x1E1E, 0x1E1F }, + { 0x2C2C, 0x2C5C }, + { 0xABAB, 0x13DB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_001[] = { + { 0x0100, 0x0101 }, + { 0x0405, 0x0455 }, + { 0x0504, 0x0505 }, + { 0x2C2D, 0x2C5D }, + { 0xA7A6, 0xA7A7 }, + { 0xABAA, 0x13DA } +}; + +static const CaseFoldMapping1_16 case_fold1_16_002[] = { + { 0x0200, 0x0201 }, + { 0x0406, 0x0456 }, + { 0x1E1C, 0x1E1D }, + { 0x1F1D, 0x1F15 }, + { 0x2C2E, 0x2C5E }, + { 0xABA9, 0x13D9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_003[] = { + { 0x0102, 0x0103 }, + { 0x0407, 0x0457 }, + { 0x0506, 0x0507 }, + { 0x1F1C, 0x1F14 }, + { 0xA7A4, 0xA7A5 }, + { 0xABA8, 0x13D8 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_004[] = { + { 0x0206, 0x0207 }, + { 0x0400, 0x0450 }, + { 0x1E1A, 0x1E1B }, + { 0x1F1B, 0x1F13 }, + { 0x2C28, 0x2C58 }, + { 0xABAF, 0x13DF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_005[] = { + { 0x0104, 0x0105 }, + { 0x0401, 0x0451 }, + { 0x0500, 0x0501 }, + { 0x1F1A, 0x1F12 }, + { 0x2C29, 0x2C59 }, + { 0xA7A2, 0xA7A3 }, + { 0xABAE, 0x13DE } +}; + +static const CaseFoldMapping1_16 case_fold1_16_006[] = { + { 0x0204, 0x0205 }, + { 0x0402, 0x0452 }, + { 0x1E18, 0x1E19 }, + { 0x1F19, 0x1F11 }, + { 0x2C2A, 0x2C5A }, + { 0xABAD, 0x13DD } +}; + +static const CaseFoldMapping1_16 case_fold1_16_007[] = { + { 0x0106, 0x0107 }, + { 0x0403, 0x0453 }, + { 0x0502, 0x0503 }, + { 0x1F18, 0x1F10 }, + { 0x2126, 0x03C9 }, + { 0x2C2B, 0x2C5B }, + { 0xA7A0, 0xA7A1 }, + { 0xABAC, 0x13DC } +}; + +static const CaseFoldMapping1_16 case_fold1_16_008[] = { + { 0x020A, 0x020B }, + { 0x040C, 0x045C }, + { 0x1E16, 0x1E17 }, + { 0x2C24, 0x2C54 }, + { 0xABA3, 0x13D3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_009[] = { + { 0x0108, 0x0109 }, + { 0x040D, 0x045D }, + { 0x050C, 0x050D }, + { 0x2C25, 0x2C55 }, + { 0xABA2, 0x13D2 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_010[] = { + { 0x0208, 0x0209 }, + { 0x040E, 0x045E }, + { 0x1E14, 0x1E15 }, + { 0x212B, 0x00E5 }, + { 0x2C26, 0x2C56 }, + { 0xA7AD, 0x026C }, + { 0xABA1, 0x13D1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_011[] = { + { 0x010A, 0x010B }, + { 0x040F, 0x045F }, + { 0x050E, 0x050F }, + { 0x212A, 0x006B }, + { 0x2C27, 0x2C57 }, + { 0xA7AC, 0x0261 }, + { 0xABA0, 0x13D0 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_012[] = { + { 0x020E, 0x020F }, + { 0x0408, 0x0458 }, + { 0x1E12, 0x1E13 }, + { 0x2C20, 0x2C50 }, + { 0xA7AB, 0x025C }, + { 0xABA7, 0x13D7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_013[] = { + { 0x010C, 0x010D }, + { 0x0409, 0x0459 }, + { 0x0508, 0x0509 }, + { 0x2C21, 0x2C51 }, + { 0xA7AA, 0x0266 }, + { 0xABA6, 0x13D6 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_014[] = { + { 0x020C, 0x020D }, + { 0x040A, 0x045A }, + { 0x1E10, 0x1E11 }, + { 0x2C22, 0x2C52 }, + { 0xABA5, 0x13D5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_015[] = { + { 0x010E, 0x010F }, + { 0x040B, 0x045B }, + { 0x050A, 0x050B }, + { 0x2C23, 0x2C53 }, + { 0xA7A8, 0xA7A9 }, + { 0xABA4, 0x13D4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_016[] = { + { 0x0212, 0x0213 }, + { 0x0414, 0x0434 }, + { 0x1E0E, 0x1E0F }, + { 0x1F0F, 0x1F07 }, + { 0xABBB, 0x13EB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_017[] = { + { 0x0110, 0x0111 }, + { 0x0415, 0x0435 }, + { 0x0514, 0x0515 }, + { 0x1F0E, 0x1F06 }, + { 0xA7B6, 0xA7B7 }, + { 0xABBA, 0x13EA } +}; + +static const CaseFoldMapping1_16 case_fold1_16_018[] = { + { 0x0210, 0x0211 }, + { 0x0416, 0x0436 }, + { 0x1E0C, 0x1E0D }, + { 0x1F0D, 0x1F05 }, + { 0xABB9, 0x13E9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_019[] = { + { 0x0112, 0x0113 }, + { 0x0417, 0x0437 }, + { 0x0516, 0x0517 }, + { 0x1F0C, 0x1F04 }, + { 0x2132, 0x214E }, + { 0xA7B4, 0xA7B5 }, + { 0xABB8, 0x13E8 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_020[] = { + { 0x0216, 0x0217 }, + { 0x0410, 0x0430 }, + { 0x1E0A, 0x1E0B }, + { 0x1F0B, 0x1F03 }, + { 0xA7B3, 0xAB53 }, + { 0xABBF, 0x13EF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_021[] = { + { 0x0114, 0x0115 }, + { 0x0411, 0x0431 }, + { 0x0510, 0x0511 }, + { 0x1F0A, 0x1F02 }, + { 0xA7B2, 0x029D }, + { 0xABBE, 0x13EE } +}; + +static const CaseFoldMapping1_16 case_fold1_16_022[] = { + { 0x0214, 0x0215 }, + { 0x0412, 0x0432 }, + { 0x1E08, 0x1E09 }, + { 0x1F09, 0x1F01 }, + { 0xA7B1, 0x0287 }, + { 0xABBD, 0x13ED } +}; + +static const CaseFoldMapping1_16 case_fold1_16_023[] = { + { 0x0116, 0x0117 }, + { 0x0413, 0x0433 }, + { 0x0512, 0x0513 }, + { 0x1F08, 0x1F00 }, + { 0xA7B0, 0x029E }, + { 0xABBC, 0x13EC } +}; + +static const CaseFoldMapping1_16 case_fold1_16_024[] = { + { 0x021A, 0x021B }, + { 0x041C, 0x043C }, + { 0x1E06, 0x1E07 }, + { 0xABB3, 0x13E3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_025[] = { + { 0x0118, 0x0119 }, + { 0x041D, 0x043D }, + { 0x051C, 0x051D }, + { 0xABB2, 0x13E2 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_026[] = { + { 0x0218, 0x0219 }, + { 0x041E, 0x043E }, + { 0x1E04, 0x1E05 }, + { 0xABB1, 0x13E1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_027[] = { + { 0x011A, 0x011B }, + { 0x041F, 0x043F }, + { 0x051E, 0x051F }, + { 0xABB0, 0x13E0 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_028[] = { + { 0x021E, 0x021F }, + { 0x0418, 0x0438 }, + { 0x1E02, 0x1E03 }, + { 0xABB7, 0x13E7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_029[] = { + { 0x011C, 0x011D }, + { 0x0419, 0x0439 }, + { 0x0518, 0x0519 }, + { 0xABB6, 0x13E6 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_030[] = { + { 0x021C, 0x021D }, + { 0x041A, 0x043A }, + { 0x1E00, 0x1E01 }, + { 0xABB5, 0x13E5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_031[] = { + { 0x011E, 0x011F }, + { 0x041B, 0x043B }, + { 0x051A, 0x051B }, + { 0xABB4, 0x13E4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_032[] = { + { 0x0222, 0x0223 }, + { 0x0424, 0x0444 }, + { 0x1E3E, 0x1E3F }, + { 0x1F3F, 0x1F37 }, + { 0x2C0C, 0x2C3C }, + { 0xA686, 0xA687 }, + { 0xAB8B, 0x13BB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_033[] = { + { 0x0120, 0x0121 }, + { 0x0425, 0x0445 }, + { 0x0524, 0x0525 }, + { 0x1F3E, 0x1F36 }, + { 0x2C0D, 0x2C3D }, + { 0xA786, 0xA787 }, + { 0xAB8A, 0x13BA } +}; + +static const CaseFoldMapping1_16 case_fold1_16_034[] = { + { 0x0220, 0x019E }, + { 0x0426, 0x0446 }, + { 0x1E3C, 0x1E3D }, + { 0x1F3D, 0x1F35 }, + { 0x2C0E, 0x2C3E }, + { 0xA684, 0xA685 }, + { 0xAB89, 0x13B9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_035[] = { + { 0x0122, 0x0123 }, + { 0x0427, 0x0447 }, + { 0x0526, 0x0527 }, + { 0x1F3C, 0x1F34 }, + { 0x2C0F, 0x2C3F }, + { 0xA784, 0xA785 }, + { 0xAB88, 0x13B8 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_036[] = { + { 0x0226, 0x0227 }, + { 0x0420, 0x0440 }, + { 0x1E3A, 0x1E3B }, + { 0x1F3B, 0x1F33 }, + { 0x2C08, 0x2C38 }, + { 0xA682, 0xA683 }, + { 0xAB8F, 0x13BF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_037[] = { + { 0x0124, 0x0125 }, + { 0x0421, 0x0441 }, + { 0x0520, 0x0521 }, + { 0x1F3A, 0x1F32 }, + { 0x2C09, 0x2C39 }, + { 0xA782, 0xA783 }, + { 0xAB8E, 0x13BE } +}; + +static const CaseFoldMapping1_16 case_fold1_16_038[] = { + { 0x0224, 0x0225 }, + { 0x0422, 0x0442 }, + { 0x1E38, 0x1E39 }, + { 0x1F39, 0x1F31 }, + { 0x2C0A, 0x2C3A }, + { 0xA680, 0xA681 }, + { 0xAB8D, 0x13BD } +}; + +static const CaseFoldMapping1_16 case_fold1_16_039[] = { + { 0x0126, 0x0127 }, + { 0x0423, 0x0443 }, + { 0x0522, 0x0523 }, + { 0x1F38, 0x1F30 }, + { 0x2C0B, 0x2C3B }, + { 0xA780, 0xA781 }, + { 0xAB8C, 0x13BC } +}; + +static const CaseFoldMapping1_16 case_fold1_16_040[] = { + { 0x022A, 0x022B }, + { 0x042C, 0x044C }, + { 0x1E36, 0x1E37 }, + { 0x2C04, 0x2C34 }, + { 0xA68E, 0xA68F }, + { 0xAB83, 0x13B3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_041[] = { + { 0x0128, 0x0129 }, + { 0x042D, 0x044D }, + { 0x052C, 0x052D }, + { 0x2C05, 0x2C35 }, + { 0xAB82, 0x13B2 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_042[] = { + { 0x0228, 0x0229 }, + { 0x042E, 0x044E }, + { 0x1E34, 0x1E35 }, + { 0x2C06, 0x2C36 }, + { 0xA68C, 0xA68D }, + { 0xA78D, 0x0265 }, + { 0xAB81, 0x13B1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_043[] = { + { 0x012A, 0x012B }, + { 0x042F, 0x044F }, + { 0x052E, 0x052F }, + { 0x2C07, 0x2C37 }, + { 0xAB80, 0x13B0 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_044[] = { + { 0x022E, 0x022F }, + { 0x0428, 0x0448 }, + { 0x1E32, 0x1E33 }, + { 0x2C00, 0x2C30 }, + { 0xA68A, 0xA68B }, + { 0xA78B, 0xA78C }, + { 0xAB87, 0x13B7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_045[] = { + { 0x012C, 0x012D }, + { 0x0429, 0x0449 }, + { 0x0528, 0x0529 }, + { 0x2C01, 0x2C31 }, + { 0xAB86, 0x13B6 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_046[] = { + { 0x022C, 0x022D }, + { 0x042A, 0x044A }, + { 0x1E30, 0x1E31 }, + { 0x2C02, 0x2C32 }, + { 0xA688, 0xA689 }, + { 0xAB85, 0x13B5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_047[] = { + { 0x012E, 0x012F }, + { 0x042B, 0x044B }, + { 0x052A, 0x052B }, + { 0x2C03, 0x2C33 }, + { 0xAB84, 0x13B4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_048[] = { + { 0x0232, 0x0233 }, + { 0x0535, 0x0565 }, + { 0x1E2E, 0x1E2F }, + { 0x1F2F, 0x1F27 }, + { 0x2C1C, 0x2C4C }, + { 0xA696, 0xA697 }, + { 0xAB9B, 0x13CB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_049[] = { + { 0x0534, 0x0564 }, + { 0x1F2E, 0x1F26 }, + { 0x2C1D, 0x2C4D }, + { 0xA796, 0xA797 }, + { 0xAB9A, 0x13CA } +}; + +static const CaseFoldMapping1_16 case_fold1_16_050[] = { + { 0x0230, 0x0231 }, + { 0x0537, 0x0567 }, + { 0x1E2C, 0x1E2D }, + { 0x1F2D, 0x1F25 }, + { 0x2C1E, 0x2C4E }, + { 0xA694, 0xA695 }, + { 0xAB99, 0x13C9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_051[] = { + { 0x0132, 0x0133 }, + { 0x0536, 0x0566 }, + { 0x1F2C, 0x1F24 }, + { 0x2C1F, 0x2C4F }, + { 0xAB98, 0x13C8 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_052[] = { + { 0x0531, 0x0561 }, + { 0x1E2A, 0x1E2B }, + { 0x1F2B, 0x1F23 }, + { 0x2C18, 0x2C48 }, + { 0xA692, 0xA693 }, + { 0xAB9F, 0x13CF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_053[] = { + { 0x0134, 0x0135 }, + { 0x1F2A, 0x1F22 }, + { 0x2C19, 0x2C49 }, + { 0xA792, 0xA793 }, + { 0xAB9E, 0x13CE } +}; + +static const CaseFoldMapping1_16 case_fold1_16_054[] = { + { 0x0533, 0x0563 }, + { 0x1E28, 0x1E29 }, + { 0x1F29, 0x1F21 }, + { 0x2C1A, 0x2C4A }, + { 0xA690, 0xA691 }, + { 0xAB9D, 0x13CD } +}; + +static const CaseFoldMapping1_16 case_fold1_16_055[] = { + { 0x0136, 0x0137 }, + { 0x0532, 0x0562 }, + { 0x1F28, 0x1F20 }, + { 0x2C1B, 0x2C4B }, + { 0xA790, 0xA791 }, + { 0xAB9C, 0x13CC } +}; + +static const CaseFoldMapping1_16 case_fold1_16_056[] = { + { 0x0139, 0x013A }, + { 0x023A, 0x2C65 }, + { 0x053D, 0x056D }, + { 0x1E26, 0x1E27 }, + { 0x2C14, 0x2C44 }, + { 0xAB93, 0x13C3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_057[] = { + { 0x023B, 0x023C }, + { 0x053C, 0x056C }, + { 0x2C15, 0x2C45 }, + { 0xA79E, 0xA79F }, + { 0xAB92, 0x13C2 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_058[] = { + { 0x013B, 0x013C }, + { 0x053F, 0x056F }, + { 0x1E24, 0x1E25 }, + { 0x2C16, 0x2C46 }, + { 0xAB91, 0x13C1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_059[] = { + { 0x053E, 0x056E }, + { 0x2C17, 0x2C47 }, + { 0xA79C, 0xA79D }, + { 0xAB90, 0x13C0 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_060[] = { + { 0x013D, 0x013E }, + { 0x023E, 0x2C66 }, + { 0x0539, 0x0569 }, + { 0x1E22, 0x1E23 }, + { 0x2C10, 0x2C40 }, + { 0xA69A, 0xA69B }, + { 0xAB97, 0x13C7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_061[] = { + { 0x0538, 0x0568 }, + { 0x2C11, 0x2C41 }, + { 0xA79A, 0xA79B }, + { 0xAB96, 0x13C6 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_062[] = { + { 0x013F, 0x0140 }, + { 0x053B, 0x056B }, + { 0x1E20, 0x1E21 }, + { 0x2C12, 0x2C42 }, + { 0xA698, 0xA699 }, + { 0xAB95, 0x13C5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_063[] = { + { 0x023D, 0x019A }, + { 0x053A, 0x056A }, + { 0x2C13, 0x2C43 }, + { 0xA798, 0xA799 }, + { 0xAB94, 0x13C4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_064[] = { + { 0x0141, 0x0142 }, + { 0x0545, 0x0575 }, + { 0x1E5E, 0x1E5F }, + { 0x1F5F, 0x1F57 }, + { 0x2161, 0x2171 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_065[] = { + { 0x0041, 0x0061 }, + { 0x0243, 0x0180 }, + { 0x0544, 0x0574 }, + { 0x2160, 0x2170 }, + { 0x2C6D, 0x0251 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_066[] = { + { 0x0042, 0x0062 }, + { 0x0143, 0x0144 }, + { 0x0547, 0x0577 }, + { 0x1E5C, 0x1E5D }, + { 0x1F5D, 0x1F55 }, + { 0x2163, 0x2173 }, + { 0x2C6E, 0x0271 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_067[] = { + { 0x0043, 0x0063 }, + { 0x0241, 0x0242 }, + { 0x0546, 0x0576 }, + { 0x2162, 0x2172 }, + { 0x2C6F, 0x0250 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_068[] = { + { 0x0044, 0x0064 }, + { 0x0145, 0x0146 }, + { 0x0246, 0x0247 }, + { 0x0541, 0x0571 }, + { 0x1E5A, 0x1E5B }, + { 0x1F5B, 0x1F53 }, + { 0x2165, 0x2175 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_069[] = { + { 0x0045, 0x0065 }, + { 0x0540, 0x0570 }, + { 0x2164, 0x2174 }, + { 0x2C69, 0x2C6A } +}; + +static const CaseFoldMapping1_16 case_fold1_16_070[] = { + { 0x0046, 0x0066 }, + { 0x0147, 0x0148 }, + { 0x0244, 0x0289 }, + { 0x0345, 0x03B9 }, + { 0x0543, 0x0573 }, + { 0x1E58, 0x1E59 }, + { 0x1F59, 0x1F51 }, + { 0x2167, 0x2177 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_071[] = { + { 0x0047, 0x0067 }, + { 0x0245, 0x028C }, + { 0x0542, 0x0572 }, + { 0x2166, 0x2176 }, + { 0x2C6B, 0x2C6C } +}; + +static const CaseFoldMapping1_16 case_fold1_16_072[] = { + { 0x0048, 0x0068 }, + { 0x024A, 0x024B }, + { 0x054D, 0x057D }, + { 0x1E56, 0x1E57 }, + { 0x2169, 0x2179 }, + { 0x2C64, 0x027D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_073[] = { + { 0x0049, 0x0069 }, + { 0x054C, 0x057C }, + { 0x2168, 0x2178 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_074[] = { + { 0x004A, 0x006A }, + { 0x0248, 0x0249 }, + { 0x054F, 0x057F }, + { 0x1E54, 0x1E55 }, + { 0x216B, 0x217B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_075[] = { + { 0x004B, 0x006B }, + { 0x014A, 0x014B }, + { 0x054E, 0x057E }, + { 0x216A, 0x217A }, + { 0x2C67, 0x2C68 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_076[] = { + { 0x004C, 0x006C }, + { 0x024E, 0x024F }, + { 0x0549, 0x0579 }, + { 0x1E52, 0x1E53 }, + { 0x216D, 0x217D }, + { 0x2C60, 0x2C61 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_077[] = { + { 0x004D, 0x006D }, + { 0x014C, 0x014D }, + { 0x0548, 0x0578 }, + { 0x216C, 0x217C } +}; + +static const CaseFoldMapping1_16 case_fold1_16_078[] = { + { 0x004E, 0x006E }, + { 0x024C, 0x024D }, + { 0x054B, 0x057B }, + { 0x1E50, 0x1E51 }, + { 0x216F, 0x217F }, + { 0x2C62, 0x026B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_079[] = { + { 0x004F, 0x006F }, + { 0x014E, 0x014F }, + { 0x054A, 0x057A }, + { 0x216E, 0x217E }, + { 0x2C63, 0x1D7D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_080[] = { + { 0x0050, 0x0070 }, + { 0x0555, 0x0585 }, + { 0x1E4E, 0x1E4F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_081[] = { + { 0x0051, 0x0071 }, + { 0x0150, 0x0151 }, + { 0x0554, 0x0584 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_082[] = { + { 0x0052, 0x0072 }, + { 0x1E4C, 0x1E4D }, + { 0x1F4D, 0x1F45 }, + { 0x2C7E, 0x023F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_083[] = { + { 0x0053, 0x0073 }, + { 0x0152, 0x0153 }, + { 0x0556, 0x0586 }, + { 0x1F4C, 0x1F44 }, + { 0x2C7F, 0x0240 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_084[] = { + { 0x0054, 0x0074 }, + { 0x0551, 0x0581 }, + { 0x1E4A, 0x1E4B }, + { 0x1F4B, 0x1F43 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_085[] = { + { 0x0055, 0x0075 }, + { 0x0154, 0x0155 }, + { 0x0550, 0x0580 }, + { 0x1F4A, 0x1F42 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_086[] = { + { 0x0056, 0x0076 }, + { 0x0553, 0x0583 }, + { 0x1E48, 0x1E49 }, + { 0x1F49, 0x1F41 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_087[] = { + { 0x0057, 0x0077 }, + { 0x0156, 0x0157 }, + { 0x0552, 0x0582 }, + { 0x1F48, 0x1F40 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_088[] = { + { 0x0058, 0x0078 }, + { 0x1E46, 0x1E47 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_089[] = { + { 0x0059, 0x0079 }, + { 0x0158, 0x0159 }, + { 0x2C75, 0x2C76 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_090[] = { + { 0x005A, 0x007A }, + { 0x1E44, 0x1E45 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_091[] = { + { 0x015A, 0x015B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_092[] = { + { 0x1E42, 0x1E43 }, + { 0x2C70, 0x0252 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_093[] = { + { 0x015C, 0x015D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_094[] = { + { 0x1E40, 0x1E41 }, + { 0x2C72, 0x2C73 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_095[] = { + { 0x015E, 0x015F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_096[] = { + { 0x0464, 0x0465 }, + { 0x1E7E, 0x1E7F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_097[] = { + { 0x0160, 0x0161 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_098[] = { + { 0x0466, 0x0467 }, + { 0x1E7C, 0x1E7D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_099[] = { + { 0x0162, 0x0163 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_100[] = { + { 0x0460, 0x0461 }, + { 0x1E7A, 0x1E7B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_101[] = { + { 0x0164, 0x0165 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_102[] = { + { 0x0462, 0x0463 }, + { 0x1E78, 0x1E79 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_103[] = { + { 0x0166, 0x0167 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_104[] = { + { 0x046C, 0x046D }, + { 0x1E76, 0x1E77 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_105[] = { + { 0x0168, 0x0169 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_106[] = { + { 0x046E, 0x046F }, + { 0x1E74, 0x1E75 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_107[] = { + { 0x016A, 0x016B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_108[] = { + { 0x0468, 0x0469 }, + { 0x1E72, 0x1E73 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_109[] = { + { 0x016C, 0x016D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_110[] = { + { 0x046A, 0x046B }, + { 0x1E70, 0x1E71 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_111[] = { + { 0x016E, 0x016F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_112[] = { + { 0x0474, 0x0475 }, + { 0x1E6E, 0x1E6F }, + { 0x1F6F, 0x1F67 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_113[] = { + { 0x0170, 0x0171 }, + { 0x0372, 0x0373 }, + { 0x1F6E, 0x1F66 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_114[] = { + { 0x0476, 0x0477 }, + { 0x1E6C, 0x1E6D }, + { 0x1F6D, 0x1F65 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_115[] = { + { 0x0172, 0x0173 }, + { 0x0370, 0x0371 }, + { 0x1F6C, 0x1F64 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_116[] = { + { 0x0470, 0x0471 }, + { 0x1E6A, 0x1E6B }, + { 0x1F6B, 0x1F63 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_117[] = { + { 0x0174, 0x0175 }, + { 0x0376, 0x0377 }, + { 0x1F6A, 0x1F62 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_118[] = { + { 0x0472, 0x0473 }, + { 0x1E68, 0x1E69 }, + { 0x1F69, 0x1F61 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_119[] = { + { 0x0176, 0x0177 }, + { 0x1F68, 0x1F60 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_120[] = { + { 0x0179, 0x017A }, + { 0x047C, 0x047D }, + { 0x1E66, 0x1E67 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_121[] = { + { 0x0178, 0x00FF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_122[] = { + { 0x017B, 0x017C }, + { 0x047E, 0x047F }, + { 0x1E64, 0x1E65 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_124[] = { + { 0x017D, 0x017E }, + { 0x037F, 0x03F3 }, + { 0x0478, 0x0479 }, + { 0x1E62, 0x1E63 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_126[] = { + { 0x017F, 0x0073 }, + { 0x047A, 0x047B }, + { 0x1E60, 0x1E61 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_128[] = { + { 0x0181, 0x0253 }, + { 0x2CAC, 0x2CAD } +}; + +static const CaseFoldMapping1_16 case_fold1_16_129[] = { + { 0xA726, 0xA727 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_130[] = { + { 0x2CAE, 0x2CAF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_131[] = { + { 0x0182, 0x0183 }, + { 0xA724, 0xA725 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_132[] = { + { 0x0480, 0x0481 }, + { 0x2CA8, 0x2CA9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_133[] = { + { 0x0184, 0x0185 }, + { 0x0386, 0x03AC }, + { 0x1E9B, 0x1E61 }, + { 0xA722, 0xA723 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_134[] = { + { 0x0187, 0x0188 }, + { 0x2CAA, 0x2CAB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_135[] = { + { 0x0186, 0x0254 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_136[] = { + { 0x0189, 0x0256 }, + { 0x048C, 0x048D }, + { 0x2CA4, 0x2CA5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_137[] = { + { 0x038A, 0x03AF }, + { 0xA72E, 0xA72F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_138[] = { + { 0x018B, 0x018C }, + { 0x0389, 0x03AE }, + { 0x048E, 0x048F }, + { 0x1E94, 0x1E95 }, + { 0x2CA6, 0x2CA7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_139[] = { + { 0x018A, 0x0257 }, + { 0x0388, 0x03AD }, + { 0xA72C, 0xA72D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_140[] = { + { 0x038F, 0x03CE }, + { 0x1E92, 0x1E93 }, + { 0x2CA0, 0x2CA1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_141[] = { + { 0x038E, 0x03CD }, + { 0xA72A, 0xA72B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_142[] = { + { 0x018F, 0x0259 }, + { 0x048A, 0x048B }, + { 0x1E90, 0x1E91 }, + { 0x2CA2, 0x2CA3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_143[] = { + { 0x018E, 0x01DD }, + { 0x038C, 0x03CC }, + { 0xA728, 0xA729 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_144[] = { + { 0x0191, 0x0192 }, + { 0x0393, 0x03B3 }, + { 0x0494, 0x0495 }, + { 0x1E8E, 0x1E8F }, + { 0x2CBC, 0x2CBD } +}; + +static const CaseFoldMapping1_16 case_fold1_16_145[] = { + { 0x0190, 0x025B }, + { 0x0392, 0x03B2 }, + { 0xA736, 0xA737 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_146[] = { + { 0x0193, 0x0260 }, + { 0x0391, 0x03B1 }, + { 0x0496, 0x0497 }, + { 0x1E8C, 0x1E8D }, + { 0x24B6, 0x24D0 }, + { 0x2CBE, 0x2CBF } +}; + +static const CaseFoldMapping1_16 case_fold1_16_147[] = { + { 0x24B7, 0x24D1 }, + { 0xA734, 0xA735 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_148[] = { + { 0x0397, 0x03B7 }, + { 0x0490, 0x0491 }, + { 0x1E8A, 0x1E8B }, + { 0x2CB8, 0x2CB9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_149[] = { + { 0x0194, 0x0263 }, + { 0x0396, 0x03B6 }, + { 0xA732, 0xA733 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_150[] = { + { 0x0197, 0x0268 }, + { 0x0395, 0x03B5 }, + { 0x0492, 0x0493 }, + { 0x1E88, 0x1E89 }, + { 0x2CBA, 0x2CBB } +}; + +static const CaseFoldMapping1_16 case_fold1_16_151[] = { + { 0x0196, 0x0269 }, + { 0x0394, 0x03B4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_152[] = { + { 0x039B, 0x03BB }, + { 0x049C, 0x049D }, + { 0x1E86, 0x1E87 }, + { 0x24BC, 0x24D6 }, + { 0x2CB4, 0x2CB5 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_153[] = { + { 0x0198, 0x0199 }, + { 0x039A, 0x03BA }, + { 0x24BD, 0x24D7 }, + { 0xA73E, 0xA73F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_154[] = { + { 0x0399, 0x03B9 }, + { 0x049E, 0x049F }, + { 0x1E84, 0x1E85 }, + { 0x24BE, 0x24D8 }, + { 0x2CB6, 0x2CB7 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_155[] = { + { 0x0398, 0x03B8 }, + { 0x24BF, 0x24D9 }, + { 0xA73C, 0xA73D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_156[] = { + { 0x019D, 0x0272 }, + { 0x039F, 0x03BF }, + { 0x0498, 0x0499 }, + { 0x1E82, 0x1E83 }, + { 0x24B8, 0x24D2 }, + { 0x2CB0, 0x2CB1 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_157[] = { + { 0x019C, 0x026F }, + { 0x039E, 0x03BE }, + { 0x24B9, 0x24D3 }, + { 0xA73A, 0xA73B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_158[] = { + { 0x019F, 0x0275 }, + { 0x039D, 0x03BD }, + { 0x049A, 0x049B }, + { 0x1E80, 0x1E81 }, + { 0x24BA, 0x24D4 }, + { 0x2CB2, 0x2CB3 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_159[] = { + { 0x039C, 0x03BC }, + { 0x24BB, 0x24D5 }, + { 0xA738, 0xA739 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_160[] = { + { 0x03A3, 0x03C3 }, + { 0x04A4, 0x04A5 }, + { 0x10B0, 0x2D10 }, + { 0x1EBE, 0x1EBF }, + { 0x2C8C, 0x2C8D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_161[] = { + { 0x01A0, 0x01A1 }, + { 0x10B1, 0x2D11 }, + { 0x1FBE, 0x03B9 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_162[] = { + { 0x03A1, 0x03C1 }, + { 0x04A6, 0x04A7 }, + { 0x10B2, 0x2D12 }, + { 0x1EBC, 0x1EBD }, + { 0x2183, 0x2184 }, + { 0x2C8E, 0x2C8F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_163[] = { + { 0x01A2, 0x01A3 }, + { 0x03A0, 0x03C0 }, + { 0x10B3, 0x2D13 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_164[] = { + { 0x03A7, 0x03C7 }, + { 0x04A0, 0x04A1 }, + { 0x10B4, 0x2D14 }, + { 0x1EBA, 0x1EBB }, + { 0x1FBB, 0x1F71 }, + { 0x2C88, 0x2C89 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_165[] = { + { 0x01A4, 0x01A5 }, + { 0x03A6, 0x03C6 }, + { 0x10B5, 0x2D15 }, + { 0x1FBA, 0x1F70 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_166[] = { + { 0x01A7, 0x01A8 }, + { 0x03A5, 0x03C5 }, + { 0x04A2, 0x04A3 }, + { 0x10B6, 0x2D16 }, + { 0x1EB8, 0x1EB9 }, + { 0x1FB9, 0x1FB1 }, + { 0x2C8A, 0x2C8B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_167[] = { + { 0x01A6, 0x0280 }, + { 0x03A4, 0x03C4 }, + { 0x10B7, 0x2D17 }, + { 0x1FB8, 0x1FB0 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_168[] = { + { 0x01A9, 0x0283 }, + { 0x03AB, 0x03CB }, + { 0x04AC, 0x04AD }, + { 0x10B8, 0x2D18 }, + { 0x1EB6, 0x1EB7 }, + { 0x2C84, 0x2C85 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_169[] = { + { 0x03AA, 0x03CA }, + { 0x10B9, 0x2D19 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_170[] = { + { 0x03A9, 0x03C9 }, + { 0x04AE, 0x04AF }, + { 0x10BA, 0x2D1A }, + { 0x1EB4, 0x1EB5 }, + { 0x2C86, 0x2C87 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_171[] = { + { 0x03A8, 0x03C8 }, + { 0x10BB, 0x2D1B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_172[] = { + { 0x04A8, 0x04A9 }, + { 0x10BC, 0x2D1C }, + { 0x1EB2, 0x1EB3 }, + { 0x2C80, 0x2C81 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_173[] = { + { 0x01AC, 0x01AD }, + { 0x10BD, 0x2D1D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_174[] = { + { 0x01AF, 0x01B0 }, + { 0x04AA, 0x04AB }, + { 0x10BE, 0x2D1E }, + { 0x1EB0, 0x1EB1 }, + { 0x2C82, 0x2C83 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_175[] = { + { 0x01AE, 0x0288 }, + { 0x10BF, 0x2D1F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_176[] = { + { 0x01B1, 0x028A }, + { 0x04B4, 0x04B5 }, + { 0x10A0, 0x2D00 }, + { 0x1EAE, 0x1EAF }, + { 0x2C9C, 0x2C9D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_177[] = { + { 0x10A1, 0x2D01 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_178[] = { + { 0x01B3, 0x01B4 }, + { 0x04B6, 0x04B7 }, + { 0x10A2, 0x2D02 }, + { 0x1EAC, 0x1EAD }, + { 0x2C9E, 0x2C9F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_179[] = { + { 0x01B2, 0x028B }, + { 0x10A3, 0x2D03 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_180[] = { + { 0x01B5, 0x01B6 }, + { 0x04B0, 0x04B1 }, + { 0x10A4, 0x2D04 }, + { 0x1EAA, 0x1EAB }, + { 0x2C98, 0x2C99 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_181[] = { + { 0x00B5, 0x03BC }, + { 0x10A5, 0x2D05 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_182[] = { + { 0x01B7, 0x0292 }, + { 0x04B2, 0x04B3 }, + { 0x10A6, 0x2D06 }, + { 0x1EA8, 0x1EA9 }, + { 0x2C9A, 0x2C9B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_183[] = { + { 0x10A7, 0x2D07 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_184[] = { + { 0x04BC, 0x04BD }, + { 0x10A8, 0x2D08 }, + { 0x1EA6, 0x1EA7 }, + { 0x2C94, 0x2C95 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_185[] = { + { 0x01B8, 0x01B9 }, + { 0x10A9, 0x2D09 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_186[] = { + { 0x04BE, 0x04BF }, + { 0x10AA, 0x2D0A }, + { 0x1EA4, 0x1EA5 }, + { 0x2C96, 0x2C97 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_187[] = { + { 0x10AB, 0x2D0B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_188[] = { + { 0x04B8, 0x04B9 }, + { 0x10AC, 0x2D0C }, + { 0x1EA2, 0x1EA3 }, + { 0x2C90, 0x2C91 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_189[] = { + { 0x01BC, 0x01BD }, + { 0x10AD, 0x2D0D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_190[] = { + { 0x04BA, 0x04BB }, + { 0x10AE, 0x2D0E }, + { 0x1EA0, 0x1EA1 }, + { 0x2C92, 0x2C93 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_191[] = { + { 0x10AF, 0x2D0F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_192[] = { + { 0x00C0, 0x00E0 }, + { 0x1EDE, 0x1EDF }, + { 0xA666, 0xA667 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_193[] = { + { 0x00C1, 0x00E1 }, + { 0x03C2, 0x03C3 }, + { 0x04C5, 0x04C6 }, + { 0x2CED, 0x2CEE }, + { 0xA766, 0xA767 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_194[] = { + { 0x00C2, 0x00E2 }, + { 0x1EDC, 0x1EDD }, + { 0xA664, 0xA665 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_195[] = { + { 0x00C3, 0x00E3 }, + { 0x04C7, 0x04C8 }, + { 0xA764, 0xA765 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_196[] = { + { 0x00C4, 0x00E4 }, + { 0x01C5, 0x01C6 }, + { 0x04C0, 0x04CF }, + { 0x1EDA, 0x1EDB }, + { 0x1FDB, 0x1F77 }, + { 0xA662, 0xA663 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_197[] = { + { 0x00C5, 0x00E5 }, + { 0x01C4, 0x01C6 }, + { 0x04C1, 0x04C2 }, + { 0x1FDA, 0x1F76 }, + { 0xA762, 0xA763 }, + { 0xFF3A, 0xFF5A } +}; + +static const CaseFoldMapping1_16 case_fold1_16_198[] = { + { 0x00C6, 0x00E6 }, + { 0x01C7, 0x01C9 }, + { 0x1ED8, 0x1ED9 }, + { 0x1FD9, 0x1FD1 }, + { 0xA660, 0xA661 }, + { 0xFF39, 0xFF59 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_199[] = { + { 0x00C7, 0x00E7 }, + { 0x04C3, 0x04C4 }, + { 0x1FD8, 0x1FD0 }, + { 0x2CEB, 0x2CEC }, + { 0xA760, 0xA761 }, + { 0xFF38, 0xFF58 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_200[] = { + { 0x00C8, 0x00E8 }, + { 0x1ED6, 0x1ED7 }, + { 0xFF37, 0xFF57 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_201[] = { + { 0x00C9, 0x00E9 }, + { 0x01C8, 0x01C9 }, + { 0x04CD, 0x04CE }, + { 0xA76E, 0xA76F }, + { 0xFF36, 0xFF56 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_202[] = { + { 0x00CA, 0x00EA }, + { 0x01CB, 0x01CC }, + { 0x1ED4, 0x1ED5 }, + { 0xA66C, 0xA66D }, + { 0xFF35, 0xFF55 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_203[] = { + { 0x00CB, 0x00EB }, + { 0x01CA, 0x01CC }, + { 0xA76C, 0xA76D }, + { 0xFF34, 0xFF54 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_204[] = { + { 0x00CC, 0x00EC }, + { 0x01CD, 0x01CE }, + { 0x03CF, 0x03D7 }, + { 0x1ED2, 0x1ED3 }, + { 0x2CE0, 0x2CE1 }, + { 0xA66A, 0xA66B }, + { 0xFF33, 0xFF53 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_205[] = { + { 0x00CD, 0x00ED }, + { 0x04C9, 0x04CA }, + { 0xA76A, 0xA76B }, + { 0xFF32, 0xFF52 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_206[] = { + { 0x00CE, 0x00EE }, + { 0x01CF, 0x01D0 }, + { 0x1ED0, 0x1ED1 }, + { 0x2CE2, 0x2CE3 }, + { 0xA668, 0xA669 }, + { 0xFF31, 0xFF51 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_207[] = { + { 0x00CF, 0x00EF }, + { 0x04CB, 0x04CC }, + { 0xA768, 0xA769 }, + { 0xFF30, 0xFF50 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_208[] = { + { 0x00D0, 0x00F0 }, + { 0x01D1, 0x01D2 }, + { 0x04D4, 0x04D5 }, + { 0x10C0, 0x2D20 }, + { 0x1ECE, 0x1ECF }, + { 0xAB7B, 0x13AB }, + { 0xFF2F, 0xFF4F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_209[] = { + { 0x00D1, 0x00F1 }, + { 0x10C1, 0x2D21 }, + { 0xAB7A, 0x13AA }, + { 0xFF2E, 0xFF4E } +}; + +static const CaseFoldMapping1_16 case_fold1_16_210[] = { + { 0x00D2, 0x00F2 }, + { 0x01D3, 0x01D4 }, + { 0x03D1, 0x03B8 }, + { 0x04D6, 0x04D7 }, + { 0x10C2, 0x2D22 }, + { 0x1ECC, 0x1ECD }, + { 0xAB79, 0x13A9 }, + { 0xFF2D, 0xFF4D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_211[] = { + { 0x00D3, 0x00F3 }, + { 0x03D0, 0x03B2 }, + { 0x10C3, 0x2D23 }, + { 0xAB78, 0x13A8 }, + { 0xFF2C, 0xFF4C } +}; + +static const CaseFoldMapping1_16 case_fold1_16_212[] = { + { 0x00D4, 0x00F4 }, + { 0x01D5, 0x01D6 }, + { 0x04D0, 0x04D1 }, + { 0x10C4, 0x2D24 }, + { 0x1ECA, 0x1ECB }, + { 0x1FCB, 0x1F75 }, + { 0xAB7F, 0x13AF }, + { 0xFF2B, 0xFF4B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_213[] = { + { 0x00D5, 0x00F5 }, + { 0x03D6, 0x03C0 }, + { 0x10C5, 0x2D25 }, + { 0x1FCA, 0x1F74 }, + { 0xAB7E, 0x13AE }, + { 0xFF2A, 0xFF4A } +}; + +static const CaseFoldMapping1_16 case_fold1_16_214[] = { + { 0x00D6, 0x00F6 }, + { 0x01D7, 0x01D8 }, + { 0x03D5, 0x03C6 }, + { 0x04D2, 0x04D3 }, + { 0x1EC8, 0x1EC9 }, + { 0x1FC9, 0x1F73 }, + { 0xAB7D, 0x13AD }, + { 0xFF29, 0xFF49 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_215[] = { + { 0x10C7, 0x2D27 }, + { 0x1FC8, 0x1F72 }, + { 0xAB7C, 0x13AC }, + { 0xFF28, 0xFF48 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_216[] = { + { 0x00D8, 0x00F8 }, + { 0x01D9, 0x01DA }, + { 0x04DC, 0x04DD }, + { 0x1EC6, 0x1EC7 }, + { 0xAB73, 0x13A3 }, + { 0xFF27, 0xFF47 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_217[] = { + { 0x00D9, 0x00F9 }, + { 0x03DA, 0x03DB }, + { 0xA77E, 0xA77F }, + { 0xAB72, 0x13A2 }, + { 0xFF26, 0xFF46 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_218[] = { + { 0x00DA, 0x00FA }, + { 0x01DB, 0x01DC }, + { 0x04DE, 0x04DF }, + { 0x1EC4, 0x1EC5 }, + { 0xA77D, 0x1D79 }, + { 0xAB71, 0x13A1 }, + { 0xFF25, 0xFF45 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_219[] = { + { 0x00DB, 0x00FB }, + { 0x03D8, 0x03D9 }, + { 0xAB70, 0x13A0 }, + { 0xFF24, 0xFF44 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_220[] = { + { 0x00DC, 0x00FC }, + { 0x04D8, 0x04D9 }, + { 0x1EC2, 0x1EC3 }, + { 0xA77B, 0xA77C }, + { 0xAB77, 0x13A7 }, + { 0xFF23, 0xFF43 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_221[] = { + { 0x00DD, 0x00FD }, + { 0x03DE, 0x03DF }, + { 0x10CD, 0x2D2D }, + { 0xAB76, 0x13A6 }, + { 0xFF22, 0xFF42 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_222[] = { + { 0x00DE, 0x00FE }, + { 0x04DA, 0x04DB }, + { 0x1EC0, 0x1EC1 }, + { 0x2CF2, 0x2CF3 }, + { 0xA779, 0xA77A }, + { 0xAB75, 0x13A5 }, + { 0xFF21, 0xFF41 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_223[] = { + { 0x01DE, 0x01DF }, + { 0x03DC, 0x03DD }, + { 0xAB74, 0x13A4 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_224[] = { + { 0x04E4, 0x04E5 }, + { 0x1EFE, 0x1EFF }, + { 0x24C4, 0x24DE }, + { 0x2CCC, 0x2CCD }, + { 0xA646, 0xA647 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_225[] = { + { 0x01E0, 0x01E1 }, + { 0x03E2, 0x03E3 }, + { 0x24C5, 0x24DF }, + { 0xA746, 0xA747 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_226[] = { + { 0x04E6, 0x04E7 }, + { 0x1EFC, 0x1EFD }, + { 0x24C6, 0x24E0 }, + { 0x2CCE, 0x2CCF }, + { 0xA644, 0xA645 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_227[] = { + { 0x01E2, 0x01E3 }, + { 0x03E0, 0x03E1 }, + { 0x24C7, 0x24E1 }, + { 0xA744, 0xA745 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_228[] = { + { 0x04E0, 0x04E1 }, + { 0x1EFA, 0x1EFB }, + { 0x1FFB, 0x1F7D }, + { 0x24C0, 0x24DA }, + { 0x2CC8, 0x2CC9 }, + { 0xA642, 0xA643 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_229[] = { + { 0x01E4, 0x01E5 }, + { 0x03E6, 0x03E7 }, + { 0x1FFA, 0x1F7C }, + { 0x24C1, 0x24DB }, + { 0xA742, 0xA743 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_230[] = { + { 0x04E2, 0x04E3 }, + { 0x1EF8, 0x1EF9 }, + { 0x1FF9, 0x1F79 }, + { 0x24C2, 0x24DC }, + { 0x2CCA, 0x2CCB }, + { 0xA640, 0xA641 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_231[] = { + { 0x01E6, 0x01E7 }, + { 0x03E4, 0x03E5 }, + { 0x1FF8, 0x1F78 }, + { 0x24C3, 0x24DD }, + { 0xA740, 0xA741 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_232[] = { + { 0x04EC, 0x04ED }, + { 0x13FB, 0x13F3 }, + { 0x1EF6, 0x1EF7 }, + { 0x24CC, 0x24E6 }, + { 0x2CC4, 0x2CC5 }, + { 0xA64E, 0xA64F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_233[] = { + { 0x01E8, 0x01E9 }, + { 0x03EA, 0x03EB }, + { 0x13FA, 0x13F2 }, + { 0x24CD, 0x24E7 }, + { 0xA74E, 0xA74F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_234[] = { + { 0x04EE, 0x04EF }, + { 0x13F9, 0x13F1 }, + { 0x1EF4, 0x1EF5 }, + { 0x24CE, 0x24E8 }, + { 0x2CC6, 0x2CC7 }, + { 0xA64C, 0xA64D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_235[] = { + { 0x01EA, 0x01EB }, + { 0x03E8, 0x03E9 }, + { 0x13F8, 0x13F0 }, + { 0x24CF, 0x24E9 }, + { 0xA74C, 0xA74D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_236[] = { + { 0x04E8, 0x04E9 }, + { 0x1EF2, 0x1EF3 }, + { 0x24C8, 0x24E2 }, + { 0x2CC0, 0x2CC1 }, + { 0xA64A, 0xA64B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_237[] = { + { 0x01EC, 0x01ED }, + { 0x03EE, 0x03EF }, + { 0x24C9, 0x24E3 }, + { 0xA74A, 0xA74B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_238[] = { + { 0x04EA, 0x04EB }, + { 0x13FD, 0x13F5 }, + { 0x1EF0, 0x1EF1 }, + { 0x24CA, 0x24E4 }, + { 0x2CC2, 0x2CC3 }, + { 0xA648, 0xA649 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_239[] = { + { 0x01EE, 0x01EF }, + { 0x03EC, 0x03ED }, + { 0x13FC, 0x13F4 }, + { 0x24CB, 0x24E5 }, + { 0xA748, 0xA749 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_240[] = { + { 0x01F1, 0x01F3 }, + { 0x04F4, 0x04F5 }, + { 0x1EEE, 0x1EEF }, + { 0x2CDC, 0x2CDD }, + { 0xA656, 0xA657 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_241[] = { + { 0xA756, 0xA757 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_242[] = { + { 0x03F1, 0x03C1 }, + { 0x04F6, 0x04F7 }, + { 0x1EEC, 0x1EED }, + { 0x2CDE, 0x2CDF }, + { 0xA654, 0xA655 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_243[] = { + { 0x01F2, 0x01F3 }, + { 0x03F0, 0x03BA }, + { 0x1FEC, 0x1FE5 }, + { 0xA754, 0xA755 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_244[] = { + { 0x03F7, 0x03F8 }, + { 0x04F0, 0x04F1 }, + { 0x1EEA, 0x1EEB }, + { 0x1FEB, 0x1F7B }, + { 0x2CD8, 0x2CD9 }, + { 0xA652, 0xA653 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_245[] = { + { 0x01F4, 0x01F5 }, + { 0x1FEA, 0x1F7A }, + { 0xA752, 0xA753 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_246[] = { + { 0x01F7, 0x01BF }, + { 0x03F5, 0x03B5 }, + { 0x04F2, 0x04F3 }, + { 0x1EE8, 0x1EE9 }, + { 0x1FE9, 0x1FE1 }, + { 0x2CDA, 0x2CDB }, + { 0xA650, 0xA651 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_247[] = { + { 0x01F6, 0x0195 }, + { 0x03F4, 0x03B8 }, + { 0x1FE8, 0x1FE0 }, + { 0xA750, 0xA751 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_248[] = { + { 0x04FC, 0x04FD }, + { 0x1EE6, 0x1EE7 }, + { 0x2CD4, 0x2CD5 }, + { 0xA65E, 0xA65F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_249[] = { + { 0x01F8, 0x01F9 }, + { 0x03FA, 0x03FB }, + { 0xA75E, 0xA75F } +}; + +static const CaseFoldMapping1_16 case_fold1_16_250[] = { + { 0x03F9, 0x03F2 }, + { 0x04FE, 0x04FF }, + { 0x1EE4, 0x1EE5 }, + { 0x2CD6, 0x2CD7 }, + { 0xA65C, 0xA65D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_251[] = { + { 0x01FA, 0x01FB }, + { 0xA75C, 0xA75D } +}; + +static const CaseFoldMapping1_16 case_fold1_16_252[] = { + { 0x03FF, 0x037D }, + { 0x04F8, 0x04F9 }, + { 0x1EE2, 0x1EE3 }, + { 0x2CD0, 0x2CD1 }, + { 0xA65A, 0xA65B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_253[] = { + { 0x01FC, 0x01FD }, + { 0x03FE, 0x037C }, + { 0xA75A, 0xA75B } +}; + +static const CaseFoldMapping1_16 case_fold1_16_254[] = { + { 0x03FD, 0x037B }, + { 0x04FA, 0x04FB }, + { 0x1EE0, 0x1EE1 }, + { 0x2CD2, 0x2CD3 }, + { 0xA658, 0xA659 } +}; + +static const CaseFoldMapping1_16 case_fold1_16_255[] = { + { 0x01FE, 0x01FF }, + { 0xA758, 0xA759 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_000[] = { + { 0x10404, 0x1042C }, + { 0x10414, 0x1043C }, + { 0x10424, 0x1044C }, + { 0x10C8C, 0x10CCC }, + { 0x10C9C, 0x10CDC }, + { 0x10CAC, 0x10CEC }, + { 0x118A8, 0x118C8 }, + { 0x118B8, 0x118D8 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_001[] = { + { 0x10405, 0x1042D }, + { 0x10415, 0x1043D }, + { 0x10425, 0x1044D }, + { 0x10C8D, 0x10CCD }, + { 0x10C9D, 0x10CDD }, + { 0x10CAD, 0x10CED }, + { 0x118A9, 0x118C9 }, + { 0x118B9, 0x118D9 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_002[] = { + { 0x10406, 0x1042E }, + { 0x10416, 0x1043E }, + { 0x10426, 0x1044E }, + { 0x10C8E, 0x10CCE }, + { 0x10C9E, 0x10CDE }, + { 0x10CAE, 0x10CEE }, + { 0x118AA, 0x118CA }, + { 0x118BA, 0x118DA } +}; + +static const CaseFoldMapping1_32 case_fold1_32_003[] = { + { 0x10407, 0x1042F }, + { 0x10417, 0x1043F }, + { 0x10427, 0x1044F }, + { 0x10C8F, 0x10CCF }, + { 0x10C9F, 0x10CDF }, + { 0x10CAF, 0x10CEF }, + { 0x118AB, 0x118CB }, + { 0x118BB, 0x118DB } +}; + +static const CaseFoldMapping1_32 case_fold1_32_004[] = { + { 0x10400, 0x10428 }, + { 0x10410, 0x10438 }, + { 0x10420, 0x10448 }, + { 0x10C88, 0x10CC8 }, + { 0x10C98, 0x10CD8 }, + { 0x10CA8, 0x10CE8 }, + { 0x118AC, 0x118CC }, + { 0x118BC, 0x118DC } +}; + +static const CaseFoldMapping1_32 case_fold1_32_005[] = { + { 0x10401, 0x10429 }, + { 0x10411, 0x10439 }, + { 0x10421, 0x10449 }, + { 0x10C89, 0x10CC9 }, + { 0x10C99, 0x10CD9 }, + { 0x10CA9, 0x10CE9 }, + { 0x118AD, 0x118CD }, + { 0x118BD, 0x118DD } +}; + +static const CaseFoldMapping1_32 case_fold1_32_006[] = { + { 0x10402, 0x1042A }, + { 0x10412, 0x1043A }, + { 0x10422, 0x1044A }, + { 0x10C8A, 0x10CCA }, + { 0x10C9A, 0x10CDA }, + { 0x10CAA, 0x10CEA }, + { 0x118AE, 0x118CE }, + { 0x118BE, 0x118DE } +}; + +static const CaseFoldMapping1_32 case_fold1_32_007[] = { + { 0x10403, 0x1042B }, + { 0x10413, 0x1043B }, + { 0x10423, 0x1044B }, + { 0x10C8B, 0x10CCB }, + { 0x10C9B, 0x10CDB }, + { 0x10CAB, 0x10CEB }, + { 0x118AF, 0x118CF }, + { 0x118BF, 0x118DF } +}; + +static const CaseFoldMapping1_32 case_fold1_32_008[] = { + { 0x1040C, 0x10434 }, + { 0x1041C, 0x10444 }, + { 0x10C84, 0x10CC4 }, + { 0x10C94, 0x10CD4 }, + { 0x10CA4, 0x10CE4 }, + { 0x118A0, 0x118C0 }, + { 0x118B0, 0x118D0 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_009[] = { + { 0x1040D, 0x10435 }, + { 0x1041D, 0x10445 }, + { 0x10C85, 0x10CC5 }, + { 0x10C95, 0x10CD5 }, + { 0x10CA5, 0x10CE5 }, + { 0x118A1, 0x118C1 }, + { 0x118B1, 0x118D1 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_010[] = { + { 0x1040E, 0x10436 }, + { 0x1041E, 0x10446 }, + { 0x10C86, 0x10CC6 }, + { 0x10C96, 0x10CD6 }, + { 0x10CA6, 0x10CE6 }, + { 0x118A2, 0x118C2 }, + { 0x118B2, 0x118D2 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_011[] = { + { 0x1040F, 0x10437 }, + { 0x1041F, 0x10447 }, + { 0x10C87, 0x10CC7 }, + { 0x10C97, 0x10CD7 }, + { 0x10CA7, 0x10CE7 }, + { 0x118A3, 0x118C3 }, + { 0x118B3, 0x118D3 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_012[] = { + { 0x10408, 0x10430 }, + { 0x10418, 0x10440 }, + { 0x10C80, 0x10CC0 }, + { 0x10C90, 0x10CD0 }, + { 0x10CA0, 0x10CE0 }, + { 0x10CB0, 0x10CF0 }, + { 0x118A4, 0x118C4 }, + { 0x118B4, 0x118D4 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_013[] = { + { 0x10409, 0x10431 }, + { 0x10419, 0x10441 }, + { 0x10C81, 0x10CC1 }, + { 0x10C91, 0x10CD1 }, + { 0x10CA1, 0x10CE1 }, + { 0x10CB1, 0x10CF1 }, + { 0x118A5, 0x118C5 }, + { 0x118B5, 0x118D5 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_014[] = { + { 0x1040A, 0x10432 }, + { 0x1041A, 0x10442 }, + { 0x10C82, 0x10CC2 }, + { 0x10C92, 0x10CD2 }, + { 0x10CA2, 0x10CE2 }, + { 0x10CB2, 0x10CF2 }, + { 0x118A6, 0x118C6 }, + { 0x118B6, 0x118D6 } +}; + +static const CaseFoldMapping1_32 case_fold1_32_015[] = { + { 0x1040B, 0x10433 }, + { 0x1041B, 0x10443 }, + { 0x10C83, 0x10CC3 }, + { 0x10C93, 0x10CD3 }, + { 0x10CA3, 0x10CE3 }, + { 0x118A7, 0x118C7 }, + { 0x118B7, 0x118D7 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_000[] = { + { 0x1E9E, 0x0073, 0x0073 }, + { 0x1F8F, 0x1F07, 0x03B9 }, + { 0x1F9F, 0x1F27, 0x03B9 }, + { 0x1FAF, 0x1F67, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_001[] = { + { 0x0130, 0x0069, 0x0307 }, + { 0x01F0, 0x006A, 0x030C }, + { 0x1F8E, 0x1F06, 0x03B9 }, + { 0x1F9E, 0x1F26, 0x03B9 }, + { 0x1FAE, 0x1F66, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_002[] = { + { 0x0587, 0x0565, 0x0582 }, + { 0x1F8D, 0x1F05, 0x03B9 }, + { 0x1F9D, 0x1F25, 0x03B9 }, + { 0x1FAD, 0x1F65, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_003[] = { + { 0x1F8C, 0x1F04, 0x03B9 }, + { 0x1F9C, 0x1F24, 0x03B9 }, + { 0x1FAC, 0x1F64, 0x03B9 }, + { 0x1FBC, 0x03B1, 0x03B9 }, + { 0x1FCC, 0x03B7, 0x03B9 }, + { 0x1FFC, 0x03C9, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_004[] = { + { 0x1E9A, 0x0061, 0x02BE }, + { 0x1F8B, 0x1F03, 0x03B9 }, + { 0x1F9B, 0x1F23, 0x03B9 }, + { 0x1FAB, 0x1F63, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_005[] = { + { 0x1F8A, 0x1F02, 0x03B9 }, + { 0x1F9A, 0x1F22, 0x03B9 }, + { 0x1FAA, 0x1F62, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_006[] = { + { 0x1E98, 0x0077, 0x030A }, + { 0x1F89, 0x1F01, 0x03B9 }, + { 0x1F99, 0x1F21, 0x03B9 }, + { 0x1FA9, 0x1F61, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_007[] = { + { 0x1E99, 0x0079, 0x030A }, + { 0x1F88, 0x1F00, 0x03B9 }, + { 0x1F98, 0x1F20, 0x03B9 }, + { 0x1FA8, 0x1F60, 0x03B9 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_008[] = { + { 0x0149, 0x02BC, 0x006E }, + { 0x1E96, 0x0068, 0x0331 }, + { 0x1F87, 0x1F07, 0x03B9 }, + { 0x1F97, 0x1F27, 0x03B9 }, + { 0x1FA7, 0x1F67, 0x03B9 }, + { 0xFB13, 0x0574, 0x0576 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_009[] = { + { 0x1E97, 0x0074, 0x0308 }, + { 0x1F86, 0x1F06, 0x03B9 }, + { 0x1F96, 0x1F26, 0x03B9 }, + { 0x1FA6, 0x1F66, 0x03B9 }, + { 0x1FB6, 0x03B1, 0x0342 }, + { 0x1FC6, 0x03B7, 0x0342 }, + { 0x1FD6, 0x03B9, 0x0342 }, + { 0x1FE6, 0x03C5, 0x0342 }, + { 0x1FF6, 0x03C9, 0x0342 }, + { 0xFB02, 0x0066, 0x006C } +}; + +static const CaseFoldMapping2_16 case_fold2_16_010[] = { + { 0x1F85, 0x1F05, 0x03B9 }, + { 0x1F95, 0x1F25, 0x03B9 }, + { 0x1FA5, 0x1F65, 0x03B9 }, + { 0xFB01, 0x0066, 0x0069 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_011[] = { + { 0x1F84, 0x1F04, 0x03B9 }, + { 0x1F94, 0x1F24, 0x03B9 }, + { 0x1FA4, 0x1F64, 0x03B9 }, + { 0x1FB4, 0x03AC, 0x03B9 }, + { 0x1FC4, 0x03AE, 0x03B9 }, + { 0x1FE4, 0x03C1, 0x0313 }, + { 0x1FF4, 0x03CE, 0x03B9 }, + { 0xFB00, 0x0066, 0x0066 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_012[] = { + { 0x1F83, 0x1F03, 0x03B9 }, + { 0x1F93, 0x1F23, 0x03B9 }, + { 0x1FA3, 0x1F63, 0x03B9 }, + { 0x1FB3, 0x03B1, 0x03B9 }, + { 0x1FC3, 0x03B7, 0x03B9 }, + { 0x1FF3, 0x03C9, 0x03B9 }, + { 0xFB17, 0x0574, 0x056D } +}; + +static const CaseFoldMapping2_16 case_fold2_16_013[] = { + { 0x1F82, 0x1F02, 0x03B9 }, + { 0x1F92, 0x1F22, 0x03B9 }, + { 0x1FA2, 0x1F62, 0x03B9 }, + { 0x1FB2, 0x1F70, 0x03B9 }, + { 0x1FC2, 0x1F74, 0x03B9 }, + { 0x1FF2, 0x1F7C, 0x03B9 }, + { 0xFB06, 0x0073, 0x0074 }, + { 0xFB16, 0x057E, 0x0576 } +}; + +static const CaseFoldMapping2_16 case_fold2_16_014[] = { + { 0x1F81, 0x1F01, 0x03B9 }, + { 0x1F91, 0x1F21, 0x03B9 }, + { 0x1FA1, 0x1F61, 0x03B9 }, + { 0xFB05, 0x0073, 0x0074 }, + { 0xFB15, 0x0574, 0x056B } +}; + +static const CaseFoldMapping2_16 case_fold2_16_015[] = { + { 0x00DF, 0x0073, 0x0073 }, + { 0x1F50, 0x03C5, 0x0313 }, + { 0x1F80, 0x1F00, 0x03B9 }, + { 0x1F90, 0x1F20, 0x03B9 }, + { 0x1FA0, 0x1F60, 0x03B9 }, + { 0xFB14, 0x0574, 0x0565 } +}; + +static const CaseFoldMapping3_16 case_fold3_16_000[] = { + { 0x1FB7, 0x03B1, 0x0342, 0x03B9 }, + { 0x1FC7, 0x03B7, 0x0342, 0x03B9 }, + { 0x1FD3, 0x03B9, 0x0308, 0x0301 }, + { 0x1FD7, 0x03B9, 0x0308, 0x0342 }, + { 0x1FE3, 0x03C5, 0x0308, 0x0301 }, + { 0x1FE7, 0x03C5, 0x0308, 0x0342 }, + { 0x1FF7, 0x03C9, 0x0342, 0x03B9 }, + { 0xFB03, 0x0066, 0x0066, 0x0069 } +}; + +static const CaseFoldMapping3_16 case_fold3_16_001[] = { + { 0x1F52, 0x03C5, 0x0313, 0x0300 }, + { 0x1F56, 0x03C5, 0x0313, 0x0342 }, + { 0x1FD2, 0x03B9, 0x0308, 0x0300 }, + { 0x1FE2, 0x03C5, 0x0308, 0x0300 } +}; + +static const CaseFoldMapping3_16 case_fold3_16_003[] = { + { 0x0390, 0x03B9, 0x0308, 0x0301 }, + { 0x03B0, 0x03C5, 0x0308, 0x0301 }, + { 0x1F54, 0x03C5, 0x0313, 0x0301 }, + { 0xFB04, 0x0066, 0x0066, 0x006C } +}; + +static const CaseFoldHashBucket1_16 case_fold_hash1_16[] = { + { case_fold1_16_000, __PHYSFS_ARRAYLEN(case_fold1_16_000) }, + { case_fold1_16_001, __PHYSFS_ARRAYLEN(case_fold1_16_001) }, + { case_fold1_16_002, __PHYSFS_ARRAYLEN(case_fold1_16_002) }, + { case_fold1_16_003, __PHYSFS_ARRAYLEN(case_fold1_16_003) }, + { case_fold1_16_004, __PHYSFS_ARRAYLEN(case_fold1_16_004) }, + { case_fold1_16_005, __PHYSFS_ARRAYLEN(case_fold1_16_005) }, + { case_fold1_16_006, __PHYSFS_ARRAYLEN(case_fold1_16_006) }, + { case_fold1_16_007, __PHYSFS_ARRAYLEN(case_fold1_16_007) }, + { case_fold1_16_008, __PHYSFS_ARRAYLEN(case_fold1_16_008) }, + { case_fold1_16_009, __PHYSFS_ARRAYLEN(case_fold1_16_009) }, + { case_fold1_16_010, __PHYSFS_ARRAYLEN(case_fold1_16_010) }, + { case_fold1_16_011, __PHYSFS_ARRAYLEN(case_fold1_16_011) }, + { case_fold1_16_012, __PHYSFS_ARRAYLEN(case_fold1_16_012) }, + { case_fold1_16_013, __PHYSFS_ARRAYLEN(case_fold1_16_013) }, + { case_fold1_16_014, __PHYSFS_ARRAYLEN(case_fold1_16_014) }, + { case_fold1_16_015, __PHYSFS_ARRAYLEN(case_fold1_16_015) }, + { case_fold1_16_016, __PHYSFS_ARRAYLEN(case_fold1_16_016) }, + { case_fold1_16_017, __PHYSFS_ARRAYLEN(case_fold1_16_017) }, + { case_fold1_16_018, __PHYSFS_ARRAYLEN(case_fold1_16_018) }, + { case_fold1_16_019, __PHYSFS_ARRAYLEN(case_fold1_16_019) }, + { case_fold1_16_020, __PHYSFS_ARRAYLEN(case_fold1_16_020) }, + { case_fold1_16_021, __PHYSFS_ARRAYLEN(case_fold1_16_021) }, + { case_fold1_16_022, __PHYSFS_ARRAYLEN(case_fold1_16_022) }, + { case_fold1_16_023, __PHYSFS_ARRAYLEN(case_fold1_16_023) }, + { case_fold1_16_024, __PHYSFS_ARRAYLEN(case_fold1_16_024) }, + { case_fold1_16_025, __PHYSFS_ARRAYLEN(case_fold1_16_025) }, + { case_fold1_16_026, __PHYSFS_ARRAYLEN(case_fold1_16_026) }, + { case_fold1_16_027, __PHYSFS_ARRAYLEN(case_fold1_16_027) }, + { case_fold1_16_028, __PHYSFS_ARRAYLEN(case_fold1_16_028) }, + { case_fold1_16_029, __PHYSFS_ARRAYLEN(case_fold1_16_029) }, + { case_fold1_16_030, __PHYSFS_ARRAYLEN(case_fold1_16_030) }, + { case_fold1_16_031, __PHYSFS_ARRAYLEN(case_fold1_16_031) }, + { case_fold1_16_032, __PHYSFS_ARRAYLEN(case_fold1_16_032) }, + { case_fold1_16_033, __PHYSFS_ARRAYLEN(case_fold1_16_033) }, + { case_fold1_16_034, __PHYSFS_ARRAYLEN(case_fold1_16_034) }, + { case_fold1_16_035, __PHYSFS_ARRAYLEN(case_fold1_16_035) }, + { case_fold1_16_036, __PHYSFS_ARRAYLEN(case_fold1_16_036) }, + { case_fold1_16_037, __PHYSFS_ARRAYLEN(case_fold1_16_037) }, + { case_fold1_16_038, __PHYSFS_ARRAYLEN(case_fold1_16_038) }, + { case_fold1_16_039, __PHYSFS_ARRAYLEN(case_fold1_16_039) }, + { case_fold1_16_040, __PHYSFS_ARRAYLEN(case_fold1_16_040) }, + { case_fold1_16_041, __PHYSFS_ARRAYLEN(case_fold1_16_041) }, + { case_fold1_16_042, __PHYSFS_ARRAYLEN(case_fold1_16_042) }, + { case_fold1_16_043, __PHYSFS_ARRAYLEN(case_fold1_16_043) }, + { case_fold1_16_044, __PHYSFS_ARRAYLEN(case_fold1_16_044) }, + { case_fold1_16_045, __PHYSFS_ARRAYLEN(case_fold1_16_045) }, + { case_fold1_16_046, __PHYSFS_ARRAYLEN(case_fold1_16_046) }, + { case_fold1_16_047, __PHYSFS_ARRAYLEN(case_fold1_16_047) }, + { case_fold1_16_048, __PHYSFS_ARRAYLEN(case_fold1_16_048) }, + { case_fold1_16_049, __PHYSFS_ARRAYLEN(case_fold1_16_049) }, + { case_fold1_16_050, __PHYSFS_ARRAYLEN(case_fold1_16_050) }, + { case_fold1_16_051, __PHYSFS_ARRAYLEN(case_fold1_16_051) }, + { case_fold1_16_052, __PHYSFS_ARRAYLEN(case_fold1_16_052) }, + { case_fold1_16_053, __PHYSFS_ARRAYLEN(case_fold1_16_053) }, + { case_fold1_16_054, __PHYSFS_ARRAYLEN(case_fold1_16_054) }, + { case_fold1_16_055, __PHYSFS_ARRAYLEN(case_fold1_16_055) }, + { case_fold1_16_056, __PHYSFS_ARRAYLEN(case_fold1_16_056) }, + { case_fold1_16_057, __PHYSFS_ARRAYLEN(case_fold1_16_057) }, + { case_fold1_16_058, __PHYSFS_ARRAYLEN(case_fold1_16_058) }, + { case_fold1_16_059, __PHYSFS_ARRAYLEN(case_fold1_16_059) }, + { case_fold1_16_060, __PHYSFS_ARRAYLEN(case_fold1_16_060) }, + { case_fold1_16_061, __PHYSFS_ARRAYLEN(case_fold1_16_061) }, + { case_fold1_16_062, __PHYSFS_ARRAYLEN(case_fold1_16_062) }, + { case_fold1_16_063, __PHYSFS_ARRAYLEN(case_fold1_16_063) }, + { case_fold1_16_064, __PHYSFS_ARRAYLEN(case_fold1_16_064) }, + { case_fold1_16_065, __PHYSFS_ARRAYLEN(case_fold1_16_065) }, + { case_fold1_16_066, __PHYSFS_ARRAYLEN(case_fold1_16_066) }, + { case_fold1_16_067, __PHYSFS_ARRAYLEN(case_fold1_16_067) }, + { case_fold1_16_068, __PHYSFS_ARRAYLEN(case_fold1_16_068) }, + { case_fold1_16_069, __PHYSFS_ARRAYLEN(case_fold1_16_069) }, + { case_fold1_16_070, __PHYSFS_ARRAYLEN(case_fold1_16_070) }, + { case_fold1_16_071, __PHYSFS_ARRAYLEN(case_fold1_16_071) }, + { case_fold1_16_072, __PHYSFS_ARRAYLEN(case_fold1_16_072) }, + { case_fold1_16_073, __PHYSFS_ARRAYLEN(case_fold1_16_073) }, + { case_fold1_16_074, __PHYSFS_ARRAYLEN(case_fold1_16_074) }, + { case_fold1_16_075, __PHYSFS_ARRAYLEN(case_fold1_16_075) }, + { case_fold1_16_076, __PHYSFS_ARRAYLEN(case_fold1_16_076) }, + { case_fold1_16_077, __PHYSFS_ARRAYLEN(case_fold1_16_077) }, + { case_fold1_16_078, __PHYSFS_ARRAYLEN(case_fold1_16_078) }, + { case_fold1_16_079, __PHYSFS_ARRAYLEN(case_fold1_16_079) }, + { case_fold1_16_080, __PHYSFS_ARRAYLEN(case_fold1_16_080) }, + { case_fold1_16_081, __PHYSFS_ARRAYLEN(case_fold1_16_081) }, + { case_fold1_16_082, __PHYSFS_ARRAYLEN(case_fold1_16_082) }, + { case_fold1_16_083, __PHYSFS_ARRAYLEN(case_fold1_16_083) }, + { case_fold1_16_084, __PHYSFS_ARRAYLEN(case_fold1_16_084) }, + { case_fold1_16_085, __PHYSFS_ARRAYLEN(case_fold1_16_085) }, + { case_fold1_16_086, __PHYSFS_ARRAYLEN(case_fold1_16_086) }, + { case_fold1_16_087, __PHYSFS_ARRAYLEN(case_fold1_16_087) }, + { case_fold1_16_088, __PHYSFS_ARRAYLEN(case_fold1_16_088) }, + { case_fold1_16_089, __PHYSFS_ARRAYLEN(case_fold1_16_089) }, + { case_fold1_16_090, __PHYSFS_ARRAYLEN(case_fold1_16_090) }, + { case_fold1_16_091, __PHYSFS_ARRAYLEN(case_fold1_16_091) }, + { case_fold1_16_092, __PHYSFS_ARRAYLEN(case_fold1_16_092) }, + { case_fold1_16_093, __PHYSFS_ARRAYLEN(case_fold1_16_093) }, + { case_fold1_16_094, __PHYSFS_ARRAYLEN(case_fold1_16_094) }, + { case_fold1_16_095, __PHYSFS_ARRAYLEN(case_fold1_16_095) }, + { case_fold1_16_096, __PHYSFS_ARRAYLEN(case_fold1_16_096) }, + { case_fold1_16_097, __PHYSFS_ARRAYLEN(case_fold1_16_097) }, + { case_fold1_16_098, __PHYSFS_ARRAYLEN(case_fold1_16_098) }, + { case_fold1_16_099, __PHYSFS_ARRAYLEN(case_fold1_16_099) }, + { case_fold1_16_100, __PHYSFS_ARRAYLEN(case_fold1_16_100) }, + { case_fold1_16_101, __PHYSFS_ARRAYLEN(case_fold1_16_101) }, + { case_fold1_16_102, __PHYSFS_ARRAYLEN(case_fold1_16_102) }, + { case_fold1_16_103, __PHYSFS_ARRAYLEN(case_fold1_16_103) }, + { case_fold1_16_104, __PHYSFS_ARRAYLEN(case_fold1_16_104) }, + { case_fold1_16_105, __PHYSFS_ARRAYLEN(case_fold1_16_105) }, + { case_fold1_16_106, __PHYSFS_ARRAYLEN(case_fold1_16_106) }, + { case_fold1_16_107, __PHYSFS_ARRAYLEN(case_fold1_16_107) }, + { case_fold1_16_108, __PHYSFS_ARRAYLEN(case_fold1_16_108) }, + { case_fold1_16_109, __PHYSFS_ARRAYLEN(case_fold1_16_109) }, + { case_fold1_16_110, __PHYSFS_ARRAYLEN(case_fold1_16_110) }, + { case_fold1_16_111, __PHYSFS_ARRAYLEN(case_fold1_16_111) }, + { case_fold1_16_112, __PHYSFS_ARRAYLEN(case_fold1_16_112) }, + { case_fold1_16_113, __PHYSFS_ARRAYLEN(case_fold1_16_113) }, + { case_fold1_16_114, __PHYSFS_ARRAYLEN(case_fold1_16_114) }, + { case_fold1_16_115, __PHYSFS_ARRAYLEN(case_fold1_16_115) }, + { case_fold1_16_116, __PHYSFS_ARRAYLEN(case_fold1_16_116) }, + { case_fold1_16_117, __PHYSFS_ARRAYLEN(case_fold1_16_117) }, + { case_fold1_16_118, __PHYSFS_ARRAYLEN(case_fold1_16_118) }, + { case_fold1_16_119, __PHYSFS_ARRAYLEN(case_fold1_16_119) }, + { case_fold1_16_120, __PHYSFS_ARRAYLEN(case_fold1_16_120) }, + { case_fold1_16_121, __PHYSFS_ARRAYLEN(case_fold1_16_121) }, + { case_fold1_16_122, __PHYSFS_ARRAYLEN(case_fold1_16_122) }, + { NULL, 0 }, + { case_fold1_16_124, __PHYSFS_ARRAYLEN(case_fold1_16_124) }, + { NULL, 0 }, + { case_fold1_16_126, __PHYSFS_ARRAYLEN(case_fold1_16_126) }, + { NULL, 0 }, + { case_fold1_16_128, __PHYSFS_ARRAYLEN(case_fold1_16_128) }, + { case_fold1_16_129, __PHYSFS_ARRAYLEN(case_fold1_16_129) }, + { case_fold1_16_130, __PHYSFS_ARRAYLEN(case_fold1_16_130) }, + { case_fold1_16_131, __PHYSFS_ARRAYLEN(case_fold1_16_131) }, + { case_fold1_16_132, __PHYSFS_ARRAYLEN(case_fold1_16_132) }, + { case_fold1_16_133, __PHYSFS_ARRAYLEN(case_fold1_16_133) }, + { case_fold1_16_134, __PHYSFS_ARRAYLEN(case_fold1_16_134) }, + { case_fold1_16_135, __PHYSFS_ARRAYLEN(case_fold1_16_135) }, + { case_fold1_16_136, __PHYSFS_ARRAYLEN(case_fold1_16_136) }, + { case_fold1_16_137, __PHYSFS_ARRAYLEN(case_fold1_16_137) }, + { case_fold1_16_138, __PHYSFS_ARRAYLEN(case_fold1_16_138) }, + { case_fold1_16_139, __PHYSFS_ARRAYLEN(case_fold1_16_139) }, + { case_fold1_16_140, __PHYSFS_ARRAYLEN(case_fold1_16_140) }, + { case_fold1_16_141, __PHYSFS_ARRAYLEN(case_fold1_16_141) }, + { case_fold1_16_142, __PHYSFS_ARRAYLEN(case_fold1_16_142) }, + { case_fold1_16_143, __PHYSFS_ARRAYLEN(case_fold1_16_143) }, + { case_fold1_16_144, __PHYSFS_ARRAYLEN(case_fold1_16_144) }, + { case_fold1_16_145, __PHYSFS_ARRAYLEN(case_fold1_16_145) }, + { case_fold1_16_146, __PHYSFS_ARRAYLEN(case_fold1_16_146) }, + { case_fold1_16_147, __PHYSFS_ARRAYLEN(case_fold1_16_147) }, + { case_fold1_16_148, __PHYSFS_ARRAYLEN(case_fold1_16_148) }, + { case_fold1_16_149, __PHYSFS_ARRAYLEN(case_fold1_16_149) }, + { case_fold1_16_150, __PHYSFS_ARRAYLEN(case_fold1_16_150) }, + { case_fold1_16_151, __PHYSFS_ARRAYLEN(case_fold1_16_151) }, + { case_fold1_16_152, __PHYSFS_ARRAYLEN(case_fold1_16_152) }, + { case_fold1_16_153, __PHYSFS_ARRAYLEN(case_fold1_16_153) }, + { case_fold1_16_154, __PHYSFS_ARRAYLEN(case_fold1_16_154) }, + { case_fold1_16_155, __PHYSFS_ARRAYLEN(case_fold1_16_155) }, + { case_fold1_16_156, __PHYSFS_ARRAYLEN(case_fold1_16_156) }, + { case_fold1_16_157, __PHYSFS_ARRAYLEN(case_fold1_16_157) }, + { case_fold1_16_158, __PHYSFS_ARRAYLEN(case_fold1_16_158) }, + { case_fold1_16_159, __PHYSFS_ARRAYLEN(case_fold1_16_159) }, + { case_fold1_16_160, __PHYSFS_ARRAYLEN(case_fold1_16_160) }, + { case_fold1_16_161, __PHYSFS_ARRAYLEN(case_fold1_16_161) }, + { case_fold1_16_162, __PHYSFS_ARRAYLEN(case_fold1_16_162) }, + { case_fold1_16_163, __PHYSFS_ARRAYLEN(case_fold1_16_163) }, + { case_fold1_16_164, __PHYSFS_ARRAYLEN(case_fold1_16_164) }, + { case_fold1_16_165, __PHYSFS_ARRAYLEN(case_fold1_16_165) }, + { case_fold1_16_166, __PHYSFS_ARRAYLEN(case_fold1_16_166) }, + { case_fold1_16_167, __PHYSFS_ARRAYLEN(case_fold1_16_167) }, + { case_fold1_16_168, __PHYSFS_ARRAYLEN(case_fold1_16_168) }, + { case_fold1_16_169, __PHYSFS_ARRAYLEN(case_fold1_16_169) }, + { case_fold1_16_170, __PHYSFS_ARRAYLEN(case_fold1_16_170) }, + { case_fold1_16_171, __PHYSFS_ARRAYLEN(case_fold1_16_171) }, + { case_fold1_16_172, __PHYSFS_ARRAYLEN(case_fold1_16_172) }, + { case_fold1_16_173, __PHYSFS_ARRAYLEN(case_fold1_16_173) }, + { case_fold1_16_174, __PHYSFS_ARRAYLEN(case_fold1_16_174) }, + { case_fold1_16_175, __PHYSFS_ARRAYLEN(case_fold1_16_175) }, + { case_fold1_16_176, __PHYSFS_ARRAYLEN(case_fold1_16_176) }, + { case_fold1_16_177, __PHYSFS_ARRAYLEN(case_fold1_16_177) }, + { case_fold1_16_178, __PHYSFS_ARRAYLEN(case_fold1_16_178) }, + { case_fold1_16_179, __PHYSFS_ARRAYLEN(case_fold1_16_179) }, + { case_fold1_16_180, __PHYSFS_ARRAYLEN(case_fold1_16_180) }, + { case_fold1_16_181, __PHYSFS_ARRAYLEN(case_fold1_16_181) }, + { case_fold1_16_182, __PHYSFS_ARRAYLEN(case_fold1_16_182) }, + { case_fold1_16_183, __PHYSFS_ARRAYLEN(case_fold1_16_183) }, + { case_fold1_16_184, __PHYSFS_ARRAYLEN(case_fold1_16_184) }, + { case_fold1_16_185, __PHYSFS_ARRAYLEN(case_fold1_16_185) }, + { case_fold1_16_186, __PHYSFS_ARRAYLEN(case_fold1_16_186) }, + { case_fold1_16_187, __PHYSFS_ARRAYLEN(case_fold1_16_187) }, + { case_fold1_16_188, __PHYSFS_ARRAYLEN(case_fold1_16_188) }, + { case_fold1_16_189, __PHYSFS_ARRAYLEN(case_fold1_16_189) }, + { case_fold1_16_190, __PHYSFS_ARRAYLEN(case_fold1_16_190) }, + { case_fold1_16_191, __PHYSFS_ARRAYLEN(case_fold1_16_191) }, + { case_fold1_16_192, __PHYSFS_ARRAYLEN(case_fold1_16_192) }, + { case_fold1_16_193, __PHYSFS_ARRAYLEN(case_fold1_16_193) }, + { case_fold1_16_194, __PHYSFS_ARRAYLEN(case_fold1_16_194) }, + { case_fold1_16_195, __PHYSFS_ARRAYLEN(case_fold1_16_195) }, + { case_fold1_16_196, __PHYSFS_ARRAYLEN(case_fold1_16_196) }, + { case_fold1_16_197, __PHYSFS_ARRAYLEN(case_fold1_16_197) }, + { case_fold1_16_198, __PHYSFS_ARRAYLEN(case_fold1_16_198) }, + { case_fold1_16_199, __PHYSFS_ARRAYLEN(case_fold1_16_199) }, + { case_fold1_16_200, __PHYSFS_ARRAYLEN(case_fold1_16_200) }, + { case_fold1_16_201, __PHYSFS_ARRAYLEN(case_fold1_16_201) }, + { case_fold1_16_202, __PHYSFS_ARRAYLEN(case_fold1_16_202) }, + { case_fold1_16_203, __PHYSFS_ARRAYLEN(case_fold1_16_203) }, + { case_fold1_16_204, __PHYSFS_ARRAYLEN(case_fold1_16_204) }, + { case_fold1_16_205, __PHYSFS_ARRAYLEN(case_fold1_16_205) }, + { case_fold1_16_206, __PHYSFS_ARRAYLEN(case_fold1_16_206) }, + { case_fold1_16_207, __PHYSFS_ARRAYLEN(case_fold1_16_207) }, + { case_fold1_16_208, __PHYSFS_ARRAYLEN(case_fold1_16_208) }, + { case_fold1_16_209, __PHYSFS_ARRAYLEN(case_fold1_16_209) }, + { case_fold1_16_210, __PHYSFS_ARRAYLEN(case_fold1_16_210) }, + { case_fold1_16_211, __PHYSFS_ARRAYLEN(case_fold1_16_211) }, + { case_fold1_16_212, __PHYSFS_ARRAYLEN(case_fold1_16_212) }, + { case_fold1_16_213, __PHYSFS_ARRAYLEN(case_fold1_16_213) }, + { case_fold1_16_214, __PHYSFS_ARRAYLEN(case_fold1_16_214) }, + { case_fold1_16_215, __PHYSFS_ARRAYLEN(case_fold1_16_215) }, + { case_fold1_16_216, __PHYSFS_ARRAYLEN(case_fold1_16_216) }, + { case_fold1_16_217, __PHYSFS_ARRAYLEN(case_fold1_16_217) }, + { case_fold1_16_218, __PHYSFS_ARRAYLEN(case_fold1_16_218) }, + { case_fold1_16_219, __PHYSFS_ARRAYLEN(case_fold1_16_219) }, + { case_fold1_16_220, __PHYSFS_ARRAYLEN(case_fold1_16_220) }, + { case_fold1_16_221, __PHYSFS_ARRAYLEN(case_fold1_16_221) }, + { case_fold1_16_222, __PHYSFS_ARRAYLEN(case_fold1_16_222) }, + { case_fold1_16_223, __PHYSFS_ARRAYLEN(case_fold1_16_223) }, + { case_fold1_16_224, __PHYSFS_ARRAYLEN(case_fold1_16_224) }, + { case_fold1_16_225, __PHYSFS_ARRAYLEN(case_fold1_16_225) }, + { case_fold1_16_226, __PHYSFS_ARRAYLEN(case_fold1_16_226) }, + { case_fold1_16_227, __PHYSFS_ARRAYLEN(case_fold1_16_227) }, + { case_fold1_16_228, __PHYSFS_ARRAYLEN(case_fold1_16_228) }, + { case_fold1_16_229, __PHYSFS_ARRAYLEN(case_fold1_16_229) }, + { case_fold1_16_230, __PHYSFS_ARRAYLEN(case_fold1_16_230) }, + { case_fold1_16_231, __PHYSFS_ARRAYLEN(case_fold1_16_231) }, + { case_fold1_16_232, __PHYSFS_ARRAYLEN(case_fold1_16_232) }, + { case_fold1_16_233, __PHYSFS_ARRAYLEN(case_fold1_16_233) }, + { case_fold1_16_234, __PHYSFS_ARRAYLEN(case_fold1_16_234) }, + { case_fold1_16_235, __PHYSFS_ARRAYLEN(case_fold1_16_235) }, + { case_fold1_16_236, __PHYSFS_ARRAYLEN(case_fold1_16_236) }, + { case_fold1_16_237, __PHYSFS_ARRAYLEN(case_fold1_16_237) }, + { case_fold1_16_238, __PHYSFS_ARRAYLEN(case_fold1_16_238) }, + { case_fold1_16_239, __PHYSFS_ARRAYLEN(case_fold1_16_239) }, + { case_fold1_16_240, __PHYSFS_ARRAYLEN(case_fold1_16_240) }, + { case_fold1_16_241, __PHYSFS_ARRAYLEN(case_fold1_16_241) }, + { case_fold1_16_242, __PHYSFS_ARRAYLEN(case_fold1_16_242) }, + { case_fold1_16_243, __PHYSFS_ARRAYLEN(case_fold1_16_243) }, + { case_fold1_16_244, __PHYSFS_ARRAYLEN(case_fold1_16_244) }, + { case_fold1_16_245, __PHYSFS_ARRAYLEN(case_fold1_16_245) }, + { case_fold1_16_246, __PHYSFS_ARRAYLEN(case_fold1_16_246) }, + { case_fold1_16_247, __PHYSFS_ARRAYLEN(case_fold1_16_247) }, + { case_fold1_16_248, __PHYSFS_ARRAYLEN(case_fold1_16_248) }, + { case_fold1_16_249, __PHYSFS_ARRAYLEN(case_fold1_16_249) }, + { case_fold1_16_250, __PHYSFS_ARRAYLEN(case_fold1_16_250) }, + { case_fold1_16_251, __PHYSFS_ARRAYLEN(case_fold1_16_251) }, + { case_fold1_16_252, __PHYSFS_ARRAYLEN(case_fold1_16_252) }, + { case_fold1_16_253, __PHYSFS_ARRAYLEN(case_fold1_16_253) }, + { case_fold1_16_254, __PHYSFS_ARRAYLEN(case_fold1_16_254) }, + { case_fold1_16_255, __PHYSFS_ARRAYLEN(case_fold1_16_255) }, +}; + +static const CaseFoldHashBucket1_32 case_fold_hash1_32[] = { + { case_fold1_32_000, __PHYSFS_ARRAYLEN(case_fold1_32_000) }, + { case_fold1_32_001, __PHYSFS_ARRAYLEN(case_fold1_32_001) }, + { case_fold1_32_002, __PHYSFS_ARRAYLEN(case_fold1_32_002) }, + { case_fold1_32_003, __PHYSFS_ARRAYLEN(case_fold1_32_003) }, + { case_fold1_32_004, __PHYSFS_ARRAYLEN(case_fold1_32_004) }, + { case_fold1_32_005, __PHYSFS_ARRAYLEN(case_fold1_32_005) }, + { case_fold1_32_006, __PHYSFS_ARRAYLEN(case_fold1_32_006) }, + { case_fold1_32_007, __PHYSFS_ARRAYLEN(case_fold1_32_007) }, + { case_fold1_32_008, __PHYSFS_ARRAYLEN(case_fold1_32_008) }, + { case_fold1_32_009, __PHYSFS_ARRAYLEN(case_fold1_32_009) }, + { case_fold1_32_010, __PHYSFS_ARRAYLEN(case_fold1_32_010) }, + { case_fold1_32_011, __PHYSFS_ARRAYLEN(case_fold1_32_011) }, + { case_fold1_32_012, __PHYSFS_ARRAYLEN(case_fold1_32_012) }, + { case_fold1_32_013, __PHYSFS_ARRAYLEN(case_fold1_32_013) }, + { case_fold1_32_014, __PHYSFS_ARRAYLEN(case_fold1_32_014) }, + { case_fold1_32_015, __PHYSFS_ARRAYLEN(case_fold1_32_015) }, +}; + +static const CaseFoldHashBucket2_16 case_fold_hash2_16[] = { + { case_fold2_16_000, __PHYSFS_ARRAYLEN(case_fold2_16_000) }, + { case_fold2_16_001, __PHYSFS_ARRAYLEN(case_fold2_16_001) }, + { case_fold2_16_002, __PHYSFS_ARRAYLEN(case_fold2_16_002) }, + { case_fold2_16_003, __PHYSFS_ARRAYLEN(case_fold2_16_003) }, + { case_fold2_16_004, __PHYSFS_ARRAYLEN(case_fold2_16_004) }, + { case_fold2_16_005, __PHYSFS_ARRAYLEN(case_fold2_16_005) }, + { case_fold2_16_006, __PHYSFS_ARRAYLEN(case_fold2_16_006) }, + { case_fold2_16_007, __PHYSFS_ARRAYLEN(case_fold2_16_007) }, + { case_fold2_16_008, __PHYSFS_ARRAYLEN(case_fold2_16_008) }, + { case_fold2_16_009, __PHYSFS_ARRAYLEN(case_fold2_16_009) }, + { case_fold2_16_010, __PHYSFS_ARRAYLEN(case_fold2_16_010) }, + { case_fold2_16_011, __PHYSFS_ARRAYLEN(case_fold2_16_011) }, + { case_fold2_16_012, __PHYSFS_ARRAYLEN(case_fold2_16_012) }, + { case_fold2_16_013, __PHYSFS_ARRAYLEN(case_fold2_16_013) }, + { case_fold2_16_014, __PHYSFS_ARRAYLEN(case_fold2_16_014) }, + { case_fold2_16_015, __PHYSFS_ARRAYLEN(case_fold2_16_015) }, +}; + +static const CaseFoldHashBucket3_16 case_fold_hash3_16[] = { + { case_fold3_16_000, __PHYSFS_ARRAYLEN(case_fold3_16_000) }, + { case_fold3_16_001, __PHYSFS_ARRAYLEN(case_fold3_16_001) }, + { NULL, 0 }, + { case_fold3_16_003, __PHYSFS_ARRAYLEN(case_fold3_16_003) }, +}; + + +#endif /* _INCLUDE_PHYSFS_CASEFOLDING_H_ */ + +/* end of physfs_casefolding.h ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/physfs_internal.h b/love/src/jni/physfs-3.0.1/src/physfs_internal.h similarity index 68% rename from love/src/jni/physfs-2.1.0/src/physfs_internal.h rename to love/src/jni/physfs-3.0.1/src/physfs_internal.h index 94171c94..003ecc58 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs_internal.h +++ b/love/src/jni/physfs-3.0.1/src/physfs_internal.h @@ -14,6 +14,11 @@ #error Do not include this header from your applications. #endif +/* Turn off MSVC warnings that are aggressively anti-portability. */ +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS 1 +#endif + #include "physfs.h" /* The holy trinity. */ @@ -25,12 +30,15 @@ #include +#define __PHYSFS_COMPILE_TIME_ASSERT(name, x) \ + typedef int __PHYSFS_compile_time_assert_##name[(x) * 2 - 1] + /* !!! FIXME: remove this when revamping stack allocation code... */ -#if defined(_MSC_VER) || defined(__MINGW32__) +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__) #include #endif -#if PHYSFS_PLATFORM_SOLARIS +#ifdef PHYSFS_PLATFORM_SOLARIS #include #endif @@ -53,10 +61,68 @@ extern "C" { # define inline __inline #endif -#if PHYSFS_PLATFORM_LINUX && !defined(_FILE_OFFSET_BITS) +#if defined(PHYSFS_PLATFORM_LINUX) && !defined(_FILE_OFFSET_BITS) #define _FILE_OFFSET_BITS 64 #endif +/* All public APIs need to be in physfs.h with a PHYSFS_DECL. + All file-private symbols need to be marked "static". + Everything shared between PhysicsFS sources needs to be in this + file between the visibility pragma blocks. */ +#if PHYSFS_MINIMUM_GCC_VERSION(4,0) || defined(__clang__) +#define PHYSFS_HAVE_PRAGMA_VISIBILITY 1 +#endif + +#if PHYSFS_HAVE_PRAGMA_VISIBILITY +#pragma GCC visibility push(hidden) +#endif + +/* These are the build-in archivers. We list them all as "extern" here without + #ifdefs to keep it tidy, but obviously you need to make sure these are + wrapped in PHYSFS_SUPPORTS_* checks before actually referencing them. */ +extern const PHYSFS_Archiver __PHYSFS_Archiver_DIR; +extern const PHYSFS_Archiver __PHYSFS_Archiver_ZIP; +extern const PHYSFS_Archiver __PHYSFS_Archiver_7Z; +extern const PHYSFS_Archiver __PHYSFS_Archiver_GRP; +extern const PHYSFS_Archiver __PHYSFS_Archiver_QPAK; +extern const PHYSFS_Archiver __PHYSFS_Archiver_HOG; +extern const PHYSFS_Archiver __PHYSFS_Archiver_MVL; +extern const PHYSFS_Archiver __PHYSFS_Archiver_WAD; +extern const PHYSFS_Archiver __PHYSFS_Archiver_SLB; +extern const PHYSFS_Archiver __PHYSFS_Archiver_ISO9660; +extern const PHYSFS_Archiver __PHYSFS_Archiver_VDF; + +/* a real C99-compliant snprintf() is in Visual Studio 2015, + but just use this everywhere for binary compatibility. */ +#if defined(_MSC_VER) +int __PHYSFS_msvc_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap); +int __PHYSFS_msvc_snprintf(char *outBuf, size_t size, const char *format, ...); +#define vsnprintf __PHYSFS_msvc_vsnprintf +#define snprintf __PHYSFS_msvc_snprintf +#endif + +/* Some simple wrappers around WinRT C++ interfaces we can call from C. */ +#ifdef PHYSFS_PLATFORM_WINRT +const void *__PHYSFS_winrtCalcBaseDir(void); +const void *__PHYSFS_winrtCalcPrefDir(void); +#endif + +/* atomic operations. */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +#include +__PHYSFS_COMPILE_TIME_ASSERT(LongEqualsInt, sizeof (int) == sizeof (long)); +#define __PHYSFS_ATOMIC_INCR(ptrval) _InterlockedIncrement((long*)(ptrval)) +#define __PHYSFS_ATOMIC_DECR(ptrval) _InterlockedDecrement((long*)(ptrval)) +#elif defined(__clang__) || (defined(__GNUC__) && (((__GNUC__ * 10000) + (__GNUC_MINOR__ * 100)) >= 40100)) +#define __PHYSFS_ATOMIC_INCR(ptrval) __sync_fetch_and_add(ptrval, 1) +#define __PHYSFS_ATOMIC_DECR(ptrval) __sync_fetch_and_add(ptrval, -1) +#else +#define PHYSFS_NEED_ATOMIC_OP_FALLBACK 1 +int __PHYSFS_ATOMIC_INCR(int *ptrval); +int __PHYSFS_ATOMIC_DECR(int *ptrval); +#endif + + /* * Interface for small allocations. If you need a little scratch space for * a throwaway buffer or string, use this. It will make small allocations @@ -79,7 +145,7 @@ extern "C" { * NEVER forget to check for NULL...allocation can fail here, of course! */ #define __PHYSFS_SMALLALLOCTHRESHOLD 256 -void *__PHYSFS_initSmallAlloc(void *ptr, PHYSFS_uint64 len); +void *__PHYSFS_initSmallAlloc(void *ptr, const size_t len); #define __PHYSFS_smallAlloc(bytes) ( \ __PHYSFS_initSmallAlloc( \ @@ -100,25 +166,36 @@ void __PHYSFS_smallFree(void *ptr); #define PHYSFS_SUPPORTS_ZIP 1 #endif #ifndef PHYSFS_SUPPORTS_7Z -#define PHYSFS_SUPPORTS_7Z 0 +#define PHYSFS_SUPPORTS_7Z 1 #endif #ifndef PHYSFS_SUPPORTS_GRP -#define PHYSFS_SUPPORTS_GRP 0 +#define PHYSFS_SUPPORTS_GRP 1 #endif #ifndef PHYSFS_SUPPORTS_HOG -#define PHYSFS_SUPPORTS_HOG 0 +#define PHYSFS_SUPPORTS_HOG 1 #endif #ifndef PHYSFS_SUPPORTS_MVL -#define PHYSFS_SUPPORTS_MVL 0 +#define PHYSFS_SUPPORTS_MVL 1 #endif #ifndef PHYSFS_SUPPORTS_WAD -#define PHYSFS_SUPPORTS_WAD 0 +#define PHYSFS_SUPPORTS_WAD 1 +#endif +#ifndef PHYSFS_SUPPORTS_QPAK +#define PHYSFS_SUPPORTS_QPAK 1 #endif #ifndef PHYSFS_SUPPORTS_SLB -#define PHYSFS_SUPPORTS_SLB 0 +#define PHYSFS_SUPPORTS_SLB 1 #endif #ifndef PHYSFS_SUPPORTS_ISO9660 -#define PHYSFS_SUPPORTS_ISO9660 0 +#define PHYSFS_SUPPORTS_ISO9660 1 +#endif +#ifndef PHYSFS_SUPPORTS_VDF +#define PHYSFS_SUPPORTS_VDF 1 +#endif + +#if PHYSFS_SUPPORTS_7Z +/* 7zip support needs a global init function called at startup (no deinit). */ +extern void SZIP_global_init(void); #endif /* The latest supported PHYSFS_Io::version value. */ @@ -127,22 +204,24 @@ void __PHYSFS_smallFree(void *ptr); /* The latest supported PHYSFS_Archiver::version value. */ #define CURRENT_PHYSFS_ARCHIVER_API_VERSION 0 -/* This byteorder stuff was lifted from SDL. http://www.libsdl.org/ */ +/* This byteorder stuff was lifted from SDL. https://www.libsdl.org/ */ #define PHYSFS_LIL_ENDIAN 1234 #define PHYSFS_BIG_ENDIAN 4321 -#if defined(__i386__) || defined(__ia64__) || \ - defined(_M_IX86) || defined(_M_IA64) || defined(_M_X64) || \ - (defined(__alpha__) || defined(__alpha)) || \ - defined(__arm__) || defined(ARM) || \ - (defined(__mips__) && defined(__MIPSEL__)) || \ - defined(__SYMBIAN32__) || \ - defined(__x86_64__) || \ - defined(__LITTLE_ENDIAN__) -#define PHYSFS_BYTEORDER PHYSFS_LIL_ENDIAN +#ifdef __linux__ +#include +#define PHYSFS_BYTEORDER __BYTE_ORDER +#else /* __linux__ */ +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MISPEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define PHYSFS_BYTEORDER PHYSFS_BIG_ENDIAN #else -#define PHYSFS_BYTEORDER PHYSFS_BIG_ENDIAN +#define PHYSFS_BYTEORDER PHYSFS_LIL_ENDIAN #endif +#endif /* __linux__ */ /* @@ -162,28 +241,30 @@ void __PHYSFS_smallFree(void *ptr); * a QuickSort and BubbleSort internally. * (cmpfn) is used to determine ordering, and (swapfn) does the actual * swapping of elements in the list. - * - * See zip.c for an example. */ void __PHYSFS_sort(void *entries, size_t max, int (*cmpfn)(void *, size_t, size_t), void (*swapfn)(void *, size_t, size_t)); -/* - * This isn't a formal error code, it's just for BAIL_MACRO. - * It means: there was an error, but someone else already set it for us. - */ -#define ERRPASS PHYSFS_ERR_OK - /* These get used all over for lessening code clutter. */ -#define BAIL_MACRO(e, r) do { if (e) PHYSFS_setErrorCode(e); return r; } while (0) -#define BAIL_IF_MACRO(c, e, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); return r; } } while (0) -#define BAIL_MACRO_MUTEX(e, m, r) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } while (0) -#define BAIL_IF_MACRO_MUTEX(c, e, m, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } } while (0) -#define GOTO_MACRO(e, g) do { if (e) PHYSFS_setErrorCode(e); goto g; } while (0) -#define GOTO_IF_MACRO(c, e, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); goto g; } } while (0) -#define GOTO_MACRO_MUTEX(e, m, g) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } while (0) -#define GOTO_IF_MACRO_MUTEX(c, e, m, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } } while (0) +/* "ERRPASS" means "something else just set the error state for us" and is + just to make it clear where the responsibility for the error state lays. */ +#define BAIL(e, r) do { if (e) PHYSFS_setErrorCode(e); return r; } while (0) +#define BAIL_ERRPASS(r) do { return r; } while (0) +#define BAIL_IF(c, e, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); return r; } } while (0) +#define BAIL_IF_ERRPASS(c, r) do { if (c) { return r; } } while (0) +#define BAIL_MUTEX(e, m, r) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } while (0) +#define BAIL_MUTEX_ERRPASS(m, r) do { __PHYSFS_platformReleaseMutex(m); return r; } while (0) +#define BAIL_IF_MUTEX(c, e, m, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } } while (0) +#define BAIL_IF_MUTEX_ERRPASS(c, m, r) do { if (c) { __PHYSFS_platformReleaseMutex(m); return r; } } while (0) +#define GOTO(e, g) do { if (e) PHYSFS_setErrorCode(e); goto g; } while (0) +#define GOTO_ERRPASS(g) do { goto g; } while (0) +#define GOTO_IF(c, e, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); goto g; } } while (0) +#define GOTO_IF_ERRPASS(c, g) do { if (c) { goto g; } } while (0) +#define GOTO_MUTEX(e, m, g) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } while (0) +#define GOTO_MUTEX_ERRPASS(m, g) do { __PHYSFS_platformReleaseMutex(m); goto g; } while (0) +#define GOTO_IF_MUTEX(c, e, m, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } } while (0) +#define GOTO_IF_MUTEX_ERRPASS(c, m, g) do { if (c) { __PHYSFS_platformReleaseMutex(m); goto g; } } while (0) #define __PHYSFS_ARRAYLEN(x) ( (sizeof (x)) / (sizeof (x[0])) ) @@ -214,38 +295,15 @@ void __PHYSFS_sort(void *entries, size_t max, ((s) < (__PHYSFS_UI64(0xFFFFFFFFFFFFFFFF) >> (64-(sizeof(size_t)*8)))) \ ) +/* + * Like strdup(), but uses the current PhysicsFS allocator. + */ +char *__PHYSFS_strdup(const char *str); /* - * This is a strcasecmp() or stricmp() replacement that expects both strings - * to be in UTF-8 encoding. It will do "case folding" to decide if the - * Unicode codepoints in the strings match. - * - * It will report which string is "greater than" the other, but be aware that - * this doesn't necessarily mean anything: 'a' may be "less than" 'b', but - * a random Kanji codepoint has no meaningful alphabetically relationship to - * a Greek Lambda, but being able to assign a reliable "value" makes sorting - * algorithms possible, if not entirely sane. Most cases should treat the - * return value as "equal" or "not equal". + * Give a hash value for a C string (uses djb's xor hashing algorithm). */ -int __PHYSFS_utf8stricmp(const char *s1, const char *s2); - -/* - * This works like __PHYSFS_utf8stricmp(), but takes a character (NOT BYTE - * COUNT) argument, like strcasencmp(). - */ -int __PHYSFS_utf8strnicmp(const char *s1, const char *s2, PHYSFS_uint32 l); - -/* - * stricmp() that guarantees to only work with low ASCII. The C runtime - * stricmp() might try to apply a locale/codepage/etc, which we don't want. - */ -int __PHYSFS_stricmpASCII(const char *s1, const char *s2); - -/* - * strnicmp() that guarantees to only work with low ASCII. The C runtime - * strnicmp() might try to apply a locale/codepage/etc, which we don't want. - */ -int __PHYSFS_strnicmpASCII(const char *s1, const char *s2, PHYSFS_uint32 l); +PHYSFS_uint32 __PHYSFS_hashString(const char *str, size_t len); /* @@ -276,29 +334,56 @@ PHYSFS_Io *__PHYSFS_createMemoryIo(const void *buf, PHYSFS_uint64 len, * Read (len) bytes from (io) into (buf). Returns non-zero on success, * zero on i/o error. Literally: "return (io->read(io, buf, len) == len);" */ -int __PHYSFS_readAll(PHYSFS_Io *io, void *buf, const PHYSFS_uint64 len); +int __PHYSFS_readAll(PHYSFS_Io *io, void *buf, const size_t len); /* These are shared between some archivers. */ -typedef struct -{ - char name[64]; - PHYSFS_uint32 startPos; - PHYSFS_uint32 size; -} UNPKentry; - +void UNPK_abandonArchive(void *opaque); void UNPK_closeArchive(void *opaque); -void *UNPK_openArchive(PHYSFS_Io *io,UNPKentry *e,const PHYSFS_uint32 n); -void UNPK_enumerateFiles(void *opaque, const char *dname, - PHYSFS_EnumFilesCallback cb, - const char *origdir, void *callbackdata); +void *UNPK_openArchive(PHYSFS_Io *io); +void *UNPK_addEntry(void *opaque, char *name, const int isdir, + const PHYSFS_sint64 ctime, const PHYSFS_sint64 mtime, + const PHYSFS_uint64 pos, const PHYSFS_uint64 len); PHYSFS_Io *UNPK_openRead(void *opaque, const char *name); PHYSFS_Io *UNPK_openWrite(void *opaque, const char *name); PHYSFS_Io *UNPK_openAppend(void *opaque, const char *name); int UNPK_remove(void *opaque, const char *name); int UNPK_mkdir(void *opaque, const char *name); int UNPK_stat(void *opaque, const char *fn, PHYSFS_Stat *st); +#define UNPK_enumerate __PHYSFS_DirTreeEnumerate + + + +/* Optional API many archivers use this to manage their directory tree. */ +/* !!! FIXME: document this better. */ + +typedef struct __PHYSFS_DirTreeEntry +{ + char *name; /* Full path in archive. */ + struct __PHYSFS_DirTreeEntry *hashnext; /* next item in hash bucket. */ + struct __PHYSFS_DirTreeEntry *children; /* linked list of kids, if dir. */ + struct __PHYSFS_DirTreeEntry *sibling; /* next item in same dir. */ + int isdir; +} __PHYSFS_DirTreeEntry; + +typedef struct __PHYSFS_DirTree +{ + __PHYSFS_DirTreeEntry *root; /* root of directory tree. */ + __PHYSFS_DirTreeEntry **hash; /* all entries hashed for fast lookup. */ + size_t hashBuckets; /* number of buckets in hash. */ + size_t entrylen; /* size in bytes of entries (including subclass). */ +} __PHYSFS_DirTree; + + +int __PHYSFS_DirTreeInit(__PHYSFS_DirTree *dt, const size_t entrylen); +void *__PHYSFS_DirTreeAdd(__PHYSFS_DirTree *dt, char *name, const int isdir); +void *__PHYSFS_DirTreeFind(__PHYSFS_DirTree *dt, const char *path); +PHYSFS_EnumerateCallbackResult __PHYSFS_DirTreeEnumerate(void *opaque, + const char *dname, PHYSFS_EnumerateCallback cb, + const char *origdir, void *callbackdata); +void __PHYSFS_DirTreeDeinit(__PHYSFS_DirTree *dt); + /*--------------------------------------------------------------------------*/ @@ -317,9 +402,10 @@ int UNPK_stat(void *opaque, const char *fn, PHYSFS_Stat *st); * Obviously, this isn't a function. If you need more than one char for this, * you'll need to pull some old pieces of PhysicsFS out of revision control. */ -#if PHYSFS_PLATFORM_WINDOWS +#if defined(PHYSFS_PLATFORM_WINDOWS) || defined(PHYSFS_PLATFORM_OS2) #define __PHYSFS_platformDirSeparator '\\' #else +#define __PHYSFS_STANDARD_DIRSEP 1 #define __PHYSFS_platformDirSeparator '/' #endif @@ -337,11 +423,8 @@ int __PHYSFS_platformInit(void); * Deinitialize the platform. This is called when PHYSFS_deinit() is called * from the application. You can use this to clean up anything you've * allocated in your platform driver. - * - * Return zero if there was a catastrophic failure (which prevents you from - * functioning at all), and non-zero otherwise. */ -int __PHYSFS_platformDeinit(void); +void __PHYSFS_platformDeinit(void); /* @@ -462,9 +545,16 @@ PHYSFS_sint64 __PHYSFS_platformFileLength(void *handle); /* - * !!! FIXME: comment me. + * Read filesystem metadata for a specific path. + * + * This needs to fill in all the fields of (stat). For fields that might not + * mean anything on a platform (access time, perhaps), choose a reasonable + * default. if (follow), we want to follow symlinks and stat what they + * link to and not the link itself. + * + * Return zero on failure, non-zero on success. */ -int __PHYSFS_platformStat(const char *fn, PHYSFS_Stat *stat); +int __PHYSFS_platformStat(const char *fn, PHYSFS_Stat *stat, const int follow); /* * Flush any pending writes to disk. (opaque) should be cast to whatever data @@ -538,16 +628,15 @@ void *__PHYSFS_platformGetThreadID(void); /* * Enumerate a directory of files. This follows the rules for the - * PHYSFS_Archiver::enumerateFiles() method (see above), except that the - * (dirName) that is passed to this function is converted to - * platform-DEPENDENT notation by the caller. The PHYSFS_Archiver version - * uses platform-independent notation. Note that ".", "..", and other - * meta-entries should always be ignored. + * PHYSFS_Archiver::enumerate() method, except that the (dirName) that is + * passed to this function is converted to platform-DEPENDENT notation by + * the caller. The PHYSFS_Archiver version uses platform-independent + * notation. Note that ".", "..", and other meta-entries should always + * be ignored. */ -void __PHYSFS_platformEnumerateFiles(const char *dirname, - PHYSFS_EnumFilesCallback callback, - const char *origdir, - void *callbackdata); +PHYSFS_EnumerateCallbackResult __PHYSFS_platformEnumerate(const char *dirname, + PHYSFS_EnumerateCallback callback, + const char *origdir, void *callbackdata); /* * Make a directory in the actual filesystem. (path) is specified in @@ -617,24 +706,9 @@ int __PHYSFS_platformGrabMutex(void *mutex); */ void __PHYSFS_platformReleaseMutex(void *mutex); -/* - * Called at the start of PHYSFS_init() to prepare the allocator, if the user - * hasn't selected their own allocator via PHYSFS_setAllocator(). - * If the platform has a custom allocator, it should fill in the fields of - * (a) with the proper function pointers and return non-zero. - * If the platform just wants to use malloc()/free()/etc, return zero - * immediately and the higher level will handle it. The Init and Deinit - * fields of (a) are optional...set them to NULL if you don't need them. - * Everything else must be implemented. All rules follow those for - * PHYSFS_setAllocator(). If Init isn't NULL, it will be called shortly - * after this function returns non-zero. - */ -int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a); - -/* - * Like strdup(), but uses the current PhysicsFS allocator. - */ -char *__PHYSFS_strdup(const char *str); +#if PHYSFS_HAVE_PRAGMA_VISIBILITY +#pragma GCC visibility pop +#endif #ifdef __cplusplus } diff --git a/love/src/jni/physfs-3.0.1/src/physfs_lzmasdk.h b/love/src/jni/physfs-3.0.1/src/physfs_lzmasdk.h new file mode 100644 index 00000000..c86972e5 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_lzmasdk.h @@ -0,0 +1,6028 @@ +#ifndef _INCLUDE_PHYSFS_LZMASDK_H_ +#define _INCLUDE_PHYSFS_LZMASDK_H_ + +/* This is just a bunch of the LZMA SDK mushed together into one header. +This code is all public domain, and mostly (if not entirely) written by +Igor Pavlov. http://www.7-zip.org/sdk.html +--ryan. */ + + + +/* 7zTypes.h -- Basic types +2013-11-12 : Igor Pavlov : Public domain */ + +#ifndef __7Z_TYPES_H +#define __7Z_TYPES_H + +#ifdef _WIN32 +/* #include */ +#endif + +#include + +#ifndef EXTERN_C_BEGIN +#ifdef __cplusplus +#define EXTERN_C_BEGIN extern "C" { +#define EXTERN_C_END } +#else +#define EXTERN_C_BEGIN +#define EXTERN_C_END +#endif +#endif + +EXTERN_C_BEGIN + +#define SZ_OK 0 + +#define SZ_ERROR_DATA 1 +#define SZ_ERROR_MEM 2 +#define SZ_ERROR_CRC 3 +#define SZ_ERROR_UNSUPPORTED 4 +#define SZ_ERROR_PARAM 5 +#define SZ_ERROR_INPUT_EOF 6 +#define SZ_ERROR_OUTPUT_EOF 7 +#define SZ_ERROR_READ 8 +#define SZ_ERROR_WRITE 9 +#define SZ_ERROR_PROGRESS 10 +#define SZ_ERROR_FAIL 11 +#define SZ_ERROR_THREAD 12 + +#define SZ_ERROR_ARCHIVE 16 +#define SZ_ERROR_NO_ARCHIVE 17 + +typedef int SRes; + +#ifdef _WIN32 +/* typedef DWORD WRes; */ +typedef unsigned WRes; +#else +typedef int WRes; +#endif + +#ifndef RINOK +#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } +#endif + +typedef unsigned char Byte; +typedef short Int16; +typedef unsigned short UInt16; + +#ifdef _LZMA_UINT32_IS_ULONG +typedef long Int32; +typedef unsigned long UInt32; +#else +typedef int Int32; +typedef unsigned int UInt32; +#endif + +#ifdef _SZ_NO_INT_64 + +/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. + NOTES: Some code will work incorrectly in that case! */ + +typedef long Int64; +typedef unsigned long UInt64; + +#else + +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__WATCOMC__) +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#define UINT64_CONST(n) n ## ui64 +#else +typedef long long int Int64; +typedef unsigned long long int UInt64; +#define UINT64_CONST(n) n ## ULL +#endif + +#endif + +#ifdef _LZMA_NO_SYSTEM_SIZE_T +typedef UInt32 SizeT; +#else +typedef size_t SizeT; +#endif + +typedef int Bool; +#define True 1 +#define False 0 + + +#ifdef _WIN32 +#define MY_STD_CALL __stdcall +#else +#define MY_STD_CALL +#endif + +#ifdef _MSC_VER + +#if _MSC_VER >= 1300 +#define MY_NO_INLINE __declspec(noinline) +#else +#define MY_NO_INLINE +#endif + +#define MY_CDECL __cdecl +#define MY_FAST_CALL __fastcall + +#else + +#define MY_NO_INLINE +#define MY_CDECL +#define MY_FAST_CALL + +#endif + + +/* The following interfaces use first parameter as pointer to structure */ + +typedef struct +{ + Byte (*Read)(void *p); /* reads one byte, returns 0 in case of EOF or error */ +} IByteIn; + +typedef struct +{ + void (*Write)(void *p, Byte b); +} IByteOut; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ +} ISeqInStream; + +typedef struct +{ + size_t (*Write)(void *p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ +} ISeqOutStream; + +typedef enum +{ + SZ_SEEK_SET = 0, + SZ_SEEK_CUR = 1, + SZ_SEEK_END = 2 +} ESzSeek; + +typedef struct +{ + SRes (*Read)(void *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ISeekInStream; + +typedef struct +{ + SRes (*Look)(void *p, const void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ + SRes (*Skip)(void *p, size_t offset); + /* offset must be <= output(*size) of Look */ + + SRes (*Read)(void *p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ + SRes (*Seek)(void *p, Int64 *pos, ESzSeek origin); +} ILookInStream; + +static SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset); + +/* reads via ILookInStream::Read */ +static SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType); +static SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size); + +#define LookToRead_BUF_SIZE (1 << 14) + +typedef struct +{ + ILookInStream s; + ISeekInStream *realStream; + size_t pos; + size_t size; + Byte buf[LookToRead_BUF_SIZE]; +} CLookToRead; + +static void LookToRead_CreateVTable(CLookToRead *p, int lookahead); +static void LookToRead_Init(CLookToRead *p); + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToLook; + +typedef struct +{ + ISeqInStream s; + ILookInStream *realStream; +} CSecToRead; + +typedef struct +{ + SRes (*Progress)(void *p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ +} ICompressProgress; + +typedef struct +{ + void *(*Alloc)(void *p, size_t size); + void (*Free)(void *p, void *address); /* address can be 0 */ +} ISzAlloc; + +#define IAlloc_Alloc(p, size) (p)->Alloc((p), size) +#define IAlloc_Free(p, a) (p)->Free((p), a) + +#ifdef _WIN32 + +#define CHAR_PATH_SEPARATOR '\\' +#define WCHAR_PATH_SEPARATOR L'\\' +#define STRING_PATH_SEPARATOR "\\" +#define WSTRING_PATH_SEPARATOR L"\\" + +#else + +#define CHAR_PATH_SEPARATOR '/' +#define WCHAR_PATH_SEPARATOR L'/' +#define STRING_PATH_SEPARATOR "/" +#define WSTRING_PATH_SEPARATOR L"/" + +#endif + +EXTERN_C_END + +#endif + +/* 7z.h -- 7z interface +2015-11-18 : Igor Pavlov : Public domain */ + +#ifndef __7Z_H +#define __7Z_H + +/*#include "7zTypes.h"*/ + +EXTERN_C_BEGIN + +#define k7zStartHeaderSize 0x20 +#define k7zSignatureSize 6 + +static const Byte k7zSignature[k7zSignatureSize]; + +typedef struct +{ + const Byte *Data; + size_t Size; +} CSzData; + +/* CSzCoderInfo & CSzFolder support only default methods */ + +typedef struct +{ + size_t PropsOffset; + UInt32 MethodID; + Byte NumStreams; + Byte PropsSize; +} CSzCoderInfo; + +typedef struct +{ + UInt32 InIndex; + UInt32 OutIndex; +} CSzBond; + +#define SZ_NUM_CODERS_IN_FOLDER_MAX 4 +#define SZ_NUM_BONDS_IN_FOLDER_MAX 3 +#define SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX 4 + +typedef struct +{ + UInt32 NumCoders; + UInt32 NumBonds; + UInt32 NumPackStreams; + UInt32 UnpackStream; + UInt32 PackStreams[SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX]; + CSzBond Bonds[SZ_NUM_BONDS_IN_FOLDER_MAX]; + CSzCoderInfo Coders[SZ_NUM_CODERS_IN_FOLDER_MAX]; +} CSzFolder; + + +static SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd); + +typedef struct +{ + UInt32 Low; + UInt32 High; +} CNtfsFileTime; + +typedef struct +{ + Byte *Defs; /* MSB 0 bit numbering */ + UInt32 *Vals; +} CSzBitUi32s; + +typedef struct +{ + Byte *Defs; /* MSB 0 bit numbering */ + /* UInt64 *Vals; */ + CNtfsFileTime *Vals; +} CSzBitUi64s; + +#define SzBitArray_Check(p, i) (((p)[(i) >> 3] & (0x80 >> ((i) & 7))) != 0) + +#define SzBitWithVals_Check(p, i) ((p)->Defs && ((p)->Defs[(i) >> 3] & (0x80 >> ((i) & 7))) != 0) + +typedef struct +{ + UInt32 NumPackStreams; + UInt32 NumFolders; + + UInt64 *PackPositions; /* NumPackStreams + 1 */ + CSzBitUi32s FolderCRCs; /* NumFolders */ + + size_t *FoCodersOffsets; /* NumFolders + 1 */ + UInt32 *FoStartPackStreamIndex; /* NumFolders + 1 */ + UInt32 *FoToCoderUnpackSizes; /* NumFolders + 1 */ + Byte *FoToMainUnpackSizeIndex; /* NumFolders */ + UInt64 *CoderUnpackSizes; /* for all coders in all folders */ + + Byte *CodersData; +} CSzAr; + +static UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex); + +static SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex, + ILookInStream *stream, UInt64 startPos, + Byte *outBuffer, size_t outSize, + ISzAlloc *allocMain); + +typedef struct +{ + CSzAr db; + + UInt64 startPosAfterHeader; + UInt64 dataPos; + + UInt32 NumFiles; + + UInt64 *UnpackPositions; /* NumFiles + 1 */ + /* Byte *IsEmptyFiles; */ + Byte *IsDirs; + CSzBitUi32s CRCs; + + CSzBitUi32s Attribs; + /* CSzBitUi32s Parents; */ + CSzBitUi64s MTime; + CSzBitUi64s CTime; + + UInt32 *FolderToFile; /* NumFolders + 1 */ + UInt32 *FileToFolder; /* NumFiles */ + + size_t *FileNameOffsets; /* in 2-byte steps */ + Byte *FileNames; /* UTF-16-LE */ +} CSzArEx; + +#define SzArEx_IsDir(p, i) (SzBitArray_Check((p)->IsDirs, i)) + +#define SzArEx_GetFileSize(p, i) ((p)->UnpackPositions[(i) + 1] - (p)->UnpackPositions[i]) + +static void SzArEx_Init(CSzArEx *p); +static void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc); + +/* +if dest == NULL, the return value specifies the required size of the buffer, + in 16-bit characters, including the null-terminating character. +if dest != NULL, the return value specifies the number of 16-bit characters that + are written to the dest, including the null-terminating character. */ + +static size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest); + +/* +size_t SzArEx_GetFullNameLen(const CSzArEx *p, size_t fileIndex); +UInt16 *SzArEx_GetFullNameUtf16_Back(const CSzArEx *p, size_t fileIndex, UInt16 *dest); +*/ + + + +/* + SzArEx_Extract extracts file from archive + + *outBuffer must be 0 before first call for each new archive. + + Extracting cache: + If you need to decompress more than one file, you can send + these values from previous call: + *blockIndex, + *outBuffer, + *outBufferSize + You can consider "*outBuffer" as cache of solid block. If your archive is solid, + it will increase decompression speed. + + If you use external function, you can declare these 3 cache variables + (blockIndex, outBuffer, outBufferSize) as static in that external function. + + Free *outBuffer and set *outBuffer to 0, if you want to flush cache. +*/ + +static SRes SzArEx_Extract( + const CSzArEx *db, + ILookInStream *inStream, + UInt32 fileIndex, /* index of file */ + UInt32 *blockIndex, /* index of solid block */ + Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ + size_t *outBufferSize, /* buffer size for output buffer */ + size_t *offset, /* offset of stream for required file in *outBuffer */ + size_t *outSizeProcessed, /* size of file in *outBuffer */ + ISzAlloc *allocMain, + ISzAlloc *allocTemp); + + +/* +SzArEx_Open Errors: +SZ_ERROR_NO_ARCHIVE +SZ_ERROR_ARCHIVE +SZ_ERROR_UNSUPPORTED +SZ_ERROR_MEM +SZ_ERROR_CRC +SZ_ERROR_INPUT_EOF +SZ_ERROR_FAIL +*/ + +static SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, + ISzAlloc *allocMain, ISzAlloc *allocTemp); + +EXTERN_C_END + +#endif + +/* 7zCrc.h -- CRC32 calculation +2013-01-18 : Igor Pavlov : Public domain */ + +#ifndef __7Z_CRC_H +#define __7Z_CRC_H + +/*#include "7zTypes.h" */ + +EXTERN_C_BEGIN + +/* Call CrcGenerateTable one time before other CRC functions */ +static void MY_FAST_CALL CrcGenerateTable(void); + +#define CRC_INIT_VAL 0xFFFFFFFF +#define CRC_GET_DIGEST(crc) ((crc) ^ CRC_INIT_VAL) +#define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +static UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); + +EXTERN_C_END + +#endif + +/* CpuArch.h -- CPU specific code +2016-06-09: Igor Pavlov : Public domain */ + +#ifndef __CPU_ARCH_H +#define __CPU_ARCH_H + +/*#include "7zTypes.h"*/ + +EXTERN_C_BEGIN + +/* +MY_CPU_LE means that CPU is LITTLE ENDIAN. +MY_CPU_BE means that CPU is BIG ENDIAN. +If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of platform. + +MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses. +*/ + +#if defined(_M_X64) \ + || defined(_M_AMD64) \ + || defined(__x86_64__) \ + || defined(__AMD64__) \ + || defined(__amd64__) + #define MY_CPU_AMD64 +#endif + +#if defined(MY_CPU_AMD64) \ + || defined(_M_IA64) \ + || defined(__AARCH64EL__) \ + || defined(__AARCH64EB__) + #define MY_CPU_64BIT +#endif + +#if defined(_M_IX86) || defined(__i386__) +#define MY_CPU_X86 +#endif + +#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64) +#define MY_CPU_X86_OR_AMD64 +#endif + +#if defined(MY_CPU_X86) \ + || defined(_M_ARM) \ + || defined(__ARMEL__) \ + || defined(__THUMBEL__) \ + || defined(__ARMEB__) \ + || defined(__THUMBEB__) + #define MY_CPU_32BIT +#endif + +#if defined(_WIN32) && defined(_M_ARM) +#define MY_CPU_ARM_LE +#endif + +#if defined(_WIN32) && defined(_M_IA64) +#define MY_CPU_IA64_LE +#endif + +#if defined(MY_CPU_X86_OR_AMD64) \ + || defined(MY_CPU_ARM_LE) \ + || defined(MY_CPU_IA64_LE) \ + || defined(__LITTLE_ENDIAN__) \ + || defined(__ARMEL__) \ + || defined(__THUMBEL__) \ + || defined(__AARCH64EL__) \ + || defined(__MIPSEL__) \ + || defined(__MIPSEL) \ + || defined(_MIPSEL) \ + || defined(__BFIN__) \ + || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + #define MY_CPU_LE +#endif + +#if defined(__BIG_ENDIAN__) \ + || defined(__ARMEB__) \ + || defined(__THUMBEB__) \ + || defined(__AARCH64EB__) \ + || defined(__MIPSEB__) \ + || defined(__MIPSEB) \ + || defined(_MIPSEB) \ + || defined(__m68k__) \ + || defined(__s390__) \ + || defined(__s390x__) \ + || defined(__zarch__) \ + || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + #define MY_CPU_BE +#endif + +#if defined(MY_CPU_LE) && defined(MY_CPU_BE) +Stop_Compiling_Bad_Endian +#endif + + +#ifdef MY_CPU_LE + #if defined(MY_CPU_X86_OR_AMD64) \ + /* || defined(__AARCH64EL__) */ + /*#define MY_CPU_LE_UNALIGN*/ + #endif +#endif + + +#ifdef MY_CPU_LE_UNALIGN + +#define GetUi16(p) (*(const UInt16 *)(const void *)(p)) +#define GetUi32(p) (*(const UInt32 *)(const void *)(p)) +#define GetUi64(p) (*(const UInt64 *)(const void *)(p)) + +#define SetUi16(p, v) { *(UInt16 *)(p) = (v); } +#define SetUi32(p, v) { *(UInt32 *)(p) = (v); } +#define SetUi64(p, v) { *(UInt64 *)(p) = (v); } + +#else + +#define GetUi16(p) ( (UInt16) ( \ + ((const Byte *)(p))[0] | \ + ((UInt16)((const Byte *)(p))[1] << 8) )) + +#define GetUi32(p) ( \ + ((const Byte *)(p))[0] | \ + ((UInt32)((const Byte *)(p))[1] << 8) | \ + ((UInt32)((const Byte *)(p))[2] << 16) | \ + ((UInt32)((const Byte *)(p))[3] << 24)) + +#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32)) + +#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \ + _ppp_[0] = (Byte)_vvv_; \ + _ppp_[1] = (Byte)(_vvv_ >> 8); } + +#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \ + _ppp_[0] = (Byte)_vvv_; \ + _ppp_[1] = (Byte)(_vvv_ >> 8); \ + _ppp_[2] = (Byte)(_vvv_ >> 16); \ + _ppp_[3] = (Byte)(_vvv_ >> 24); } + +#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \ + SetUi32(_ppp2_ , (UInt32)_vvv2_); \ + SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); } + +#endif + + +#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300) + +/* Note: we use bswap instruction, that is unsupported in 386 cpu */ + +#include + +#pragma intrinsic(_byteswap_ulong) +#pragma intrinsic(_byteswap_uint64) +#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p)) +#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p)) + +#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v) + +#elif defined(MY_CPU_LE_UNALIGN) && defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + +#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p)) +#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p)) + +#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v) + +#else + +#define GetBe32(p) ( \ + ((UInt32)((const Byte *)(p))[0] << 24) | \ + ((UInt32)((const Byte *)(p))[1] << 16) | \ + ((UInt32)((const Byte *)(p))[2] << 8) | \ + ((const Byte *)(p))[3] ) + +#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4)) + +#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \ + _ppp_[0] = (Byte)(_vvv_ >> 24); \ + _ppp_[1] = (Byte)(_vvv_ >> 16); \ + _ppp_[2] = (Byte)(_vvv_ >> 8); \ + _ppp_[3] = (Byte)_vvv_; } + +#endif + + +#define GetBe16(p) ( (UInt16) ( \ + ((UInt16)((const Byte *)(p))[0] << 8) | \ + ((const Byte *)(p))[1] )) + + + +#ifdef MY_CPU_X86_OR_AMD64 + +typedef struct +{ + UInt32 maxFunc; + UInt32 vendor[3]; + UInt32 ver; + UInt32 b; + UInt32 c; + UInt32 d; +} Cx86cpuid; + +enum +{ + CPU_FIRM_INTEL, + CPU_FIRM_AMD, + CPU_FIRM_VIA +}; + +static void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d); + +static Bool x86cpuid_CheckAndRead(Cx86cpuid *p); +static int x86cpuid_GetFirm(const Cx86cpuid *p); + +#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF)) +#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF)) +#define x86cpuid_GetStepping(ver) (ver & 0xF) + +static Bool CPU_Is_InOrder(); + +#endif + +EXTERN_C_END + +#endif + +/* 7zBuf.h -- Byte Buffer +2013-01-18 : Igor Pavlov : Public domain */ + +#ifndef __7Z_BUF_H +#define __7Z_BUF_H + +/*#include "7zTypes.h" */ + +EXTERN_C_BEGIN + +typedef struct +{ + Byte *data; + size_t size; +} CBuf; + +static void Buf_Init(CBuf *p); +static int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc); +static void Buf_Free(CBuf *p, ISzAlloc *alloc); + +EXTERN_C_END + +#endif + + +/* Bcj2.h -- BCJ2 Converter for x86 code +2014-11-10 : Igor Pavlov : Public domain */ + +#ifndef __BCJ2_H +#define __BCJ2_H + +/*#include "7zTypes.h" */ + +EXTERN_C_BEGIN + +#define BCJ2_NUM_STREAMS 4 + +enum +{ + BCJ2_STREAM_MAIN, + BCJ2_STREAM_CALL, + BCJ2_STREAM_JUMP, + BCJ2_STREAM_RC +}; + +enum +{ + BCJ2_DEC_STATE_ORIG_0 = BCJ2_NUM_STREAMS, + BCJ2_DEC_STATE_ORIG_1, + BCJ2_DEC_STATE_ORIG_2, + BCJ2_DEC_STATE_ORIG_3, + + BCJ2_DEC_STATE_ORIG, + BCJ2_DEC_STATE_OK +}; + +enum +{ + BCJ2_ENC_STATE_ORIG = BCJ2_NUM_STREAMS, + BCJ2_ENC_STATE_OK +}; + + +#define BCJ2_IS_32BIT_STREAM(s) ((s) == BCJ2_STREAM_CALL || (s) == BCJ2_STREAM_JUMP) + +/* +CBcj2Dec / CBcj2Enc +bufs sizes: + BUF_SIZE(n) = lims[n] - bufs[n] +bufs sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP must be mutliply of 4: + (BUF_SIZE(BCJ2_STREAM_CALL) & 3) == 0 + (BUF_SIZE(BCJ2_STREAM_JUMP) & 3) == 0 +*/ + +/* +CBcj2Dec: +dest is allowed to overlap with bufs[BCJ2_STREAM_MAIN], with the following conditions: + bufs[BCJ2_STREAM_MAIN] >= dest && + bufs[BCJ2_STREAM_MAIN] - dest >= tempReserv + + BUF_SIZE(BCJ2_STREAM_CALL) + + BUF_SIZE(BCJ2_STREAM_JUMP) + tempReserv = 0 : for first call of Bcj2Dec_Decode + tempReserv = 4 : for any other calls of Bcj2Dec_Decode + overlap with offset = 1 is not allowed +*/ + +typedef struct +{ + const Byte *bufs[BCJ2_NUM_STREAMS]; + const Byte *lims[BCJ2_NUM_STREAMS]; + Byte *dest; + const Byte *destLim; + + unsigned state; /* BCJ2_STREAM_MAIN has more priority than BCJ2_STATE_ORIG */ + + UInt32 ip; + Byte temp[4]; + UInt32 range; + UInt32 code; + UInt16 probs[2 + 256]; +} CBcj2Dec; + +static void Bcj2Dec_Init(CBcj2Dec *p); + +/* Returns: SZ_OK or SZ_ERROR_DATA */ +static SRes Bcj2Dec_Decode(CBcj2Dec *p); + +#define Bcj2Dec_IsFinished(_p_) ((_p_)->code == 0) + +#define BCJ2_RELAT_LIMIT_NUM_BITS 26 +#define BCJ2_RELAT_LIMIT ((UInt32)1 << BCJ2_RELAT_LIMIT_NUM_BITS) + +/* limit for CBcj2Enc::fileSize variable */ +#define BCJ2_FileSize_MAX ((UInt32)1 << 31) + +EXTERN_C_END + +#endif + +/* Bra.h -- Branch converters for executables +2013-01-18 : Igor Pavlov : Public domain */ + +#ifndef __BRA_H +#define __BRA_H + +/*#include "7zTypes.h"*/ + +EXTERN_C_BEGIN + +/* +These functions convert relative addresses to absolute addresses +in CALL instructions to increase the compression ratio. + + In: + data - data buffer + size - size of data + ip - current virtual Instruction Pinter (IP) value + state - state variable for x86 converter + encoding - 0 (for decoding), 1 (for encoding) + + Out: + state - state variable for x86 converter + + Returns: + The number of processed bytes. If you call these functions with multiple calls, + you must start next call with first byte after block of processed bytes. + + Type Endian Alignment LookAhead + + x86 little 1 4 + ARMT little 2 2 + ARM little 4 0 + PPC big 4 0 + SPARC big 4 0 + IA64 little 16 0 + + size must be >= Alignment + LookAhead, if it's not last block. + If (size < Alignment + LookAhead), converter returns 0. + + Example: + + UInt32 ip = 0; + for () + { + ; size must be >= Alignment + LookAhead, if it's not last block + SizeT processed = Convert(data, size, ip, 1); + data += processed; + size -= processed; + ip += processed; + } +*/ + +#define x86_Convert_Init(state) { state = 0; } +static SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding); +static SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +static SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +static SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +static SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +static SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); + +EXTERN_C_END + +#endif + +/* Delta.h -- Delta converter +2013-01-18 : Igor Pavlov : Public domain */ + +#ifndef __DELTA_H +#define __DELTA_H + +/*#include "7zTypes.h" */ + +EXTERN_C_BEGIN + +#define DELTA_STATE_SIZE 256 + +static void Delta_Init(Byte *state); +static void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size); + +EXTERN_C_END + +#endif + +/* LzmaDec.h -- LZMA Decoder +2013-01-18 : Igor Pavlov : Public domain */ + +#ifndef __LZMA_DEC_H +#define __LZMA_DEC_H + +/*#include "7zTypes.h"*/ + +EXTERN_C_BEGIN + +/* #define _LZMA_PROB32 */ +/* _LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + + +/* ---------- LZMA Properties ---------- */ + +#define LZMA_PROPS_SIZE 5 + +typedef struct _CLzmaProps +{ + unsigned lc, lp, pb; + UInt32 dicSize; +} CLzmaProps; + +/* LzmaProps_Decode - decodes properties +Returns: + SZ_OK + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +static SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size); + + +/* ---------- LZMA Decoder state ---------- */ + +/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case. + Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */ + +#define LZMA_REQUIRED_INPUT_MAX 20 + +typedef struct +{ + CLzmaProps prop; + CLzmaProb *probs; + Byte *dic; + const Byte *buf; + UInt32 range, code; + SizeT dicPos; + SizeT dicBufSize; + UInt32 processedPos; + UInt32 checkDicSize; + unsigned state; + UInt32 reps[4]; + unsigned remainLen; + int needFlush; + int needInitState; + UInt32 numProbs; + unsigned tempBufSize; + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; +} CLzmaDec; + +#define LzmaDec_Construct(p) { (p)->dic = 0; (p)->probs = 0; } + +static void LzmaDec_Init(CLzmaDec *p); + +/* There are two types of LZMA streams: + 0) Stream with end mark. That end mark adds about 6 bytes to compressed size. + 1) Stream without end mark. You must know exact uncompressed size to decompress such stream. */ + +typedef enum +{ + LZMA_FINISH_ANY, /* finish at any point */ + LZMA_FINISH_END /* block must be finished at the end */ +} ELzmaFinishMode; + +/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!! + + You must use LZMA_FINISH_END, when you know that current output buffer + covers last bytes of block. In other cases you must use LZMA_FINISH_ANY. + + If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK, + and output value of destLen will be less than output buffer size limit. + You can check status result also. + + You can use multiple checks to test data integrity after full decompression: + 1) Check Result and "status" variable. + 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize. + 3) Check that output(srcLen) = compressedSize, if you know real compressedSize. + You must use correct finish mode in that case. */ + +typedef enum +{ + LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */ + LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ + LZMA_STATUS_NOT_FINISHED, /* stream was not finished */ + LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */ +} ELzmaStatus; + +/* ELzmaStatus is used only as output value for function call */ + + +/* ---------- Interfaces ---------- */ + +/* There are 3 levels of interfaces: + 1) Dictionary Interface + 2) Buffer Interface + 3) One Call Interface + You can select any of these interfaces, but don't mix functions from different + groups for same object. */ + + +/* There are two variants to allocate state for Dictionary Interface: + 1) LzmaDec_Allocate / LzmaDec_Free + 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs + You can use variant 2, if you set dictionary buffer manually. + For Buffer Interface you must always use variant 1. + +LzmaDec_Allocate* can return: + SZ_OK + SZ_ERROR_MEM - Memory allocation error + SZ_ERROR_UNSUPPORTED - Unsupported properties +*/ + +static SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc); +static void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc); + +/* ---------- Dictionary Interface ---------- */ + +/* You can use it, if you want to eliminate the overhead for data copying from + dictionary to some other external buffer. + You must work with CLzmaDec variables directly in this interface. + + STEPS: + LzmaDec_Constr() + LzmaDec_Allocate() + for (each new stream) + { + LzmaDec_Init() + while (it needs more decompression) + { + LzmaDec_DecodeToDic() + use data from CLzmaDec::dic and update CLzmaDec::dicPos + } + } + LzmaDec_Free() +*/ + +/* LzmaDec_DecodeToDic + + The decoding to internal dictionary buffer (CLzmaDec::dic). + You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!! + +finishMode: + It has meaning only if the decoding reaches output limit (dicLimit). + LZMA_FINISH_ANY - Decode just dicLimit bytes. + LZMA_FINISH_END - Stream must be finished after dicLimit. + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + SZ_ERROR_DATA - Data error +*/ + +static SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + +EXTERN_C_END + +#endif + +/* Lzma2Dec.h -- LZMA2 Decoder +2015-05-13 : Igor Pavlov : Public domain */ + +#ifndef __LZMA2_DEC_H +#define __LZMA2_DEC_H + +/*#include "LzmaDec.h"*/ + +EXTERN_C_BEGIN + +/* ---------- State Interface ---------- */ + +typedef struct +{ + CLzmaDec decoder; + UInt32 packSize; + UInt32 unpackSize; + unsigned state; + Byte control; + Bool needInitDic; + Bool needInitState; + Bool needInitProp; +} CLzma2Dec; + +#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder) +#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc); +#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc); + +static SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc); +static void Lzma2Dec_Init(CLzma2Dec *p); + + +/* +finishMode: + It has meaning only if the decoding reaches output limit (*destLen or dicLimit). + LZMA_FINISH_ANY - use smallest number of input bytes + LZMA_FINISH_END - read EndOfStream marker after decoding + +Returns: + SZ_OK + status: + LZMA_STATUS_FINISHED_WITH_MARK + LZMA_STATUS_NOT_FINISHED + LZMA_STATUS_NEEDS_MORE_INPUT + SZ_ERROR_DATA - Data error +*/ + +static SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status); + + +EXTERN_C_END + +#endif + + +/* END HEADERS */ + + +/* 7zCrc.c -- CRC32 init +2015-03-10 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "7zCrc.h" +#include "CpuArch.h" +*/ +#define UNUSED_VAR(x) (void)x; + +#define kCrcPoly 0xEDB88320 + +#ifdef MY_CPU_LE + #define CRC_NUM_TABLES 8 +#else + #define CRC_NUM_TABLES 9 + + #define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24)) + + static UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table); + static UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table); +#endif + +#ifndef MY_CPU_BE + static UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table); + static UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); +#endif + +typedef UInt32 (MY_FAST_CALL *CRC_FUNC)(UInt32 v, const void *data, size_t size, const UInt32 *table); + +static CRC_FUNC g_CrcUpdateT4; +static CRC_FUNC g_CrcUpdateT8; +static CRC_FUNC g_CrcUpdate; + +static UInt32 g_CrcTable[256 * CRC_NUM_TABLES]; + +static UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) +{ + return g_CrcUpdate(CRC_INIT_VAL, data, size, g_CrcTable) ^ CRC_INIT_VAL; +} + +#define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +#if CRC_NUM_TABLES < 4 +static UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table) +{ + const Byte *p = (const Byte *)data; + const Byte *pEnd = p + size; + for (; p != pEnd; p++) + v = CRC_UPDATE_BYTE_2(v, *p); + return v; +} +#endif + +static void MY_FAST_CALL CrcGenerateTable() +{ + UInt32 i; + for (i = 0; i < 256; i++) + { + UInt32 r = i; + unsigned j; + for (j = 0; j < 8; j++) + r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); + g_CrcTable[i] = r; + } + for (; i < 256 * CRC_NUM_TABLES; i++) + { + UInt32 r = g_CrcTable[i - 256]; + g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8); + } + + #if CRC_NUM_TABLES < 4 + + g_CrcUpdate = CrcUpdateT1; + + #else + + #ifdef MY_CPU_LE + + g_CrcUpdateT4 = CrcUpdateT4; + g_CrcUpdate = CrcUpdateT4; + + #if CRC_NUM_TABLES >= 8 + g_CrcUpdateT8 = CrcUpdateT8; + + #ifdef MY_CPU_X86_OR_AMD64 + if (!CPU_Is_InOrder()) + g_CrcUpdate = CrcUpdateT8; + #endif + #endif + + #else + { + #ifndef MY_CPU_BE + UInt32 k = 0x01020304; + const Byte *p = (const Byte *)&k; + if (p[0] == 4 && p[1] == 3) + { + g_CrcUpdateT4 = CrcUpdateT4; + g_CrcUpdate = CrcUpdateT4; + #if CRC_NUM_TABLES >= 8 + g_CrcUpdateT8 = CrcUpdateT8; + /* g_CrcUpdate = CrcUpdateT8; */ + #endif + } + else if (p[0] != 1 || p[1] != 2) + g_CrcUpdate = CrcUpdateT1; + else + #endif + { + for (i = 256 * CRC_NUM_TABLES - 1; i >= 256; i--) + { + UInt32 x = g_CrcTable[i - 256]; + g_CrcTable[i] = CRC_UINT32_SWAP(x); + } + g_CrcUpdateT4 = CrcUpdateT1_BeT4; + g_CrcUpdate = CrcUpdateT1_BeT4; + #if CRC_NUM_TABLES >= 8 + g_CrcUpdateT8 = CrcUpdateT1_BeT8; + /* g_CrcUpdate = CrcUpdateT1_BeT8; */ + #endif + } + } + #endif + + #endif +} + +/* 7zCrcOpt.c -- CRC32 calculation +2015-03-01 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "CpuArch.h" +*/ + +#ifndef MY_CPU_BE + +#define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +static UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table) +{ + const Byte *p = (const Byte *)data; + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++) + v = CRC_UPDATE_BYTE_2(v, *p); + for (; size >= 4; size -= 4, p += 4) + { + v ^= *(const UInt32 *)p; + v = + table[0x300 + ((v ) & 0xFF)] + ^ table[0x200 + ((v >> 8) & 0xFF)] + ^ table[0x100 + ((v >> 16) & 0xFF)] + ^ table[0x000 + ((v >> 24))]; + } + for (; size > 0; size--, p++) + v = CRC_UPDATE_BYTE_2(v, *p); + return v; +} + +static UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table) +{ + const Byte *p = (const Byte *)data; + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 7) != 0; size--, p++) + v = CRC_UPDATE_BYTE_2(v, *p); + for (; size >= 8; size -= 8, p += 8) + { + UInt32 d; + v ^= *(const UInt32 *)p; + v = + table[0x700 + ((v ) & 0xFF)] + ^ table[0x600 + ((v >> 8) & 0xFF)] + ^ table[0x500 + ((v >> 16) & 0xFF)] + ^ table[0x400 + ((v >> 24))]; + d = *((const UInt32 *)p + 1); + v ^= + table[0x300 + ((d ) & 0xFF)] + ^ table[0x200 + ((d >> 8) & 0xFF)] + ^ table[0x100 + ((d >> 16) & 0xFF)] + ^ table[0x000 + ((d >> 24))]; + } + for (; size > 0; size--, p++) + v = CRC_UPDATE_BYTE_2(v, *p); + return v; +} + +#endif + + +#ifndef MY_CPU_LE + +#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24)) + +#define CRC_UPDATE_BYTE_2_BE(crc, b) (table[(((crc) >> 24) ^ (b))] ^ ((crc) << 8)) + +static UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table) +{ + const Byte *p = (const Byte *)data; + table += 0x100; + v = CRC_UINT32_SWAP(v); + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++) + v = CRC_UPDATE_BYTE_2_BE(v, *p); + for (; size >= 4; size -= 4, p += 4) + { + v ^= *(const UInt32 *)p; + v = + table[0x000 + ((v ) & 0xFF)] + ^ table[0x100 + ((v >> 8) & 0xFF)] + ^ table[0x200 + ((v >> 16) & 0xFF)] + ^ table[0x300 + ((v >> 24))]; + } + for (; size > 0; size--, p++) + v = CRC_UPDATE_BYTE_2_BE(v, *p); + return CRC_UINT32_SWAP(v); +} + +static UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table) +{ + const Byte *p = (const Byte *)data; + table += 0x100; + v = CRC_UINT32_SWAP(v); + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 7) != 0; size--, p++) + v = CRC_UPDATE_BYTE_2_BE(v, *p); + for (; size >= 8; size -= 8, p += 8) + { + UInt32 d; + v ^= *(const UInt32 *)p; + v = + table[0x400 + ((v ) & 0xFF)] + ^ table[0x500 + ((v >> 8) & 0xFF)] + ^ table[0x600 + ((v >> 16) & 0xFF)] + ^ table[0x700 + ((v >> 24))]; + d = *((const UInt32 *)p + 1); + v ^= + table[0x000 + ((d ) & 0xFF)] + ^ table[0x100 + ((d >> 8) & 0xFF)] + ^ table[0x200 + ((d >> 16) & 0xFF)] + ^ table[0x300 + ((d >> 24))]; + } + for (; size > 0; size--, p++) + v = CRC_UPDATE_BYTE_2_BE(v, *p); + return CRC_UINT32_SWAP(v); +} + +#endif + +/* CpuArch.c -- CPU specific code +2016-02-25: Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "CpuArch.h" +*/ + +#ifdef MY_CPU_X86_OR_AMD64 + +#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__) +#define USE_ASM +#endif + +#if !defined(USE_ASM) && _MSC_VER >= 1500 +#include +#endif + +#if defined(USE_ASM) && !defined(MY_CPU_AMD64) +static UInt32 CheckFlag(UInt32 flag) +{ + #ifdef _MSC_VER + __asm pushfd; + __asm pop EAX; + __asm mov EDX, EAX; + __asm xor EAX, flag; + __asm push EAX; + __asm popfd; + __asm pushfd; + __asm pop EAX; + __asm xor EAX, EDX; + __asm push EDX; + __asm popfd; + __asm and flag, EAX; + #else + __asm__ __volatile__ ( + "pushf\n\t" + "pop %%EAX\n\t" + "movl %%EAX,%%EDX\n\t" + "xorl %0,%%EAX\n\t" + "push %%EAX\n\t" + "popf\n\t" + "pushf\n\t" + "pop %%EAX\n\t" + "xorl %%EDX,%%EAX\n\t" + "push %%EDX\n\t" + "popf\n\t" + "andl %%EAX, %0\n\t": + "=c" (flag) : "c" (flag) : + "%eax", "%edx"); + #endif + return flag; +} +#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False; +#else +#define CHECK_CPUID_IS_SUPPORTED +#endif + +#if defined(__WATCOMC__) +static void __cpuid(int *cpuinfo, const UInt32 infotype); +#pragma aux __cpuid = \ + ".586" \ + "cpuid" \ + "mov [esi+0],eax" \ + "mov [esi+4],ebx" \ + "mov [esi+8],ecx" \ + "mov [esi+12],edx" \ + parm [esi] [eax] modify [ebx ecx edx]; +#endif + + +static void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) +{ + #ifdef USE_ASM + + #ifdef _MSC_VER + + UInt32 a2, b2, c2, d2; + __asm xor EBX, EBX; + __asm xor ECX, ECX; + __asm xor EDX, EDX; + __asm mov EAX, function; + __asm cpuid; + __asm mov a2, EAX; + __asm mov b2, EBX; + __asm mov c2, ECX; + __asm mov d2, EDX; + + *a = a2; + *b = b2; + *c = c2; + *d = d2; + + #else + + __asm__ __volatile__ ( + #if defined(MY_CPU_AMD64) && defined(__PIC__) + "mov %%rbx, %%rdi;" + "cpuid;" + "xchg %%rbx, %%rdi;" + : "=a" (*a) , + "=D" (*b) , + #elif defined(MY_CPU_X86) && defined(__PIC__) + "mov %%ebx, %%edi;" + "cpuid;" + "xchgl %%ebx, %%edi;" + : "=a" (*a) , + "=D" (*b) , + #else + "cpuid" + : "=a" (*a) , + "=b" (*b) , + #endif + "=c" (*c) , + "=d" (*d) + : "0" (function)) ; + + #endif + + #else + + int CPUInfo[4]; + __cpuid(CPUInfo, function); + *a = CPUInfo[0]; + *b = CPUInfo[1]; + *c = CPUInfo[2]; + *d = CPUInfo[3]; + + #endif +} + +static Bool x86cpuid_CheckAndRead(Cx86cpuid *p) +{ + CHECK_CPUID_IS_SUPPORTED + MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]); + MyCPUID(1, &p->ver, &p->b, &p->c, &p->d); + return True; +} + +static const UInt32 kVendors[][3] = +{ + { 0x756E6547, 0x49656E69, 0x6C65746E}, + { 0x68747541, 0x69746E65, 0x444D4163}, + { 0x746E6543, 0x48727561, 0x736C7561} +}; + +static int x86cpuid_GetFirm(const Cx86cpuid *p) +{ + unsigned i; + for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++) + { + const UInt32 *v = kVendors[i]; + if (v[0] == p->vendor[0] && + v[1] == p->vendor[1] && + v[2] == p->vendor[2]) + return (int)i; + } + return -1; +} + +static Bool CPU_Is_InOrder() +{ + Cx86cpuid p; + int firm; + UInt32 family, model; + if (!x86cpuid_CheckAndRead(&p)) + return True; + + family = x86cpuid_GetFamily(p.ver); + model = x86cpuid_GetModel(p.ver); + + firm = x86cpuid_GetFirm(&p); + + switch (firm) + { + case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && ( + /* In-Order Atom CPU */ + model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */ + || model == 0x26 /* 45 nm, Z6xx */ + || model == 0x27 /* 32 nm, Z2460 */ + || model == 0x35 /* 32 nm, Z2760 */ + || model == 0x36 /* 32 nm, N2xxx, D2xxx */ + ))); + case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA))); + case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF)); + } + return True; +} + +#endif + +/* 7zStream.c -- 7z Stream functions +2013-11-12 : Igor Pavlov : Public domain */ + +/*#include "Precomp.h"*/ + +#include + +/*#include "7zTypes.h"*/ + +static SRes LookInStream_SeekTo(ILookInStream *stream, UInt64 offset) +{ + Int64 t = offset; + return stream->Seek(stream, &t, SZ_SEEK_SET); +} + +static SRes LookInStream_Read2(ILookInStream *stream, void *buf, size_t size, SRes errorType) +{ + while (size != 0) + { + size_t processed = size; + RINOK(stream->Read(stream, buf, &processed)); + if (processed == 0) + return errorType; + buf = (void *)((Byte *)buf + processed); + size -= processed; + } + return SZ_OK; +} + +static SRes LookInStream_Read(ILookInStream *stream, void *buf, size_t size) +{ + return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); +} + +static SRes LookToRead_Look_Lookahead(void *pp, const void **buf, size_t *size) +{ + SRes res = SZ_OK; + CLookToRead *p = (CLookToRead *)pp; + size_t size2 = p->size - p->pos; + if (size2 == 0 && *size > 0) + { + p->pos = 0; + size2 = LookToRead_BUF_SIZE; + res = p->realStream->Read(p->realStream, p->buf, &size2); + p->size = size2; + } + if (size2 < *size) + *size = size2; + *buf = p->buf + p->pos; + return res; +} + +static SRes LookToRead_Look_Exact(void *pp, const void **buf, size_t *size) +{ + SRes res = SZ_OK; + CLookToRead *p = (CLookToRead *)pp; + size_t size2 = p->size - p->pos; + if (size2 == 0 && *size > 0) + { + p->pos = 0; + if (*size > LookToRead_BUF_SIZE) + *size = LookToRead_BUF_SIZE; + res = p->realStream->Read(p->realStream, p->buf, size); + size2 = p->size = *size; + } + if (size2 < *size) + *size = size2; + *buf = p->buf + p->pos; + return res; +} + +static SRes LookToRead_Skip(void *pp, size_t offset) +{ + CLookToRead *p = (CLookToRead *)pp; + p->pos += offset; + return SZ_OK; +} + +static SRes LookToRead_Read(void *pp, void *buf, size_t *size) +{ + CLookToRead *p = (CLookToRead *)pp; + size_t rem = p->size - p->pos; + if (rem == 0) + return p->realStream->Read(p->realStream, buf, size); + if (rem > *size) + rem = *size; + memcpy(buf, p->buf + p->pos, rem); + p->pos += rem; + *size = rem; + return SZ_OK; +} + +static SRes LookToRead_Seek(void *pp, Int64 *pos, ESzSeek origin) +{ + CLookToRead *p = (CLookToRead *)pp; + p->pos = p->size = 0; + return p->realStream->Seek(p->realStream, pos, origin); +} + +static void LookToRead_CreateVTable(CLookToRead *p, int lookahead) +{ + p->s.Look = lookahead ? + LookToRead_Look_Lookahead : + LookToRead_Look_Exact; + p->s.Skip = LookToRead_Skip; + p->s.Read = LookToRead_Read; + p->s.Seek = LookToRead_Seek; +} + +static void LookToRead_Init(CLookToRead *p) +{ + p->pos = p->size = 0; +} + + +/* 7zArcIn.c -- 7z Input functions +2016-05-16 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include + +#include "7z.h" +#include "7zBuf.h" +#include "7zCrc.h" +#include "CpuArch.h" +*/ + +#define MY_ALLOC(T, p, size, alloc) { \ + if ((p = (T *)IAlloc_Alloc(alloc, (size) * sizeof(T))) == NULL) return SZ_ERROR_MEM; } + +#define MY_ALLOC_ZE(T, p, size, alloc) { if ((size) == 0) p = NULL; else MY_ALLOC(T, p, size, alloc) } + +#define MY_ALLOC_AND_CPY(to, size, from, alloc) \ + { MY_ALLOC(Byte, to, size, alloc); memcpy(to, from, size); } + +#define MY_ALLOC_ZE_AND_CPY(to, size, from, alloc) \ + { if ((size) == 0) p = NULL; else { MY_ALLOC_AND_CPY(to, size, from, alloc) } } + +#define k7zMajorVersion 0 + +enum EIdEnum +{ + k7zIdEnd, + k7zIdHeader, + k7zIdArchiveProperties, + k7zIdAdditionalStreamsInfo, + k7zIdMainStreamsInfo, + k7zIdFilesInfo, + k7zIdPackInfo, + k7zIdUnpackInfo, + k7zIdSubStreamsInfo, + k7zIdSize, + k7zIdCRC, + k7zIdFolder, + k7zIdCodersUnpackSize, + k7zIdNumUnpackStream, + k7zIdEmptyStream, + k7zIdEmptyFile, + k7zIdAnti, + k7zIdName, + k7zIdCTime, + k7zIdATime, + k7zIdMTime, + k7zIdWinAttrib, + k7zIdComment, + k7zIdEncodedHeader, + k7zIdStartPos, + k7zIdDummy + /* k7zNtSecure, */ + /* k7zParent, */ + /* k7zIsReal */ +}; + +static const Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; + +#define SzBitUi32s_Init(p) { (p)->Defs = NULL; (p)->Vals = NULL; } + +static SRes SzBitUi32s_Alloc(CSzBitUi32s *p, size_t num, ISzAlloc *alloc) +{ + if (num == 0) + { + p->Defs = NULL; + p->Vals = NULL; + } + else + { + MY_ALLOC(Byte, p->Defs, (num + 7) >> 3, alloc); + MY_ALLOC(UInt32, p->Vals, num, alloc); + } + return SZ_OK; +} + +static void SzBitUi32s_Free(CSzBitUi32s *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->Defs); p->Defs = NULL; + IAlloc_Free(alloc, p->Vals); p->Vals = NULL; +} + +#define SzBitUi64s_Init(p) { (p)->Defs = NULL; (p)->Vals = NULL; } + +static void SzBitUi64s_Free(CSzBitUi64s *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->Defs); p->Defs = NULL; + IAlloc_Free(alloc, p->Vals); p->Vals = NULL; +} + + +static void SzAr_Init(CSzAr *p) +{ + p->NumPackStreams = 0; + p->NumFolders = 0; + + p->PackPositions = NULL; + SzBitUi32s_Init(&p->FolderCRCs); + + p->FoCodersOffsets = NULL; + p->FoStartPackStreamIndex = NULL; + p->FoToCoderUnpackSizes = NULL; + p->FoToMainUnpackSizeIndex = NULL; + p->CoderUnpackSizes = NULL; + + p->CodersData = NULL; +} + +static void SzAr_Free(CSzAr *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->PackPositions); + SzBitUi32s_Free(&p->FolderCRCs, alloc); + + IAlloc_Free(alloc, p->FoCodersOffsets); + IAlloc_Free(alloc, p->FoStartPackStreamIndex); + IAlloc_Free(alloc, p->FoToCoderUnpackSizes); + IAlloc_Free(alloc, p->FoToMainUnpackSizeIndex); + IAlloc_Free(alloc, p->CoderUnpackSizes); + + IAlloc_Free(alloc, p->CodersData); + + SzAr_Init(p); +} + + +static void SzArEx_Init(CSzArEx *p) +{ + SzAr_Init(&p->db); + + p->NumFiles = 0; + p->dataPos = 0; + + p->UnpackPositions = NULL; + p->IsDirs = NULL; + + p->FolderToFile = NULL; + p->FileToFolder = NULL; + + p->FileNameOffsets = NULL; + p->FileNames = NULL; + + SzBitUi32s_Init(&p->CRCs); + SzBitUi32s_Init(&p->Attribs); + /* SzBitUi32s_Init(&p->Parents); */ + SzBitUi64s_Init(&p->MTime); + SzBitUi64s_Init(&p->CTime); +} + +static void SzArEx_Free(CSzArEx *p, ISzAlloc *alloc) +{ + IAlloc_Free(alloc, p->UnpackPositions); + IAlloc_Free(alloc, p->IsDirs); + + IAlloc_Free(alloc, p->FolderToFile); + IAlloc_Free(alloc, p->FileToFolder); + + IAlloc_Free(alloc, p->FileNameOffsets); + IAlloc_Free(alloc, p->FileNames); + + SzBitUi32s_Free(&p->CRCs, alloc); + SzBitUi32s_Free(&p->Attribs, alloc); + /* SzBitUi32s_Free(&p->Parents, alloc); */ + SzBitUi64s_Free(&p->MTime, alloc); + SzBitUi64s_Free(&p->CTime, alloc); + + SzAr_Free(&p->db, alloc); + SzArEx_Init(p); +} + + +static int TestSignatureCandidate(const Byte *testBytes) +{ + unsigned i; + for (i = 0; i < k7zSignatureSize; i++) + if (testBytes[i] != k7zSignature[i]) + return 0; + return 1; +} + +#define SzData_Clear(p) { (p)->Data = NULL; (p)->Size = 0; } + +#define SZ_READ_BYTE_SD(_sd_, dest) if ((_sd_)->Size == 0) return SZ_ERROR_ARCHIVE; (_sd_)->Size--; dest = *(_sd_)->Data++; +#define SZ_READ_BYTE(dest) SZ_READ_BYTE_SD(sd, dest) +#define SZ_READ_BYTE_2(dest) if (sd.Size == 0) return SZ_ERROR_ARCHIVE; sd.Size--; dest = *sd.Data++; + +#define SKIP_DATA(sd, size) { sd->Size -= (size_t)(size); sd->Data += (size_t)(size); } +#define SKIP_DATA2(sd, size) { sd.Size -= (size_t)(size); sd.Data += (size_t)(size); } + +#define SZ_READ_32(dest) if (sd.Size < 4) return SZ_ERROR_ARCHIVE; \ + dest = GetUi32(sd.Data); SKIP_DATA2(sd, 4); + +static MY_NO_INLINE SRes ReadNumber(CSzData *sd, UInt64 *value) +{ + Byte firstByte, mask; + unsigned i; + UInt32 v; + + SZ_READ_BYTE(firstByte); + if ((firstByte & 0x80) == 0) + { + *value = firstByte; + return SZ_OK; + } + SZ_READ_BYTE(v); + if ((firstByte & 0x40) == 0) + { + *value = (((UInt32)firstByte & 0x3F) << 8) | v; + return SZ_OK; + } + SZ_READ_BYTE(mask); + *value = v | ((UInt32)mask << 8); + mask = 0x20; + for (i = 2; i < 8; i++) + { + Byte b; + if ((firstByte & mask) == 0) + { + UInt64 highPart = (unsigned)firstByte & (unsigned)(mask - 1); + *value |= (highPart << (8 * i)); + return SZ_OK; + } + SZ_READ_BYTE(b); + *value |= ((UInt64)b << (8 * i)); + mask >>= 1; + } + return SZ_OK; +} + + +static MY_NO_INLINE SRes SzReadNumber32(CSzData *sd, UInt32 *value) +{ + Byte firstByte; + UInt64 value64; + if (sd->Size == 0) + return SZ_ERROR_ARCHIVE; + firstByte = *sd->Data; + if ((firstByte & 0x80) == 0) + { + *value = firstByte; + sd->Data++; + sd->Size--; + return SZ_OK; + } + RINOK(ReadNumber(sd, &value64)); + if (value64 >= (UInt32)0x80000000 - 1) + return SZ_ERROR_UNSUPPORTED; + if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 4))) + return SZ_ERROR_UNSUPPORTED; + *value = (UInt32)value64; + return SZ_OK; +} + +#define ReadID(sd, value) ReadNumber(sd, value) + +static SRes SkipData(CSzData *sd) +{ + UInt64 size; + RINOK(ReadNumber(sd, &size)); + if (size > sd->Size) + return SZ_ERROR_ARCHIVE; + SKIP_DATA(sd, size); + return SZ_OK; +} + +static SRes WaitId(CSzData *sd, UInt32 id) +{ + for (;;) + { + UInt64 type; + RINOK(ReadID(sd, &type)); + if (type == id) + return SZ_OK; + if (type == k7zIdEnd) + return SZ_ERROR_ARCHIVE; + RINOK(SkipData(sd)); + } +} + +static SRes RememberBitVector(CSzData *sd, UInt32 numItems, const Byte **v) +{ + UInt32 numBytes = (numItems + 7) >> 3; + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; + *v = sd->Data; + SKIP_DATA(sd, numBytes); + return SZ_OK; +} + +static UInt32 CountDefinedBits(const Byte *bits, UInt32 numItems) +{ + Byte b = 0; + unsigned m = 0; + UInt32 sum = 0; + for (; numItems != 0; numItems--) + { + if (m == 0) + { + b = *bits++; + m = 8; + } + m--; + sum += ((b >> m) & 1); + } + return sum; +} + +static MY_NO_INLINE SRes ReadBitVector(CSzData *sd, UInt32 numItems, Byte **v, ISzAlloc *alloc) +{ + Byte allAreDefined; + Byte *v2; + UInt32 numBytes = (numItems + 7) >> 3; + *v = NULL; + SZ_READ_BYTE(allAreDefined); + if (numBytes == 0) + return SZ_OK; + if (allAreDefined == 0) + { + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; + MY_ALLOC_AND_CPY(*v, numBytes, sd->Data, alloc); + SKIP_DATA(sd, numBytes); + return SZ_OK; + } + MY_ALLOC(Byte, *v, numBytes, alloc); + v2 = *v; + memset(v2, 0xFF, (size_t)numBytes); + { + unsigned numBits = (unsigned)numItems & 7; + if (numBits != 0) + v2[numBytes - 1] = (Byte)((((UInt32)1 << numBits) - 1) << (8 - numBits)); + } + return SZ_OK; +} + +static MY_NO_INLINE SRes ReadUi32s(CSzData *sd2, UInt32 numItems, CSzBitUi32s *crcs, ISzAlloc *alloc) +{ + UInt32 i; + CSzData sd; + UInt32 *vals; + const Byte *defs; + MY_ALLOC_ZE(UInt32, crcs->Vals, numItems, alloc); + sd = *sd2; + defs = crcs->Defs; + vals = crcs->Vals; + for (i = 0; i < numItems; i++) + if (SzBitArray_Check(defs, i)) + { + SZ_READ_32(vals[i]); + } + else + vals[i] = 0; + *sd2 = sd; + return SZ_OK; +} + +static SRes ReadBitUi32s(CSzData *sd, UInt32 numItems, CSzBitUi32s *crcs, ISzAlloc *alloc) +{ + SzBitUi32s_Free(crcs, alloc); + RINOK(ReadBitVector(sd, numItems, &crcs->Defs, alloc)); + return ReadUi32s(sd, numItems, crcs, alloc); +} + +static SRes SkipBitUi32s(CSzData *sd, UInt32 numItems) +{ + Byte allAreDefined; + UInt32 numDefined = numItems; + SZ_READ_BYTE(allAreDefined); + if (!allAreDefined) + { + size_t numBytes = (numItems + 7) >> 3; + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; + numDefined = CountDefinedBits(sd->Data, numItems); + SKIP_DATA(sd, numBytes); + } + if (numDefined > (sd->Size >> 2)) + return SZ_ERROR_ARCHIVE; + SKIP_DATA(sd, (size_t)numDefined * 4); + return SZ_OK; +} + +static SRes ReadPackInfo(CSzAr *p, CSzData *sd, ISzAlloc *alloc) +{ + RINOK(SzReadNumber32(sd, &p->NumPackStreams)); + + RINOK(WaitId(sd, k7zIdSize)); + MY_ALLOC(UInt64, p->PackPositions, (size_t)p->NumPackStreams + 1, alloc); + { + UInt64 sum = 0; + UInt32 i; + UInt32 numPackStreams = p->NumPackStreams; + for (i = 0; i < numPackStreams; i++) + { + UInt64 packSize; + p->PackPositions[i] = sum; + RINOK(ReadNumber(sd, &packSize)); + sum += packSize; + if (sum < packSize) + return SZ_ERROR_ARCHIVE; + } + p->PackPositions[i] = sum; + } + + for (;;) + { + UInt64 type; + RINOK(ReadID(sd, &type)); + if (type == k7zIdEnd) + return SZ_OK; + if (type == k7zIdCRC) + { + /* CRC of packed streams is unused now */ + RINOK(SkipBitUi32s(sd, p->NumPackStreams)); + continue; + } + RINOK(SkipData(sd)); + } +} + +/* +static SRes SzReadSwitch(CSzData *sd) +{ + Byte external; + RINOK(SzReadByte(sd, &external)); + return (external == 0) ? SZ_OK: SZ_ERROR_UNSUPPORTED; +} +*/ + +#define k_NumCodersStreams_in_Folder_MAX (SZ_NUM_BONDS_IN_FOLDER_MAX + SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX) + +static SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) +{ + UInt32 numCoders, i; + UInt32 numInStreams = 0; + const Byte *dataStart = sd->Data; + + f->NumCoders = 0; + f->NumBonds = 0; + f->NumPackStreams = 0; + f->UnpackStream = 0; + + RINOK(SzReadNumber32(sd, &numCoders)); + if (numCoders == 0 || numCoders > SZ_NUM_CODERS_IN_FOLDER_MAX) + return SZ_ERROR_UNSUPPORTED; + + for (i = 0; i < numCoders; i++) + { + Byte mainByte; + CSzCoderInfo *coder = f->Coders + i; + unsigned idSize, j; + UInt64 id; + + SZ_READ_BYTE(mainByte); + if ((mainByte & 0xC0) != 0) + return SZ_ERROR_UNSUPPORTED; + + idSize = (unsigned)(mainByte & 0xF); + if (idSize > sizeof(id)) + return SZ_ERROR_UNSUPPORTED; + if (idSize > sd->Size) + return SZ_ERROR_ARCHIVE; + id = 0; + for (j = 0; j < idSize; j++) + { + id = ((id << 8) | *sd->Data); + sd->Data++; + sd->Size--; + } + if (id > UINT64_CONST(0xFFFFFFFF)) + return SZ_ERROR_UNSUPPORTED; + coder->MethodID = (UInt32)id; + + coder->NumStreams = 1; + coder->PropsOffset = 0; + coder->PropsSize = 0; + + if ((mainByte & 0x10) != 0) + { + UInt32 numStreams; + + RINOK(SzReadNumber32(sd, &numStreams)); + if (numStreams > k_NumCodersStreams_in_Folder_MAX) + return SZ_ERROR_UNSUPPORTED; + coder->NumStreams = (Byte)numStreams; + + RINOK(SzReadNumber32(sd, &numStreams)); + if (numStreams != 1) + return SZ_ERROR_UNSUPPORTED; + } + + numInStreams += coder->NumStreams; + + if (numInStreams > k_NumCodersStreams_in_Folder_MAX) + return SZ_ERROR_UNSUPPORTED; + + if ((mainByte & 0x20) != 0) + { + UInt32 propsSize = 0; + RINOK(SzReadNumber32(sd, &propsSize)); + if (propsSize > sd->Size) + return SZ_ERROR_ARCHIVE; + if (propsSize >= 0x80) + return SZ_ERROR_UNSUPPORTED; + coder->PropsOffset = sd->Data - dataStart; + coder->PropsSize = (Byte)propsSize; + sd->Data += (size_t)propsSize; + sd->Size -= (size_t)propsSize; + } + } + + /* + if (numInStreams == 1 && numCoders == 1) + { + f->NumPackStreams = 1; + f->PackStreams[0] = 0; + } + else + */ + { + Byte streamUsed[k_NumCodersStreams_in_Folder_MAX]; + UInt32 numBonds, numPackStreams; + + numBonds = numCoders - 1; + if (numInStreams < numBonds) + return SZ_ERROR_ARCHIVE; + if (numBonds > SZ_NUM_BONDS_IN_FOLDER_MAX) + return SZ_ERROR_UNSUPPORTED; + f->NumBonds = numBonds; + + numPackStreams = numInStreams - numBonds; + if (numPackStreams > SZ_NUM_PACK_STREAMS_IN_FOLDER_MAX) + return SZ_ERROR_UNSUPPORTED; + f->NumPackStreams = numPackStreams; + + for (i = 0; i < numInStreams; i++) + streamUsed[i] = False; + + if (numBonds != 0) + { + Byte coderUsed[SZ_NUM_CODERS_IN_FOLDER_MAX]; + + for (i = 0; i < numCoders; i++) + coderUsed[i] = False; + + for (i = 0; i < numBonds; i++) + { + CSzBond *bp = f->Bonds + i; + + RINOK(SzReadNumber32(sd, &bp->InIndex)); + if (bp->InIndex >= numInStreams || streamUsed[bp->InIndex]) + return SZ_ERROR_ARCHIVE; + streamUsed[bp->InIndex] = True; + + RINOK(SzReadNumber32(sd, &bp->OutIndex)); + if (bp->OutIndex >= numCoders || coderUsed[bp->OutIndex]) + return SZ_ERROR_ARCHIVE; + coderUsed[bp->OutIndex] = True; + } + + for (i = 0; i < numCoders; i++) + if (!coderUsed[i]) + { + f->UnpackStream = i; + break; + } + + if (i == numCoders) + return SZ_ERROR_ARCHIVE; + } + + if (numPackStreams == 1) + { + for (i = 0; i < numInStreams; i++) + if (!streamUsed[i]) + break; + if (i == numInStreams) + return SZ_ERROR_ARCHIVE; + f->PackStreams[0] = i; + } + else + for (i = 0; i < numPackStreams; i++) + { + UInt32 index; + RINOK(SzReadNumber32(sd, &index)); + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True; + f->PackStreams[i] = index; + } + } + + f->NumCoders = numCoders; + + return SZ_OK; +} + + +static MY_NO_INLINE SRes SkipNumbers(CSzData *sd2, UInt32 num) +{ + CSzData sd; + sd = *sd2; + for (; num != 0; num--) + { + Byte firstByte, mask; + unsigned i; + SZ_READ_BYTE_2(firstByte); + if ((firstByte & 0x80) == 0) + continue; + if ((firstByte & 0x40) == 0) + { + if (sd.Size == 0) + return SZ_ERROR_ARCHIVE; + sd.Size--; + sd.Data++; + continue; + } + mask = 0x20; + for (i = 2; i < 8 && (firstByte & mask) != 0; i++) + mask >>= 1; + if (i > sd.Size) + return SZ_ERROR_ARCHIVE; + SKIP_DATA2(sd, i); + } + *sd2 = sd; + return SZ_OK; +} + + +#define k_Scan_NumCoders_MAX 64 +#define k_Scan_NumCodersStreams_in_Folder_MAX 64 + + +static SRes ReadUnpackInfo(CSzAr *p, + CSzData *sd2, + UInt32 numFoldersMax, + const CBuf *tempBufs, UInt32 numTempBufs, + ISzAlloc *alloc) +{ + CSzData sd; + + UInt32 fo, numFolders, numCodersOutStreams, packStreamIndex; + const Byte *startBufPtr; + Byte external; + + RINOK(WaitId(sd2, k7zIdFolder)); + + RINOK(SzReadNumber32(sd2, &numFolders)); + if (numFolders > numFoldersMax) + return SZ_ERROR_UNSUPPORTED; + p->NumFolders = numFolders; + + SZ_READ_BYTE_SD(sd2, external); + if (external == 0) + sd = *sd2; + else + { + UInt32 index; + RINOK(SzReadNumber32(sd2, &index)); + if (index >= numTempBufs) + return SZ_ERROR_ARCHIVE; + sd.Data = tempBufs[index].data; + sd.Size = tempBufs[index].size; + } + + MY_ALLOC(size_t, p->FoCodersOffsets, (size_t)numFolders + 1, alloc); + MY_ALLOC(UInt32, p->FoStartPackStreamIndex, (size_t)numFolders + 1, alloc); + MY_ALLOC(UInt32, p->FoToCoderUnpackSizes, (size_t)numFolders + 1, alloc); + MY_ALLOC(Byte, p->FoToMainUnpackSizeIndex, (size_t)numFolders, alloc); + + startBufPtr = sd.Data; + + packStreamIndex = 0; + numCodersOutStreams = 0; + + for (fo = 0; fo < numFolders; fo++) + { + UInt32 numCoders, ci, numInStreams = 0; + + p->FoCodersOffsets[fo] = sd.Data - startBufPtr; + + RINOK(SzReadNumber32(&sd, &numCoders)); + if (numCoders == 0 || numCoders > k_Scan_NumCoders_MAX) + return SZ_ERROR_UNSUPPORTED; + + for (ci = 0; ci < numCoders; ci++) + { + Byte mainByte; + unsigned idSize; + UInt32 coderInStreams; + + SZ_READ_BYTE_2(mainByte); + if ((mainByte & 0xC0) != 0) + return SZ_ERROR_UNSUPPORTED; + idSize = (mainByte & 0xF); + if (idSize > 8) + return SZ_ERROR_UNSUPPORTED; + if (idSize > sd.Size) + return SZ_ERROR_ARCHIVE; + SKIP_DATA2(sd, idSize); + + coderInStreams = 1; + + if ((mainByte & 0x10) != 0) + { + UInt32 coderOutStreams; + RINOK(SzReadNumber32(&sd, &coderInStreams)); + RINOK(SzReadNumber32(&sd, &coderOutStreams)); + if (coderInStreams > k_Scan_NumCodersStreams_in_Folder_MAX || coderOutStreams != 1) + return SZ_ERROR_UNSUPPORTED; + } + + numInStreams += coderInStreams; + + if ((mainByte & 0x20) != 0) + { + UInt32 propsSize; + RINOK(SzReadNumber32(&sd, &propsSize)); + if (propsSize > sd.Size) + return SZ_ERROR_ARCHIVE; + SKIP_DATA2(sd, propsSize); + } + } + + { + UInt32 indexOfMainStream = 0; + UInt32 numPackStreams = 1; + + if (numCoders != 1 || numInStreams != 1) + { + Byte streamUsed[k_Scan_NumCodersStreams_in_Folder_MAX]; + Byte coderUsed[k_Scan_NumCoders_MAX]; + + UInt32 i; + UInt32 numBonds = numCoders - 1; + if (numInStreams < numBonds) + return SZ_ERROR_ARCHIVE; + + if (numInStreams > k_Scan_NumCodersStreams_in_Folder_MAX) + return SZ_ERROR_UNSUPPORTED; + + for (i = 0; i < numInStreams; i++) + streamUsed[i] = False; + for (i = 0; i < numCoders; i++) + coderUsed[i] = False; + + for (i = 0; i < numBonds; i++) + { + UInt32 index; + + RINOK(SzReadNumber32(&sd, &index)); + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True; + + RINOK(SzReadNumber32(&sd, &index)); + if (index >= numCoders || coderUsed[index]) + return SZ_ERROR_ARCHIVE; + coderUsed[index] = True; + } + + numPackStreams = numInStreams - numBonds; + + if (numPackStreams != 1) + for (i = 0; i < numPackStreams; i++) + { + UInt32 index; + RINOK(SzReadNumber32(&sd, &index)); + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True; + } + + for (i = 0; i < numCoders; i++) + if (!coderUsed[i]) + { + indexOfMainStream = i; + break; + } + + if (i == numCoders) + return SZ_ERROR_ARCHIVE; + } + + p->FoStartPackStreamIndex[fo] = packStreamIndex; + p->FoToCoderUnpackSizes[fo] = numCodersOutStreams; + p->FoToMainUnpackSizeIndex[fo] = (Byte)indexOfMainStream; + numCodersOutStreams += numCoders; + if (numCodersOutStreams < numCoders) + return SZ_ERROR_UNSUPPORTED; + if (numPackStreams > p->NumPackStreams - packStreamIndex) + return SZ_ERROR_ARCHIVE; + packStreamIndex += numPackStreams; + } + } + + p->FoToCoderUnpackSizes[fo] = numCodersOutStreams; + + { + size_t dataSize = sd.Data - startBufPtr; + p->FoStartPackStreamIndex[fo] = packStreamIndex; + p->FoCodersOffsets[fo] = dataSize; + MY_ALLOC_ZE_AND_CPY(p->CodersData, dataSize, startBufPtr, alloc); + } + + if (external != 0) + { + if (sd.Size != 0) + return SZ_ERROR_ARCHIVE; + sd = *sd2; + } + + RINOK(WaitId(&sd, k7zIdCodersUnpackSize)); + + MY_ALLOC_ZE(UInt64, p->CoderUnpackSizes, (size_t)numCodersOutStreams, alloc); + { + UInt32 i; + for (i = 0; i < numCodersOutStreams; i++) + { + RINOK(ReadNumber(&sd, p->CoderUnpackSizes + i)); + } + } + + for (;;) + { + UInt64 type; + RINOK(ReadID(&sd, &type)); + if (type == k7zIdEnd) + { + *sd2 = sd; + return SZ_OK; + } + if (type == k7zIdCRC) + { + RINOK(ReadBitUi32s(&sd, numFolders, &p->FolderCRCs, alloc)); + continue; + } + RINOK(SkipData(&sd)); + } +} + + +static UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex) +{ + return p->CoderUnpackSizes[p->FoToCoderUnpackSizes[folderIndex] + p->FoToMainUnpackSizeIndex[folderIndex]]; +} + + +typedef struct +{ + UInt32 NumTotalSubStreams; + UInt32 NumSubDigests; + CSzData sdNumSubStreams; + CSzData sdSizes; + CSzData sdCRCs; +} CSubStreamInfo; + + +static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) +{ + UInt64 type = 0; + UInt32 numSubDigests = 0; + UInt32 numFolders = p->NumFolders; + UInt32 numUnpackStreams = numFolders; + UInt32 numUnpackSizesInData = 0; + + for (;;) + { + RINOK(ReadID(sd, &type)); + if (type == k7zIdNumUnpackStream) + { + UInt32 i; + ssi->sdNumSubStreams.Data = sd->Data; + numUnpackStreams = 0; + numSubDigests = 0; + for (i = 0; i < numFolders; i++) + { + UInt32 numStreams; + RINOK(SzReadNumber32(sd, &numStreams)); + if (numUnpackStreams > numUnpackStreams + numStreams) + return SZ_ERROR_UNSUPPORTED; + numUnpackStreams += numStreams; + if (numStreams != 0) + numUnpackSizesInData += (numStreams - 1); + if (numStreams != 1 || !SzBitWithVals_Check(&p->FolderCRCs, i)) + numSubDigests += numStreams; + } + ssi->sdNumSubStreams.Size = sd->Data - ssi->sdNumSubStreams.Data; + continue; + } + if (type == k7zIdCRC || type == k7zIdSize || type == k7zIdEnd) + break; + RINOK(SkipData(sd)); + } + + if (!ssi->sdNumSubStreams.Data) + { + numSubDigests = numFolders; + if (p->FolderCRCs.Defs) + numSubDigests = numFolders - CountDefinedBits(p->FolderCRCs.Defs, numFolders); + } + + ssi->NumTotalSubStreams = numUnpackStreams; + ssi->NumSubDigests = numSubDigests; + + if (type == k7zIdSize) + { + ssi->sdSizes.Data = sd->Data; + RINOK(SkipNumbers(sd, numUnpackSizesInData)); + ssi->sdSizes.Size = sd->Data - ssi->sdSizes.Data; + RINOK(ReadID(sd, &type)); + } + + for (;;) + { + if (type == k7zIdEnd) + return SZ_OK; + if (type == k7zIdCRC) + { + ssi->sdCRCs.Data = sd->Data; + RINOK(SkipBitUi32s(sd, numSubDigests)); + ssi->sdCRCs.Size = sd->Data - ssi->sdCRCs.Data; + } + else + { + RINOK(SkipData(sd)); + } + RINOK(ReadID(sd, &type)); + } +} + +static SRes SzReadStreamsInfo(CSzAr *p, + CSzData *sd, + UInt32 numFoldersMax, const CBuf *tempBufs, UInt32 numTempBufs, + UInt64 *dataOffset, + CSubStreamInfo *ssi, + ISzAlloc *alloc) +{ + UInt64 type; + + SzData_Clear(&ssi->sdSizes); + SzData_Clear(&ssi->sdCRCs); + SzData_Clear(&ssi->sdNumSubStreams); + + *dataOffset = 0; + RINOK(ReadID(sd, &type)); + if (type == k7zIdPackInfo) + { + RINOK(ReadNumber(sd, dataOffset)); + RINOK(ReadPackInfo(p, sd, alloc)); + RINOK(ReadID(sd, &type)); + } + if (type == k7zIdUnpackInfo) + { + RINOK(ReadUnpackInfo(p, sd, numFoldersMax, tempBufs, numTempBufs, alloc)); + RINOK(ReadID(sd, &type)); + } + if (type == k7zIdSubStreamsInfo) + { + RINOK(ReadSubStreamsInfo(p, sd, ssi)); + RINOK(ReadID(sd, &type)); + } + else + { + ssi->NumTotalSubStreams = p->NumFolders; + /* ssi->NumSubDigests = 0; */ + } + + return (type == k7zIdEnd ? SZ_OK : SZ_ERROR_UNSUPPORTED); +} + +static SRes SzReadAndDecodePackedStreams( + ILookInStream *inStream, + CSzData *sd, + CBuf *tempBufs, + UInt32 numFoldersMax, + UInt64 baseOffset, + CSzAr *p, + ISzAlloc *allocTemp) +{ + UInt64 dataStartPos = 0; + UInt32 fo; + CSubStreamInfo ssi; + UInt32 numFolders; + + RINOK(SzReadStreamsInfo(p, sd, numFoldersMax, NULL, 0, &dataStartPos, &ssi, allocTemp)); + + numFolders = p->NumFolders; + if (numFolders == 0) + return SZ_ERROR_ARCHIVE; + else if (numFolders > numFoldersMax) + return SZ_ERROR_UNSUPPORTED; + + dataStartPos += baseOffset; + + for (fo = 0; fo < numFolders; fo++) + Buf_Init(tempBufs + fo); + + for (fo = 0; fo < numFolders; fo++) + { + CBuf *tempBuf = tempBufs + fo; + UInt64 unpackSize = SzAr_GetFolderUnpackSize(p, fo); + if ((size_t)unpackSize != unpackSize) + return SZ_ERROR_MEM; + if (!Buf_Create(tempBuf, (size_t)unpackSize, allocTemp)) + return SZ_ERROR_MEM; + } + + for (fo = 0; fo < numFolders; fo++) + { + const CBuf *tempBuf = tempBufs + fo; + RINOK(LookInStream_SeekTo(inStream, dataStartPos)); + RINOK(SzAr_DecodeFolder(p, fo, inStream, dataStartPos, tempBuf->data, tempBuf->size, allocTemp)); + } + + return SZ_OK; +} + +static SRes SzReadFileNames(const Byte *data, size_t size, UInt32 numFiles, size_t *offsets) +{ + size_t pos = 0; + *offsets++ = 0; + if (numFiles == 0) + return (size == 0) ? SZ_OK : SZ_ERROR_ARCHIVE; + if (size < 2) + return SZ_ERROR_ARCHIVE; + if (data[size - 2] != 0 || data[size - 1] != 0) + return SZ_ERROR_ARCHIVE; + do + { + const Byte *p; + if (pos == size) + return SZ_ERROR_ARCHIVE; + for (p = data + pos; + #ifdef _WIN32 + *(const UInt16 *)p != 0 + #else + p[0] != 0 || p[1] != 0 + #endif + ; p += 2); + pos = p - data + 2; + *offsets++ = (pos >> 1); + } + while (--numFiles); + return (pos == size) ? SZ_OK : SZ_ERROR_ARCHIVE; +} + +static MY_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, + CSzData *sd2, + const CBuf *tempBufs, UInt32 numTempBufs, + ISzAlloc *alloc) +{ + CSzData sd; + UInt32 i; + CNtfsFileTime *vals; + Byte *defs; + Byte external; + + RINOK(ReadBitVector(sd2, num, &p->Defs, alloc)); + + SZ_READ_BYTE_SD(sd2, external); + if (external == 0) + sd = *sd2; + else + { + UInt32 index; + RINOK(SzReadNumber32(sd2, &index)); + if (index >= numTempBufs) + return SZ_ERROR_ARCHIVE; + sd.Data = tempBufs[index].data; + sd.Size = tempBufs[index].size; + } + + MY_ALLOC_ZE(CNtfsFileTime, p->Vals, num, alloc); + vals = p->Vals; + defs = p->Defs; + for (i = 0; i < num; i++) + if (SzBitArray_Check(defs, i)) + { + if (sd.Size < 8) + return SZ_ERROR_ARCHIVE; + vals[i].Low = GetUi32(sd.Data); + vals[i].High = GetUi32(sd.Data + 4); + SKIP_DATA2(sd, 8); + } + else + vals[i].High = vals[i].Low = 0; + + if (external == 0) + *sd2 = sd; + + return SZ_OK; +} + + +#define NUM_ADDITIONAL_STREAMS_MAX 8 + + +static SRes SzReadHeader2( + CSzArEx *p, /* allocMain */ + CSzData *sd, + ILookInStream *inStream, + CBuf *tempBufs, UInt32 *numTempBufs, + ISzAlloc *allocMain, + ISzAlloc *allocTemp + ) +{ + CSubStreamInfo ssi; + +{ + UInt64 type; + + SzData_Clear(&ssi.sdSizes); + SzData_Clear(&ssi.sdCRCs); + SzData_Clear(&ssi.sdNumSubStreams); + + ssi.NumSubDigests = 0; + ssi.NumTotalSubStreams = 0; + + RINOK(ReadID(sd, &type)); + + if (type == k7zIdArchiveProperties) + { + for (;;) + { + UInt64 type2; + RINOK(ReadID(sd, &type2)); + if (type2 == k7zIdEnd) + break; + RINOK(SkipData(sd)); + } + RINOK(ReadID(sd, &type)); + } + + if (type == k7zIdAdditionalStreamsInfo) + { + CSzAr tempAr; + SRes res; + + SzAr_Init(&tempAr); + res = SzReadAndDecodePackedStreams(inStream, sd, tempBufs, NUM_ADDITIONAL_STREAMS_MAX, + p->startPosAfterHeader, &tempAr, allocTemp); + *numTempBufs = tempAr.NumFolders; + SzAr_Free(&tempAr, allocTemp); + + if (res != SZ_OK) + return res; + RINOK(ReadID(sd, &type)); + } + + if (type == k7zIdMainStreamsInfo) + { + RINOK(SzReadStreamsInfo(&p->db, sd, (UInt32)1 << 30, tempBufs, *numTempBufs, + &p->dataPos, &ssi, allocMain)); + p->dataPos += p->startPosAfterHeader; + RINOK(ReadID(sd, &type)); + } + + if (type == k7zIdEnd) + { + return SZ_OK; + } + + if (type != k7zIdFilesInfo) + return SZ_ERROR_ARCHIVE; +} + +{ + UInt32 numFiles = 0; + UInt32 numEmptyStreams = 0; + const Byte *emptyStreams = NULL; + const Byte *emptyFiles = NULL; + + RINOK(SzReadNumber32(sd, &numFiles)); + p->NumFiles = numFiles; + + for (;;) + { + UInt64 type; + UInt64 size; + RINOK(ReadID(sd, &type)); + if (type == k7zIdEnd) + break; + RINOK(ReadNumber(sd, &size)); + if (size > sd->Size) + return SZ_ERROR_ARCHIVE; + + if (type >= ((UInt32)1 << 8)) + { + SKIP_DATA(sd, size); + } + else switch ((unsigned)type) + { + case k7zIdName: + { + size_t namesSize; + const Byte *namesData; + Byte external; + + SZ_READ_BYTE(external); + if (external == 0) + { + namesSize = (size_t)size - 1; + namesData = sd->Data; + } + else + { + UInt32 index; + RINOK(SzReadNumber32(sd, &index)); + if (index >= *numTempBufs) + return SZ_ERROR_ARCHIVE; + namesData = (tempBufs)[index].data; + namesSize = (tempBufs)[index].size; + } + + if ((namesSize & 1) != 0) + return SZ_ERROR_ARCHIVE; + MY_ALLOC(size_t, p->FileNameOffsets, numFiles + 1, allocMain); + MY_ALLOC_ZE_AND_CPY(p->FileNames, namesSize, namesData, allocMain); + RINOK(SzReadFileNames(p->FileNames, namesSize, numFiles, p->FileNameOffsets)) + if (external == 0) + { + SKIP_DATA(sd, namesSize); + } + break; + } + case k7zIdEmptyStream: + { + RINOK(RememberBitVector(sd, numFiles, &emptyStreams)); + numEmptyStreams = CountDefinedBits(emptyStreams, numFiles); + emptyFiles = NULL; + break; + } + case k7zIdEmptyFile: + { + RINOK(RememberBitVector(sd, numEmptyStreams, &emptyFiles)); + break; + } + case k7zIdWinAttrib: + { + Byte external; + CSzData sdSwitch; + CSzData *sdPtr; + SzBitUi32s_Free(&p->Attribs, allocMain); + RINOK(ReadBitVector(sd, numFiles, &p->Attribs.Defs, allocMain)); + + SZ_READ_BYTE(external); + if (external == 0) + sdPtr = sd; + else + { + UInt32 index; + RINOK(SzReadNumber32(sd, &index)); + if (index >= *numTempBufs) + return SZ_ERROR_ARCHIVE; + sdSwitch.Data = (tempBufs)[index].data; + sdSwitch.Size = (tempBufs)[index].size; + sdPtr = &sdSwitch; + } + RINOK(ReadUi32s(sdPtr, numFiles, &p->Attribs, allocMain)); + break; + } + /* + case k7zParent: + { + SzBitUi32s_Free(&p->Parents, allocMain); + RINOK(ReadBitVector(sd, numFiles, &p->Parents.Defs, allocMain)); + RINOK(SzReadSwitch(sd)); + RINOK(ReadUi32s(sd, numFiles, &p->Parents, allocMain)); + break; + } + */ + case k7zIdMTime: RINOK(ReadTime(&p->MTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)); break; + case k7zIdCTime: RINOK(ReadTime(&p->CTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)); break; + default: + { + SKIP_DATA(sd, size); + } + } + } + + if (numFiles - numEmptyStreams != ssi.NumTotalSubStreams) + return SZ_ERROR_ARCHIVE; + + for (;;) + { + UInt64 type; + RINOK(ReadID(sd, &type)); + if (type == k7zIdEnd) + break; + RINOK(SkipData(sd)); + } + + { + UInt32 i; + UInt32 emptyFileIndex = 0; + UInt32 folderIndex = 0; + UInt32 remSubStreams = 0; + UInt32 numSubStreams = 0; + UInt64 unpackPos = 0; + const Byte *digestsDefs = NULL; + const Byte *digestsVals = NULL; + UInt32 digestsValsIndex = 0; + UInt32 digestIndex; + Byte allDigestsDefined = 0; + Byte isDirMask = 0; + Byte crcMask = 0; + Byte mask = 0x80; + + MY_ALLOC(UInt32, p->FolderToFile, p->db.NumFolders + 1, allocMain); + MY_ALLOC_ZE(UInt32, p->FileToFolder, p->NumFiles, allocMain); + MY_ALLOC(UInt64, p->UnpackPositions, p->NumFiles + 1, allocMain); + MY_ALLOC_ZE(Byte, p->IsDirs, (p->NumFiles + 7) >> 3, allocMain); + + RINOK(SzBitUi32s_Alloc(&p->CRCs, p->NumFiles, allocMain)); + + if (ssi.sdCRCs.Size != 0) + { + SZ_READ_BYTE_SD(&ssi.sdCRCs, allDigestsDefined); + if (allDigestsDefined) + digestsVals = ssi.sdCRCs.Data; + else + { + size_t numBytes = (ssi.NumSubDigests + 7) >> 3; + digestsDefs = ssi.sdCRCs.Data; + digestsVals = digestsDefs + numBytes; + } + } + + digestIndex = 0; + + for (i = 0; i < numFiles; i++, mask >>= 1) + { + if (mask == 0) + { + UInt32 byteIndex = (i - 1) >> 3; + p->IsDirs[byteIndex] = isDirMask; + p->CRCs.Defs[byteIndex] = crcMask; + isDirMask = 0; + crcMask = 0; + mask = 0x80; + } + + p->UnpackPositions[i] = unpackPos; + p->CRCs.Vals[i] = 0; + + if (emptyStreams && SzBitArray_Check(emptyStreams, i)) + { + if (emptyFiles) + { + if (!SzBitArray_Check(emptyFiles, emptyFileIndex)) + isDirMask |= mask; + emptyFileIndex++; + } + else + isDirMask |= mask; + if (remSubStreams == 0) + { + p->FileToFolder[i] = (UInt32)-1; + continue; + } + } + + if (remSubStreams == 0) + { + for (;;) + { + if (folderIndex >= p->db.NumFolders) + return SZ_ERROR_ARCHIVE; + p->FolderToFile[folderIndex] = i; + numSubStreams = 1; + if (ssi.sdNumSubStreams.Data) + { + RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)); + } + remSubStreams = numSubStreams; + if (numSubStreams != 0) + break; + { + UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + unpackPos += folderUnpackSize; + if (unpackPos < folderUnpackSize) + return SZ_ERROR_ARCHIVE; + } + + folderIndex++; + } + } + + p->FileToFolder[i] = folderIndex; + + if (emptyStreams && SzBitArray_Check(emptyStreams, i)) + continue; + + if (--remSubStreams == 0) + { + UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + UInt64 startFolderUnpackPos = p->UnpackPositions[p->FolderToFile[folderIndex]]; + if (folderUnpackSize < unpackPos - startFolderUnpackPos) + return SZ_ERROR_ARCHIVE; + unpackPos = startFolderUnpackPos + folderUnpackSize; + if (unpackPos < folderUnpackSize) + return SZ_ERROR_ARCHIVE; + + if (numSubStreams == 1 && SzBitWithVals_Check(&p->db.FolderCRCs, i)) + { + p->CRCs.Vals[i] = p->db.FolderCRCs.Vals[folderIndex]; + crcMask |= mask; + } + else if (allDigestsDefined || (digestsDefs && SzBitArray_Check(digestsDefs, digestIndex))) + { + p->CRCs.Vals[i] = GetUi32(digestsVals + (size_t)digestsValsIndex * 4); + digestsValsIndex++; + crcMask |= mask; + } + + folderIndex++; + } + else + { + UInt64 v; + RINOK(ReadNumber(&ssi.sdSizes, &v)); + unpackPos += v; + if (unpackPos < v) + return SZ_ERROR_ARCHIVE; + if (allDigestsDefined || (digestsDefs && SzBitArray_Check(digestsDefs, digestIndex))) + { + p->CRCs.Vals[i] = GetUi32(digestsVals + (size_t)digestsValsIndex * 4); + digestsValsIndex++; + crcMask |= mask; + } + } + } + + if (mask != 0x80) + { + UInt32 byteIndex = (i - 1) >> 3; + p->IsDirs[byteIndex] = isDirMask; + p->CRCs.Defs[byteIndex] = crcMask; + } + + p->UnpackPositions[i] = unpackPos; + + if (remSubStreams != 0) + return SZ_ERROR_ARCHIVE; + + for (;;) + { + p->FolderToFile[folderIndex] = i; + if (folderIndex >= p->db.NumFolders) + break; + if (!ssi.sdNumSubStreams.Data) + return SZ_ERROR_ARCHIVE; + RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)); + if (numSubStreams != 0) + return SZ_ERROR_ARCHIVE; + /* + { + UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + unpackPos += folderUnpackSize; + if (unpackPos < folderUnpackSize) + return SZ_ERROR_ARCHIVE; + } + */ + folderIndex++; + } + + if (ssi.sdNumSubStreams.Data && ssi.sdNumSubStreams.Size != 0) + return SZ_ERROR_ARCHIVE; + } +} + return SZ_OK; +} + + +static SRes SzReadHeader( + CSzArEx *p, + CSzData *sd, + ILookInStream *inStream, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + UInt32 i; + UInt32 numTempBufs = 0; + SRes res; + CBuf tempBufs[NUM_ADDITIONAL_STREAMS_MAX]; + + for (i = 0; i < NUM_ADDITIONAL_STREAMS_MAX; i++) + Buf_Init(tempBufs + i); + + res = SzReadHeader2(p, sd, inStream, + tempBufs, &numTempBufs, + allocMain, allocTemp); + + for (i = 0; i < NUM_ADDITIONAL_STREAMS_MAX; i++) + Buf_Free(tempBufs + i, allocTemp); + + RINOK(res); + + if (sd->Size != 0) + return SZ_ERROR_FAIL; + + return res; +} + +static SRes SzArEx_Open2( + CSzArEx *p, + ILookInStream *inStream, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + Byte header[k7zStartHeaderSize]; + Int64 startArcPos; + UInt64 nextHeaderOffset, nextHeaderSize; + size_t nextHeaderSizeT; + UInt32 nextHeaderCRC; + CBuf buf; + SRes res; + + startArcPos = 0; + RINOK(inStream->Seek(inStream, &startArcPos, SZ_SEEK_CUR)); + + RINOK(LookInStream_Read2(inStream, header, k7zStartHeaderSize, SZ_ERROR_NO_ARCHIVE)); + + if (!TestSignatureCandidate(header)) + return SZ_ERROR_NO_ARCHIVE; + if (header[6] != k7zMajorVersion) + return SZ_ERROR_UNSUPPORTED; + + nextHeaderOffset = GetUi64(header + 12); + nextHeaderSize = GetUi64(header + 20); + nextHeaderCRC = GetUi32(header + 28); + + p->startPosAfterHeader = startArcPos + k7zStartHeaderSize; + + if (CrcCalc(header + 12, 20) != GetUi32(header + 8)) + return SZ_ERROR_CRC; + + nextHeaderSizeT = (size_t)nextHeaderSize; + if (nextHeaderSizeT != nextHeaderSize) + return SZ_ERROR_MEM; + if (nextHeaderSizeT == 0) + return SZ_OK; + if (nextHeaderOffset > nextHeaderOffset + nextHeaderSize || + nextHeaderOffset > nextHeaderOffset + nextHeaderSize + k7zStartHeaderSize) + return SZ_ERROR_NO_ARCHIVE; + + { + Int64 pos = 0; + RINOK(inStream->Seek(inStream, &pos, SZ_SEEK_END)); + if ((UInt64)pos < startArcPos + nextHeaderOffset || + (UInt64)pos < startArcPos + k7zStartHeaderSize + nextHeaderOffset || + (UInt64)pos < startArcPos + k7zStartHeaderSize + nextHeaderOffset + nextHeaderSize) + return SZ_ERROR_INPUT_EOF; + } + + RINOK(LookInStream_SeekTo(inStream, startArcPos + k7zStartHeaderSize + nextHeaderOffset)); + + if (!Buf_Create(&buf, nextHeaderSizeT, allocTemp)) + return SZ_ERROR_MEM; + + res = LookInStream_Read(inStream, buf.data, nextHeaderSizeT); + + if (res == SZ_OK) + { + res = SZ_ERROR_ARCHIVE; + if (CrcCalc(buf.data, nextHeaderSizeT) == nextHeaderCRC) + { + CSzData sd; + UInt64 type; + sd.Data = buf.data; + sd.Size = buf.size; + + res = ReadID(&sd, &type); + + if (res == SZ_OK && type == k7zIdEncodedHeader) + { + CSzAr tempAr; + CBuf tempBuf; + Buf_Init(&tempBuf); + + SzAr_Init(&tempAr); + res = SzReadAndDecodePackedStreams(inStream, &sd, &tempBuf, 1, p->startPosAfterHeader, &tempAr, allocTemp); + SzAr_Free(&tempAr, allocTemp); + + if (res != SZ_OK) + { + Buf_Free(&tempBuf, allocTemp); + } + else + { + Buf_Free(&buf, allocTemp); + buf.data = tempBuf.data; + buf.size = tempBuf.size; + sd.Data = buf.data; + sd.Size = buf.size; + res = ReadID(&sd, &type); + } + } + + if (res == SZ_OK) + { + if (type == k7zIdHeader) + { + /* + CSzData sd2; + unsigned ttt; + for (ttt = 0; ttt < 40000; ttt++) + { + SzArEx_Free(p, allocMain); + sd2 = sd; + res = SzReadHeader(p, &sd2, inStream, allocMain, allocTemp); + if (res != SZ_OK) + break; + } + */ + res = SzReadHeader(p, &sd, inStream, allocMain, allocTemp); + } + else + res = SZ_ERROR_UNSUPPORTED; + } + } + } + + Buf_Free(&buf, allocTemp); + return res; +} + + +static SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, + ISzAlloc *allocMain, ISzAlloc *allocTemp) +{ + SRes res = SzArEx_Open2(p, inStream, allocMain, allocTemp); + if (res != SZ_OK) + SzArEx_Free(p, allocMain); + return res; +} + + +static SRes SzArEx_Extract( + const CSzArEx *p, + ILookInStream *inStream, + UInt32 fileIndex, + UInt32 *blockIndex, + Byte **tempBuf, + size_t *outBufferSize, + size_t *offset, + size_t *outSizeProcessed, + ISzAlloc *allocMain, + ISzAlloc *allocTemp) +{ + UInt32 folderIndex = p->FileToFolder[fileIndex]; + SRes res = SZ_OK; + + *offset = 0; + *outSizeProcessed = 0; + + if (folderIndex == (UInt32)-1) + { + IAlloc_Free(allocMain, *tempBuf); + *blockIndex = folderIndex; + *tempBuf = NULL; + *outBufferSize = 0; + return SZ_OK; + } + + if (*tempBuf == NULL || *blockIndex != folderIndex) + { + UInt64 unpackSizeSpec = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + /* + UInt64 unpackSizeSpec = + p->UnpackPositions[p->FolderToFile[folderIndex + 1]] - + p->UnpackPositions[p->FolderToFile[folderIndex]]; + */ + size_t unpackSize = (size_t)unpackSizeSpec; + + if (unpackSize != unpackSizeSpec) + return SZ_ERROR_MEM; + *blockIndex = folderIndex; + IAlloc_Free(allocMain, *tempBuf); + *tempBuf = NULL; + + if (res == SZ_OK) + { + *outBufferSize = unpackSize; + if (unpackSize != 0) + { + *tempBuf = (Byte *)IAlloc_Alloc(allocMain, unpackSize); + if (*tempBuf == NULL) + res = SZ_ERROR_MEM; + } + + if (res == SZ_OK) + { + res = SzAr_DecodeFolder(&p->db, folderIndex, + inStream, p->dataPos, *tempBuf, unpackSize, allocTemp); + } + } + } + + if (res == SZ_OK) + { + UInt64 unpackPos = p->UnpackPositions[fileIndex]; + *offset = (size_t)(unpackPos - p->UnpackPositions[p->FolderToFile[folderIndex]]); + *outSizeProcessed = (size_t)(p->UnpackPositions[fileIndex + 1] - unpackPos); + if (*offset + *outSizeProcessed > *outBufferSize) + return SZ_ERROR_FAIL; + if (SzBitWithVals_Check(&p->CRCs, fileIndex)) + if (CrcCalc(*tempBuf + *offset, *outSizeProcessed) != p->CRCs.Vals[fileIndex]) + res = SZ_ERROR_CRC; + } + + return res; +} + + +static size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest) +{ + size_t offs = p->FileNameOffsets[fileIndex]; + size_t len = p->FileNameOffsets[fileIndex + 1] - offs; + if (dest != 0) + { + size_t i; + const Byte *src = p->FileNames + offs * 2; + for (i = 0; i < len; i++) + dest[i] = GetUi16(src + i * 2); + } + return len; +} + +/* +static size_t SzArEx_GetFullNameLen(const CSzArEx *p, size_t fileIndex) +{ + size_t len; + if (!p->FileNameOffsets) + return 1; + len = 0; + for (;;) + { + UInt32 parent = (UInt32)(Int32)-1; + len += p->FileNameOffsets[fileIndex + 1] - p->FileNameOffsets[fileIndex]; + if SzBitWithVals_Check(&p->Parents, fileIndex) + parent = p->Parents.Vals[fileIndex]; + if (parent == (UInt32)(Int32)-1) + return len; + fileIndex = parent; + } +} + +static UInt16 *SzArEx_GetFullNameUtf16_Back(const CSzArEx *p, size_t fileIndex, UInt16 *dest) +{ + Bool needSlash; + if (!p->FileNameOffsets) + { + *(--dest) = 0; + return dest; + } + needSlash = False; + for (;;) + { + UInt32 parent = (UInt32)(Int32)-1; + size_t curLen = p->FileNameOffsets[fileIndex + 1] - p->FileNameOffsets[fileIndex]; + SzArEx_GetFileNameUtf16(p, fileIndex, dest - curLen); + if (needSlash) + *(dest - 1) = '/'; + needSlash = True; + dest -= curLen; + + if SzBitWithVals_Check(&p->Parents, fileIndex) + parent = p->Parents.Vals[fileIndex]; + if (parent == (UInt32)(Int32)-1) + return dest; + fileIndex = parent; + } +} +*/ + +/* 7zBuf.c -- Byte Buffer +2013-01-21 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "7zBuf.h" +*/ + +static void Buf_Init(CBuf *p) +{ + p->data = 0; + p->size = 0; +} + +static int Buf_Create(CBuf *p, size_t size, ISzAlloc *alloc) +{ + p->size = 0; + if (size == 0) + { + p->data = 0; + return 1; + } + p->data = (Byte *)alloc->Alloc(alloc, size); + if (p->data != 0) + { + p->size = size; + return 1; + } + return 0; +} + +static void Buf_Free(CBuf *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->data); + p->data = 0; + p->size = 0; +} + +/* 7zDec.c -- Decoding from 7z folder +2015-11-18 : Igor Pavlov : Public domain */ + +/* #define _7ZIP_PPMD_SUPPPORT */ + +/* +#include "Precomp.h" + +#include + +#include "7z.h" +#include "7zCrc.h" + +#include "Bcj2.h" +#include "Bra.h" +#include "CpuArch.h" +#include "Delta.h" +#include "LzmaDec.h" +#include "Lzma2Dec.h" +#ifdef _7ZIP_PPMD_SUPPPORT +#include "Ppmd7.h" +#endif +*/ + +#define k_Copy 0 +#define k_Delta 3 +#define k_LZMA2 0x21 +#define k_LZMA 0x30101 +#define k_BCJ 0x3030103 +#define k_BCJ2 0x303011B +#define k_PPC 0x3030205 +#define k_IA64 0x3030401 +#define k_ARM 0x3030501 +#define k_ARMT 0x3030701 +#define k_SPARC 0x3030805 + + +#ifdef _7ZIP_PPMD_SUPPPORT + +#define k_PPMD 0x30401 + +typedef struct +{ + IByteIn p; + const Byte *cur; + const Byte *end; + const Byte *begin; + UInt64 processed; + Bool extra; + SRes res; + ILookInStream *inStream; +} CByteInToLook; + +static Byte ReadByte(void *pp) +{ + CByteInToLook *p = (CByteInToLook *)pp; + if (p->cur != p->end) + return *p->cur++; + if (p->res == SZ_OK) + { + size_t size = p->cur - p->begin; + p->processed += size; + p->res = p->inStream->Skip(p->inStream, size); + size = (1 << 25); + p->res = p->inStream->Look(p->inStream, (const void **)&p->begin, &size); + p->cur = p->begin; + p->end = p->begin + size; + if (size != 0) + return *p->cur++;; + } + p->extra = True; + return 0; +} + +static SRes SzDecodePpmd(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) +{ + CPpmd7 ppmd; + CByteInToLook s; + SRes res = SZ_OK; + + s.p.Read = ReadByte; + s.inStream = inStream; + s.begin = s.end = s.cur = NULL; + s.extra = False; + s.res = SZ_OK; + s.processed = 0; + + if (propsSize != 5) + return SZ_ERROR_UNSUPPORTED; + + { + unsigned order = props[0]; + UInt32 memSize = GetUi32(props + 1); + if (order < PPMD7_MIN_ORDER || + order > PPMD7_MAX_ORDER || + memSize < PPMD7_MIN_MEM_SIZE || + memSize > PPMD7_MAX_MEM_SIZE) + return SZ_ERROR_UNSUPPORTED; + Ppmd7_Construct(&ppmd); + if (!Ppmd7_Alloc(&ppmd, memSize, allocMain)) + return SZ_ERROR_MEM; + Ppmd7_Init(&ppmd, order); + } + { + CPpmd7z_RangeDec rc; + Ppmd7z_RangeDec_CreateVTable(&rc); + rc.Stream = &s.p; + if (!Ppmd7z_RangeDec_Init(&rc)) + res = SZ_ERROR_DATA; + else if (s.extra) + res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA); + else + { + SizeT i; + for (i = 0; i < outSize; i++) + { + int sym = Ppmd7_DecodeSymbol(&ppmd, &rc.p); + if (s.extra || sym < 0) + break; + outBuffer[i] = (Byte)sym; + } + if (i != outSize) + res = (s.res != SZ_OK ? s.res : SZ_ERROR_DATA); + else if (s.processed + (s.cur - s.begin) != inSize || !Ppmd7z_RangeDec_IsFinishedOK(&rc)) + res = SZ_ERROR_DATA; + } + } + Ppmd7_Free(&ppmd, allocMain); + return res; +} + +#endif + + +static SRes SzDecodeLzma(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) +{ + CLzmaDec state; + SRes res = SZ_OK; + + LzmaDec_Construct(&state); + RINOK(LzmaDec_AllocateProbs(&state, props, propsSize, allocMain)); + state.dic = outBuffer; + state.dicBufSize = outSize; + LzmaDec_Init(&state); + + for (;;) + { + const void *inBuf = NULL; + size_t lookahead = (1 << 18); + if (lookahead > inSize) + lookahead = (size_t)inSize; + res = inStream->Look(inStream, &inBuf, &lookahead); + if (res != SZ_OK) + break; + + { + SizeT inProcessed = (SizeT)lookahead, dicPos = state.dicPos; + ELzmaStatus status; + res = LzmaDec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status); + lookahead -= inProcessed; + inSize -= inProcessed; + if (res != SZ_OK) + break; + + if (status == LZMA_STATUS_FINISHED_WITH_MARK) + { + if (outSize != state.dicPos || inSize != 0) + res = SZ_ERROR_DATA; + break; + } + + if (outSize == state.dicPos && inSize == 0 && status == LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK) + break; + + if (inProcessed == 0 && dicPos == state.dicPos) + { + res = SZ_ERROR_DATA; + break; + } + + res = inStream->Skip((void *)inStream, inProcessed); + if (res != SZ_OK) + break; + } + } + + LzmaDec_FreeProbs(&state, allocMain); + return res; +} + + +#ifndef _7Z_NO_METHOD_LZMA2 + +static SRes SzDecodeLzma2(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain) +{ + CLzma2Dec state; + SRes res = SZ_OK; + + Lzma2Dec_Construct(&state); + if (propsSize != 1) + return SZ_ERROR_DATA; + RINOK(Lzma2Dec_AllocateProbs(&state, props[0], allocMain)); + state.decoder.dic = outBuffer; + state.decoder.dicBufSize = outSize; + Lzma2Dec_Init(&state); + + for (;;) + { + const void *inBuf = NULL; + size_t lookahead = (1 << 18); + if (lookahead > inSize) + lookahead = (size_t)inSize; + res = inStream->Look(inStream, &inBuf, &lookahead); + if (res != SZ_OK) + break; + + { + SizeT inProcessed = (SizeT)lookahead, dicPos = state.decoder.dicPos; + ELzmaStatus status; + res = Lzma2Dec_DecodeToDic(&state, outSize, inBuf, &inProcessed, LZMA_FINISH_END, &status); + lookahead -= inProcessed; + inSize -= inProcessed; + if (res != SZ_OK) + break; + + if (status == LZMA_STATUS_FINISHED_WITH_MARK) + { + if (outSize != state.decoder.dicPos || inSize != 0) + res = SZ_ERROR_DATA; + break; + } + + if (inProcessed == 0 && dicPos == state.decoder.dicPos) + { + res = SZ_ERROR_DATA; + break; + } + + res = inStream->Skip((void *)inStream, inProcessed); + if (res != SZ_OK) + break; + } + } + + Lzma2Dec_FreeProbs(&state, allocMain); + return res; +} + +#endif + + +static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer) +{ + while (inSize > 0) + { + const void *inBuf; + size_t curSize = (1 << 18); + if (curSize > inSize) + curSize = (size_t)inSize; + RINOK(inStream->Look(inStream, &inBuf, &curSize)); + if (curSize == 0) + return SZ_ERROR_INPUT_EOF; + memcpy(outBuffer, inBuf, curSize); + outBuffer += curSize; + inSize -= curSize; + RINOK(inStream->Skip((void *)inStream, curSize)); + } + return SZ_OK; +} + +static Bool IS_MAIN_METHOD(UInt32 m) +{ + switch (m) + { + case k_Copy: + case k_LZMA: + #ifndef _7Z_NO_METHOD_LZMA2 + case k_LZMA2: + #endif + #ifdef _7ZIP_PPMD_SUPPPORT + case k_PPMD: + #endif + return True; + } + return False; +} + +static Bool IS_SUPPORTED_CODER(const CSzCoderInfo *c) +{ + return + c->NumStreams == 1 + /* && c->MethodID <= (UInt32)0xFFFFFFFF */ + && IS_MAIN_METHOD((UInt32)c->MethodID); +} + +#define IS_BCJ2(c) ((c)->MethodID == k_BCJ2 && (c)->NumStreams == 4) + +static SRes CheckSupportedFolder(const CSzFolder *f) +{ + if (f->NumCoders < 1 || f->NumCoders > 4) + return SZ_ERROR_UNSUPPORTED; + if (!IS_SUPPORTED_CODER(&f->Coders[0])) + return SZ_ERROR_UNSUPPORTED; + if (f->NumCoders == 1) + { + if (f->NumPackStreams != 1 || f->PackStreams[0] != 0 || f->NumBonds != 0) + return SZ_ERROR_UNSUPPORTED; + return SZ_OK; + } + + + #ifndef _7Z_NO_METHODS_FILTERS + + if (f->NumCoders == 2) + { + const CSzCoderInfo *c = &f->Coders[1]; + if ( + /* c->MethodID > (UInt32)0xFFFFFFFF || */ + c->NumStreams != 1 + || f->NumPackStreams != 1 + || f->PackStreams[0] != 0 + || f->NumBonds != 1 + || f->Bonds[0].InIndex != 1 + || f->Bonds[0].OutIndex != 0) + return SZ_ERROR_UNSUPPORTED; + switch ((UInt32)c->MethodID) + { + case k_Delta: + case k_BCJ: + case k_PPC: + case k_IA64: + case k_SPARC: + case k_ARM: + case k_ARMT: + break; + default: + return SZ_ERROR_UNSUPPORTED; + } + return SZ_OK; + } + + #endif + + + if (f->NumCoders == 4) + { + if (!IS_SUPPORTED_CODER(&f->Coders[1]) + || !IS_SUPPORTED_CODER(&f->Coders[2]) + || !IS_BCJ2(&f->Coders[3])) + return SZ_ERROR_UNSUPPORTED; + if (f->NumPackStreams != 4 + || f->PackStreams[0] != 2 + || f->PackStreams[1] != 6 + || f->PackStreams[2] != 1 + || f->PackStreams[3] != 0 + || f->NumBonds != 3 + || f->Bonds[0].InIndex != 5 || f->Bonds[0].OutIndex != 0 + || f->Bonds[1].InIndex != 4 || f->Bonds[1].OutIndex != 1 + || f->Bonds[2].InIndex != 3 || f->Bonds[2].OutIndex != 2) + return SZ_ERROR_UNSUPPORTED; + return SZ_OK; + } + + return SZ_ERROR_UNSUPPORTED; +} + +#define CASE_BRA_CONV(isa) case k_ ## isa: isa ## _Convert(outBuffer, outSize, 0, 0); break; + +static SRes SzFolder_Decode2(const CSzFolder *folder, + const Byte *propsData, + const UInt64 *unpackSizes, + const UInt64 *packPositions, + ILookInStream *inStream, UInt64 startPos, + Byte *outBuffer, SizeT outSize, ISzAlloc *allocMain, + Byte *tempBuf[]) +{ + UInt32 ci; + SizeT tempSizes[3] = { 0, 0, 0}; + SizeT tempSize3 = 0; + Byte *tempBuf3 = 0; + + RINOK(CheckSupportedFolder(folder)); + + for (ci = 0; ci < folder->NumCoders; ci++) + { + const CSzCoderInfo *coder = &folder->Coders[ci]; + + if (IS_MAIN_METHOD((UInt32)coder->MethodID)) + { + UInt32 si = 0; + UInt64 offset; + UInt64 inSize; + Byte *outBufCur = outBuffer; + SizeT outSizeCur = outSize; + if (folder->NumCoders == 4) + { + UInt32 indices[] = { 3, 2, 0 }; + UInt64 unpackSize = unpackSizes[ci]; + si = indices[ci]; + if (ci < 2) + { + Byte *temp; + outSizeCur = (SizeT)unpackSize; + if (outSizeCur != unpackSize) + return SZ_ERROR_MEM; + temp = (Byte *)IAlloc_Alloc(allocMain, outSizeCur); + if (!temp && outSizeCur != 0) + return SZ_ERROR_MEM; + outBufCur = tempBuf[1 - ci] = temp; + tempSizes[1 - ci] = outSizeCur; + } + else if (ci == 2) + { + if (unpackSize > outSize) /* check it */ + return SZ_ERROR_PARAM; + tempBuf3 = outBufCur = outBuffer + (outSize - (size_t)unpackSize); + tempSize3 = outSizeCur = (SizeT)unpackSize; + } + else + return SZ_ERROR_UNSUPPORTED; + } + offset = packPositions[si]; + inSize = packPositions[si + 1] - offset; + RINOK(LookInStream_SeekTo(inStream, startPos + offset)); + + if (coder->MethodID == k_Copy) + { + if (inSize != outSizeCur) /* check it */ + return SZ_ERROR_DATA; + RINOK(SzDecodeCopy(inSize, inStream, outBufCur)); + } + else if (coder->MethodID == k_LZMA) + { + RINOK(SzDecodeLzma(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); + } + #ifndef _7Z_NO_METHOD_LZMA2 + else if (coder->MethodID == k_LZMA2) + { + RINOK(SzDecodeLzma2(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); + } + #endif + #ifdef _7ZIP_PPMD_SUPPPORT + else if (coder->MethodID == k_PPMD) + { + RINOK(SzDecodePpmd(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); + } + #endif + else + return SZ_ERROR_UNSUPPORTED; + } + else if (coder->MethodID == k_BCJ2) + { + UInt64 offset = packPositions[1]; + UInt64 s3Size = packPositions[2] - offset; + + if (ci != 3) + return SZ_ERROR_UNSUPPORTED; + + tempSizes[2] = (SizeT)s3Size; + if (tempSizes[2] != s3Size) + return SZ_ERROR_MEM; + tempBuf[2] = (Byte *)IAlloc_Alloc(allocMain, tempSizes[2]); + if (!tempBuf[2] && tempSizes[2] != 0) + return SZ_ERROR_MEM; + + RINOK(LookInStream_SeekTo(inStream, startPos + offset)); + RINOK(SzDecodeCopy(s3Size, inStream, tempBuf[2])); + + if ((tempSizes[0] & 3) != 0 || + (tempSizes[1] & 3) != 0 || + tempSize3 + tempSizes[0] + tempSizes[1] != outSize) + return SZ_ERROR_DATA; + + { + CBcj2Dec p; + + p.bufs[0] = tempBuf3; p.lims[0] = tempBuf3 + tempSize3; + p.bufs[1] = tempBuf[0]; p.lims[1] = tempBuf[0] + tempSizes[0]; + p.bufs[2] = tempBuf[1]; p.lims[2] = tempBuf[1] + tempSizes[1]; + p.bufs[3] = tempBuf[2]; p.lims[3] = tempBuf[2] + tempSizes[2]; + + p.dest = outBuffer; + p.destLim = outBuffer + outSize; + + Bcj2Dec_Init(&p); + RINOK(Bcj2Dec_Decode(&p)); + + { + unsigned i; + for (i = 0; i < 4; i++) + if (p.bufs[i] != p.lims[i]) + return SZ_ERROR_DATA; + + if (!Bcj2Dec_IsFinished(&p)) + return SZ_ERROR_DATA; + + if (p.dest != p.destLim + || p.state != BCJ2_STREAM_MAIN) + return SZ_ERROR_DATA; + } + } + } + #ifndef _7Z_NO_METHODS_FILTERS + else if (ci == 1) + { + if (coder->MethodID == k_Delta) + { + if (coder->PropsSize != 1) + return SZ_ERROR_UNSUPPORTED; + { + Byte state[DELTA_STATE_SIZE]; + Delta_Init(state); + Delta_Decode(state, (unsigned)(propsData[coder->PropsOffset]) + 1, outBuffer, outSize); + } + } + else + { + if (coder->PropsSize != 0) + return SZ_ERROR_UNSUPPORTED; + switch (coder->MethodID) + { + case k_BCJ: + { + UInt32 state; + x86_Convert_Init(state); + x86_Convert(outBuffer, outSize, 0, &state, 0); + break; + } + CASE_BRA_CONV(PPC) + CASE_BRA_CONV(IA64) + CASE_BRA_CONV(SPARC) + CASE_BRA_CONV(ARM) + CASE_BRA_CONV(ARMT) + default: + return SZ_ERROR_UNSUPPORTED; + } + } + } + #endif + else + return SZ_ERROR_UNSUPPORTED; + } + + return SZ_OK; +} + + +static SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex, + ILookInStream *inStream, UInt64 startPos, + Byte *outBuffer, size_t outSize, + ISzAlloc *allocMain) +{ + SRes res; + CSzFolder folder; + CSzData sd; + + const Byte *data = p->CodersData + p->FoCodersOffsets[folderIndex]; + sd.Data = data; + sd.Size = p->FoCodersOffsets[folderIndex + 1] - p->FoCodersOffsets[folderIndex]; + + res = SzGetNextFolderItem(&folder, &sd); + + if (res != SZ_OK) + return res; + + if (sd.Size != 0 + || folder.UnpackStream != p->FoToMainUnpackSizeIndex[folderIndex] + || outSize != SzAr_GetFolderUnpackSize(p, folderIndex)) + return SZ_ERROR_FAIL; + { + unsigned i; + Byte *tempBuf[3] = { 0, 0, 0}; + + res = SzFolder_Decode2(&folder, data, + &p->CoderUnpackSizes[p->FoToCoderUnpackSizes[folderIndex]], + p->PackPositions + p->FoStartPackStreamIndex[folderIndex], + inStream, startPos, + outBuffer, (SizeT)outSize, allocMain, tempBuf); + + for (i = 0; i < 3; i++) + IAlloc_Free(allocMain, tempBuf[i]); + + if (res == SZ_OK) + if (SzBitWithVals_Check(&p->FolderCRCs, folderIndex)) + if (CrcCalc(outBuffer, outSize) != p->FolderCRCs.Vals[folderIndex]) + res = SZ_ERROR_CRC; + + return res; + } +} + +/* Bcj2.c -- BCJ2 Decoder (Converter for x86 code) +2015-08-01 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "Bcj2.h" +#include "CpuArch.h" +*/ + +#define CProb UInt16 + +#define kTopValue ((UInt32)1 << 24) +#define kNumModelBits 11 +#define kBitModelTotal (1 << kNumModelBits) +#define kNumMoveBits 5 + +#define _IF_BIT_0 ttt = *prob; bound = (p->range >> kNumModelBits) * ttt; if (p->code < bound) +#define _UPDATE_0 p->range = bound; *prob = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define _UPDATE_1 p->range -= bound; p->code -= bound; *prob = (CProb)(ttt - (ttt >> kNumMoveBits)); + +static void Bcj2Dec_Init(CBcj2Dec *p) +{ + unsigned i; + + p->state = BCJ2_DEC_STATE_OK; + p->ip = 0; + p->temp[3] = 0; + p->range = 0; + p->code = 0; + for (i = 0; i < sizeof(p->probs) / sizeof(p->probs[0]); i++) + p->probs[i] = kBitModelTotal >> 1; +} + +static SRes Bcj2Dec_Decode(CBcj2Dec *p) +{ + if (p->range <= 5) + { + p->state = BCJ2_DEC_STATE_OK; + for (; p->range != 5; p->range++) + { + if (p->range == 1 && p->code != 0) + return SZ_ERROR_DATA; + + if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC]) + { + p->state = BCJ2_STREAM_RC; + return SZ_OK; + } + + p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; + } + + if (p->code == 0xFFFFFFFF) + return SZ_ERROR_DATA; + + p->range = 0xFFFFFFFF; + } + else if (p->state >= BCJ2_DEC_STATE_ORIG_0) + { + while (p->state <= BCJ2_DEC_STATE_ORIG_3) + { + Byte *dest = p->dest; + if (dest == p->destLim) + return SZ_OK; + *dest = p->temp[p->state++ - BCJ2_DEC_STATE_ORIG_0]; + p->dest = dest + 1; + } + } + + /* + if (BCJ2_IS_32BIT_STREAM(p->state)) + { + const Byte *cur = p->bufs[p->state]; + if (cur == p->lims[p->state]) + return SZ_OK; + p->bufs[p->state] = cur + 4; + + { + UInt32 val; + Byte *dest; + SizeT rem; + + p->ip += 4; + val = GetBe32(cur) - p->ip; + dest = p->dest; + rem = p->destLim - dest; + if (rem < 4) + { + SizeT i; + SetUi32(p->temp, val); + for (i = 0; i < rem; i++) + dest[i] = p->temp[i]; + p->dest = dest + rem; + p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem; + return SZ_OK; + } + SetUi32(dest, val); + p->temp[3] = (Byte)(val >> 24); + p->dest = dest + 4; + p->state = BCJ2_DEC_STATE_OK; + } + } + */ + + for (;;) + { + if (BCJ2_IS_32BIT_STREAM(p->state)) + p->state = BCJ2_DEC_STATE_OK; + else + { + if (p->range < kTopValue) + { + if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC]) + { + p->state = BCJ2_STREAM_RC; + return SZ_OK; + } + p->range <<= 8; + p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; + } + + { + const Byte *src = p->bufs[BCJ2_STREAM_MAIN]; + const Byte *srcLim; + Byte *dest; + SizeT num = p->lims[BCJ2_STREAM_MAIN] - src; + + if (num == 0) + { + p->state = BCJ2_STREAM_MAIN; + return SZ_OK; + } + + dest = p->dest; + if (num > (SizeT)(p->destLim - dest)) + { + num = p->destLim - dest; + if (num == 0) + { + p->state = BCJ2_DEC_STATE_ORIG; + return SZ_OK; + } + } + + srcLim = src + num; + + if (p->temp[3] == 0x0F && (src[0] & 0xF0) == 0x80) + *dest = src[0]; + else for (;;) + { + Byte b = *src; + *dest = b; + if (b != 0x0F) + { + if ((b & 0xFE) == 0xE8) + break; + dest++; + if (++src != srcLim) + continue; + break; + } + dest++; + if (++src == srcLim) + break; + if ((*src & 0xF0) != 0x80) + continue; + *dest = *src; + break; + } + + num = src - p->bufs[BCJ2_STREAM_MAIN]; + + if (src == srcLim) + { + p->temp[3] = src[-1]; + p->bufs[BCJ2_STREAM_MAIN] = src; + p->ip += (UInt32)num; + p->dest += num; + p->state = + p->bufs[BCJ2_STREAM_MAIN] == + p->lims[BCJ2_STREAM_MAIN] ? + (unsigned)BCJ2_STREAM_MAIN : + (unsigned)BCJ2_DEC_STATE_ORIG; + return SZ_OK; + } + + { + UInt32 bound, ttt; + CProb *prob; + Byte b = src[0]; + Byte prev = (Byte)(num == 0 ? p->temp[3] : src[-1]); + + p->temp[3] = b; + p->bufs[BCJ2_STREAM_MAIN] = src + 1; + num++; + p->ip += (UInt32)num; + p->dest += num; + + prob = p->probs + (unsigned)(b == 0xE8 ? 2 + (unsigned)prev : (b == 0xE9 ? 1 : 0)); + + _IF_BIT_0 + { + _UPDATE_0 + continue; + } + _UPDATE_1 + + } + } + } + + { + UInt32 val; + unsigned cj = (p->temp[3] == 0xE8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP; + const Byte *cur = p->bufs[cj]; + Byte *dest; + SizeT rem; + + if (cur == p->lims[cj]) + { + p->state = cj; + break; + } + + val = GetBe32(cur); + p->bufs[cj] = cur + 4; + + p->ip += 4; + val -= p->ip; + dest = p->dest; + rem = p->destLim - dest; + + if (rem < 4) + { + SizeT i; + SetUi32(p->temp, val); + for (i = 0; i < rem; i++) + dest[i] = p->temp[i]; + p->dest = dest + rem; + p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem; + break; + } + + SetUi32(dest, val); + p->temp[3] = (Byte)(val >> 24); + p->dest = dest + 4; + } + } + + if (p->range < kTopValue && p->bufs[BCJ2_STREAM_RC] != p->lims[BCJ2_STREAM_RC]) + { + p->range <<= 8; + p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; + } + + return SZ_OK; +} + +#undef kTopValue /* reused later. --ryan. */ +#undef kBitModelTotal /* reused later. --ryan. */ + + +/* Bra.c -- Converters for RISC code +2010-04-16 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "Bra.h" +*/ + +static SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +{ + SizeT i; + if (size < 4) + return 0; + size -= 4; + ip += 8; + for (i = 0; i <= size; i += 4) + { + if (data[i + 3] == 0xEB) + { + UInt32 dest; + UInt32 src = ((UInt32)data[i + 2] << 16) | ((UInt32)data[i + 1] << 8) | (data[i + 0]); + src <<= 2; + if (encoding) + dest = ip + (UInt32)i + src; + else + dest = src - (ip + (UInt32)i); + dest >>= 2; + data[i + 2] = (Byte)(dest >> 16); + data[i + 1] = (Byte)(dest >> 8); + data[i + 0] = (Byte)dest; + } + } + return i; +} + +static SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +{ + SizeT i; + if (size < 4) + return 0; + size -= 4; + ip += 4; + for (i = 0; i <= size; i += 2) + { + if ((data[i + 1] & 0xF8) == 0xF0 && + (data[i + 3] & 0xF8) == 0xF8) + { + UInt32 dest; + UInt32 src = + (((UInt32)data[i + 1] & 0x7) << 19) | + ((UInt32)data[i + 0] << 11) | + (((UInt32)data[i + 3] & 0x7) << 8) | + (data[i + 2]); + + src <<= 1; + if (encoding) + dest = ip + (UInt32)i + src; + else + dest = src - (ip + (UInt32)i); + dest >>= 1; + + data[i + 1] = (Byte)(0xF0 | ((dest >> 19) & 0x7)); + data[i + 0] = (Byte)(dest >> 11); + data[i + 3] = (Byte)(0xF8 | ((dest >> 8) & 0x7)); + data[i + 2] = (Byte)dest; + i += 2; + } + } + return i; +} + +static SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +{ + SizeT i; + if (size < 4) + return 0; + size -= 4; + for (i = 0; i <= size; i += 4) + { + if ((data[i] >> 2) == 0x12 && (data[i + 3] & 3) == 1) + { + UInt32 src = ((UInt32)(data[i + 0] & 3) << 24) | + ((UInt32)data[i + 1] << 16) | + ((UInt32)data[i + 2] << 8) | + ((UInt32)data[i + 3] & (~3)); + + UInt32 dest; + if (encoding) + dest = ip + (UInt32)i + src; + else + dest = src - (ip + (UInt32)i); + data[i + 0] = (Byte)(0x48 | ((dest >> 24) & 0x3)); + data[i + 1] = (Byte)(dest >> 16); + data[i + 2] = (Byte)(dest >> 8); + data[i + 3] &= 0x3; + data[i + 3] |= dest; + } + } + return i; +} + +static SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +{ + UInt32 i; + if (size < 4) + return 0; + size -= 4; + for (i = 0; i <= size; i += 4) + { + if ((data[i] == 0x40 && (data[i + 1] & 0xC0) == 0x00) || + (data[i] == 0x7F && (data[i + 1] & 0xC0) == 0xC0)) + { + UInt32 src = + ((UInt32)data[i + 0] << 24) | + ((UInt32)data[i + 1] << 16) | + ((UInt32)data[i + 2] << 8) | + ((UInt32)data[i + 3]); + UInt32 dest; + + src <<= 2; + if (encoding) + dest = ip + i + src; + else + dest = src - (ip + i); + dest >>= 2; + + dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000; + + data[i + 0] = (Byte)(dest >> 24); + data[i + 1] = (Byte)(dest >> 16); + data[i + 2] = (Byte)(dest >> 8); + data[i + 3] = (Byte)dest; + } + } + return i; +} + +/* Bra86.c -- Converter for x86 code (BCJ) +2013-11-12 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "Bra.h" +*/ + +#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0) + +static SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding) +{ + SizeT pos = 0; + UInt32 mask = *state & 7; + if (size < 5) + return 0; + size -= 4; + ip += 5; + + for (;;) + { + Byte *p = data + pos; + const Byte *limit = data + size; + for (; p < limit; p++) + if ((*p & 0xFE) == 0xE8) + break; + + { + SizeT d = (SizeT)(p - data - pos); + pos = (SizeT)(p - data); + if (p >= limit) + { + *state = (d > 2 ? 0 : mask >> (unsigned)d); + return pos; + } + if (d > 2) + mask = 0; + else + { + mask >>= (unsigned)d; + if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(mask >> 1) + 1]))) + { + mask = (mask >> 1) | 4; + pos++; + continue; + } + } + } + + if (Test86MSByte(p[4])) + { + UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]); + UInt32 cur = ip + (UInt32)pos; + pos += 5; + if (encoding) + v += cur; + else + v -= cur; + if (mask != 0) + { + unsigned sh = (mask & 6) << 2; + if (Test86MSByte((Byte)(v >> sh))) + { + v ^= (((UInt32)0x100 << sh) - 1); + if (encoding) + v += cur; + else + v -= cur; + } + mask = 0; + } + p[1] = (Byte)v; + p[2] = (Byte)(v >> 8); + p[3] = (Byte)(v >> 16); + p[4] = (Byte)(0 - ((v >> 24) & 1)); + } + else + { + mask = (mask >> 1) | 4; + pos++; + } + } +} + + +/* BraIA64.c -- Converter for IA-64 code +2013-11-12 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "Bra.h" +*/ +static const Byte kBranchTable[32] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 6, 6, 0, 0, 7, 7, + 4, 4, 0, 0, 4, 4, 0, 0 +}; + +static SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +{ + SizeT i; + if (size < 16) + return 0; + size -= 16; + for (i = 0; i <= size; i += 16) + { + UInt32 instrTemplate = data[i] & 0x1F; + UInt32 mask = kBranchTable[instrTemplate]; + UInt32 bitPos = 5; + int slot; + for (slot = 0; slot < 3; slot++, bitPos += 41) + { + UInt32 bytePos, bitRes; + UInt64 instruction, instNorm; + int j; + if (((mask >> slot) & 1) == 0) + continue; + bytePos = (bitPos >> 3); + bitRes = bitPos & 0x7; + instruction = 0; + for (j = 0; j < 6; j++) + instruction += (UInt64)data[i + j + bytePos] << (8 * j); + + instNorm = instruction >> bitRes; + if (((instNorm >> 37) & 0xF) == 0x5 && ((instNorm >> 9) & 0x7) == 0) + { + UInt32 src = (UInt32)((instNorm >> 13) & 0xFFFFF); + UInt32 dest; + src |= ((UInt32)(instNorm >> 36) & 1) << 20; + + src <<= 4; + + if (encoding) + dest = ip + (UInt32)i + src; + else + dest = src - (ip + (UInt32)i); + + dest >>= 4; + + instNorm &= ~((UInt64)(0x8FFFFF) << 13); + instNorm |= ((UInt64)(dest & 0xFFFFF) << 13); + instNorm |= ((UInt64)(dest & 0x100000) << (36 - 20)); + + instruction &= (1 << bitRes) - 1; + instruction |= (instNorm << bitRes); + for (j = 0; j < 6; j++) + data[i + j + bytePos] = (Byte)(instruction >> (8 * j)); + } + } + } + return i; +} + + +/* Delta.c -- Delta converter +2009-05-26 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "Delta.h" +*/ + +static void Delta_Init(Byte *state) +{ + unsigned i; + for (i = 0; i < DELTA_STATE_SIZE; i++) + state[i] = 0; +} + +static void MyMemCpy(Byte *dest, const Byte *src, unsigned size) +{ + unsigned i; + for (i = 0; i < size; i++) + dest[i] = src[i]; +} + +static void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size) +{ + Byte buf[DELTA_STATE_SIZE]; + unsigned j = 0; + MyMemCpy(buf, state, delta); + { + SizeT i; + for (i = 0; i < size;) + { + for (j = 0; j < delta && i < size; i++, j++) + { + buf[j] = data[i] = (Byte)(buf[j] + data[i]); + } + } + } + if (j == delta) + j = 0; + MyMemCpy(state, buf + j, delta - j); + MyMemCpy(state + delta - j, buf, j); +} + +/* LzmaDec.c -- LZMA Decoder +2016-05-16 : Igor Pavlov : Public domain */ + +/* +#include "Precomp.h" + +#include "LzmaDec.h" + +#include +*/ + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMAL_LITER_DEC GET_BIT(prob + symbol, symbol) +#define MATCHED_LITER_DEC \ + matchByte <<= 1; \ + bit = (matchByte & offs); \ + probLit = prob + offs + bit + symbol; \ + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 0x300 + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +#define LzmaProps_GetNumProbs(p) (Literal + ((UInt32)LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + SZ_OK - OK + SZ_ERROR_DATA - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker (unused now) + = kMatchSpecLenStart + 2 : State Init Marker (unused now) +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (processedPos != 0 || checkDicSize != 0) + prob += ((UInt32)LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + processedPos++; + + if (state < kNumLitStates) + { + state -= (state < 4) ? state : 3; + symbol = 1; + #ifdef _LZMA_SIZE_OPT + do { NORMAL_LITER_DEC } while (symbol < 0x100); + #else + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + NORMAL_LITER_DEC + #endif + } + else + { + unsigned matchByte = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + unsigned offs = 0x100; + state -= (state < 10) ? 3 : 6; + symbol = 1; + #ifdef _LZMA_SIZE_OPT + do + { + unsigned bit; + CLzmaProb *probLit; + MATCHED_LITER_DEC + } + while (symbol < 0x100); + #else + { + unsigned bit; + CLzmaProb *probLit; + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + MATCHED_LITER_DEC + } + #endif + } + + dic[dicPos++] = (Byte)symbol; + continue; + } + + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + + #ifdef _LZMA_SIZE_OPT + { + unsigned lim, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + lim = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + lim = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + lim = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, lim, len); + len += offset; + } + #else + { + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + len = 1; + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + len -= 8; + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + len = 1; + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + TREE_GET_BIT(probLen, len); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + TREE_DECODE(probLen, (1 << kLenNumHighBits), len); + len += kLenNumLowSymbols + kLenNumMidSymbols; + } + } + } + #endif + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + unsigned numDirectBits = (unsigned)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while (--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + { + p->dicPos = dicPos; + return SZ_ERROR_DATA; + } + } + else if (distance >= checkDicSize) + { + p->dicPos = dicPos; + return SZ_ERROR_DATA; + } + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + } + + len += kMatchMinLen; + + { + SizeT rem; + unsigned curLen; + SizeT pos; + + if ((rem = limit - dicPos) == 0) + { + p->dicPos = dicPos; + return SZ_ERROR_DATA; + } + + curLen = ((rem < len) ? (unsigned)rem : len); + pos = dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (curLen <= dicBufSize - pos) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + + NORMALIZE; + + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + SizeT rep0 = p->reps[0]; /* we use SizeT to avoid the BUG of VC14 for AMD64 */ + SizeT rem = limit - dicPos; + if (rem < len) + len = (unsigned)(rem); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len != 0) + { + len--; + dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + + if (p->checkDicSize == 0 && p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + p->remainLen = kMatchSpecLenStart; + + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + const CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + const CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += ((UInt32)LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + (p->dicPos < p->reps[0] ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + const CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + const CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + unsigned numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while (--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +static void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + SizeT numProbs = LzmaProps_GetNumProbs(&p->prop); + SizeT i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +static SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + p->code = + ((UInt32)p->tempBuf[1] << 24) + | ((UInt32)p->tempBuf[2] << 16) + | ((UInt32)p->tempBuf[3] << 8) + | ((UInt32)p->tempBuf[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = (SizeT)(p->buf - src); + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + + { + unsigned kkk = (unsigned)(p->buf - p->tempBuf); + if (rem < kkk) + return SZ_ERROR_FAIL; /* some internal error */ + rem -= kkk; + if (lookAhead < rem) + return SZ_ERROR_FAIL; /* some internal error */ + lookAhead -= rem; + } + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +static void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = NULL; +} + +static SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (!p->probs || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (!p->probs) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +/* Lzma2Dec.c -- LZMA2 Decoder +2015-11-09 : Igor Pavlov : Public domain */ + +/* #define SHOW_DEBUG_INFO */ + +/* +#include "Precomp.h" + +#ifdef SHOW_DEBUG_INFO +#include +#endif + +#include + +#include "Lzma2Dec.h" +*/ + +/* +00000000 - EOS +00000001 U U - Uncompressed Reset Dic +00000010 U U - Uncompressed No Reset +100uuuuu U U P P - LZMA no reset +101uuuuu U U P P - LZMA reset state +110uuuuu U U P P S - LZMA reset state + new prop +111uuuuu U U P P S - LZMA reset state + new prop + reset dic + + u, U - Unpack Size + P - Pack Size + S - Props +*/ + +#define LZMA2_CONTROL_LZMA (1 << 7) +#define LZMA2_CONTROL_COPY_NO_RESET 2 +#define LZMA2_CONTROL_COPY_RESET_DIC 1 +#define LZMA2_CONTROL_EOF 0 + +#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & LZMA2_CONTROL_LZMA) == 0) + +#define LZMA2_GET_LZMA_MODE(p) (((p)->control >> 5) & 3) +#define LZMA2_IS_THERE_PROP(mode) ((mode) >= 2) + +#define LZMA2_LCLP_MAX 4 +#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11)) + +#ifdef SHOW_DEBUG_INFO +#define PRF(x) x +#else +#define PRF(x) +#endif + +typedef enum +{ + LZMA2_STATE_CONTROL, + LZMA2_STATE_UNPACK0, + LZMA2_STATE_UNPACK1, + LZMA2_STATE_PACK0, + LZMA2_STATE_PACK1, + LZMA2_STATE_PROP, + LZMA2_STATE_DATA, + LZMA2_STATE_DATA_CONT, + LZMA2_STATE_FINISHED, + LZMA2_STATE_ERROR +} ELzma2State; + +static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props) +{ + UInt32 dicSize; + if (prop > 40) + return SZ_ERROR_UNSUPPORTED; + dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop); + props[0] = (Byte)LZMA2_LCLP_MAX; + props[1] = (Byte)(dicSize); + props[2] = (Byte)(dicSize >> 8); + props[3] = (Byte)(dicSize >> 16); + props[4] = (Byte)(dicSize >> 24); + return SZ_OK; +} + +static SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc) +{ + Byte props[LZMA_PROPS_SIZE]; + RINOK(Lzma2Dec_GetOldProps(prop, props)); + return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc); +} + +static void Lzma2Dec_Init(CLzma2Dec *p) +{ + p->state = LZMA2_STATE_CONTROL; + p->needInitDic = True; + p->needInitState = True; + p->needInitProp = True; + LzmaDec_Init(&p->decoder); +} + +static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec *p, Byte b) +{ + switch (p->state) + { + case LZMA2_STATE_CONTROL: + p->control = b; + PRF(printf("\n %4X ", (unsigned)p->decoder.dicPos)); + PRF(printf(" %2X", (unsigned)b)); + if (p->control == 0) + return LZMA2_STATE_FINISHED; + if (LZMA2_IS_UNCOMPRESSED_STATE(p)) + { + if ((p->control & 0x7F) > 2) + return LZMA2_STATE_ERROR; + p->unpackSize = 0; + } + else + p->unpackSize = (UInt32)(p->control & 0x1F) << 16; + return LZMA2_STATE_UNPACK0; + + case LZMA2_STATE_UNPACK0: + p->unpackSize |= (UInt32)b << 8; + return LZMA2_STATE_UNPACK1; + + case LZMA2_STATE_UNPACK1: + p->unpackSize |= (UInt32)b; + p->unpackSize++; + PRF(printf(" %8u", (unsigned)p->unpackSize)); + return (LZMA2_IS_UNCOMPRESSED_STATE(p)) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0; + + case LZMA2_STATE_PACK0: + p->packSize = (UInt32)b << 8; + return LZMA2_STATE_PACK1; + + case LZMA2_STATE_PACK1: + p->packSize |= (UInt32)b; + p->packSize++; + PRF(printf(" %8u", (unsigned)p->packSize)); + return LZMA2_IS_THERE_PROP(LZMA2_GET_LZMA_MODE(p)) ? LZMA2_STATE_PROP: + (p->needInitProp ? LZMA2_STATE_ERROR : LZMA2_STATE_DATA); + + case LZMA2_STATE_PROP: + { + unsigned lc, lp; + if (b >= (9 * 5 * 5)) + return LZMA2_STATE_ERROR; + lc = b % 9; + b /= 9; + p->decoder.prop.pb = b / 5; + lp = b % 5; + if (lc + lp > LZMA2_LCLP_MAX) + return LZMA2_STATE_ERROR; + p->decoder.prop.lc = lc; + p->decoder.prop.lp = lp; + p->needInitProp = False; + return LZMA2_STATE_DATA; + } + } + return LZMA2_STATE_ERROR; +} + +static void LzmaDec_UpdateWithUncompressed(CLzmaDec *p, const Byte *src, SizeT size) +{ + memcpy(p->dic + p->dicPos, src, size); + p->dicPos += size; + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size) + p->checkDicSize = p->prop.dicSize; + p->processedPos += (UInt32)size; +} + +static void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState); + +static SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit, + const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + *srcLen = 0; + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->state != LZMA2_STATE_FINISHED) + { + SizeT dicPos = p->decoder.dicPos; + + if (p->state == LZMA2_STATE_ERROR) + return SZ_ERROR_DATA; + + if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + + if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT) + { + if (*srcLen == inSize) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + (*srcLen)++; + p->state = Lzma2Dec_UpdateState(p, *src++); + + if (dicPos == dicLimit && p->state != LZMA2_STATE_FINISHED) + { + p->state = LZMA2_STATE_ERROR; + return SZ_ERROR_DATA; + } + continue; + } + + { + SizeT destSizeCur = dicLimit - dicPos; + SizeT srcSizeCur = inSize - *srcLen; + ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY; + + if (p->unpackSize <= destSizeCur) + { + destSizeCur = (SizeT)p->unpackSize; + curFinishMode = LZMA_FINISH_END; + } + + if (LZMA2_IS_UNCOMPRESSED_STATE(p)) + { + if (*srcLen == inSize) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + + if (p->state == LZMA2_STATE_DATA) + { + Bool initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC); + if (initDic) + p->needInitProp = p->needInitState = True; + else if (p->needInitDic) + { + p->state = LZMA2_STATE_ERROR; + return SZ_ERROR_DATA; + } + p->needInitDic = False; + LzmaDec_InitDicAndState(&p->decoder, initDic, False); + } + + if (srcSizeCur > destSizeCur) + srcSizeCur = destSizeCur; + + if (srcSizeCur == 0) + { + p->state = LZMA2_STATE_ERROR; + return SZ_ERROR_DATA; + } + + LzmaDec_UpdateWithUncompressed(&p->decoder, src, srcSizeCur); + + src += srcSizeCur; + *srcLen += srcSizeCur; + p->unpackSize -= (UInt32)srcSizeCur; + p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT; + } + else + { + SizeT outSizeProcessed; + SRes res; + + if (p->state == LZMA2_STATE_DATA) + { + unsigned mode = LZMA2_GET_LZMA_MODE(p); + Bool initDic = (mode == 3); + Bool initState = (mode != 0); + if ((!initDic && p->needInitDic) || (!initState && p->needInitState)) + { + p->state = LZMA2_STATE_ERROR; + return SZ_ERROR_DATA; + } + + LzmaDec_InitDicAndState(&p->decoder, initDic, initState); + p->needInitDic = False; + p->needInitState = False; + p->state = LZMA2_STATE_DATA_CONT; + } + + if (srcSizeCur > p->packSize) + srcSizeCur = (SizeT)p->packSize; + + res = LzmaDec_DecodeToDic(&p->decoder, dicPos + destSizeCur, src, &srcSizeCur, curFinishMode, status); + + src += srcSizeCur; + *srcLen += srcSizeCur; + p->packSize -= (UInt32)srcSizeCur; + + outSizeProcessed = p->decoder.dicPos - dicPos; + p->unpackSize -= (UInt32)outSizeProcessed; + + RINOK(res); + if (*status == LZMA_STATUS_NEEDS_MORE_INPUT) + return res; + + if (srcSizeCur == 0 && outSizeProcessed == 0) + { + if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + || p->unpackSize != 0 + || p->packSize != 0) + { + p->state = LZMA2_STATE_ERROR; + return SZ_ERROR_DATA; + } + p->state = LZMA2_STATE_CONTROL; + } + + if (*status == LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK) + *status = LZMA_STATUS_NOT_FINISHED; + } + } + } + + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return SZ_OK; +} + +#endif /* _INCLUDE_PHYSFS_LZMASDK_H_ */ + +/* end of physfs_lzmasdk.h ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/physfs_miniz.h b/love/src/jni/physfs-3.0.1/src/physfs_miniz.h similarity index 98% rename from love/src/jni/physfs-2.1.0/src/physfs_miniz.h rename to love/src/jni/physfs-3.0.1/src/physfs_miniz.h index 141a5b99..30d6f4cc 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs_miniz.h +++ b/love/src/jni/physfs-3.0.1/src/physfs_miniz.h @@ -1,7 +1,7 @@ /* tinfl.c v1.11 - public domain inflate with zlib header parsing/adler32 checking (inflate-only subset of miniz.c) See "unlicense" statement at the end of this file. Rich Geldreich , last updated May 20, 2011 - Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt + Implements RFC 1950: https://www.ietf.org/rfc/rfc1950.txt and RFC 1951: https://www.ietf.org/rfc/rfc1951.txt The entire decompressor coroutine is implemented in tinfl_decompress(). The other functions are optional high-level helpers. */ @@ -266,7 +266,10 @@ static tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_ { mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); - for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8; + for ( i = 0; i <= 143; ++i) *p++ = 8; + for ( ; i <= 255; ++i) *p++ = 9; + for ( ; i <= 279; ++i) *p++ = 7; + for ( ; i <= 287; ++i) *p++ = 8; } else { @@ -694,5 +697,5 @@ static int mz_inflateEnd(mz_streamp pStream) ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - For more information, please refer to + For more information, please refer to */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_platform_apple.m b/love/src/jni/physfs-3.0.1/src/physfs_platform_apple.m new file mode 100644 index 00000000..fe50f4b0 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_apple.m @@ -0,0 +1,188 @@ +/* + * Apple platform (macOS, iOS, watchOS, etc) support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file written by Ryan C. Gordon. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_platforms.h" + +#ifdef PHYSFS_PLATFORM_APPLE + +#include + +#include "physfs_internal.h" + +int __PHYSFS_platformInit(void) +{ + return 1; /* success. */ +} /* __PHYSFS_platformInit */ + + +void __PHYSFS_platformDeinit(void) +{ + /* no-op */ +} /* __PHYSFS_platformDeinit */ + + +char *__PHYSFS_platformCalcBaseDir(const char *argv0) +{ + @autoreleasepool + { + NSString *path = [[NSBundle mainBundle] bundlePath]; + BAIL_IF(!path, PHYSFS_ERR_OS_ERROR, NULL); + size_t len = [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + char *retval = (char *) allocator.Malloc(len + 2); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + [path getCString:retval maxLength:len+1 encoding:NSUTF8StringEncoding]; + retval[len] = '/'; + retval[len+1] = '\0'; + return retval; /* whew. */ + } /* @autoreleasepool */ +} /* __PHYSFS_platformCalcBaseDir */ + + +char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) +{ + @autoreleasepool + { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, TRUE); + BAIL_IF(!paths, PHYSFS_ERR_OS_ERROR, NULL); + NSString *path = (NSString *) paths[0]; + BAIL_IF(!path, PHYSFS_ERR_OS_ERROR, NULL); + size_t len = [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + const size_t applen = strlen(app); + char *retval = (char *) allocator.Malloc(len + applen + 3); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + [path getCString:retval maxLength:len+1 encoding:NSUTF8StringEncoding]; + snprintf(retval + len, applen + 3, "/%s/", app); + return retval; /* whew. */ + } /* @autoreleasepool */ +} /* __PHYSFS_platformCalcPrefDir */ + + +/* CD-ROM detection code... */ + +/* + * Code based on sample from Apple Developer Connection: + * https://developer.apple.com/samplecode/Sample_Code/Devices_and_Hardware/Disks/VolumeToBSDNode/VolumeToBSDNode.c.htm + */ + +#if !defined(PHYSFS_NO_CDROM_SUPPORT) + +#include +#include +#include +#include +#include + +static int darwinIsWholeMedia(io_service_t service) +{ + int retval = 0; + CFTypeRef wholeMedia; + + if (!IOObjectConformsTo(service, kIOMediaClass)) + return 0; + + wholeMedia = IORegistryEntryCreateCFProperty(service, + CFSTR(kIOMediaWholeKey), + NULL, 0); + if (wholeMedia == NULL) + return 0; + + retval = CFBooleanGetValue(wholeMedia); + CFRelease(wholeMedia); + + return retval; +} /* darwinIsWholeMedia */ + + +static int darwinIsMountedDisc(char *bsdName, mach_port_t masterPort) +{ + int retval = 0; + CFMutableDictionaryRef matchingDict; + kern_return_t rc; + io_iterator_t iter; + io_service_t service; + + if ((matchingDict = IOBSDNameMatching(masterPort, 0, bsdName)) == NULL) + return 0; + + rc = IOServiceGetMatchingServices(masterPort, matchingDict, &iter); + if ((rc != KERN_SUCCESS) || (!iter)) + return 0; + + service = IOIteratorNext(iter); + IOObjectRelease(iter); + if (!service) + return 0; + + rc = IORegistryEntryCreateIterator(service, kIOServicePlane, + kIORegistryIterateRecursively | kIORegistryIterateParents, &iter); + + if (!iter) + return 0; + + if (rc != KERN_SUCCESS) + { + IOObjectRelease(iter); + return 0; + } /* if */ + + IOObjectRetain(service); /* add an extra object reference... */ + + do + { + if (darwinIsWholeMedia(service)) + { + if ( (IOObjectConformsTo(service, kIOCDMediaClass)) || + (IOObjectConformsTo(service, kIODVDMediaClass)) ) + { + retval = 1; + } /* if */ + } /* if */ + IOObjectRelease(service); + } while ((service = IOIteratorNext(iter)) && (!retval)); + + IOObjectRelease(iter); + IOObjectRelease(service); + + return retval; +} /* darwinIsMountedDisc */ + +#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */ + + +void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) +{ +#if !defined(PHYSFS_NO_CDROM_SUPPORT) + const char *devPrefix = "/dev/"; + const int prefixLen = strlen(devPrefix); + mach_port_t masterPort = 0; + struct statfs *mntbufp; + int i, mounts; + + if (IOMasterPort(MACH_PORT_NULL, &masterPort) != KERN_SUCCESS) + BAIL(PHYSFS_ERR_OS_ERROR, ) /*return void*/; + + mounts = getmntinfo(&mntbufp, MNT_WAIT); /* NOT THREAD SAFE! */ + for (i = 0; i < mounts; i++) + { + char *dev = mntbufp[i].f_mntfromname; + char *mnt = mntbufp[i].f_mntonname; + if (strncmp(dev, devPrefix, prefixLen) != 0) /* a virtual device? */ + continue; + + dev += prefixLen; + if (darwinIsMountedDisc(dev, masterPort)) + cb(data, mnt); + } /* for */ +#endif /* !defined(PHYSFS_NO_CDROM_SUPPORT) */ +} /* __PHYSFS_platformDetectAvailableCDs */ + +#endif /* PHYSFS_PLATFORM_APPLE */ + +/* end of physfs_platform_apple.m ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/platform_beos.cpp b/love/src/jni/physfs-3.0.1/src/physfs_platform_haiku.cpp similarity index 71% rename from love/src/jni/physfs-2.1.0/src/platform_beos.cpp rename to love/src/jni/physfs-3.0.1/src/physfs_platform_haiku.cpp index fd4bbd5a..fcf8ebde 100644 --- a/love/src/jni/physfs-2.1.0/src/platform_beos.cpp +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_haiku.cpp @@ -1,5 +1,5 @@ /* - * BeOS platform-dependent support routines for PhysicsFS. + * Haiku platform-dependent support routines for PhysicsFS. * * Please see the file LICENSE.txt in the source's root directory. * @@ -9,9 +9,8 @@ #define __PHYSICSFS_INTERNAL__ #include "physfs_platforms.h" -#ifdef PHYSFS_PLATFORM_BEOS - #ifdef PHYSFS_PLATFORM_HAIKU + #include #include #include @@ -21,19 +20,6 @@ #include #include #include -#include -#else -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif #include #include @@ -46,9 +32,9 @@ int __PHYSFS_platformInit(void) } /* __PHYSFS_platformInit */ -int __PHYSFS_platformDeinit(void) +void __PHYSFS_platformDeinit(void) { - return 1; /* always succeed. */ + /* no-op */ } /* __PHYSFS_platformDeinit */ @@ -87,7 +73,7 @@ static char *getMountPoint(const char *devname, char *buf, size_t bufsize) /* * This function is lifted from Simple Directmedia Layer (SDL): - * http://www.libsdl.org/ ... this is zlib-licensed code, too. + * https://www.libsdl.org/ ... this is zlib-licensed code, too. */ static void tryDir(const char *d, PHYSFS_StringCallback callback, void *data) { @@ -119,9 +105,6 @@ static void tryDir(const char *d, PHYSFS_StringCallback callback, void *data) continue; } /* if */ - if (strcmp(e.name, "raw") != 0) /* ignore partitions. */ - continue; - const int devfd = open(name, O_RDONLY); if (devfd < 0) continue; @@ -178,7 +161,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) assert(str != NULL); const size_t len = strlen(str); char *retval = (char *) allocator.Malloc(len + 2); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); strcpy(retval, str); retval[len] = '/'; retval[len+1] = '\0'; @@ -191,49 +174,13 @@ char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) const char *userdir = __PHYSFS_getUserDir(); const char *append = "config/settings/"; const size_t len = strlen(userdir) + strlen(append) + strlen(app) + 2; - char *retval = allocator.Malloc(len); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + char *retval = (char *) allocator.Malloc(len); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); snprintf(retval, len, "%s%s%s/", userdir, append, app); return retval; } /* __PHYSFS_platformCalcPrefDir */ +#endif /* PHYSFS_PLATFORM_HAIKU */ -void *__PHYSFS_platformGetThreadID(void) -{ - return (void *) find_thread(NULL); -} /* __PHYSFS_platformGetThreadID */ - - -void *__PHYSFS_platformCreateMutex(void) -{ - return new BLocker("PhysicsFS lock", true); -} /* __PHYSFS_platformCreateMutex */ - - -void __PHYSFS_platformDestroyMutex(void *mutex) -{ - delete ((BLocker *) mutex); -} /* __PHYSFS_platformDestroyMutex */ - - -int __PHYSFS_platformGrabMutex(void *mutex) -{ - return ((BLocker *) mutex)->Lock() ? 1 : 0; -} /* __PHYSFS_platformGrabMutex */ - - -void __PHYSFS_platformReleaseMutex(void *mutex) -{ - ((BLocker *) mutex)->Unlock(); -} /* __PHYSFS_platformReleaseMutex */ - - -int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a) -{ - return 0; /* just use malloc() and friends. */ -} /* __PHYSFS_platformSetDefaultAllocator */ - -#endif /* PHYSFS_PLATFORM_BEOS */ - -/* end of beos.cpp ... */ +/* end of physfs_platform_haiku.cpp ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_platform_os2.c b/love/src/jni/physfs-3.0.1/src/physfs_platform_os2.c new file mode 100644 index 00000000..8cc8044c --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_os2.c @@ -0,0 +1,812 @@ +/* + * OS/2 support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file written by Ryan C. Gordon. + */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_platforms.h" + +#ifdef PHYSFS_PLATFORM_OS2 + +#define INCL_DOSMODULEMGR +#define INCL_DOSSEMAPHORES +#define INCL_DOSDATETIME +#define INCL_DOSFILEMGR +#define INCL_DOSMODULEMGR +#define INCL_DOSERRORS +#define INCL_DOSPROCESS +#define INCL_DOSDEVICES +#define INCL_DOSDEVIOCTL +#define INCL_DOSMISC +#include +#include + +#include +#include +#include + +#include "physfs_internal.h" + +static HMODULE uconvdll = 0; +static UconvObject uconv = 0; +static int (_System *pUniCreateUconvObject)(UniChar *, UconvObject *) = NULL; +static int (_System *pUniFreeUconvObject)(UconvObject *) = NULL; +static int (_System *pUniUconvToUcs)(UconvObject,void **,size_t *, UniChar**, size_t *, size_t *) = NULL; +static int (_System *pUniUconvFromUcs)(UconvObject,UniChar **,size_t *,void **,size_t *,size_t *) = NULL; + +static PHYSFS_ErrorCode errcodeFromAPIRET(const APIRET rc) +{ + switch (rc) + { + case NO_ERROR: return PHYSFS_ERR_OK; /* not an error. */ + case ERROR_INTERRUPT: return PHYSFS_ERR_OK; /* not an error. */ + case ERROR_TIMEOUT: return PHYSFS_ERR_OK; /* not an error. */ + case ERROR_NOT_ENOUGH_MEMORY: return PHYSFS_ERR_OUT_OF_MEMORY; + case ERROR_FILE_NOT_FOUND: return PHYSFS_ERR_NOT_FOUND; + case ERROR_PATH_NOT_FOUND: return PHYSFS_ERR_NOT_FOUND; + case ERROR_ACCESS_DENIED: return PHYSFS_ERR_PERMISSION; + case ERROR_NOT_DOS_DISK: return PHYSFS_ERR_NOT_FOUND; + case ERROR_SHARING_VIOLATION: return PHYSFS_ERR_PERMISSION; + case ERROR_CANNOT_MAKE: return PHYSFS_ERR_IO; /* maybe this is wrong? */ + case ERROR_DEVICE_IN_USE: return PHYSFS_ERR_BUSY; + case ERROR_OPEN_FAILED: return PHYSFS_ERR_IO; /* maybe this is wrong? */ + case ERROR_DISK_FULL: return PHYSFS_ERR_NO_SPACE; + case ERROR_PIPE_BUSY: return PHYSFS_ERR_BUSY; + case ERROR_SHARING_BUFFER_EXCEEDED: return PHYSFS_ERR_IO; + case ERROR_FILENAME_EXCED_RANGE: return PHYSFS_ERR_BAD_FILENAME; + case ERROR_META_EXPANSION_TOO_LONG: return PHYSFS_ERR_BAD_FILENAME; + case ERROR_TOO_MANY_HANDLES: return PHYSFS_ERR_IO; + case ERROR_TOO_MANY_OPEN_FILES: return PHYSFS_ERR_IO; + case ERROR_NO_MORE_SEARCH_HANDLES: return PHYSFS_ERR_IO; + case ERROR_SEEK_ON_DEVICE: return PHYSFS_ERR_IO; + case ERROR_NEGATIVE_SEEK: return PHYSFS_ERR_INVALID_ARGUMENT; + case ERROR_WRITE_PROTECT: return PHYSFS_ERR_PERMISSION; + case ERROR_WRITE_FAULT: return PHYSFS_ERR_IO; + case ERROR_UNCERTAIN_MEDIA: return PHYSFS_ERR_IO; + case ERROR_PROTECTION_VIOLATION: return PHYSFS_ERR_IO; + case ERROR_BROKEN_PIPE: return PHYSFS_ERR_IO; + + /* !!! FIXME: some of these might be PHYSFS_ERR_BAD_FILENAME, etc */ + case ERROR_LOCK_VIOLATION: + case ERROR_GEN_FAILURE: + case ERROR_INVALID_PARAMETER: + case ERROR_INVALID_NAME: + case ERROR_INVALID_DRIVE: + case ERROR_INVALID_HANDLE: + case ERROR_INVALID_FUNCTION: + case ERROR_INVALID_LEVEL: + case ERROR_INVALID_CATEGORY: + case ERROR_DUPLICATE_NAME: + case ERROR_BUFFER_OVERFLOW: + case ERROR_BAD_LENGTH: + case ERROR_BAD_DRIVER_LEVEL: + case ERROR_DIRECT_ACCESS_HANDLE: + case ERROR_NOT_OWNER: + return PHYSFS_ERR_OS_ERROR; + + default: break; + } /* switch */ + + return PHYSFS_ERR_OTHER_ERROR; +} /* errcodeFromAPIRET */ + +static char *cvtUtf8ToCodepage(const char *utf8str) +{ + const size_t len = strlen(utf8str) + 1; + const size_t uc2buflen = len * sizeof (UniChar); + UniChar *uc2ptr = (UniChar *) __PHYSFS_smallAlloc(uc2buflen); + UniChar *uc2str = uc2ptr; + char *cpptr = NULL; + char *cpstr = NULL; + size_t subs = 0; + size_t unilen; + + BAIL_IF(!uc2str, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + PHYSFS_utf8ToUcs2(utf8str, (PHYSFS_uint16 *) uc2str, uc2buflen); + for (unilen = 0; uc2str[unilen]; unilen++) { /* spin */ } + unilen++; /* null terminator. */ + + if (!uconvdll) + { + /* There's really not much we can do on older OS/2s except pray this + is latin1-compatible. */ + size_t i; + cpptr = (char *) allocator.Malloc(unilen); + cpstr = cpptr; + GOTO_IF(!cpptr, PHYSFS_ERR_OUT_OF_MEMORY, failed); + for (i = 0; i < unilen; i++) + { + const UniChar ch = uc2str[i]; + GOTO_IF(ch > 0xFF, PHYSFS_ERR_BAD_FILENAME, failed); + cpptr[i] = (char) ((unsigned char) ch); + } /* for */ + + __PHYSFS_smallFree(uc2ptr); + return cpstr; + } /* if */ + else + { + int rc; + size_t cplen = unilen * 4; /* overallocate, just in case. */ + cpptr = (char *) allocator.Malloc(cplen); + GOTO_IF(!cpptr, PHYSFS_ERR_OUT_OF_MEMORY, failed); + cpstr = cpptr; + + rc = pUniUconvFromUcs(uconv, &uc2str, &unilen, (void **) &cpstr, &cplen, &subs); + GOTO_IF(rc != ULS_SUCCESS, PHYSFS_ERR_BAD_FILENAME, failed); + GOTO_IF(subs > 0, PHYSFS_ERR_BAD_FILENAME, failed); + assert(unilen == 0); + + __PHYSFS_smallFree(uc2ptr); + return cpptr; + } /* else */ + +failed: + __PHYSFS_smallFree(uc2ptr); + allocator.Free(cpptr); + + return NULL; +} /* cvtUtf8ToCodepage */ + +static char *cvtCodepageToUtf8(const char *cpstr) +{ + const size_t len = strlen(cpstr) + 1; + char *retvalbuf = (char *) allocator.Malloc(len * 4); + char *retval = NULL; + + BAIL_IF(!retvalbuf, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + if (!uconvdll) + { + /* There's really not much we can do on older OS/2s except pray this + is latin1-compatible. */ + retval = retvalbuf; + PHYSFS_utf8FromLatin1(cpstr, retval, len * 4); + } /* if */ + else + { + int rc; + size_t cplen = len; + size_t unilen = len; + size_t subs = 0; + UniChar *uc2ptr = __PHYSFS_smallAlloc(len * sizeof (UniChar)); + UniChar *uc2str = uc2ptr; + + BAIL_IF(!uc2ptr, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + rc = pUniUconvToUcs(uconv, (void **) &cpstr, &cplen, &uc2str, &unilen, &subs); + GOTO_IF(rc != ULS_SUCCESS, PHYSFS_ERR_BAD_FILENAME, done); + GOTO_IF(subs > 0, PHYSFS_ERR_BAD_FILENAME, done); + assert(cplen == 0); + retval = retvalbuf; + PHYSFS_utf8FromUcs2((const PHYSFS_uint16 *) uc2ptr, retval, len * 4); + done: + __PHYSFS_smallFree(uc2ptr); + } /* else */ + + return retval; +} /* cvtCodepageToUtf8 */ + + +/* (be gentle, this function isn't very robust.) */ +static char *cvtPathToCorrectCase(char *buf) +{ + char *retval = buf; + char *fname = buf + 3; /* point to first element. */ + char *ptr = strchr(fname, '\\'); /* find end of first element. */ + + buf[0] = toupper(buf[0]); /* capitalize drive letter. */ + + /* + * Go through each path element, and enumerate its parent dir until + * a case-insensitive match is found. If one is (and it SHOULD be) + * then overwrite the original element with the correct case. + * If there's an error, or the path has vanished for some reason, it + * won't hurt to have the original case, so we just keep going. + */ + while ((fname != NULL) && (*fname != '\0')) + { + char spec[CCHMAXPATH]; + FILEFINDBUF3 fb; + HDIR hdir = HDIR_CREATE; + ULONG count = 1; + APIRET rc; + + *(fname - 1) = '\0'; /* isolate parent dir string. */ + + strcpy(spec, buf); /* copy isolated parent dir... */ + strcat(spec, "\\*.*"); /* ...and add wildcard search spec. */ + + if (ptr != NULL) /* isolate element to find (fname is the start). */ + *ptr = '\0'; + + rc = DosFindFirst((unsigned char *) spec, &hdir, FILE_DIRECTORY, + &fb, sizeof (fb), &count, FIL_STANDARD); + if (rc == NO_ERROR) + { + while (count == 1) /* while still entries to enumerate... */ + { + int cmp; + char *utf8 = cvtCodepageToUtf8(fb.achName); + if (!utf8) /* ugh, maybe we'll get lucky with the C runtime. */ + cmp = stricmp(fb.achName, fname); + else + { + cmp = PHYSFS_utf8stricmp(utf8, fname); + allocator.Free(utf8); + } /* else */ + + if (cmp == 0) + { + strcpy(fname, fb.achName); + break; /* there it is. Overwrite and stop searching. */ + } /* if */ + + DosFindNext(hdir, &fb, sizeof (fb), &count); + } /* while */ + DosFindClose(hdir); + } /* if */ + + *(fname - 1) = '\\'; /* unisolate parent dir. */ + fname = ptr; /* point to next element. */ + if (ptr != NULL) + { + *ptr = '\\'; /* unisolate element. */ + ptr = strchr(++fname, '\\'); /* find next element. */ + } /* if */ + } /* while */ + + return retval; +} /* cvtPathToCorrectCase */ + +static void prepUnicodeSupport(void) +{ + /* really old OS/2 might not have Unicode support _at all_, so load + the system library and do without if it doesn't exist. */ + int ok = 0; + char buf[CCHMAXPATH]; + UniChar defstr[] = { 0 }; + if (DosLoadModule(buf, sizeof (buf) - 1, "uconv", &uconvdll) == NO_ERROR) + { + #define LOAD(x) (DosQueryProcAddr(uconvdll,0,#x,(PFN*)&p##x)==NO_ERROR) + ok = LOAD(UniCreateUconvObject) && + LOAD(UniFreeUconvObject) && + LOAD(UniUconvToUcs) && + LOAD(UniUconvFromUcs); + #undef LOAD + } /* else */ + + if (!ok || (pUniCreateUconvObject(defstr, &uconv) != ULS_SUCCESS)) + { + /* oh well, live without it. */ + if (uconvdll) + { + if (uconv) + pUniFreeUconvObject(uconv); + DosFreeModule(uconvdll); + uconvdll = 0; + } /* if */ + } /* if */ +} /* prepUnicodeSupport */ + + +int __PHYSFS_platformInit(void) +{ + prepUnicodeSupport(); + return 1; /* ready to go! */ +} /* __PHYSFS_platformInit */ + + +void __PHYSFS_platformDeinit(void) +{ + if (uconvdll) + { + pUniFreeUconvObject(uconv); + uconv = 0; + DosFreeModule(uconvdll); + uconvdll = 0; + } /* if */ +} /* __PHYSFS_platformDeinit */ + + +static int discIsInserted(ULONG drive) +{ + int rc; + char buf[20]; + DosError(FERR_DISABLEHARDERR | FERR_DISABLEEXCEPTION); + rc = DosQueryFSInfo(drive + 1, FSIL_VOLSER, buf, sizeof (buf)); + DosError(FERR_ENABLEHARDERR | FERR_ENABLEEXCEPTION); + return (rc == NO_ERROR); +} /* is_cdrom_inserted */ + + +/* looks like "CD01" in ASCII (littleendian)...used for an ioctl. */ +#define CD01 0x31304443 + +static int isCdRomDrive(ULONG drive) +{ + PHYSFS_uint32 param, data; + ULONG ul1, ul2; + APIRET rc; + HFILE hfile = NULLHANDLE; + unsigned char drivename[3] = { 0, ':', '\0' }; + + drivename[0] = 'A' + drive; + + rc = DosOpen(drivename, &hfile, &ul1, 0, 0, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, + OPEN_FLAGS_DASD | OPEN_FLAGS_FAIL_ON_ERROR | + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE, NULL); + if (rc != NO_ERROR) + return 0; + + data = 0; + param = PHYSFS_swapULE32(CD01); + ul1 = ul2 = sizeof (PHYSFS_uint32); + rc = DosDevIOCtl(hfile, IOCTL_CDROMDISK, CDROMDISK_GETDRIVER, + ¶m, sizeof (param), &ul1, &data, sizeof (data), &ul2); + + DosClose(hfile); + return ((rc == NO_ERROR) && (PHYSFS_swapULE32(data) == CD01)); +} /* isCdRomDrive */ + + +void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) +{ + ULONG dummy = 0; + ULONG drivemap = 0; + ULONG i, bit; + const APIRET rc = DosQueryCurrentDisk(&dummy, &drivemap); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc),); + + for (i = 0, bit = 1; i < 26; i++, bit <<= 1) + { + if (drivemap & bit) /* this logical drive exists. */ + { + if ((isCdRomDrive(i)) && (discIsInserted(i))) + { + char drive[4] = "x:\\"; + drive[0] = ('A' + i); + cb(data, drive); + } /* if */ + } /* if */ + } /* for */ +} /* __PHYSFS_platformDetectAvailableCDs */ + + +char *__PHYSFS_platformCalcBaseDir(const char *argv0) +{ + char *retval = NULL; + char buf[CCHMAXPATH]; + APIRET rc; + PTIB ptib; + PPIB ppib; + PHYSFS_sint32 len; + + rc = DosGetInfoBlocks(&ptib, &ppib); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + rc = DosQueryModuleName(ppib->pib_hmte, sizeof (buf), (PCHAR) buf); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + retval = cvtCodepageToUtf8(buf); + BAIL_IF_ERRPASS(!retval, NULL); + + /* chop off filename, leave path. */ + for (len = strlen(retval) - 1; len >= 0; len--) + { + if (retval[len] == '\\') + { + retval[len + 1] = '\0'; + break; + } /* if */ + } /* for */ + + assert(len > 0); /* should have been a "x:\\" on the front on string. */ + + /* The string is capitalized! Figure out the REAL case... */ + return cvtPathToCorrectCase(retval); +} /* __PHYSFS_platformCalcBaseDir */ + +char *__PHYSFS_platformCalcUserDir(void) +{ + return __PHYSFS_platformCalcBaseDir(NULL); /* !!! FIXME: ? */ +} /* __PHYSFS_platformCalcUserDir */ + +char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) +{ + return __PHYSFS_platformCalcBaseDir(NULL); /* !!! FIXME: ? */ +} /* __PHYSFS_platformCalcPrefDir */ + +PHYSFS_EnumerateCallbackResult __PHYSFS_platformEnumerate(const char *dirname, + PHYSFS_EnumerateCallback callback, + const char *origdir, void *callbackdata) +{ + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; + size_t utf8len = strlen(dirname); + char *utf8 = (char *) __PHYSFS_smallAlloc(utf8len + 5); + char *cpspec = NULL; + FILEFINDBUF3 fb; + HDIR hdir = HDIR_CREATE; + ULONG count = 1; + APIRET rc; + + BAIL_IF(!utf8, PHYSFS_ERR_OUT_OF_MEMORY, PHYSFS_ENUM_ERROR); + + strcpy(utf8, dirname); + if (utf8[utf8len - 1] != '\\') + strcpy(utf8 + utf8len, "\\*.*"); + else + strcpy(utf8 + utf8len, "*.*"); + + cpspec = cvtUtf8ToCodepage(utf8); + __PHYSFS_smallFree(utf8); + BAIL_IF_ERRPASS(!cpspec, PHYSFS_ENUM_ERROR); + + rc = DosFindFirst((unsigned char *) cpspec, &hdir, + FILE_DIRECTORY | FILE_ARCHIVED | + FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM, + &fb, sizeof (fb), &count, FIL_STANDARD); + allocator.Free(cpspec); + + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), PHYSFS_ENUM_ERROR); + + while (count == 1) + { + if ((strcmp(fb.achName, ".") != 0) && (strcmp(fb.achName, "..") != 0)) + { + utf8 = cvtCodepageToUtf8(fb.achName); + if (!utf8) + retval = PHYSFS_ENUM_ERROR; + else + { + retval = callback(callbackdata, origdir, utf8); + allocator.Free(utf8); + if (retval == PHYSFS_ENUM_ERROR) + PHYSFS_setErrorCode(PHYSFS_ERR_APP_CALLBACK); + } /* else */ + } /* if */ + + if (retval != PHYSFS_ENUM_OK) + break; + + DosFindNext(hdir, &fb, sizeof (fb), &count); + } /* while */ + + DosFindClose(hdir); + + return retval; +} /* __PHYSFS_platformEnumerate */ + + +char *__PHYSFS_platformCurrentDir(void) +{ + char *retval; + char *cpstr; + char *utf8; + ULONG currentDisk; + ULONG dummy; + ULONG pathSize = 0; + APIRET rc; + BYTE byte; + + rc = DosQueryCurrentDisk(¤tDisk, &dummy); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), NULL); + + /* The first call just tells us how much space we need for the string. */ + rc = DosQueryCurrentDir(currentDisk, &byte, &pathSize); + pathSize++; /* Add space for null terminator. */ + cpstr = (char *) __PHYSFS_smallAlloc(pathSize); + BAIL_IF(cpstr == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + /* Actually get the string this time. */ + rc = DosQueryCurrentDir(currentDisk, (PBYTE) cpstr, &pathSize); + if (rc != NO_ERROR) + { + __PHYSFS_smallFree(cpstr); + BAIL(errcodeFromAPIRET(rc), NULL); + } /* if */ + + utf8 = cvtCodepageToUtf8(cpstr); + __PHYSFS_smallFree(cpstr); + BAIL_IF_ERRPASS(utf8 == NULL, NULL); + + /* +4 for "x:\\" drive selector and null terminator. */ + retval = (char *) allocator.Malloc(strlen(utf8) + 4); + if (retval == NULL) + { + allocator.Free(utf8); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + } /* if */ + + retval[0] = ('A' + (currentDisk - 1)); + retval[1] = ':'; + retval[2] = '\\'; + strcpy(retval + 3, utf8); + + allocator.Free(utf8); + + return retval; +} /* __PHYSFS_platformCurrentDir */ + + +int __PHYSFS_platformMkDir(const char *filename) +{ + APIRET rc; + char *cpstr = cvtUtf8ToCodepage(filename); + BAIL_IF_ERRPASS(!cpstr, 0); + rc = DosCreateDir((unsigned char *) cpstr, NULL); + allocator.Free(cpstr); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + return 1; +} /* __PHYSFS_platformMkDir */ + + +static HFILE openFile(const char *filename, const ULONG flags, const ULONG mode) +{ + char *cpfname = cvtUtf8ToCodepage(filename); + ULONG action = 0; + HFILE hfile = NULLHANDLE; + APIRET rc; + + BAIL_IF_ERRPASS(!cpfname, 0); + + rc = DosOpen(cpfname, &hfile, &action, 0, FILE_NORMAL, flags, mode, NULL); + allocator.Free(cpfname); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + + return hfile; +} /* openFile */ + +void *__PHYSFS_platformOpenRead(const char *filename) +{ + /* + * File must be opened SHARE_DENYWRITE and ACCESS_READONLY, otherwise + * DosQueryFileInfo() will fail if we try to get a file length, etc. + */ + return (void *) openFile(filename, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, + OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY | + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE | + OPEN_ACCESS_READONLY); +} /* __PHYSFS_platformOpenRead */ + + +void *__PHYSFS_platformOpenWrite(const char *filename) +{ + return (void *) openFile(filename, + OPEN_ACTION_REPLACE_IF_EXISTS | + OPEN_ACTION_CREATE_IF_NEW, + OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY | + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE); +} /* __PHYSFS_platformOpenWrite */ + + +void *__PHYSFS_platformOpenAppend(const char *filename) +{ + APIRET rc; + ULONG dummy = 0; + HFILE hfile; + + /* + * File must be opened SHARE_DENYWRITE and ACCESS_READWRITE, otherwise + * DosQueryFileInfo() will fail if we try to get a file length, etc. + */ + hfile = openFile(filename, + OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW, + OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_LOCALITY | + OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYWRITE | + OPEN_ACCESS_READWRITE); + BAIL_IF_ERRPASS(!hfile, NULL); + + rc = DosSetFilePtr(hfile, 0, FILE_END, &dummy); + if (rc != NO_ERROR) + { + DosClose(hfile); + BAIL(errcodeFromAPIRET(rc), NULL); + } /* if */ + + return ((void *) hfile); +} /* __PHYSFS_platformOpenAppend */ + + +PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buf, PHYSFS_uint64 len) +{ + ULONG br = 0; + APIRET rc; + BAIL_IF(!__PHYSFS_ui64FitsAddressSpace(len),PHYSFS_ERR_INVALID_ARGUMENT,-1); + rc = DosRead((HFILE) opaque, buf, (ULONG) len, &br); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), (br > 0) ? ((PHYSFS_sint64) br) : -1); + return (PHYSFS_sint64) br; +} /* __PHYSFS_platformRead */ + + +PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buf, + PHYSFS_uint64 len) +{ + ULONG bw = 0; + APIRET rc; + BAIL_IF(!__PHYSFS_ui64FitsAddressSpace(len),PHYSFS_ERR_INVALID_ARGUMENT,-1); + rc = DosWrite((HFILE) opaque, (void *) buf, (ULONG) len, &bw); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), (bw > 0) ? ((PHYSFS_sint64) bw) : -1); + return (PHYSFS_sint64) bw; +} /* __PHYSFS_platformWrite */ + + +int __PHYSFS_platformSeek(void *opaque, PHYSFS_uint64 pos) +{ + ULONG dummy; + HFILE hfile = (HFILE) opaque; + LONG dist = (LONG) pos; + APIRET rc; + + /* hooray for 32-bit filesystem limits! :) */ + BAIL_IF((PHYSFS_uint64) dist != pos, PHYSFS_ERR_INVALID_ARGUMENT, 0); + rc = DosSetFilePtr(hfile, dist, FILE_BEGIN, &dummy); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + return 1; +} /* __PHYSFS_platformSeek */ + + +PHYSFS_sint64 __PHYSFS_platformTell(void *opaque) +{ + ULONG pos; + HFILE hfile = (HFILE) opaque; + const APIRET rc = DosSetFilePtr(hfile, 0, FILE_CURRENT, &pos); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), -1); + return ((PHYSFS_sint64) pos); +} /* __PHYSFS_platformTell */ + + +PHYSFS_sint64 __PHYSFS_platformFileLength(void *opaque) +{ + FILESTATUS3 fs; + HFILE hfile = (HFILE) opaque; + const APIRET rc = DosQueryFileInfo(hfile, FIL_STANDARD, &fs, sizeof (fs)); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), -1); + return ((PHYSFS_sint64) fs.cbFile); +} /* __PHYSFS_platformFileLength */ + + +int __PHYSFS_platformFlush(void *opaque) +{ + const APIRET rc = DosResetBuffer((HFILE) opaque); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + return 1; +} /* __PHYSFS_platformFlush */ + + +void __PHYSFS_platformClose(void *opaque) +{ + DosClose((HFILE) opaque); /* ignore errors. You should have flushed! */ +} /* __PHYSFS_platformClose */ + + +int __PHYSFS_platformDelete(const char *path) +{ + char *cppath = cvtUtf8ToCodepage(path); + FILESTATUS3 fs; + APIRET rc; + int retval = 0; + + BAIL_IF_ERRPASS(!cppath, 0); + rc = DosQueryPathInfo(cppath, FIL_STANDARD, &fs, sizeof (fs)); + GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); + rc = (fs.attrFile & FILE_DIRECTORY) ? DosDeleteDir(path) : DosDelete(path); + GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); + retval = 1; /* success */ + +done: + allocator.Free(cppath); + return retval; +} /* __PHYSFS_platformDelete */ + + +/* Convert to a format PhysicsFS can grok... */ +PHYSFS_sint64 os2TimeToUnixTime(const FDATE *date, const FTIME *time) +{ + struct tm tm; + + tm.tm_sec = ((PHYSFS_uint32) time->twosecs) * 2; + tm.tm_min = time->minutes; + tm.tm_hour = time->hours; + tm.tm_mday = date->day; + tm.tm_mon = date->month; + tm.tm_year = ((PHYSFS_uint32) date->year) + 80; + tm.tm_wday = -1 /*st_localtz.wDayOfWeek*/; + tm.tm_yday = -1; + tm.tm_isdst = -1; + + return (PHYSFS_sint64) mktime(&tm); +} /* os2TimeToUnixTime */ + + +int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *stat, const int follow) +{ + char *cpfname = cvtUtf8ToCodepage(filename); + FILESTATUS3 fs; + int retval = 0; + APIRET rc; + + BAIL_IF_ERRPASS(!cpfname, 0); + + rc = DosQueryPathInfo(cpfname, FIL_STANDARD, &fs, sizeof (fs)); + GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); + + if (fs.attrFile & FILE_DIRECTORY) + { + stat->filetype = PHYSFS_FILETYPE_DIRECTORY; + stat->filesize = 0; + } /* if */ + else + { + stat->filetype = PHYSFS_FILETYPE_REGULAR; + stat->filesize = fs.cbFile; + } /* else */ + + stat->modtime = os2TimeToUnixTime(&fs.fdateLastWrite, &fs.ftimeLastWrite); + if (stat->modtime < 0) + stat->modtime = 0; + + stat->accesstime = os2TimeToUnixTime(&fs.fdateLastAccess, &fs.ftimeLastAccess); + if (stat->accesstime < 0) + stat->accesstime = 0; + + stat->createtime = os2TimeToUnixTime(&fs.fdateCreation, &fs.ftimeCreation); + if (stat->createtime < 0) + stat->createtime = 0; + + stat->readonly = ((fs.attrFile & FILE_READONLY) == FILE_READONLY); + return 1; /* success */ + +done: + allocator.Free(cpfname); + return retval; +} /* __PHYSFS_platformStat */ + + +void *__PHYSFS_platformGetThreadID(void) +{ + PTIB ptib; + PPIB ppib; + + /* + * Allegedly, this API never fails, but we'll punt and return a + * default value (zero might as well do) if it does. + */ + const APIRET rc = DosGetInfoBlocks(&ptib, &ppib); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); + return ((void *) ptib->tib_ordinal); +} /* __PHYSFS_platformGetThreadID */ + + +void *__PHYSFS_platformCreateMutex(void) +{ + HMTX hmtx = NULLHANDLE; + const APIRET rc = DosCreateMutexSem(NULL, &hmtx, 0, 0); + BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), NULL); + return ((void *) hmtx); +} /* __PHYSFS_platformCreateMutex */ + + +void __PHYSFS_platformDestroyMutex(void *mutex) +{ + DosCloseMutexSem((HMTX) mutex); +} /* __PHYSFS_platformDestroyMutex */ + + +int __PHYSFS_platformGrabMutex(void *mutex) +{ + /* Do _NOT_ set the physfs error message in here! */ + return (DosRequestMutexSem((HMTX) mutex, SEM_INDEFINITE_WAIT) == NO_ERROR); +} /* __PHYSFS_platformGrabMutex */ + + +void __PHYSFS_platformReleaseMutex(void *mutex) +{ + DosReleaseMutexSem((HMTX) mutex); +} /* __PHYSFS_platformReleaseMutex */ + +#endif /* PHYSFS_PLATFORM_OS2 */ + +/* end of physfs_platform_os2.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/platform_posix.c b/love/src/jni/physfs-3.0.1/src/physfs_platform_posix.c similarity index 78% rename from love/src/jni/physfs-2.1.0/src/platform_posix.c rename to love/src/jni/physfs-3.0.1/src/physfs_platform_posix.c index 018ae760..fa2159cd 100644 --- a/love/src/jni/physfs-2.1.0/src/platform_posix.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_posix.c @@ -21,10 +21,7 @@ #include #include #include - -#if ((!defined PHYSFS_NO_THREAD_SUPPORT) && (!defined PHYSFS_PLATFORM_BEOS)) #include -#endif #include "physfs_internal.h" @@ -121,42 +118,41 @@ char *__PHYSFS_platformCalcUserDir(void) } /* __PHYSFS_platformCalcUserDir */ -void __PHYSFS_platformEnumerateFiles(const char *dirname, - PHYSFS_EnumFilesCallback callback, - const char *origdir, - void *callbackdata) +PHYSFS_EnumerateCallbackResult __PHYSFS_platformEnumerate(const char *dirname, + PHYSFS_EnumerateCallback callback, + const char *origdir, void *callbackdata) { DIR *dir; struct dirent *ent; - char *buf = NULL; + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; - errno = 0; dir = opendir(dirname); - if (dir == NULL) - { - allocator.Free(buf); - return; - } /* if */ + BAIL_IF(dir == NULL, errcodeFromErrno(), PHYSFS_ENUM_ERROR); - while ((ent = readdir(dir)) != NULL) + while ((retval == PHYSFS_ENUM_OK) && ((ent = readdir(dir)) != NULL)) { - if (strcmp(ent->d_name, ".") == 0) - continue; - else if (strcmp(ent->d_name, "..") == 0) - continue; + const char *name = ent->d_name; + if (name[0] == '.') /* ignore "." and ".." */ + { + if ((name[1] == '\0') || ((name[1] == '.') && (name[2] == '\0'))) + continue; + } /* if */ - callback(callbackdata, origdir, ent->d_name); + retval = callback(callbackdata, origdir, name); + if (retval == PHYSFS_ENUM_ERROR) + PHYSFS_setErrorCode(PHYSFS_ERR_APP_CALLBACK); } /* while */ - allocator.Free(buf); closedir(dir); -} /* __PHYSFS_platformEnumerateFiles */ + + return retval; +} /* __PHYSFS_platformEnumerate */ int __PHYSFS_platformMkDir(const char *path) { const int rc = mkdir(path, S_IRWXU); - BAIL_IF_MACRO(rc == -1, errcodeFromErrno(), 0); + BAIL_IF(rc == -1, errcodeFromErrno(), 0); return 1; } /* __PHYSFS_platformMkDir */ @@ -172,7 +168,7 @@ static void *doOpen(const char *filename, int mode) mode &= ~O_APPEND; fd = open(filename, mode, S_IRUSR | S_IWUSR); - BAIL_IF_MACRO(fd < 0, errcodeFromErrno(), NULL); + BAIL_IF(fd < 0, errcodeFromErrno(), NULL); if (appending) { @@ -180,7 +176,7 @@ static void *doOpen(const char *filename, int mode) { const int err = errno; close(fd); - BAIL_MACRO(errcodeFromErrnoError(err), NULL); + BAIL(errcodeFromErrnoError(err), NULL); } /* if */ } /* if */ @@ -188,7 +184,7 @@ static void *doOpen(const char *filename, int mode) if (!retval) { close(fd); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); } /* if */ *retval = fd; @@ -221,10 +217,10 @@ PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buffer, ssize_t rc = 0; if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); rc = read(fd, buffer, (size_t) len); - BAIL_IF_MACRO(rc == -1, errcodeFromErrno(), -1); + BAIL_IF(rc == -1, errcodeFromErrno(), -1); assert(rc >= 0); assert(rc <= len); return (PHYSFS_sint64) rc; @@ -238,10 +234,10 @@ PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer, ssize_t rc = 0; if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); rc = write(fd, (void *) buffer, (size_t) len); - BAIL_IF_MACRO(rc == -1, errcodeFromErrno(), rc); + BAIL_IF(rc == -1, errcodeFromErrno(), rc); assert(rc >= 0); assert(rc <= len); return (PHYSFS_sint64) rc; @@ -251,8 +247,8 @@ PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer, int __PHYSFS_platformSeek(void *opaque, PHYSFS_uint64 pos) { const int fd = *((int *) opaque); - const int rc = lseek(fd, (off_t) pos, SEEK_SET); - BAIL_IF_MACRO(rc == -1, errcodeFromErrno(), 0); + const off_t rc = lseek(fd, (off_t) pos, SEEK_SET); + BAIL_IF(rc == -1, errcodeFromErrno(), 0); return 1; } /* __PHYSFS_platformSeek */ @@ -262,7 +258,7 @@ PHYSFS_sint64 __PHYSFS_platformTell(void *opaque) const int fd = *((int *) opaque); PHYSFS_sint64 retval; retval = (PHYSFS_sint64) lseek(fd, 0, SEEK_CUR); - BAIL_IF_MACRO(retval == -1, errcodeFromErrno(), -1); + BAIL_IF(retval == -1, errcodeFromErrno(), -1); return retval; } /* __PHYSFS_platformTell */ @@ -271,7 +267,7 @@ PHYSFS_sint64 __PHYSFS_platformFileLength(void *opaque) { const int fd = *((int *) opaque); struct stat statbuf; - BAIL_IF_MACRO(fstat(fd, &statbuf) == -1, errcodeFromErrno(), -1); + BAIL_IF(fstat(fd, &statbuf) == -1, errcodeFromErrno(), -1); return ((PHYSFS_sint64) statbuf.st_size); } /* __PHYSFS_platformFileLength */ @@ -280,7 +276,7 @@ int __PHYSFS_platformFlush(void *opaque) { const int fd = *((int *) opaque); if ((fcntl(fd, F_GETFL) & O_ACCMODE) != O_RDONLY) - BAIL_IF_MACRO(fsync(fd) == -1, errcodeFromErrno(), 0); + BAIL_IF(fsync(fd) == -1, errcodeFromErrno(), 0); return 1; } /* __PHYSFS_platformFlush */ @@ -295,16 +291,16 @@ void __PHYSFS_platformClose(void *opaque) int __PHYSFS_platformDelete(const char *path) { - BAIL_IF_MACRO(remove(path) == -1, errcodeFromErrno(), 0); + BAIL_IF(remove(path) == -1, errcodeFromErrno(), 0); return 1; } /* __PHYSFS_platformDelete */ -int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *st) +int __PHYSFS_platformStat(const char *fname, PHYSFS_Stat *st, const int follow) { struct stat statbuf; - - BAIL_IF_MACRO(lstat(filename, &statbuf) == -1, errcodeFromErrno(), 0); + const int rc = follow ? stat(fname, &statbuf) : lstat(fname, &statbuf); + BAIL_IF(rc == -1, errcodeFromErrno(), 0); if (S_ISREG(statbuf.st_mode)) { @@ -334,23 +330,11 @@ int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *st) st->createtime = statbuf.st_ctime; st->accesstime = statbuf.st_atime; - /* !!! FIXME: maybe we should just report full permissions? */ - st->readonly = access(filename, W_OK); + st->readonly = (access(fname, W_OK) == -1); return 1; } /* __PHYSFS_platformStat */ -#ifndef PHYSFS_PLATFORM_BEOS /* BeOS has its own code in platform_beos.cpp */ -#if (defined PHYSFS_NO_THREAD_SUPPORT) - -void *__PHYSFS_platformGetThreadID(void) { return ((void *) 0x0001); } -void *__PHYSFS_platformCreateMutex(void) { return ((void *) 0x0001); } -void __PHYSFS_platformDestroyMutex(void *mutex) {} -int __PHYSFS_platformGrabMutex(void *mutex) { return 1; } -void __PHYSFS_platformReleaseMutex(void *mutex) {} - -#else - typedef struct { pthread_mutex_t mutex; @@ -369,12 +353,12 @@ void *__PHYSFS_platformCreateMutex(void) { int rc; PthreadMutex *m = (PthreadMutex *) allocator.Malloc(sizeof (PthreadMutex)); - BAIL_IF_MACRO(!m, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!m, PHYSFS_ERR_OUT_OF_MEMORY, NULL); rc = pthread_mutex_init(&m->mutex, NULL); if (rc != 0) { allocator.Free(m); - BAIL_MACRO(PHYSFS_ERR_OS_ERROR, NULL); + BAIL(PHYSFS_ERR_OS_ERROR, NULL); } /* if */ m->count = 0; @@ -427,10 +411,7 @@ void __PHYSFS_platformReleaseMutex(void *mutex) } /* if */ } /* __PHYSFS_platformReleaseMutex */ -#endif /* !PHYSFS_NO_THREAD_SUPPORT */ -#endif /* !PHYSFS_PLATFORM_BEOS */ - #endif /* PHYSFS_PLATFORM_POSIX */ -/* end of posix.c ... */ +/* end of physfs_platform_posix.c ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_platform_qnx.c b/love/src/jni/physfs-3.0.1/src/physfs_platform_qnx.c new file mode 100644 index 00000000..46f9aa70 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_qnx.c @@ -0,0 +1,169 @@ +/* + * QNX support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file written by Ryan C. Gordon. + */ + +/* This is tested against QNX 7 at the moment. */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_platforms.h" + +#ifdef PHYSFS_PLATFORM_QNX + +#include +#include +#include +#include + +#include "physfs_internal.h" + +int __PHYSFS_platformInit(void) +{ + return 1; /* always succeed. */ +} /* __PHYSFS_platformInit */ + + +void __PHYSFS_platformDeinit(void) +{ + /* no-op */ +} /* __PHYSFS_platformDeinit */ + + +char *__PHYSFS_platformCalcBaseDir(const char *argv0) +{ + char *retval = (char *) allocator.Malloc(PATH_MAX+1); + if (retval == NULL) + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + else + { + const int fd = open("/proc/self/exefile", O_RDONLY); + const ssize_t br = (fd == -1) ? -1 : read(fd, retval, PATH_MAX); + char *ptr; + + if (fd != -1) + close(fd); + + if ((br < 0) || (br > PATH_MAX)) + { + allocator.Free(retval); + BAIL(PHYSFS_ERR_OS_ERROR, NULL); + } /* if */ + + retval[br] = '\0'; + ptr = strrchr(retval, '/'); + if (ptr == NULL) /* uhoh! */ + { + allocator.Free(retval); + BAIL(PHYSFS_ERR_OS_ERROR, NULL); + } /* if */ + + ptr[1] = '\0'; /* chop off filename, leave dirs and '/' */ + + ptr = (char *) allocator.Realloc(retval, (ptr - retval) + 2); + if (ptr != NULL) /* just shrinking buffer; don't care if it failed. */ + retval = ptr; + } /* else */ + + return retval; +} /* __PHYSFS_platformCalcBaseDir */ + + +char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) +{ + /* !!! FIXME: this might be wrong; I don't know if there's a better method + on QNX, or if it follows XDG specs, etc. */ + char *retval = NULL; + const char *home = __PHYSFS_getUserDir(); + if (home) + { + const size_t len = strlen(home) + strlen(app) + 3; + retval = (char *) allocator.Malloc(len); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + snprintf(retval, len, "%s.%s/", home, app); + } /* if */ + return retval; +} /* __PHYSFS_platformCalcPrefDir */ + + +#if !PHYSFS_NO_CDROM_SUPPORT +#include +#include +#include +#include +#include + +static void checkPathForCD(const char *path, PHYSFS_StringCallback cb, void *d) +{ + struct stat statbuf; + int fd; + + /* The devctl() thing is QNX-specific. In this case, we query what is + probably the mountpoint for the device. statvfs() on that mountpoint + will tell use its filesystem type. */ + + if ( (stat(path, &statbuf) == 0) && + (S_ISBLK(statbuf.st_mode)) && + ((fd = open(path, O_RDONLY | O_NONBLOCK)) != -1) ) + { + char mnt[256] = { 0 }; + const int rc = devctl(fd, DCMD_FSYS_MOUNTED_BY, mnt, sizeof (mnt), 0); + close(fd); + if ( (rc == EOK) && (mnt[0]) ) + { + struct statvfs statvfsbuf; + if (statvfs(mnt, &statvfsbuf) == 0) + { + /* I don't know if this is a complete or accurate list. */ + const char *fstype = statvfsbuf.f_basetype; + const int iscd = ( (strcmp(fstype, "cd") == 0) || + (strcmp(fstype, "udf") == 0) ); + if (iscd) + cb(d, mnt); + } /* if */ + } /* if */ + } /* if */ +} /* checkPathForCD */ + +static void checkDevForCD(const char *dev, PHYSFS_StringCallback cb, void *d) +{ + size_t len; + char *path; + + if (dev[0] == '.') /* ignore "." and ".." */ + { + if ((dev[1] == '\0') || ((dev[1] == '.') && (dev[2] == '\0'))) + return; + } /* if */ + + len = strlen(dev) + 6; + path = (char *) __PHYSFS_smallAlloc(len); + if (!path) + return; /* oh well. */ + + snprintf(path, len, "/dev/%s", dev); + checkPathForCD(path, cb, d); + __PHYSFS_smallFree(path); +} /* checkDevForCD */ +#endif /* !PHYSFS_NO_CDROM_SUPPORT */ + +void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) +{ +#if !PHYSFS_NO_CDROM_SUPPORT + DIR *dirp = opendir("/dev"); + if (dirp) + { + struct dirent *dent; + while ((dent = readdir(dirp)) != NULL) + checkDevForCD(dent->d_name, cb, data); + closedir(dirp); + } /* if */ +#endif +} /* __PHYSFS_platformDetectAvailableCDs */ + +#endif /* PHYSFS_PLATFORM_QNX */ + +/* end of physfs_platform_qnx.c ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/platform_unix.c b/love/src/jni/physfs-3.0.1/src/physfs_platform_unix.c similarity index 85% rename from love/src/jni/physfs-2.1.0/src/platform_unix.c rename to love/src/jni/physfs-3.0.1/src/physfs_platform_unix.c index e11c24bc..10d93a7e 100644 --- a/love/src/jni/physfs-2.1.0/src/platform_unix.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_unix.c @@ -23,12 +23,18 @@ #include #include -#if PHYSFS_PLATFORM_LINUX && !defined(PHYSFS_HAVE_MNTENT_H) -#define PHYSFS_HAVE_MNTENT_H 1 -#elif PHYSFS_PLATFORM_SOLARIS && !defined(PHYSFS_HAVE_SYS_MNTTAB_H) -#define PHYSFS_HAVE_SYS_MNTTAB_H 1 -#elif PHYSFS_PLATFORM_BSD && !defined(PHYSFS_HAVE_SYS_UCRED_H) -#define PHYSFS_HAVE_SYS_UCRED_H 1 +#if PHYSFS_NO_CDROM_SUPPORT +#elif PHYSFS_PLATFORM_LINUX +# define PHYSFS_HAVE_MNTENT_H 1 +#elif defined __CYGWIN__ +# define PHYSFS_HAVE_MNTENT_H 1 +#elif PHYSFS_PLATFORM_SOLARIS +# define PHYSFS_HAVE_SYS_MNTTAB_H 1 +#elif PHYSFS_PLATFORM_BSD +# define PHYSFS_HAVE_SYS_UCRED_H 1 +#else +# warning No CD-ROM support included. Either define your platform here, +# warning or define PHYSFS_NO_CDROM_SUPPORT=1 to confirm this is intentional. #endif #ifdef PHYSFS_HAVE_SYS_UCRED_H @@ -47,6 +53,11 @@ #include #endif +#ifdef PHYSFS_PLATFORM_FREEBSD +#include +#endif + + #include "physfs_internal.h" int __PHYSFS_platformInit(void) @@ -55,13 +66,12 @@ int __PHYSFS_platformInit(void) } /* __PHYSFS_platformInit */ -int __PHYSFS_platformDeinit(void) +void __PHYSFS_platformDeinit(void) { - return 1; /* always succeed. */ + /* no-op */ } /* __PHYSFS_platformDeinit */ -/* Stub version for platforms without CD-ROM support. */ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) { #if (defined PHYSFS_NO_CDROM_SUPPORT) @@ -70,7 +80,7 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) #elif (defined PHYSFS_HAVE_SYS_UCRED_H) int i; struct statfs *mntbufp = NULL; - int mounts = getmntinfo(&mntbufp, MNT_WAIT); + int mounts = getmntinfo(&mntbufp, MNT_NOWAIT); for (i = 0; i < mounts; i++) { @@ -92,7 +102,7 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) struct mntent *ent = NULL; mounts = setmntent("/etc/mtab", "r"); - BAIL_IF_MACRO(mounts == NULL, PHYSFS_ERR_IO, /*return void*/); + BAIL_IF(mounts == NULL, PHYSFS_ERR_IO, /*return void*/); while ( (ent = getmntent(mounts)) != NULL ) { @@ -108,8 +118,6 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) else if (strcmp(ent->mnt_type, "supermount") == 0) add_it = 1; - /* !!! FIXME: udf? automount? */ - /* add other mount types here */ if (add_it) @@ -122,7 +130,7 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) FILE *mounts = fopen(MNTTAB, "r"); struct mnttab ent; - BAIL_IF_MACRO(mounts == NULL, PHYSFS_ERR_IO, /*return void*/); + BAIL_IF(mounts == NULL, PHYSFS_ERR_IO, /*return void*/); while (getmntent(mounts, &ent) == 0) { int add_it = 0; @@ -136,9 +144,6 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) } /* while */ fclose(mounts); - -#else -#error Unknown platform. Should have defined PHYSFS_NO_CDROM_SUPPORT, perhaps. #endif } /* __PHYSFS_platformDetectAvailableCDs */ @@ -173,14 +178,14 @@ static char *findBinaryInPath(const char *bin, char *envr) binlen = strlen(bin); size = strlen(start) + binlen + 2; - if (size > alloc_size) + if (size >= alloc_size) { char *x = (char *) allocator.Realloc(exe, size); if (!x) { if (exe != NULL) allocator.Free(exe); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); } /* if */ alloc_size = size; @@ -247,8 +252,8 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) const char *envr = NULL; /* Try to avoid using argv0 unless forced to. Try system-specific stuff. */ - - #if PHYSFS_PLATFORM_FREEBSD + + #if defined(PHYSFS_PLATFORM_FREEBSD) { char fullpath[PATH_MAX]; size_t buflen = sizeof (fullpath); @@ -256,7 +261,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) if (sysctl(mib, 4, fullpath, &buflen, NULL, 0) != -1) retval = __PHYSFS_strdup(fullpath); } - #elif PHYSFS_PLATFORM_SOLARIS + #elif defined(PHYSFS_PLATFORM_SOLARIS) { const char *path = getexecname(); if ((path != NULL) && (path[0] == '/')) /* must be absolute path... */ @@ -264,14 +269,11 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) } #endif - if (retval) - return retval; /* already got it. */ - /* If there's a Linux-like /proc filesystem, you can get the full path to * the current process from a symlink in there. */ - if (access("/proc", F_OK) == 0) + if (!retval && (access("/proc", F_OK) == 0)) { retval = readSymLink("/proc/self/exe"); if (!retval) retval = readSymLink("/proc/curproc/file"); @@ -311,7 +313,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) if (envr != NULL) { char *path = (char *) __PHYSFS_smallAlloc(strlen(envr) + 1); - BAIL_IF_MACRO(!path, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!path, PHYSFS_ERR_OUT_OF_MEMORY, NULL); strcpy(path, envr); retval = findBinaryInPath(argv0, path); __PHYSFS_smallFree(path); @@ -337,7 +339,7 @@ char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) * This isn't strictly correct, but the results are relatively sane * in any case. * - * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + * https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html */ const char *envr = getenv("XDG_DATA_HOME"); const char *append = "/"; @@ -348,24 +350,18 @@ char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) { /* You end up with "$HOME/.local/share/Game Name 2" */ envr = __PHYSFS_getUserDir(); - BAIL_IF_MACRO(!envr, ERRPASS, NULL); /* oh well. */ + BAIL_IF_ERRPASS(!envr, NULL); /* oh well. */ append = ".local/share/"; } /* if */ len = strlen(envr) + strlen(append) + strlen(app) + 2; retval = (char *) allocator.Malloc(len); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); snprintf(retval, len, "%s%s%s/", envr, append, app); return retval; } /* __PHYSFS_platformCalcPrefDir */ - -int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a) -{ - return 0; /* just use malloc() and friends. */ -} /* __PHYSFS_platformSetDefaultAllocator */ - #endif /* PHYSFS_PLATFORM_UNIX */ -/* end of unix.c ... */ +/* end of physfs_platform_unix.c ... */ diff --git a/love/src/jni/physfs-2.1.0/src/platform_windows.c b/love/src/jni/physfs-3.0.1/src/physfs_platform_windows.c similarity index 62% rename from love/src/jni/physfs-2.1.0/src/platform_windows.c rename to love/src/jni/physfs-3.0.1/src/physfs_platform_windows.c index e1ae2bfa..e777235d 100644 --- a/love/src/jni/physfs-2.1.0/src/platform_windows.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_windows.c @@ -16,19 +16,31 @@ #undef UNICODE #endif +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS 1 +#endif + #define WIN32_LEAN_AND_MEAN 1 #include + +#ifndef PHYSFS_PLATFORM_WINRT #include #include +#endif + +#if !defined(PHYSFS_NO_CDROM_SUPPORT) #include +#endif + #include #include #include -#include "physfs_internal.h" +#ifdef allocator /* apparently Windows 10 SDK conflicts here. */ +#undef allocator +#endif -#define LOWORDER_UINT64(pos) ((PHYSFS_uint32) (pos & 0xFFFFFFFF)) -#define HIGHORDER_UINT64(pos) ((PHYSFS_uint32) ((pos >> 32) & 0xFFFFFFFF)) +#include "physfs_internal.h" /* * Users without the platform SDK don't have this defined. The original docs @@ -41,14 +53,15 @@ #define PHYSFS_INVALID_FILE_ATTRIBUTES 0xFFFFFFFF /* Not defined before the Vista SDK. */ +#define PHYSFS_FILE_ATTRIBUTE_REPARSE_POINT 0x400 #define PHYSFS_IO_REPARSE_TAG_SYMLINK 0xA000000C -#define UTF8_TO_UNICODE_STACK_MACRO(w_assignto, str) { \ +#define UTF8_TO_UNICODE_STACK(w_assignto, str) { \ if (str == NULL) \ w_assignto = NULL; \ else { \ - const PHYSFS_uint64 len = (PHYSFS_uint64) ((strlen(str) + 1) * 2); \ + const size_t len = (PHYSFS_uint64) ((strlen(str) + 1) * 2); \ w_assignto = (WCHAR *) __PHYSFS_smallAlloc(len); \ if (w_assignto != NULL) \ PHYSFS_utf8ToUtf16(str, (PHYSFS_uint16 *) w_assignto, len); \ @@ -72,7 +85,7 @@ static char *unicodeToUtf8Heap(const WCHAR *w_str) void *ptr = NULL; const PHYSFS_uint64 len = (wStrLen(w_str) * 4) + 1; retval = allocator.Malloc(len); - BAIL_IF_MACRO(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL_IF(!retval, PHYSFS_ERR_OUT_OF_MEMORY, NULL); PHYSFS_utf8FromUtf16((const PHYSFS_uint16 *) w_str, retval, len); ptr = allocator.Realloc(retval, strlen(retval) + 1); /* shrink. */ if (ptr != NULL) @@ -81,17 +94,83 @@ static char *unicodeToUtf8Heap(const WCHAR *w_str) return retval; } /* unicodeToUtf8Heap */ -/* !!! FIXME: do we really need readonly? If not, do we need this struct? */ -typedef struct -{ - HANDLE handle; - int readonly; -} WinApiFile; -static HANDLE detectCDThreadHandle = NULL; -static HWND detectCDHwnd = 0; -static volatile int initialDiscDetectionComplete = 0; -static volatile DWORD drivesWithMediaBitmap = 0; +/* Some older APIs aren't in WinRT (only the "Ex" version, etc). + Since non-WinRT might not have the "Ex" version, we tapdance to use + the perfectly-fine-and-available-even-on-Win95 API on non-WinRT targets. */ + +static inline HANDLE winFindFirstFileW(const WCHAR *path, LPWIN32_FIND_DATAW d) +{ + #ifdef PHYSFS_PLATFORM_WINRT + return FindFirstFileExW(path, FindExInfoStandard, d, + FindExSearchNameMatch, NULL, 0); + #else + return FindFirstFileW(path, d); + #endif +} /* winFindFirstFileW */ + +static inline BOOL winInitializeCriticalSection(LPCRITICAL_SECTION lpcs) +{ + #ifdef PHYSFS_PLATFORM_WINRT + return InitializeCriticalSectionEx(lpcs, 2000, 0); + #else + InitializeCriticalSection(lpcs); + return TRUE; + #endif +} /* winInitializeCriticalSection */ + +static inline HANDLE winCreateFileW(const WCHAR *wfname, const DWORD mode, + const DWORD creation) +{ + const DWORD share = FILE_SHARE_READ | FILE_SHARE_WRITE; + #ifdef PHYSFS_PLATFORM_WINRT + return CreateFile2(wfname, mode, share, creation, NULL); + #else + return CreateFileW(wfname, mode, share, NULL, creation, + FILE_ATTRIBUTE_NORMAL, NULL); + #endif +} /* winCreateFileW */ + +static BOOL winSetFilePointer(HANDLE h, const PHYSFS_sint64 pos, + PHYSFS_sint64 *_newpos, const DWORD whence) +{ + #ifdef PHYSFS_PLATFORM_WINRT + LARGE_INTEGER lipos; + LARGE_INTEGER linewpos; + BOOL rc; + lipos.QuadPart = (LONGLONG) pos; + rc = SetFilePointerEx(h, lipos, &linewpos, whence); + if (_newpos) + *_newpos = (PHYSFS_sint64) linewpos.QuadPart; + return rc; + #else + const LONG low = (LONG) (pos & 0xFFFFFFFF); + LONG high = (LONG) ((pos >> 32) & 0xFFFFFFFF); + const DWORD rc = SetFilePointer(h, low, &high, whence); + /* 0xFFFFFFFF could be valid, so you have to check GetLastError too! */ + if (_newpos) + *_newpos = ((PHYSFS_sint64) rc) | (((PHYSFS_sint64) high) << 32); + if ((rc == PHYSFS_INVALID_SET_FILE_POINTER) && (GetLastError() != NO_ERROR)) + return FALSE; + return TRUE; + #endif +} /* winSetFilePointer */ + +static PHYSFS_sint64 winGetFileSize(HANDLE h) +{ + #ifdef PHYSFS_PLATFORM_WINRT + FILE_STANDARD_INFO info; + const BOOL rc = GetFileInformationByHandleEx(h, FileStandardInfo, + &info, sizeof (info)); + return rc ? (PHYSFS_sint64) info.EndOfFile.QuadPart : -1; + #else + DWORD high = 0; + const DWORD rc = GetFileSize(h, &high); + if ((rc == PHYSFS_INVALID_SET_FILE_POINTER) && (GetLastError() != NO_ERROR)) + return -1; + return (PHYSFS_sint64) ((((PHYSFS_uint64) high) << 32) | rc); + #endif +} /* winGetFileSize */ static PHYSFS_ErrorCode errcodeFromWinApiError(const DWORD err) @@ -119,7 +198,6 @@ static PHYSFS_ErrorCode errcodeFromWinApiError(const DWORD err) case ERROR_WRITE_FAULT: return PHYSFS_ERR_IO; case ERROR_READ_FAULT: return PHYSFS_ERR_IO; case ERROR_DEV_NOT_EXIST: return PHYSFS_ERR_IO; - /* !!! FIXME: ?? case ELOOP: return PHYSFS_ERR_SYMLINK_LOOP; */ case ERROR_BUFFER_OVERFLOW: return PHYSFS_ERR_BAD_FILENAME; case ERROR_INVALID_NAME: return PHYSFS_ERR_BAD_FILENAME; case ERROR_BAD_PATHNAME: return PHYSFS_ERR_BAD_FILENAME; @@ -130,8 +208,6 @@ static PHYSFS_ErrorCode errcodeFromWinApiError(const DWORD err) case ERROR_INVALID_DRIVE: return PHYSFS_ERR_NOT_FOUND; case ERROR_HANDLE_DISK_FULL: return PHYSFS_ERR_NO_SPACE; case ERROR_DISK_FULL: return PHYSFS_ERR_NO_SPACE; - /* !!! FIXME: ?? case ENOTDIR: return PHYSFS_ERR_NOT_FOUND; */ - /* !!! FIXME: ?? case EISDIR: return PHYSFS_ERR_NOT_A_FILE; */ case ERROR_WRITE_PROTECT: return PHYSFS_ERR_READ_ONLY; case ERROR_LOCK_VIOLATION: return PHYSFS_ERR_BUSY; case ERROR_SHARING_VIOLATION: return PHYSFS_ERR_BUSY; @@ -152,6 +228,14 @@ static inline PHYSFS_ErrorCode errcodeFromWinApi(void) } /* errcodeFromWinApi */ +#if defined(PHYSFS_NO_CDROM_SUPPORT) +#define detectAvailableCDs(cb, data) +#define deinitCDThread() +#else +static HANDLE detectCDThreadHandle = NULL; +static HWND detectCDHwnd = NULL; +static volatile DWORD drivesWithMediaBitmap = 0; + typedef BOOL (WINAPI *fnSTEM)(DWORD, LPDWORD b); static DWORD pollDiscDrives(void) @@ -223,8 +307,9 @@ static LRESULT CALLBACK detectCDWndProc(HWND hwnd, UINT msg, } /* detectCDWndProc */ -static DWORD WINAPI detectCDThread(LPVOID lpParameter) +static DWORD WINAPI detectCDThread(LPVOID arg) { + HANDLE initialDiscDetectionComplete = *((HANDLE *) arg); const char *classname = "PhysicsFSDetectCDCatcher"; const char *winname = "PhysicsFSDetectCDMsgWindow"; HINSTANCE hInstance = GetModuleHandleW(NULL); @@ -240,7 +325,7 @@ static DWORD WINAPI detectCDThread(LPVOID lpParameter) class_atom = RegisterClassExA(&wce); if (class_atom == 0) { - initialDiscDetectionComplete = 1; /* let main thread go on. */ + SetEvent(initialDiscDetectionComplete); /* let main thread go on. */ return 0; } /* if */ @@ -250,7 +335,7 @@ static DWORD WINAPI detectCDThread(LPVOID lpParameter) if (detectCDHwnd == NULL) { - initialDiscDetectionComplete = 1; /* let main thread go on. */ + SetEvent(initialDiscDetectionComplete); /* let main thread go on. */ UnregisterClassA(classname, hInstance); return 0; } /* if */ @@ -259,7 +344,8 @@ static DWORD WINAPI detectCDThread(LPVOID lpParameter) /* Do initial detection, possibly blocking awhile... */ drivesWithMediaBitmap = pollDiscDrives(); - initialDiscDetectionComplete = 1; /* let main thread go on. */ + + SetEvent(initialDiscDetectionComplete); /* let main thread go on. */ do { @@ -272,23 +358,11 @@ static DWORD WINAPI detectCDThread(LPVOID lpParameter) /* we've been asked to quit. */ DestroyWindow(detectCDHwnd); - - do - { - const BOOL rc = GetMessage(&msg, detectCDHwnd, 0, 0); - if ((rc == 0) || (rc == -1)) - break; - TranslateMessage(&msg); - DispatchMessageW(&msg); - } while (1); - UnregisterClassA(classname, hInstance); - return 0; } /* detectCDThread */ - -void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) +static void detectAvailableCDs(PHYSFS_StringCallback cb, void *data) { char drive_str[4] = { 'x', ':', '\\', '\0' }; DWORD drives = 0; @@ -303,13 +377,18 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) */ if (!detectCDThreadHandle) { - initialDiscDetectionComplete = 0; - detectCDThreadHandle = CreateThread(NULL,0,detectCDThread,NULL,0,NULL); - if (detectCDThreadHandle == NULL) + HANDLE initialDetectDone = CreateEvent(NULL, TRUE, FALSE, NULL); + if (!initialDetectDone) return; /* oh well. */ - while (!initialDiscDetectionComplete) - Sleep(50); + detectCDThreadHandle = CreateThread(NULL, 0, detectCDThread, + &initialDetectDone, 0, NULL); + if (detectCDThreadHandle) + WaitForSingleObject(initialDetectDone, INFINITE); + CloseHandle(initialDetectDone); + + if (!detectCDThreadHandle) + return; /* oh well. */ } /* if */ drives = drivesWithMediaBitmap; /* whatever the thread has seen, we take. */ @@ -321,14 +400,58 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) cb(data, drive_str); } /* if */ } /* for */ +} /* detectAvailableCDs */ + +static void deinitCDThread(void) +{ + if (detectCDThreadHandle) + { + if (detectCDHwnd) + PostMessageW(detectCDHwnd, WM_QUIT, 0, 0); + CloseHandle(detectCDThreadHandle); + detectCDThreadHandle = NULL; + drivesWithMediaBitmap = 0; + } /* if */ +} /* deinitCDThread */ +#endif + + +void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) +{ + detectAvailableCDs(cb, data); } /* __PHYSFS_platformDetectAvailableCDs */ +#ifdef PHYSFS_PLATFORM_WINRT +static char *calcDirAppendSep(const WCHAR *wdir) +{ + size_t len; + void *ptr; + char *retval; + BAIL_IF(!wdir, errcodeFromWinApi(), NULL); + retval = unicodeToUtf8Heap(wdir); + BAIL_IF_ERRPASS(!retval, NULL); + len = strlen(retval); + ptr = allocator.Realloc(retval, len + 2); + if (!ptr) + { + allocator.Free(retval); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + } /* if */ + retval = (char *) ptr; + retval[len] = '\\'; + retval[len+1] = '\0'; + return retval; +} /* calcDirAppendSep */ +#endif char *__PHYSFS_platformCalcBaseDir(const char *argv0) { +#ifdef PHYSFS_PLATFORM_WINRT + return calcDirAppendSep((const WCHAR *) __PHYSFS_winrtCalcBaseDir()); +#else + char *retval = NULL; DWORD buflen = 64; LPWSTR modpath = NULL; - char *retval = NULL; while (1) { @@ -338,7 +461,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) if ( (ptr = allocator.Realloc(modpath, buflen*sizeof(WCHAR))) == NULL ) { allocator.Free(modpath); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); } /* if */ modpath = (LPWSTR) ptr; @@ -346,7 +469,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) if (rc == 0) { allocator.Free(modpath); - BAIL_MACRO(errcodeFromWinApi(), NULL); + BAIL(errcodeFromWinApi(), NULL); } /* if */ if (rc < buflen) @@ -379,11 +502,15 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) allocator.Free(modpath); return retval; /* w00t. */ +#endif } /* __PHYSFS_platformCalcBaseDir */ char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) { +#ifdef PHYSFS_PLATFORM_WINRT + return calcDirAppendSep((const WCHAR *) __PHYSFS_winrtCalcPrefDir()); +#else /* * Vista and later has a new API for this, but SHGetFolderPath works there, * and apparently just wraps the new API. This is the new way to do it: @@ -399,26 +526,30 @@ char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app) if (!SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, path))) - BAIL_MACRO(PHYSFS_ERR_OS_ERROR, NULL); + BAIL(PHYSFS_ERR_OS_ERROR, NULL); utf8 = unicodeToUtf8Heap(path); - BAIL_IF_MACRO(!utf8, ERRPASS, NULL); + BAIL_IF_ERRPASS(!utf8, NULL); len = strlen(utf8) + strlen(org) + strlen(app) + 4; retval = allocator.Malloc(len); if (!retval) { allocator.Free(utf8); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); + BAIL(PHYSFS_ERR_OUT_OF_MEMORY, NULL); } /* if */ - sprintf(retval, "%s\\%s\\%s\\", utf8, org, app); + snprintf(retval, len, "%s\\%s\\%s\\", utf8, org, app); allocator.Free(utf8); return retval; +#endif } /* __PHYSFS_platformCalcPrefDir */ char *__PHYSFS_platformCalcUserDir(void) { +#ifdef PHYSFS_PLATFORM_WINRT + return calcDirAppendSep((const WCHAR *) __PHYSFS_winrtCalcPrefDir()); +#else typedef BOOL (WINAPI *fnGetUserProfDirW)(HANDLE, LPWSTR, LPDWORD); fnGetUserProfDirW pGetDir = NULL; HANDLE lib = NULL; @@ -426,12 +557,12 @@ char *__PHYSFS_platformCalcUserDir(void) char *retval = NULL; lib = LoadLibraryA("userenv.dll"); - BAIL_IF_MACRO(!lib, errcodeFromWinApi(), NULL); + BAIL_IF(!lib, errcodeFromWinApi(), NULL); pGetDir=(fnGetUserProfDirW) GetProcAddress(lib,"GetUserProfileDirectoryW"); - GOTO_IF_MACRO(!pGetDir, errcodeFromWinApi(), done); + GOTO_IF(!pGetDir, errcodeFromWinApi(), done); if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &accessToken)) - GOTO_MACRO(errcodeFromWinApi(), done); + GOTO(errcodeFromWinApi(), done); else { DWORD psize = 0; @@ -444,9 +575,8 @@ char *__PHYSFS_platformCalcUserDir(void) * psize. Also note that the second parameter can't be * NULL or the function fails. */ - rc = pGetDir(accessToken, &dummy, &psize); - assert(!rc); /* !!! FIXME: handle this gracefully. */ - (void) rc; + rc = pGetDir(accessToken, &dummy, &psize); + GOTO_IF(rc, PHYSFS_ERR_OS_ERROR, done); /* should have failed! */ /* Allocate memory for the profile directory */ wstr = (LPWSTR) __PHYSFS_smallAlloc((psize + 1) * sizeof (WCHAR)); @@ -464,34 +594,40 @@ char *__PHYSFS_platformCalcUserDir(void) } /* if */ __PHYSFS_smallFree(wstr); } /* if */ - - CloseHandle(accessToken); } /* if */ done: + if (accessToken) + CloseHandle(accessToken); FreeLibrary(lib); return retval; /* We made it: hit the showers. */ +#endif } /* __PHYSFS_platformCalcUserDir */ +int __PHYSFS_platformInit(void) +{ + return 1; /* It's all good */ +} /* __PHYSFS_platformInit */ + + +void __PHYSFS_platformDeinit(void) +{ + deinitCDThread(); +} /* __PHYSFS_platformDeinit */ + + void *__PHYSFS_platformGetThreadID(void) { return ( (void *) ((size_t) GetCurrentThreadId()) ); } /* __PHYSFS_platformGetThreadID */ -static int isSymlinkAttrs(const DWORD attr, const DWORD tag) -{ - return ( (attr & FILE_ATTRIBUTE_REPARSE_POINT) && - (tag == PHYSFS_IO_REPARSE_TAG_SYMLINK) ); -} /* isSymlinkAttrs */ - - -void __PHYSFS_platformEnumerateFiles(const char *dirname, - PHYSFS_EnumFilesCallback callback, - const char *origdir, - void *callbackdata) +PHYSFS_EnumerateCallbackResult __PHYSFS_platformEnumerate(const char *dirname, + PHYSFS_EnumerateCallback callback, + const char *origdir, void *callbackdata) { + PHYSFS_EnumerateCallbackResult retval = PHYSFS_ENUM_OK; HANDLE dir = INVALID_HANDLE_VALUE; WIN32_FIND_DATAW entw; size_t len = strlen(dirname); @@ -500,8 +636,7 @@ void __PHYSFS_platformEnumerateFiles(const char *dirname, /* Allocate a new string for path, maybe '\\', "*", and NULL terminator */ searchPath = (char *) __PHYSFS_smallAlloc(len + 3); - if (searchPath == NULL) - return; + BAIL_IF(!searchPath, PHYSFS_ERR_OUT_OF_MEMORY, PHYSFS_ENUM_ERROR); /* Copy current dirname */ strcpy(searchPath, dirname); @@ -516,148 +651,117 @@ void __PHYSFS_platformEnumerateFiles(const char *dirname, /* Append the "*" to the end of the string */ strcat(searchPath, "*"); - UTF8_TO_UNICODE_STACK_MACRO(wSearchPath, searchPath); - if (!wSearchPath) - return; /* oh well. */ - - dir = FindFirstFileW(wSearchPath, &entw); - - __PHYSFS_smallFree(wSearchPath); + UTF8_TO_UNICODE_STACK(wSearchPath, searchPath); __PHYSFS_smallFree(searchPath); - if (dir == INVALID_HANDLE_VALUE) - return; + BAIL_IF_ERRPASS(!wSearchPath, PHYSFS_ENUM_ERROR); + + dir = winFindFirstFileW(wSearchPath, &entw); + __PHYSFS_smallFree(wSearchPath); + BAIL_IF(dir==INVALID_HANDLE_VALUE, errcodeFromWinApi(), PHYSFS_ENUM_ERROR); do { - const DWORD attr = entw.dwFileAttributes; - const DWORD tag = entw.dwReserved0; const WCHAR *fn = entw.cFileName; char *utf8; - if ((fn[0] == '.') && (fn[1] == '\0')) - continue; - if ((fn[0] == '.') && (fn[1] == '.') && (fn[2] == '\0')) - continue; + if (fn[0] == '.') /* ignore "." and ".." */ + { + if ((fn[1] == '\0') || ((fn[1] == '.') && (fn[2] == '\0'))) + continue; + } /* if */ utf8 = unicodeToUtf8Heap(fn); - if (utf8 != NULL) + if (utf8 == NULL) + retval = -1; + else { - callback(callbackdata, origdir, utf8); + retval = callback(callbackdata, origdir, utf8); allocator.Free(utf8); - } /* if */ - } while (FindNextFileW(dir, &entw) != 0); + if (retval == PHYSFS_ENUM_ERROR) + PHYSFS_setErrorCode(PHYSFS_ERR_APP_CALLBACK); + } /* else */ + } while ((retval == PHYSFS_ENUM_OK) && (FindNextFileW(dir, &entw) != 0)); FindClose(dir); -} /* __PHYSFS_platformEnumerateFiles */ + + return retval; +} /* __PHYSFS_platformEnumerate */ int __PHYSFS_platformMkDir(const char *path) { WCHAR *wpath; DWORD rc; - UTF8_TO_UNICODE_STACK_MACRO(wpath, path); + UTF8_TO_UNICODE_STACK(wpath, path); rc = CreateDirectoryW(wpath, NULL); __PHYSFS_smallFree(wpath); - BAIL_IF_MACRO(rc == 0, errcodeFromWinApi(), 0); + BAIL_IF(rc == 0, errcodeFromWinApi(), 0); return 1; } /* __PHYSFS_platformMkDir */ -int __PHYSFS_platformInit(void) -{ - return 1; /* It's all good */ -} /* __PHYSFS_platformInit */ - - -int __PHYSFS_platformDeinit(void) -{ - if (detectCDThreadHandle) - { - if (detectCDHwnd) - PostMessageW(detectCDHwnd, WM_QUIT, 0, 0); - CloseHandle(detectCDThreadHandle); - detectCDThreadHandle = NULL; - initialDiscDetectionComplete = 0; - drivesWithMediaBitmap = 0; - } /* if */ - - return 1; /* It's all good */ -} /* __PHYSFS_platformDeinit */ - - -static void *doOpen(const char *fname, DWORD mode, DWORD creation, int rdonly) +static HANDLE doOpen(const char *fname, DWORD mode, DWORD creation) { HANDLE fileh; - WinApiFile *retval; WCHAR *wfname; - UTF8_TO_UNICODE_STACK_MACRO(wfname, fname); - BAIL_IF_MACRO(!wfname, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - fileh = CreateFileW(wfname, mode, FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, creation, FILE_ATTRIBUTE_NORMAL, NULL); + UTF8_TO_UNICODE_STACK(wfname, fname); + BAIL_IF(!wfname, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + fileh = winCreateFileW(wfname, mode, creation); __PHYSFS_smallFree(wfname); - BAIL_IF_MACRO(fileh == INVALID_HANDLE_VALUE,errcodeFromWinApi(), NULL); + if (fileh == INVALID_HANDLE_VALUE) + BAIL(errcodeFromWinApi(), INVALID_HANDLE_VALUE); - retval = (WinApiFile *) allocator.Malloc(sizeof (WinApiFile)); - if (!retval) - { - CloseHandle(fileh); - BAIL_MACRO(PHYSFS_ERR_OUT_OF_MEMORY, NULL); - } /* if */ - - retval->readonly = rdonly; - retval->handle = fileh; - return retval; + return fileh; } /* doOpen */ void *__PHYSFS_platformOpenRead(const char *filename) { - return doOpen(filename, GENERIC_READ, OPEN_EXISTING, 1); + HANDLE h = doOpen(filename, GENERIC_READ, OPEN_EXISTING); + return (h == INVALID_HANDLE_VALUE) ? NULL : (void *) h; } /* __PHYSFS_platformOpenRead */ void *__PHYSFS_platformOpenWrite(const char *filename) { - return doOpen(filename, GENERIC_WRITE, CREATE_ALWAYS, 0); + HANDLE h = doOpen(filename, GENERIC_WRITE, CREATE_ALWAYS); + return (h == INVALID_HANDLE_VALUE) ? NULL : (void *) h; } /* __PHYSFS_platformOpenWrite */ void *__PHYSFS_platformOpenAppend(const char *filename) { - void *retval = doOpen(filename, GENERIC_WRITE, OPEN_ALWAYS, 0); - if (retval != NULL) + HANDLE h = doOpen(filename, GENERIC_WRITE, OPEN_ALWAYS); + BAIL_IF_ERRPASS(h == INVALID_HANDLE_VALUE, NULL); + + if (!winSetFilePointer(h, 0, NULL, FILE_END)) { - HANDLE h = ((WinApiFile *) retval)->handle; - DWORD rc = SetFilePointer(h, 0, NULL, FILE_END); - if (rc == PHYSFS_INVALID_SET_FILE_POINTER) - { - const PHYSFS_ErrorCode err = errcodeFromWinApi(); - CloseHandle(h); - allocator.Free(retval); - BAIL_MACRO(err, NULL); - } /* if */ + const PHYSFS_ErrorCode err = errcodeFromWinApi(); + CloseHandle(h); + BAIL(err, NULL); } /* if */ - return retval; + return (void *) h; } /* __PHYSFS_platformOpenAppend */ PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buf, PHYSFS_uint64 len) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; + HANDLE h = (HANDLE) opaque; PHYSFS_sint64 totalRead = 0; if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); while (len > 0) { const DWORD thislen = (len > 0xFFFFFFFF) ? 0xFFFFFFFF : (DWORD) len; DWORD numRead = 0; - if (!ReadFile(Handle, buf, thislen, &numRead, NULL)) - BAIL_MACRO(errcodeFromWinApi(), -1); + if (!ReadFile(h, buf, thislen, &numRead, NULL)) + BAIL(errcodeFromWinApi(), -1); len -= (PHYSFS_uint64) numRead; totalRead += (PHYSFS_sint64) numRead; if (numRead != thislen) @@ -671,18 +775,18 @@ PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buf, PHYSFS_uint64 len) PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer, PHYSFS_uint64 len) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; + HANDLE h = (HANDLE) opaque; PHYSFS_sint64 totalWritten = 0; if (!__PHYSFS_ui64FitsAddressSpace(len)) - BAIL_MACRO(PHYSFS_ERR_INVALID_ARGUMENT, -1); + BAIL(PHYSFS_ERR_INVALID_ARGUMENT, -1); while (len > 0) { const DWORD thislen = (len > 0xFFFFFFFF) ? 0xFFFFFFFF : (DWORD) len; DWORD numWritten = 0; - if (!WriteFile(Handle, buffer, thislen, &numWritten, NULL)) - BAIL_MACRO(errcodeFromWinApi(), -1); + if (!WriteFile(h, buffer, thislen, &numWritten, NULL)) + BAIL(errcodeFromWinApi(), -1); len -= (PHYSFS_uint64) numWritten; totalWritten += (PHYSFS_sint64) numWritten; if (numWritten != thislen) @@ -695,106 +799,57 @@ PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer, int __PHYSFS_platformSeek(void *opaque, PHYSFS_uint64 pos) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; - LONG HighOrderPos; - PLONG pHighOrderPos; - DWORD rc; - - /* Get the high order 32-bits of the position */ - HighOrderPos = HIGHORDER_UINT64(pos); - - /* - * MSDN: "If you do not need the high-order 32 bits, this - * pointer must be set to NULL." - */ - pHighOrderPos = (HighOrderPos) ? &HighOrderPos : NULL; - - /* Move pointer "pos" count from start of file */ - rc = SetFilePointer(Handle, LOWORDER_UINT64(pos), - pHighOrderPos, FILE_BEGIN); - - if ( (rc == PHYSFS_INVALID_SET_FILE_POINTER) && - (GetLastError() != NO_ERROR) ) - { - BAIL_MACRO(errcodeFromWinApi(), 0); - } /* if */ - + HANDLE h = (HANDLE) opaque; + const PHYSFS_sint64 spos = (PHYSFS_sint64) pos; + BAIL_IF(!winSetFilePointer(h,spos,NULL,FILE_BEGIN), errcodeFromWinApi(), 0); return 1; /* No error occured */ } /* __PHYSFS_platformSeek */ PHYSFS_sint64 __PHYSFS_platformTell(void *opaque) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; - LONG HighPos = 0; - DWORD LowPos; - PHYSFS_sint64 retval; - - /* Get current position */ - LowPos = SetFilePointer(Handle, 0, &HighPos, FILE_CURRENT); - if ( (LowPos == PHYSFS_INVALID_SET_FILE_POINTER) && - (GetLastError() != NO_ERROR) ) - { - BAIL_MACRO(errcodeFromWinApi(), -1); - } /* if */ - else - { - /* Combine the high/low order to create the 64-bit position value */ - retval = (((PHYSFS_uint64) HighPos) << 32) | LowPos; - assert(retval >= 0); - } /* else */ - - return retval; + HANDLE h = (HANDLE) opaque; + PHYSFS_sint64 pos = 0; + BAIL_IF(!winSetFilePointer(h,0,&pos,FILE_CURRENT), errcodeFromWinApi(), -1); + return pos; } /* __PHYSFS_platformTell */ PHYSFS_sint64 __PHYSFS_platformFileLength(void *opaque) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; - DWORD SizeHigh; - DWORD SizeLow; - PHYSFS_sint64 retval; - - SizeLow = GetFileSize(Handle, &SizeHigh); - if ( (SizeLow == PHYSFS_INVALID_SET_FILE_POINTER) && - (GetLastError() != NO_ERROR) ) - { - BAIL_MACRO(errcodeFromWinApi(), -1); - } /* if */ - else - { - /* Combine the high/low order to create the 64-bit position value */ - retval = (((PHYSFS_uint64) SizeHigh) << 32) | SizeLow; - assert(retval >= 0); - } /* else */ - + HANDLE h = (HANDLE) opaque; + const PHYSFS_sint64 retval = winGetFileSize(h); + BAIL_IF(retval < 0, errcodeFromWinApi(), -1); return retval; } /* __PHYSFS_platformFileLength */ int __PHYSFS_platformFlush(void *opaque) { - WinApiFile *fh = ((WinApiFile *) opaque); - if (!fh->readonly) - BAIL_IF_MACRO(!FlushFileBuffers(fh->handle), errcodeFromWinApi(), 0); - + HANDLE h = (HANDLE) opaque; + BAIL_IF(!FlushFileBuffers(h), errcodeFromWinApi(), 0); return 1; } /* __PHYSFS_platformFlush */ void __PHYSFS_platformClose(void *opaque) { - HANDLE Handle = ((WinApiFile *) opaque)->handle; - (void) CloseHandle(Handle); /* ignore errors. You should have flushed! */ - allocator.Free(opaque); + HANDLE h = (HANDLE) opaque; + (void) CloseHandle(h); /* ignore errors. You should have flushed! */ } /* __PHYSFS_platformClose */ static int doPlatformDelete(LPWSTR wpath) { - const int isdir = (GetFileAttributesW(wpath) & FILE_ATTRIBUTE_DIRECTORY); - const BOOL rc = (isdir) ? RemoveDirectoryW(wpath) : DeleteFileW(wpath); - BAIL_IF_MACRO(!rc, errcodeFromWinApi(), 0); + WIN32_FILE_ATTRIBUTE_DATA info; + if (!GetFileAttributesExW(wpath, GetFileExInfoStandard, &info)) + BAIL(errcodeFromWinApi(), 0); + else + { + const int isdir = (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY); + const BOOL rc = isdir ? RemoveDirectoryW(wpath) : DeleteFileW(wpath); + BAIL_IF(!rc, errcodeFromWinApi(), 0); + } /* else */ return 1; /* if you made it here, it worked. */ } /* doPlatformDelete */ @@ -803,8 +858,8 @@ int __PHYSFS_platformDelete(const char *path) { int retval = 0; LPWSTR wpath = NULL; - UTF8_TO_UNICODE_STACK_MACRO(wpath, path); - BAIL_IF_MACRO(!wpath, PHYSFS_ERR_OUT_OF_MEMORY, 0); + UTF8_TO_UNICODE_STACK(wpath, path); + BAIL_IF(!wpath, PHYSFS_ERR_OUT_OF_MEMORY, 0); retval = doPlatformDelete(wpath); __PHYSFS_smallFree(wpath); return retval; @@ -815,8 +870,14 @@ void *__PHYSFS_platformCreateMutex(void) { LPCRITICAL_SECTION lpcs; lpcs = (LPCRITICAL_SECTION) allocator.Malloc(sizeof (CRITICAL_SECTION)); - BAIL_IF_MACRO(!lpcs, PHYSFS_ERR_OUT_OF_MEMORY, NULL); - InitializeCriticalSection(lpcs); + BAIL_IF(!lpcs, PHYSFS_ERR_OUT_OF_MEMORY, NULL); + + if (!winInitializeCriticalSection(lpcs)) + { + allocator.Free(lpcs); + BAIL(errcodeFromWinApi(), NULL); + } /* if */ + return lpcs; } /* __PHYSFS_platformCreateMutex */ @@ -851,11 +912,11 @@ static PHYSFS_sint64 FileTimeToPhysfsTime(const FILETIME *ft) struct tm tm; BOOL rc; - BAIL_IF_MACRO(!FileTimeToSystemTime(ft, &st_utc), errcodeFromWinApi(), -1); + BAIL_IF(!FileTimeToSystemTime(ft, &st_utc), errcodeFromWinApi(), -1); tzid = GetTimeZoneInformation(&tzi); - BAIL_IF_MACRO(tzid == TIME_ZONE_ID_INVALID, errcodeFromWinApi(), -1); + BAIL_IF(tzid == TIME_ZONE_ID_INVALID, errcodeFromWinApi(), -1); rc = SystemTimeToTzSpecificLocalTime(&tzi, &st_utc, &st_localtz); - BAIL_IF_MACRO(!rc, errcodeFromWinApi(), -1); + BAIL_IF(!rc, errcodeFromWinApi(), -1); /* Convert to a format that mktime() can grok... */ tm.tm_sec = st_localtz.wSecond; @@ -870,44 +931,76 @@ static PHYSFS_sint64 FileTimeToPhysfsTime(const FILETIME *ft) /* Convert to a format PhysicsFS can grok... */ retval = (PHYSFS_sint64) mktime(&tm); - BAIL_IF_MACRO(retval == -1, PHYSFS_ERR_OS_ERROR, -1); + BAIL_IF(retval == -1, PHYSFS_ERR_OS_ERROR, -1); return retval; } /* FileTimeToPhysfsTime */ -int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *st) +/* check for symlinks. These exist in NTFS 3.1 (WinXP), even though + they aren't really available to userspace before Vista. I wonder + what would happen if you put an NTFS disk with a symlink on it + into an XP machine, though; would this flag get set? + NTFS symlinks are a form of "reparse point" (junction, volume mount, + etc), so if the REPARSE_POINT attribute is set, check for the symlink + tag thereafter. This assumes you already read in the file attributes. */ +static int isSymlink(const WCHAR *wpath, const DWORD attr) +{ + WIN32_FIND_DATAW w32dw; + HANDLE h; + + if ((attr & PHYSFS_FILE_ATTRIBUTE_REPARSE_POINT) == 0) + return 0; /* not a reparse point? Definitely not a symlink. */ + + h = winFindFirstFileW(wpath, &w32dw); + if (h == INVALID_HANDLE_VALUE) + return 0; /* ...maybe the file just vanished...? */ + + FindClose(h); + return (w32dw.dwReserved0 == PHYSFS_IO_REPARSE_TAG_SYMLINK); +} /* isSymlink */ + + +int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *st, const int follow) { WIN32_FILE_ATTRIBUTE_DATA winstat; WCHAR *wstr = NULL; DWORD err = 0; BOOL rc = 0; + int issymlink = 0; - UTF8_TO_UNICODE_STACK_MACRO(wstr, filename); - BAIL_IF_MACRO(!wstr, PHYSFS_ERR_OUT_OF_MEMORY, 0); + UTF8_TO_UNICODE_STACK(wstr, filename); + BAIL_IF(!wstr, PHYSFS_ERR_OUT_OF_MEMORY, 0); rc = GetFileAttributesExW(wstr, GetFileExInfoStandard, &winstat); - err = (!rc) ? GetLastError() : 0; + + if (!rc) + err = GetLastError(); + else /* check for symlink while wstr is still available */ + issymlink = !follow && isSymlink(wstr, winstat.dwFileAttributes); + __PHYSFS_smallFree(wstr); - BAIL_IF_MACRO(!rc, errcodeFromWinApiError(err), 0); + BAIL_IF(!rc, errcodeFromWinApiError(err), 0); st->modtime = FileTimeToPhysfsTime(&winstat.ftLastWriteTime); st->accesstime = FileTimeToPhysfsTime(&winstat.ftLastAccessTime); st->createtime = FileTimeToPhysfsTime(&winstat.ftCreationTime); - if(winstat.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + if (issymlink) { - st->filetype = PHYSFS_FILETYPE_DIRECTORY; + st->filetype = PHYSFS_FILETYPE_SYMLINK; st->filesize = 0; } /* if */ - else if(winstat.dwFileAttributes & (FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_DEVICE)) + else if (winstat.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - /* !!! FIXME: what are reparse points? */ - st->filetype = PHYSFS_FILETYPE_OTHER; - /* !!! FIXME: don't rely on this */ + st->filetype = PHYSFS_FILETYPE_DIRECTORY; st->filesize = 0; } /* else if */ - /* !!! FIXME: check for symlinks on Vista. */ + else if (winstat.dwFileAttributes & (FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_DEVICE)) + { + st->filetype = PHYSFS_FILETYPE_OTHER; + st->filesize = (((PHYSFS_uint64) winstat.nFileSizeHigh) << 32) | winstat.nFileSizeLow; + } /* else if */ else { @@ -920,15 +1013,8 @@ int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *st) return 1; } /* __PHYSFS_platformStat */ - -/* !!! FIXME: Don't use C runtime for allocators? */ -int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a) -{ - return 0; /* just use malloc() and friends. */ -} /* __PHYSFS_platformSetDefaultAllocator */ - #endif /* PHYSFS_PLATFORM_WINDOWS */ -/* end of windows.c ... */ +/* end of physfs_platform_windows.c ... */ diff --git a/love/src/jni/physfs-3.0.1/src/physfs_platform_winrt.cpp b/love/src/jni/physfs-3.0.1/src/physfs_platform_winrt.cpp new file mode 100644 index 00000000..f50fc9d3 --- /dev/null +++ b/love/src/jni/physfs-3.0.1/src/physfs_platform_winrt.cpp @@ -0,0 +1,41 @@ +/* + * Windows Runtime (WinRT) support routines for PhysicsFS. + * + * Please see the file LICENSE.txt in the source's root directory. + * + * This file originally written by Martin "T-Bone" Ahrnbom, but was mostly + * merged into physfs_platform_windows.c by Ryan C. Gordon (so please harass + * Ryan about bugs and not Martin). + */ + +/* (There used to be instructions on how to make a WinRT project, but at + this point, either CMake will do it for you or you should just drop + PhysicsFS's sources into your existing project. --ryan.) */ + +#define __PHYSICSFS_INTERNAL__ +#include "physfs_platforms.h" + +#ifdef PHYSFS_PLATFORM_WINRT + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS 1 +#endif +#include + +#include "physfs_internal.h" + +const void *__PHYSFS_winrtCalcBaseDir(void) +{ + return Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data(); +} /* __PHYSFS_winrtCalcBaseDir */ + +const void *__PHYSFS_winrtCalcPrefDir(void) +{ + return Windows::Storage::ApplicationData::Current->LocalFolder->Path->Data(); +} /* __PHYSFS_winrtCalcBaseDir */ + + +#endif /* PHYSFS_PLATFORM_WINRT */ + +/* end of physfs_platform_winrt.cpp ... */ + diff --git a/love/src/jni/physfs-2.1.0/src/physfs_platforms.h b/love/src/jni/physfs-3.0.1/src/physfs_platforms.h similarity index 67% rename from love/src/jni/physfs-2.1.0/src/physfs_platforms.h rename to love/src/jni/physfs-3.0.1/src/physfs_platforms.h index bc78e0bb..d4e4bfdc 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs_platforms.h +++ b/love/src/jni/physfs-3.0.1/src/physfs_platforms.h @@ -14,24 +14,29 @@ #if (defined __HAIKU__) # define PHYSFS_PLATFORM_HAIKU 1 -# define PHYSFS_PLATFORM_BEOS 1 # define PHYSFS_PLATFORM_POSIX 1 #elif ((defined __BEOS__) || (defined __beos__)) -# define PHYSFS_PLATFORM_BEOS 1 -# define PHYSFS_PLATFORM_POSIX 1 +# error BeOS support was dropped since PhysicsFS 2.1. Sorry. Try Haiku! #elif (defined _WIN32_WCE) || (defined _WIN64_WCE) -# error PocketPC support was dropped from PhysicsFS 2.1. Sorry. +# error PocketPC support was dropped since PhysicsFS 2.1. Sorry. Try WinRT! +#elif (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ +# include +# define PHYSFS_PLATFORM_WINDOWS 1 +# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +# define PHYSFS_NO_CDROM_SUPPORT 1 +# define PHYSFS_PLATFORM_WINRT 1 +# endif #elif (((defined _WIN32) || (defined _WIN64)) && (!defined __CYGWIN__)) # define PHYSFS_PLATFORM_WINDOWS 1 -#elif (defined OS2) -# error OS/2 support was dropped from PhysicsFS 2.1. Sorry. +#elif defined(__OS2__) || defined(OS2) +# define PHYSFS_PLATFORM_OS2 1 #elif ((defined __MACH__) && (defined __APPLE__)) -/* To check if iphone or not, we need to include this file */ +/* To check if iOS or not, we need to include this file */ # include # if ((TARGET_IPHONE_SIMULATOR) || (TARGET_OS_IPHONE)) # define PHYSFS_NO_CDROM_SUPPORT 1 # endif -# define PHYSFS_PLATFORM_MACOSX 1 +# define PHYSFS_PLATFORM_APPLE 1 # define PHYSFS_PLATFORM_POSIX 1 #elif defined(macintosh) # error Classic Mac OS support was dropped from PhysicsFS 2.0. Move to OS X. @@ -48,7 +53,7 @@ # define PHYSFS_PLATFORM_SOLARIS 1 # define PHYSFS_PLATFORM_UNIX 1 # define PHYSFS_PLATFORM_POSIX 1 -#elif defined(__FreeBSD__) || defined(__DragonFly__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) # define PHYSFS_PLATFORM_FREEBSD 1 # define PHYSFS_PLATFORM_BSD 1 # define PHYSFS_PLATFORM_UNIX 1 @@ -57,6 +62,13 @@ # define PHYSFS_PLATFORM_BSD 1 # define PHYSFS_PLATFORM_UNIX 1 # define PHYSFS_PLATFORM_POSIX 1 +#elif defined(__EMSCRIPTEN__) +# define PHYSFS_NO_CDROM_SUPPORT 1 +# define PHYSFS_PLATFORM_UNIX 1 +# define PHYSFS_PLATFORM_POSIX 1 +#elif defined(__QNX__) +# define PHYSFS_PLATFORM_QNX 1 +# define PHYSFS_PLATFORM_POSIX 1 #elif defined(unix) || defined(__unix__) # define PHYSFS_PLATFORM_UNIX 1 # define PHYSFS_PLATFORM_POSIX 1 diff --git a/love/src/jni/physfs-2.1.0/src/physfs_unicode.c b/love/src/jni/physfs-3.0.1/src/physfs_unicode.c similarity index 71% rename from love/src/jni/physfs-2.1.0/src/physfs_unicode.c rename to love/src/jni/physfs-3.0.1/src/physfs_unicode.c index 64cff474..0e006022 100644 --- a/love/src/jni/physfs-2.1.0/src/physfs_unicode.c +++ b/love/src/jni/physfs-3.0.1/src/physfs_unicode.c @@ -1,10 +1,12 @@ #define __PHYSICSFS_INTERNAL__ #include "physfs_internal.h" +#include "physfs_casefolding.h" + /* * From rfc3629, the UTF-8 spec: - * http://www.ietf.org/rfc/rfc3629.txt + * https://www.ietf.org/rfc/rfc3629.txt * * Char. number range | UTF-8 octet sequence * (hexadecimal) | (binary) @@ -188,6 +190,48 @@ static PHYSFS_uint32 utf8codepoint(const char **_str) return UNICODE_BOGUS_CHAR_VALUE; } /* utf8codepoint */ +static PHYSFS_uint32 utf16codepoint(const PHYSFS_uint16 **_str) +{ + const PHYSFS_uint16 *src = *_str; + PHYSFS_uint32 cp = (PHYSFS_uint32) *(src++); + + if (cp == 0) /* null terminator, end of string. */ + return 0; + /* Orphaned second half of surrogate pair? */ + else if ((cp >= 0xDC00) && (cp <= 0xDFFF)) + cp = UNICODE_BOGUS_CHAR_CODEPOINT; + else if ((cp >= 0xD800) && (cp <= 0xDBFF)) /* start surrogate pair! */ + { + const PHYSFS_uint32 pair = (PHYSFS_uint32) *src; + if (pair == 0) + cp = UNICODE_BOGUS_CHAR_CODEPOINT; + else if ((pair < 0xDC00) || (pair > 0xDFFF)) + cp = UNICODE_BOGUS_CHAR_CODEPOINT; + else + { + src++; /* eat the other surrogate. */ + cp = (((cp - 0xD800) << 10) | (pair - 0xDC00)); + } /* else */ + } /* else if */ + + *_str = src; + return cp; +} /* utf16codepoint */ + +static PHYSFS_uint32 utf32codepoint(const PHYSFS_uint32 **_str) +{ + const PHYSFS_uint32 *src = *_str; + PHYSFS_uint32 cp = *(src++); + + if (cp == 0) /* null terminator, end of string. */ + return 0; + else if (cp > 0x10FFF) + cp = UNICODE_BOGUS_CHAR_CODEPOINT; + + *_str = src; + return cp; +} /* utf32codepoint */ + void PHYSFS_utf8ToUcs4(const char *src, PHYSFS_uint32 *dst, PHYSFS_uint64 len) { @@ -376,25 +420,9 @@ void PHYSFS_utf8FromUtf16(const PHYSFS_uint16 *src, char *dst, PHYSFS_uint64 len len--; while (len) { - PHYSFS_uint32 cp = (PHYSFS_uint32) *(src++); - if (cp == 0) + const PHYSFS_uint32 cp = utf16codepoint(&src); + if (!cp) break; - - /* Orphaned second half of surrogate pair? */ - if ((cp >= 0xDC00) && (cp <= 0xDFFF)) - cp = UNICODE_BOGUS_CHAR_CODEPOINT; - else if ((cp >= 0xD800) && (cp <= 0xDBFF)) /* start surrogate pair! */ - { - const PHYSFS_uint32 pair = (PHYSFS_uint32) *src; - if ((pair < 0xDC00) || (pair > 0xDFFF)) - cp = UNICODE_BOGUS_CHAR_CODEPOINT; - else - { - src++; /* eat the other surrogate. */ - cp = (((cp - 0xD800) << 10) | (pair - 0xDC00)); - } /* else */ - } /* else if */ - utf8fromcodepoint(cp, &dst, &len); } /* while */ @@ -402,145 +430,138 @@ void PHYSFS_utf8FromUtf16(const PHYSFS_uint16 *src, char *dst, PHYSFS_uint64 len } /* PHYSFS_utf8FromUtf16 */ -typedef struct CaseFoldMapping +int PHYSFS_caseFold(const PHYSFS_uint32 from, PHYSFS_uint32 *to) { - PHYSFS_uint32 from; - PHYSFS_uint32 to0; - PHYSFS_uint32 to1; - PHYSFS_uint32 to2; -} CaseFoldMapping; + int i; -typedef struct CaseFoldHashBucket -{ - const PHYSFS_uint8 count; - const CaseFoldMapping *list; -} CaseFoldHashBucket; - -#include "physfs_casefolding.h" - -static void locate_case_fold_mapping(const PHYSFS_uint32 from, - PHYSFS_uint32 *to) -{ - PHYSFS_uint32 i; - const PHYSFS_uint8 hashed = ((from ^ (from >> 8)) & 0xFF); - const CaseFoldHashBucket *bucket = &case_fold_hash[hashed]; - const CaseFoldMapping *mapping = bucket->list; - - for (i = 0; i < bucket->count; i++, mapping++) + if (from < 128) /* low-ASCII, easy! */ { - if (mapping->from == from) + if ((from >= 'A') && (from <= 'Z')) + *to = from - ('A' - 'a'); + else + *to = from; + return 1; + } /* if */ + + else if (from <= 0xFFFF) + { + const PHYSFS_uint8 hash = ((from ^ (from >> 8)) & 0xFF); + const PHYSFS_uint16 from16 = (PHYSFS_uint16) from; + { - to[0] = mapping->to0; - to[1] = mapping->to1; - to[2] = mapping->to2; - return; - } /* if */ - } /* for */ + const CaseFoldHashBucket1_16 *bucket = &case_fold_hash1_16[hash]; + const int count = (int) bucket->count; + for (i = 0; i < count; i++) + { + const CaseFoldMapping1_16 *mapping = &bucket->list[i]; + if (mapping->from == from16) + { + *to = mapping->to0; + return 1; + } /* if */ + } /* for */ + } + + { + const CaseFoldHashBucket2_16 *bucket = &case_fold_hash2_16[hash & 15]; + const int count = (int) bucket->count; + for (i = 0; i < count; i++) + { + const CaseFoldMapping2_16 *mapping = &bucket->list[i]; + if (mapping->from == from16) + { + to[0] = mapping->to0; + to[1] = mapping->to1; + return 2; + } /* if */ + } /* for */ + } + + { + const CaseFoldHashBucket3_16 *bucket = &case_fold_hash3_16[hash & 3]; + const int count = (int) bucket->count; + for (i = 0; i < count; i++) + { + const CaseFoldMapping3_16 *mapping = &bucket->list[i]; + if (mapping->from == from16) + { + to[0] = mapping->to0; + to[1] = mapping->to1; + to[2] = mapping->to2; + return 3; + } /* if */ + } /* for */ + } + } /* else if */ + + else /* codepoint that doesn't fit in 16 bits. */ + { + const PHYSFS_uint8 hash = ((from ^ (from >> 8)) & 0xFF); + const CaseFoldHashBucket1_32 *bucket = &case_fold_hash1_32[hash & 15]; + const int count = (int) bucket->count; + for (i = 0; i < count; i++) + { + const CaseFoldMapping1_32 *mapping = &bucket->list[i]; + if (mapping->from == from) + { + *to = mapping->to0; + return 1; + } /* if */ + } /* for */ + } /* else */ + /* Not found...there's no remapping for this codepoint. */ - to[0] = from; - to[1] = 0; - to[2] = 0; -} /* locate_case_fold_mapping */ + *to = from; + return 1; +} /* PHYSFS_caseFold */ -static int utf8codepointcmp(const PHYSFS_uint32 cp1, const PHYSFS_uint32 cp2) +#define UTFSTRICMP(bits) \ + PHYSFS_uint32 folded1[3], folded2[3]; \ + int head1 = 0, tail1 = 0, head2 = 0, tail2 = 0; \ + while (1) { \ + PHYSFS_uint32 cp1, cp2; \ + if (head1 != tail1) { \ + cp1 = folded1[tail1++]; \ + } else { \ + head1 = PHYSFS_caseFold(utf##bits##codepoint(&str1), folded1); \ + cp1 = folded1[0]; \ + tail1 = 1; \ + } \ + if (head2 != tail2) { \ + cp2 = folded2[tail2++]; \ + } else { \ + head2 = PHYSFS_caseFold(utf##bits##codepoint(&str2), folded2); \ + cp2 = folded2[0]; \ + tail2 = 1; \ + } \ + if (cp1 < cp2) { \ + return -1; \ + } else if (cp1 > cp2) { \ + return 1; \ + } else if (cp1 == 0) { \ + break; /* complete match. */ \ + } \ + } \ + return 0 + +int PHYSFS_utf8stricmp(const char *str1, const char *str2) { - PHYSFS_uint32 folded1[3], folded2[3]; - locate_case_fold_mapping(cp1, folded1); - locate_case_fold_mapping(cp2, folded2); + UTFSTRICMP(8); +} /* PHYSFS_utf8stricmp */ - if (folded1[0] < folded2[0]) - return -1; - else if (folded1[0] > folded2[0]) - return 1; - else if (folded1[1] < folded2[1]) - return -1; - else if (folded1[1] > folded2[1]) - return 1; - else if (folded1[2] < folded2[2]) - return -1; - else if (folded1[2] > folded2[2]) - return 1; - - return 0; /* complete match. */ -} /* utf8codepointcmp */ - - -int __PHYSFS_utf8stricmp(const char *str1, const char *str2) +int PHYSFS_utf16stricmp(const PHYSFS_uint16 *str1, const PHYSFS_uint16 *str2) { - while (1) - { - const PHYSFS_uint32 cp1 = utf8codepoint(&str1); - const PHYSFS_uint32 cp2 = utf8codepoint(&str2); - const int rc = utf8codepointcmp(cp1, cp2); - if (rc != 0) - return rc; - else if (cp1 == 0) - break; /* complete match. */ - } /* while */ + UTFSTRICMP(16); +} /* PHYSFS_utf16stricmp */ - return 0; -} /* __PHYSFS_utf8stricmp */ - - -int __PHYSFS_utf8strnicmp(const char *str1, const char *str2, PHYSFS_uint32 n) +int PHYSFS_ucs4stricmp(const PHYSFS_uint32 *str1, const PHYSFS_uint32 *str2) { - while (n > 0) - { - const PHYSFS_uint32 cp1 = utf8codepoint(&str1); - const PHYSFS_uint32 cp2 = utf8codepoint(&str2); - const int rc = utf8codepointcmp(cp1, cp2); - if (rc != 0) - return rc; - else if (cp1 == 0) - return 0; - n--; - } /* while */ - - return 0; /* matched to n chars. */ -} /* __PHYSFS_utf8strnicmp */ - - -int __PHYSFS_stricmpASCII(const char *str1, const char *str2) -{ - while (1) - { - const char ch1 = *(str1++); - const char ch2 = *(str2++); - const char cp1 = ((ch1 >= 'A') && (ch1 <= 'Z')) ? (ch1+32) : ch1; - const char cp2 = ((ch2 >= 'A') && (ch2 <= 'Z')) ? (ch2+32) : ch2; - if (cp1 < cp2) - return -1; - else if (cp1 > cp2) - return 1; - else if (cp1 == 0) /* they're both null chars? */ - break; - } /* while */ - - return 0; -} /* __PHYSFS_stricmpASCII */ - - -int __PHYSFS_strnicmpASCII(const char *str1, const char *str2, PHYSFS_uint32 n) -{ - while (n-- > 0) - { - const char ch1 = *(str1++); - const char ch2 = *(str2++); - const char cp1 = ((ch1 >= 'A') && (ch1 <= 'Z')) ? (ch1+32) : ch1; - const char cp2 = ((ch2 >= 'A') && (ch2 <= 'Z')) ? (ch2+32) : ch2; - if (cp1 < cp2) - return -1; - else if (cp1 > cp2) - return 1; - else if (cp1 == 0) /* they're both null chars? */ - return 0; - } /* while */ - - return 0; -} /* __PHYSFS_strnicmpASCII */ + UTFSTRICMP(32); +} /* PHYSFS_ucs4stricmp */ +#undef UTFSTRICMP /* end of physfs_unicode.c ... */ diff --git a/love/src/jni/physfs-2.1.0/test/test_physfs.c b/love/src/jni/physfs-3.0.1/test/test_physfs.c similarity index 89% rename from love/src/jni/physfs-2.1.0/test/test_physfs.c rename to love/src/jni/physfs-3.0.1/test/test_physfs.c index b569d714..797cf821 100644 --- a/love/src/jni/physfs-2.1.0/test/test_physfs.c +++ b/love/src/jni/physfs-3.0.1/test/test_physfs.c @@ -6,6 +6,8 @@ * This file written by Ryan C. Gordon. */ +#define _CRT_SECURE_NO_WARNINGS 1 + #include #include #include @@ -28,9 +30,9 @@ #include "physfs.h" -#define TEST_VERSION_MAJOR 2 -#define TEST_VERSION_MINOR 1 -#define TEST_VERSION_PATCH 0 +#define TEST_VERSION_MAJOR 3 +#define TEST_VERSION_MINOR 0 +#define TEST_VERSION_PATCH 1 static FILE *history_file = NULL; static PHYSFS_uint32 do_buffer_size = 0; @@ -869,6 +871,157 @@ static int cmd_cat(char *args) return 1; } /* cmd_cat */ +static int cmd_cat2(char *args) +{ + PHYSFS_File *f1 = NULL; + PHYSFS_File *f2 = NULL; + char *fname1; + char *fname2; + char *ptr; + + fname1 = args; + if (*fname1 == '\"') + { + fname1++; + ptr = strchr(fname1, '\"'); + if (ptr == NULL) + { + printf("missing string terminator in argument.\n"); + return 1; + } /* if */ + *(ptr) = '\0'; + } /* if */ + else + { + ptr = strchr(fname1, ' '); + *ptr = '\0'; + } /* else */ + + fname2 = ptr + 1; + if (*fname2 == '\"') + { + fname2++; + ptr = strchr(fname2, '\"'); + if (ptr == NULL) + { + printf("missing string terminator in argument.\n"); + return 1; + } /* if */ + *(ptr) = '\0'; + } /* if */ + + if ((f1 = PHYSFS_openRead(fname1)) == NULL) + printf("failed to open '%s'. Reason: [%s].\n", fname1, PHYSFS_getLastError()); + else if ((f2 = PHYSFS_openRead(fname2)) == NULL) + printf("failed to open '%s'. Reason: [%s].\n", fname2, PHYSFS_getLastError()); + else + { + char *buffer1 = NULL; + size_t buffer1len = 0; + char *buffer2 = NULL; + size_t buffer2len = 0; + char *ptr = NULL; + size_t i; + + if (do_buffer_size) + { + if (!PHYSFS_setBuffer(f1, do_buffer_size)) + { + printf("failed to set file buffer for '%s'. Reason: [%s].\n", + fname1, PHYSFS_getLastError()); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + else if (!PHYSFS_setBuffer(f2, do_buffer_size)) + { + printf("failed to set file buffer for '%s'. Reason: [%s].\n", + fname2, PHYSFS_getLastError()); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + } /* if */ + + + do + { + int readlen = 128; + PHYSFS_sint64 rc; + + ptr = realloc(buffer1, buffer1len + readlen); + if (!ptr) + { + printf("(Out of memory.)\n\n"); + free(buffer1); + free(buffer2); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + + buffer1 = ptr; + rc = PHYSFS_readBytes(f1, buffer1 + buffer1len, readlen); + if (rc < 0) + { + printf("(Error condition in reading '%s'. Reason: [%s])\n\n", + fname1, PHYSFS_getLastError()); + free(buffer1); + free(buffer2); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + buffer1len += (size_t) rc; + + ptr = realloc(buffer2, buffer2len + readlen); + if (!ptr) + { + printf("(Out of memory.)\n\n"); + free(buffer1); + free(buffer2); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + + buffer2 = ptr; + rc = PHYSFS_readBytes(f2, buffer2 + buffer2len, readlen); + if (rc < 0) + { + printf("(Error condition in reading '%s'. Reason: [%s])\n\n", + fname2, PHYSFS_getLastError()); + free(buffer1); + free(buffer2); + PHYSFS_close(f1); + PHYSFS_close(f2); + return 1; + } /* if */ + buffer2len += (size_t) rc; + } while (!PHYSFS_eof(f1) || !PHYSFS_eof(f2)); + + printf("file '%s' ...\n\n", fname1); + for (i = 0; i < buffer1len; i++) + fputc((int) buffer1[i], stdout); + free(buffer1); + + printf("\n\nfile '%s' ...\n\n", fname2); + for (i = 0; i < buffer2len; i++) + fputc((int) buffer2[i], stdout); + free(buffer2); + + printf("\n\n"); + } /* else */ + + if (f1) + PHYSFS_close(f1); + + if (f2) + PHYSFS_close(f2); + + return 1; +} /* cmd_cat2 */ + #define CRC32_BUFFERSIZE 512 static int cmd_crc32(char *args) @@ -1177,6 +1330,7 @@ static const command_info commands[] = { "isdir", cmd_isdir, 1, "" }, { "issymlink", cmd_issymlink, 1, "" }, { "cat", cmd_cat, 1, "" }, + { "cat2", cmd_cat2, 2, " " }, { "filelength", cmd_filelength, 1, "" }, { "stat", cmd_stat, 1, "" }, { "append", cmd_append, 1, "" }, diff --git a/love/src/jni/physfs-2.1.0/test/test_physfs.pl b/love/src/jni/physfs-3.0.1/test/test_physfs.pl similarity index 100% rename from love/src/jni/physfs-2.1.0/test/test_physfs.pl rename to love/src/jni/physfs-3.0.1/test/test_physfs.pl diff --git a/love/src/jni/physfs-2.1.0/test/test_physfs.rb b/love/src/jni/physfs-3.0.1/test/test_physfs.rb similarity index 100% rename from love/src/jni/physfs-2.1.0/test/test_physfs.rb rename to love/src/jni/physfs-3.0.1/test/test_physfs.rb From 0afdf271a24db1cd18ebe988616e643bb5789671 Mon Sep 17 00:00:00 2001 From: Martin Felis Date: Mon, 22 Jan 2018 22:52:16 +0100 Subject: [PATCH 4/4] Cleaned up logic of loading games on the Java side of the App --- .../java/org/love2d/android/GameActivity.java | 173 ++++++++---------- 1 file changed, 75 insertions(+), 98 deletions(-) diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index 3d8e5884..b74c9120 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -15,6 +15,7 @@ import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; +import android.app.AlertDialog; import android.app.DownloadManager; import android.app.ProgressDialog; import android.content.Context; @@ -82,7 +83,12 @@ public class GameActivity extends SDLActivity { protected void handleIntent (Intent intent) { Uri game = intent.getData(); + if (game != null) { + // If we have a game via the intent data we we try to figure out how we have to load it. We + // support the following variations: + // * a main.lua file: set gamePath to the directory containing main.lua + // * otherwise: set gamePath to the file if (game.getScheme().equals ("file")) { Log.d("GameActivity", "Received intent with path: " + game.getPath()); // If we were given the path of a main.lua then use its @@ -94,35 +100,51 @@ public class GameActivity extends SDLActivity { gamePath = game.getPath(); } } else { - // if archive exists, copy it to the cache - copyGameToCache (game); - return; - } - Log.d("GameActivity", "new gamePath: " + gamePath); + Log.e("GameActivity", "Unsupported scheme: '" + game.getScheme() + "'."); - } else { - boolean archiveExists = false; + AlertDialog.Builder alert_dialog = new AlertDialog.Builder(this); + alert_dialog.setMessage("Could not load LÖVE game '" + game.getPath() + + "' as it uses unsupported scheme '" + game.getScheme() + + "'. Please contact the developer."); + alert_dialog.setTitle("LÖVE for Android Error"); + alert_dialog.setPositiveButton("Exit", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog,int id) { + finish(); + } + }); + alert_dialog.setCancelable(false); + alert_dialog.create().show(); + } + } else { + // No game specified via the intent data -> check whether we have a game.love in our assets. + boolean game_love_in_assets = false; try { List assets = Arrays.asList(getAssets().list("")); - archiveExists = assets.contains("game.love"); + game_love_in_assets = assets.contains("game.love"); } catch (Exception e) { Log.d("GameActivity", "could not list application assets:" + e.getMessage()); } - if (archiveExists) { - String df = this.getCacheDir().getPath()+"/game.love"; - if (mustCacheArchive && copyAssetFile("game.love",df)) - gamePath = df; + + if (game_love_in_assets) { + // If we have a game.love in our assets folder copy it to the cache folder + // so that we can load it from native LÖVE code + String destination_file = this.getCacheDir().getPath()+"/game.love"; + if (mustCacheArchive && copyAssetFile("game.love", destination_file)) + gamePath = destination_file; else gamePath = "game.love"; } else { + // If no game.love was found fall back to the game in /lovegame File ext = Environment.getExternalStorageDirectory(); if ((new File(ext,"/lovegame/main.lua")).exists()) { gamePath = ext.getPath() + "/lovegame/"; } } - - Log.d("GameActivity", "new gamePath: " + gamePath); } + + Log.d("GameActivity", "new gamePath: " + gamePath); } @Override @@ -224,104 +246,59 @@ public class GameActivity extends SDLActivity { context.startActivity(i); } - boolean copyAssetFile(String fileName, String destF) + /** + * Copies a given file from the assets folder to the destination. + * @return true if successful + */ + boolean copyAssetFile(String fileName, String destinationFileName) { boolean success = false; - // open streams - BufferedOutputStream bos = null; + // open source and destination streams + InputStream source_stream = null; try { - bos = new BufferedOutputStream(new FileOutputStream(destF, false)); + source_stream = getAssets().open(fileName); } catch (IOException e) { - Log.d ("GameActivity", "Could not open destination file:" + e.getMessage()); - } - InputStream ins = null; - try { - ins = getAssets().open(fileName); - } catch (IOException e) { - Log.d("GameActivity", "Could not open game file:" + e.getMessage()); + Log.d("GameActivity", "Could not open game.love from assets: " + e.getMessage()); } - // copy - int bytes_written = 0; - if (ins != null && bos != null) { - int chunk_read = 0; - try { - byte[] buf = new byte[8192]; - chunk_read = ins.read(buf); - do { - bos.write(buf, 0, chunk_read); - bytes_written += chunk_read; - chunk_read = ins.read(buf); - } while(chunk_read != -1); - } catch (IOException e) { - Log.d ("GameActivity", "Copying failed:" + e.getMessage()); - } + BufferedOutputStream destination_stream = null; + try { + destination_stream = new BufferedOutputStream(new FileOutputStream(destinationFileName, false)); + } catch (IOException e) { + Log.d ("GameActivity", "Could not open destination file: " + e.getMessage()); } - + + // perform the copying + int chunk_read = 0; + int bytes_written = 0; + + assert (source_stream != null && destination_stream != null); + + try { + byte[] buf = new byte[1024]; + chunk_read = source_stream.read(buf); + do { + destination_stream.write(buf, 0, chunk_read); + bytes_written += chunk_read; + chunk_read = source_stream.read(buf); + } while (chunk_read != -1); + } catch (IOException e) { + Log.d("GameActivity", "Copying failed:" + e.getMessage()); + } + // close streams try { - if (ins != null) ins.close(); - if (bos != null) bos.close(); + if (source_stream != null) source_stream.close(); + if (destination_stream != null) destination_stream.close(); success = true; } catch (IOException e) { Log.d ("GameActivity", "Copying failed: " + e.getMessage()); } - Log.d("GameActivity", "Copied " + fileName + " to " + destF - + ". Wrote:" + bytes_written + " bytes"); + Log.d("GameActivity", "Successfully copied " + fileName + + " to " + destinationFileName + + " (" + bytes_written + " bytes written)."); return success; } - - void copyGameToCache (Uri sourceuri) - { - String destinationFilename = this.getCacheDir().getPath()+"/downloaded.love"; - gamePath = destinationFilename; - - BufferedOutputStream bos = null; - try { - bos = new BufferedOutputStream(new FileOutputStream(destinationFilename, false)); - } catch (IOException e) { - Log.d ("GameActivity", "Could not open destination file:" + e.getMessage()); - } - - int chunk_read = 0; - int bytes_written = 0; - - BufferedInputStream bis = null; - if (sourceuri.getScheme().equals("content")) { - try { - bis = new BufferedInputStream(getContentResolver().openInputStream(sourceuri)); - } catch (IOException e) { - Log.d ("GameActivity", "Could not open game file:" + e.getMessage()); - } - } else { - Log.d ("GameActivity", "Unsupported scheme: " + sourceuri.getScheme()); - } - - if (bis != null) { - // actual copying - try { - byte[] buf = new byte[1024]; - chunk_read = bis.read(buf); - do { - bos.write(buf, 0, chunk_read); - bytes_written += chunk_read; - chunk_read = bis.read(buf); - } while(chunk_read != -1); - } catch (IOException e) { - Log.d ("GameActivity", "Copying failed:" + e.getMessage()); - } - } - - // close streams - try { - if (bis != null) bis.close(); - if (bos != null) bos.close(); - } catch (IOException e) { - Log.d ("GameActivity", "Copying failed: " + e.getMessage()); - } - - Log.d("GameActivity", "Copied " + bytes_written + " bytes"); - } -} +} \ No newline at end of file