summaryrefslogtreecommitdiffstats
path: root/libs/Compress/decompress.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/Compress/decompress.c')
-rw-r--r--libs/Compress/decompress.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/libs/Compress/decompress.c b/libs/Compress/decompress.c
index 286e3a0..886ed7e 100644
--- a/libs/Compress/decompress.c
+++ b/libs/Compress/decompress.c
@@ -43,39 +43,38 @@
////////////////////////////////////////////////////////////////////////////////
#include <Compress.h>
-
#include <stdio.h>
-#define DICTIONARY_INIT_0x20 (0x20)
-#define DICTIONARY_INIT_0x00 (0x00)
-#define DICTIONARY_INIT_INDEX (2014)
-#define DICTIONARY_SIZE (2048)
+#define DICTIONARY_INIT_0x20 (0x20)
+#define DICTIONARY_INIT_0x00 (0x00)
+#define DICTIONARY_INIT_INDEX (2014)
+#define DICTIONARY_SIZE (2048)
#define LITERAL_TYPE (1)
#define REFERENCE_TYPE (0)
-static struct {
+static struct
+{
uint8_t dictionary[DICTIONARY_SIZE];
uint32_t cursor;
- const uint8_t* inBuffer;
+ const uint8_t *inBuffer;
int32_t inBytes;
- uint8_t* outBuffer;
+ uint8_t *outBuffer;
int32_t outRemaining;
int32_t outSent;
} g_DecompressorState;
-
-static void state_init(const uint8_t* inBuffer, int32_t inBytes)
+static void state_init(const uint8_t *inBuffer, int32_t inBytes)
{
g_DecompressorState.cursor = DICTIONARY_INIT_INDEX;
int i = 0;
- for(; i < g_DecompressorState.cursor; i++)
+ for (; i < g_DecompressorState.cursor; i++)
{
g_DecompressorState.dictionary[i] = DICTIONARY_INIT_0x20;
}
- for(; i < DICTIONARY_SIZE; i++)
+ for (; i < DICTIONARY_SIZE; i++)
{
g_DecompressorState.dictionary[i] = DICTIONARY_INIT_0x00;
}
@@ -88,7 +87,8 @@ static void state_insert(uint8_t byte)
{
g_DecompressorState.dictionary[g_DecompressorState.cursor] = byte;
// Increment and wrap.
- g_DecompressorState.cursor = (g_DecompressorState.cursor + 1) % DICTIONARY_SIZE;
+ g_DecompressorState.cursor =
+ (g_DecompressorState.cursor + 1) % DICTIONARY_SIZE;
}
static uint8_t state_get_dictionary(uint16_t offset)
@@ -103,9 +103,9 @@ static uint8_t state_get_byte(void)
uint8_t byte = 0;
// if(bytesLeft > 0)
// {
- byte = *g_DecompressorState.inBuffer;
- g_DecompressorState.inBuffer++;
- g_DecompressorState.inBytes--;
+ byte = *g_DecompressorState.inBuffer;
+ g_DecompressorState.inBuffer++;
+ g_DecompressorState.inBytes--;
// }
return byte;
@@ -116,24 +116,24 @@ int32_t state_bytes_left(void)
return g_DecompressorState.inBytes;
}
-int32_t decompress(uint8_t* outBuffer, int32_t outBytes,
- const uint8_t* inBuffer, int32_t inBytes)
+int32_t decompress(uint8_t *outBuffer, int32_t outBytes,
+ const uint8_t *inBuffer, int32_t inBytes)
{
int32_t actualSize = 0;
state_init(inBuffer, inBytes);
- while(state_bytes_left() > 0)
+ while (state_bytes_left() > 0)
{
uint8_t control = state_get_byte();
- for(int i = 0; i < 8; i++)
+ for (int i = 0; i < 8; i++)
{
- if(actualSize >= outBytes || !state_bytes_left())
+ if (actualSize >= outBytes || !state_bytes_left())
{
// We have no bytes left, or we've filled up the output buffer
break;
}
- if((control & (1 << i)) == REFERENCE_TYPE)
+ if ((control & (1 << i)) == REFERENCE_TYPE)
{
// Read in two reference bytes
uint8_t B0 = state_get_byte();
@@ -142,7 +142,7 @@ int32_t decompress(uint8_t* outBuffer, int32_t outBytes,
uint16_t offset = (((uint16_t)B1 & 0xE0u) << 3u) | B0;
uint16_t length = (B1 & 0x1Fu) + 3u;
- while(length && actualSize < outBytes)
+ while (length && actualSize < outBytes)
{
uint8_t literal = state_get_dictionary(offset);
state_insert(literal);
@@ -154,18 +154,15 @@ int32_t decompress(uint8_t* outBuffer, int32_t outBytes,
}
else /* LITERAL_TYPE */
{
- uint8_t literal = state_get_byte();;
+ uint8_t literal = state_get_byte();
+ ;
state_insert(literal);
// Output
outBuffer[actualSize++] = literal;
-
}
}
}
- // printf("inBytes: %d (%d left), outBytes: %d, actualSize: %d\n", inBytes, state_bytes_left(), outBytes, actualSize);
- // while(1);
-
return actualSize;
}
OpenPOWER on IntegriCloud