From 4942d268e7126271a04b88285c2a9c900b68c980 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Tue, 2 Sep 2014 20:09:14 +0200 Subject: [PATCH] (OSX) Bake in 7zip support - some compatibility/build fixes for OSX --- .../RetroArch_OSX.xcodeproj/project.pbxproj | 7 ++ decompress/7zip/Ppmd.h | 2 +- decompress/7zip/Ppmd7.c | 72 +++++++++---------- decompress/7zip/Ppmd7.h | 4 +- decompress/7zip/Ppmd7Dec.c | 38 +++++----- decompress/7zip_support.c | 13 ++-- file.c | 7 +- 7 files changed, 77 insertions(+), 66 deletions(-) diff --git a/apple/OSX/OSX/RetroArch_OSX.xcodeproj/project.pbxproj b/apple/OSX/OSX/RetroArch_OSX.xcodeproj/project.pbxproj index f02b81b34c..1fe52abd77 100644 --- a/apple/OSX/OSX/RetroArch_OSX.xcodeproj/project.pbxproj +++ b/apple/OSX/OSX/RetroArch_OSX.xcodeproj/project.pbxproj @@ -347,6 +347,9 @@ "-DHAVE_THREADS", "-DHAVE_DYLIB", "-DHAVE_CG", + "-DHAVE_COMPRESSION", + "-D_7ZIP_ST", + "-DHAVE_7ZIP", ); PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; @@ -413,6 +416,10 @@ "-DHAVE_THREADS", "-DHAVE_DYLIB", "-DHAVE_CG", + "-D_7ZIP_ST", + "-DHAVE_COMPRESSION", + "-DHAVE_7ZIP", + "-DHAVE_7ZIP", ); PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; diff --git a/decompress/7zip/Ppmd.h b/decompress/7zip/Ppmd.h index 14344a719e..24c1961160 100755 --- a/decompress/7zip/Ppmd.h +++ b/decompress/7zip/Ppmd.h @@ -43,7 +43,7 @@ typedef struct typedef struct { Byte Symbol; - Byte Freq; + Byte freq; UInt16 SuccessorLow; UInt16 SuccessorHigh; } CPpmd_State; diff --git a/decompress/7zip/Ppmd7.c b/decompress/7zip/Ppmd7.c index 4b160cf033..d4ad117192 100755 --- a/decompress/7zip/Ppmd7.c +++ b/decompress/7zip/Ppmd7.c @@ -307,7 +307,7 @@ static void RestartModel(CPpmd7 *p) { CPpmd_State *s = &p->FoundState[i]; s->Symbol = (Byte)i; - s->Freq = 1; + s->freq = 1; SetSuccessor(s, 0); } @@ -375,15 +375,15 @@ static CTX_PTR CreateSuccessors(CPpmd7 *p, Bool skip) SetSuccessor(&upState, upBranch + 1); if (c->NumStats == 1) - upState.Freq = ONE_STATE(c)->Freq; + upState.freq = ONE_STATE(c)->freq; else { UInt32 cf, s0; CPpmd_State *s; for (s = STATS(c); s->Symbol != upState.Symbol; s++); - cf = s->Freq - 1; + cf = s->freq - 1; s0 = c->SummFreq - c->NumStats - cf; - upState.Freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((2 * cf + 3 * s0 - 1) / (2 * s0)))); + upState.freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((2 * cf + 3 * s0 - 1) / (2 * s0)))); } do @@ -424,15 +424,15 @@ static void UpdateModel(CPpmd7 *p) CTX_PTR c; unsigned s0, ns; - if (p->FoundState->Freq < MAX_FREQ / 4 && p->MinContext->Suffix != 0) + if (p->FoundState->freq < MAX_FREQ / 4 && p->MinContext->Suffix != 0) { c = SUFFIX(p->MinContext); if (c->NumStats == 1) { CPpmd_State *s = ONE_STATE(c); - if (s->Freq < 32) - s->Freq++; + if (s->freq < 32) + s->freq++; } else { @@ -440,15 +440,15 @@ static void UpdateModel(CPpmd7 *p) if (s->Symbol != p->FoundState->Symbol) { do { s++; } while (s->Symbol != p->FoundState->Symbol); - if (s[0].Freq >= s[-1].Freq) + if (s[0].freq >= s[-1].freq) { SwapStates(&s[0], &s[-1]); s--; } } - if (s->Freq < MAX_FREQ - 9) + if (s->freq < MAX_FREQ - 9) { - s->Freq += 2; + s->freq += 2; c->SummFreq += 2; } } @@ -498,7 +498,7 @@ static void UpdateModel(CPpmd7 *p) fSuccessor = REF(p->MinContext); } - s0 = p->MinContext->SummFreq - (ns = p->MinContext->NumStats) - (p->FoundState->Freq - 1); + s0 = p->MinContext->SummFreq - (ns = p->MinContext->NumStats) - (p->FoundState->freq - 1); for (c = p->MaxContext; c != p->MinContext; c = SUFFIX(c)) { @@ -538,13 +538,13 @@ static void UpdateModel(CPpmd7 *p) } *s = *ONE_STATE(c); c->Stats = REF(s); - if (s->Freq < MAX_FREQ / 4 - 1) - s->Freq <<= 1; + if (s->freq < MAX_FREQ / 4 - 1) + s->freq <<= 1; else - s->Freq = MAX_FREQ - 4; - c->SummFreq = (UInt16)(s->Freq + p->InitEsc + (ns > 3)); + s->freq = MAX_FREQ - 4; + c->SummFreq = (UInt16)(s->freq + p->InitEsc + (ns > 3)); } - cf = 2 * (UInt32)p->FoundState->Freq * (c->SummFreq + 6); + cf = 2 * (UInt32)p->FoundState->freq * (c->SummFreq + 6); sf = (UInt32)s0 + c->SummFreq; if (cf < 6 * sf) { @@ -560,7 +560,7 @@ static void UpdateModel(CPpmd7 *p) CPpmd_State *s = STATS(c) + ns1; SetSuccessor(s, successor); s->Symbol = p->FoundState->Symbol; - s->Freq = (Byte)cf; + s->freq = (Byte)cf; c->NumStats = (UInt16)(ns1 + 1); } } @@ -578,35 +578,35 @@ static void Rescale(CPpmd7 *p) s[0] = s[-1]; *s = tmp; } - escFreq = p->MinContext->SummFreq - s->Freq; - s->Freq += 4; + escFreq = p->MinContext->SummFreq - s->freq; + s->freq += 4; adder = (p->OrderFall != 0); - s->Freq = (Byte)((s->Freq + adder) >> 1); - sumFreq = s->Freq; + s->freq = (Byte)((s->freq + adder) >> 1); + sumFreq = s->freq; i = p->MinContext->NumStats - 1; do { - escFreq -= (++s)->Freq; - s->Freq = (Byte)((s->Freq + adder) >> 1); - sumFreq += s->Freq; - if (s[0].Freq > s[-1].Freq) + escFreq -= (++s)->freq; + s->freq = (Byte)((s->freq + adder) >> 1); + sumFreq += s->freq; + if (s[0].freq > s[-1].freq) { CPpmd_State *s1 = s; CPpmd_State tmp = *s1; do s1[0] = s1[-1]; - while (--s1 != stats && tmp.Freq > s1[-1].Freq); + while (--s1 != stats && tmp.freq > s1[-1].freq); *s1 = tmp; } } while (--i); - if (s->Freq == 0) + if (s->freq == 0) { unsigned numStats = p->MinContext->NumStats; unsigned n0, n1; - do { i++; } while ((--s)->Freq == 0); + do { i++; } while ((--s)->freq == 0); escFreq += i; p->MinContext->NumStats = (UInt16)(p->MinContext->NumStats - i); if (p->MinContext->NumStats == 1) @@ -614,7 +614,7 @@ static void Rescale(CPpmd7 *p) CPpmd_State tmp = *stats; do { - tmp.Freq = (Byte)(tmp.Freq - (tmp.Freq >> 1)); + tmp.freq = (Byte)(tmp.freq - (tmp.freq >> 1)); escFreq >>= 1; } while (escFreq > 1); @@ -668,13 +668,13 @@ static void NextContext(CPpmd7 *p) void Ppmd7_Update1(CPpmd7 *p) { CPpmd_State *s = p->FoundState; - s->Freq += 4; + s->freq += 4; p->MinContext->SummFreq += 4; - if (s[0].Freq > s[-1].Freq) + if (s[0].freq > s[-1].freq) { SwapStates(&s[0], &s[-1]); p->FoundState = --s; - if (s->Freq > MAX_FREQ) + if (s->freq > MAX_FREQ) Rescale(p); } NextContext(p); @@ -682,17 +682,17 @@ void Ppmd7_Update1(CPpmd7 *p) void Ppmd7_Update1_0(CPpmd7 *p) { - p->PrevSuccess = (2 * p->FoundState->Freq > p->MinContext->SummFreq); + p->PrevSuccess = (2 * p->FoundState->freq > p->MinContext->SummFreq); p->RunLength += p->PrevSuccess; p->MinContext->SummFreq += 4; - if ((p->FoundState->Freq += 4) > MAX_FREQ) + if ((p->FoundState->freq += 4) > MAX_FREQ) Rescale(p); NextContext(p); } void Ppmd7_UpdateBin(CPpmd7 *p) { - p->FoundState->Freq = (Byte)(p->FoundState->Freq + (p->FoundState->Freq < 128 ? 1: 0)); + p->FoundState->freq = (Byte)(p->FoundState->freq + (p->FoundState->freq < 128 ? 1: 0)); p->PrevSuccess = 1; p->RunLength++; NextContext(p); @@ -701,7 +701,7 @@ void Ppmd7_UpdateBin(CPpmd7 *p) void Ppmd7_Update2(CPpmd7 *p) { p->MinContext->SummFreq += 4; - if ((p->FoundState->Freq += 4) > MAX_FREQ) + if ((p->FoundState->freq += 4) > MAX_FREQ) Rescale(p); p->RunLength = p->InitRL; UpdateModel(p); diff --git a/decompress/7zip/Ppmd7.h b/decompress/7zip/Ppmd7.h index 56e81eb123..68f021f915 100755 --- a/decompress/7zip/Ppmd7.h +++ b/decompress/7zip/Ppmd7.h @@ -86,7 +86,7 @@ void Ppmd7_Update2(CPpmd7 *p); void Ppmd7_UpdateBin(CPpmd7 *p); #define Ppmd7_GetBinSumm(p) \ - &p->BinSumm[Ppmd7Context_OneState(p->MinContext)->Freq - 1][p->PrevSuccess + \ + &p->BinSumm[Ppmd7Context_OneState(p->MinContext)->freq - 1][p->PrevSuccess + \ p->NS2BSIndx[Ppmd7_GetContext(p, p->MinContext->Suffix)->NumStats - 1] + \ (p->HiBitsFlag = p->HB2Flag[p->FoundState->Symbol]) + \ 2 * p->HB2Flag[Ppmd7Context_OneState(p->MinContext)->Symbol] + \ @@ -108,7 +108,7 @@ typedef struct { IPpmd7_RangeDec p; UInt32 Range; - UInt32 Code; + UInt32 code; IByteIn *Stream; } CPpmd7z_RangeDec; diff --git a/decompress/7zip/Ppmd7Dec.c b/decompress/7zip/Ppmd7Dec.c index d6608e8b39..6971643da0 100755 --- a/decompress/7zip/Ppmd7Dec.c +++ b/decompress/7zip/Ppmd7Dec.c @@ -4,35 +4,35 @@ This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ #include "Ppmd7.h" -#define kTopValue (1 << 24) +#define PPMD7_kTopValue (1 << 24) Bool Ppmd7z_RangeDec_Init(CPpmd7z_RangeDec *p) { unsigned i; - p->Code = 0; + p->code = 0; p->Range = 0xFFFFFFFF; if (p->Stream->Read((void *)p->Stream) != 0) return False; for (i = 0; i < 4; i++) - p->Code = (p->Code << 8) | p->Stream->Read((void *)p->Stream); - return (p->Code < 0xFFFFFFFF); + p->code = (p->code << 8) | p->Stream->Read((void *)p->Stream); + return (p->code < 0xFFFFFFFF); } static UInt32 Range_GetThreshold(void *pp, UInt32 total) { CPpmd7z_RangeDec *p = (CPpmd7z_RangeDec *)pp; - return (p->Code) / (p->Range /= total); + return (p->code) / (p->Range /= total); } static void Range_Normalize(CPpmd7z_RangeDec *p) { - if (p->Range < kTopValue) + if (p->Range < PPMD7_kTopValue) { - p->Code = (p->Code << 8) | p->Stream->Read((void *)p->Stream); + p->code = (p->code << 8) | p->Stream->Read((void *)p->Stream); p->Range <<= 8; - if (p->Range < kTopValue) + if (p->Range < PPMD7_kTopValue) { - p->Code = (p->Code << 8) | p->Stream->Read((void *)p->Stream); + p->code = (p->code << 8) | p->Stream->Read((void *)p->Stream); p->Range <<= 8; } } @@ -41,7 +41,7 @@ static void Range_Normalize(CPpmd7z_RangeDec *p) static void Range_Decode(void *pp, UInt32 start, UInt32 size) { CPpmd7z_RangeDec *p = (CPpmd7z_RangeDec *)pp; - p->Code -= start * p->Range; + p->code -= start * p->Range; p->Range *= size; Range_Normalize(p); } @@ -51,7 +51,7 @@ static UInt32 Range_DecodeBit(void *pp, UInt32 size0) CPpmd7z_RangeDec *p = (CPpmd7z_RangeDec *)pp; UInt32 newBound = (p->Range >> 14) * size0; UInt32 symbol; - if (p->Code < newBound) + if (p->code < newBound) { symbol = 0; p->Range = newBound; @@ -59,7 +59,7 @@ static UInt32 Range_DecodeBit(void *pp, UInt32 size0) else { symbol = 1; - p->Code -= newBound; + p->code -= newBound; p->Range -= newBound; } Range_Normalize(p); @@ -84,10 +84,10 @@ int Ppmd7_DecodeSymbol(CPpmd7 *p, IPpmd7_RangeDec *rc) CPpmd_State *s = Ppmd7_GetStats(p, p->MinContext); unsigned i; UInt32 count, hiCnt; - if ((count = rc->GetThreshold(rc, p->MinContext->SummFreq)) < (hiCnt = s->Freq)) + if ((count = rc->GetThreshold(rc, p->MinContext->SummFreq)) < (hiCnt = s->freq)) { Byte symbol; - rc->Decode(rc, 0, s->Freq); + rc->Decode(rc, 0, s->freq); p->FoundState = s; symbol = s->Symbol; Ppmd7_Update1_0(p); @@ -97,10 +97,10 @@ int Ppmd7_DecodeSymbol(CPpmd7 *p, IPpmd7_RangeDec *rc) i = p->MinContext->NumStats - 1; do { - if ((hiCnt += (++s)->Freq) > count) + if ((hiCnt += (++s)->freq) > count) { Byte symbol; - rc->Decode(rc, hiCnt - s->Freq, s->Freq); + rc->Decode(rc, hiCnt - s->freq, s->freq); p->FoundState = s; symbol = s->Symbol; Ppmd7_Update1(p); @@ -155,7 +155,7 @@ int Ppmd7_DecodeSymbol(CPpmd7 *p, IPpmd7_RangeDec *rc) do { int k = (int)(MASK(s->Symbol)); - hiCnt += (s->Freq & k); + hiCnt += (s->freq & k); ps[i] = s++; i -= k; } @@ -169,9 +169,9 @@ int Ppmd7_DecodeSymbol(CPpmd7 *p, IPpmd7_RangeDec *rc) { Byte symbol; CPpmd_State **pps = ps; - for (hiCnt = 0; (hiCnt += (*pps)->Freq) <= count; pps++); + for (hiCnt = 0; (hiCnt += (*pps)->freq) <= count; pps++); s = *pps; - rc->Decode(rc, hiCnt - s->Freq, s->Freq); + rc->Decode(rc, hiCnt - s->freq, s->freq); Ppmd_See_Update(see); p->FoundState = s; symbol = s->Symbol; diff --git a/decompress/7zip_support.c b/decompress/7zip_support.c index e99cadd187..39af856183 100644 --- a/decompress/7zip_support.c +++ b/decompress/7zip_support.c @@ -20,13 +20,13 @@ #include #include -#include "miscellaneous.h" +#include "../miscellaneous.h" -#include "7z.h" -#include "7zAlloc.h" -#include "7zCrc.h" -#include "7zFile.h" -#include "7zVersion.h" +#include "7zip/7z.h" +#include "7zip/7zAlloc.h" +#include "7zip/7zCrc.h" +#include "7zip/7zFile.h" +#include "7zip/7zVersion.h" static ISzAlloc g_Alloc = { SzAlloc, SzFree }; @@ -225,6 +225,7 @@ long read_7zip_file(const char * archive_path, const char *relative_path, void * res = ConvertUtf16toCharString(temp,infile); UInt64 filesize = f->Size; + (void)filesize; if (strcmp(infile,relative_path) == 0) { diff --git a/file.c b/file.c index 46cde11290..6fc7043f7e 100644 --- a/file.c +++ b/file.c @@ -139,13 +139,16 @@ static ssize_t read_content_file(const char *path, void **buf) For example: fullpath: /home/user/game.7z/mygame.rom carchive_path: /home/user/game.7z */ #ifdef HAVE_COMPRESSION - char const* archive_found = strstr(path,g_extern.carchive_path); + const char* archive_found = (const char*)strstr(path, g_extern.carchive_path); if (g_extern.is_carchive) { if(archive_found) { + /* FIXME - should use fill_pathname_relative helper function here + * to avoid errors. */ char rel_path[PATH_MAX]; - snprintf(rel_path, sizeof(rel_path), archive_found+strlen(g_extern.carchive_path)+1); + snprintf(rel_path, sizeof(rel_path), + "%s", archive_found + strlen(g_extern.carchive_path) + 1); ret = read_compressed_file(g_extern.carchive_path, rel_path, (void**)&ret_buf); } }