stream_flags_common.c revision 207753
1178476Sjb///////////////////////////////////////////////////////////////////////////////
2178476Sjb//
3178476Sjb/// \file       stream_flags_common.c
4178476Sjb/// \brief      Common stuff for Stream flags coders
5178476Sjb//
6178476Sjb//  Author:     Lasse Collin
7178476Sjb//
8178476Sjb//  This file has been put into the public domain.
9178476Sjb//  You can do whatever you want with this file.
10178476Sjb//
11178476Sjb///////////////////////////////////////////////////////////////////////////////
12178476Sjb
13178476Sjb#include "stream_flags_common.h"
14178476Sjb
15178476Sjb
16178476Sjbconst uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 };
17178476Sjbconst uint8_t lzma_footer_magic[2] = { 0x59, 0x5A };
18178476Sjb
19178476Sjb
20178476Sjbextern LZMA_API(lzma_ret)
21178476Sjblzma_stream_flags_compare(
22178476Sjb		const lzma_stream_flags *a, const lzma_stream_flags *b)
23178476Sjb{
24178476Sjb	// We can compare only version 0 structures.
25178476Sjb	if (a->version != 0 || b->version != 0)
26178476Sjb		return LZMA_OPTIONS_ERROR;
27178476Sjb
28178476Sjb	// Check type
29178476Sjb	if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX
30178476Sjb			|| (unsigned int)(b->check) > LZMA_CHECK_ID_MAX)
31178476Sjb		return LZMA_PROG_ERROR;
32178476Sjb
33178476Sjb	if (a->check != b->check)
34178476Sjb		return LZMA_DATA_ERROR;
35178476Sjb
36178476Sjb	// Backward Sizes are compared only if they are known in both.
37178476Sjb	if (a->backward_size != LZMA_VLI_UNKNOWN
38178476Sjb			&& b->backward_size != LZMA_VLI_UNKNOWN) {
39178476Sjb		if (!is_backward_size_valid(a) || !is_backward_size_valid(b))
40178476Sjb			return LZMA_PROG_ERROR;
41178476Sjb
42178476Sjb		if (a->backward_size != b->backward_size)
43178476Sjb			return LZMA_DATA_ERROR;
44178476Sjb	}
45178476Sjb
46178476Sjb	return LZMA_OK;
47178476Sjb}
48178476Sjb