Windows2000/private/inet/urlmon/compress/gzip/fstdebug.c
2020-09-30 17:12:32 +02:00

93 lines
2.2 KiB
C

/*
* fstdebug.c
* Debugging stubs for fast encoder
*/
#include <string.h>
#include <stdio.h>
#include <crtdbg.h>
#include "deflate.h"
#ifdef FULL_DEBUG
void FastEncoderVerifyHashes(t_encoder_context *context, long bufpos)
{
int i;
const t_search_node *lookup = context->fast_encoder->lookup;
const t_search_node *prev = context->fast_encoder->prev;
const BYTE *window = context->fast_encoder->window;
for (i = 0; i < FAST_ENCODER_HASH_TABLE_SIZE; i++)
{
t_search_node where = lookup[i];
t_search_node next_where;
while (where != 0 && bufpos - where < FAST_ENCODER_WINDOW_SIZE)
{
int hash = FAST_ENCODER_RECALCULATE_HASH(where);
_ASSERT(hash == i);
next_where = prev[where & FAST_ENCODER_WINDOW_MASK];
if (bufpos - next_where >= FAST_ENCODER_WINDOW_SIZE)
break;
_ASSERT(next_where < where);
where = next_where;
}
}
}
void FastEncoderVerifyHashChain(t_encoder_context *context, long bufpos, int chain_number)
{
const t_search_node *lookup = context->fast_encoder->lookup;
const t_search_node *prev = context->fast_encoder->prev;
BYTE *window = context->fast_encoder->window;
t_search_node where;
t_search_node next_where;
int print = 0;
top:
where = lookup[chain_number];
if (print)
printf("Verify chain %d\n", chain_number);
while (where != 0 && bufpos - where < FAST_ENCODER_WINDOW_SIZE)
{
int hash = FAST_ENCODER_RECALCULATE_HASH(where);
BYTE *window = context->fast_encoder->window;
if (print)
printf(" loc %d: char = %3d %3d %3d\n", where, window[where], window[where+1], window[where+2]);
if (hash != chain_number && print == 0)
{
print = 1;
goto top;
}
_ASSERT(hash == chain_number);
next_where = prev[where & FAST_ENCODER_WINDOW_MASK];
if (bufpos - next_where >= FAST_ENCODER_WINDOW_SIZE)
break;
if (next_where >= where && print == 0)
{
print = 1;
goto top;
}
_ASSERT(next_where < where);
where = next_where;
}
}
#endif