xref: /freebsd/contrib/xz/src/liblzma/common/stream_flags_common.c (revision 7ef62cebc2f965b0f640263e179276928885e33d)
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 /// \file       stream_flags_common.c
4 /// \brief      Common stuff for Stream flags coders
5 //
6 //  Author:     Lasse Collin
7 //
8 //  This file has been put into the public domain.
9 //  You can do whatever you want with this file.
10 //
11 ///////////////////////////////////////////////////////////////////////////////
12 
13 #include "stream_flags_common.h"
14 
15 
16 const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 };
17 const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A };
18 
19 
20 extern LZMA_API(lzma_ret)
21 lzma_stream_flags_compare(
22 		const lzma_stream_flags *a, const lzma_stream_flags *b)
23 {
24 	// We can compare only version 0 structures.
25 	if (a->version != 0 || b->version != 0)
26 		return LZMA_OPTIONS_ERROR;
27 
28 	// Check type
29 	if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX
30 			|| (unsigned int)(b->check) > LZMA_CHECK_ID_MAX)
31 		return LZMA_PROG_ERROR;
32 
33 	if (a->check != b->check)
34 		return LZMA_DATA_ERROR;
35 
36 	// Backward Sizes are compared only if they are known in both.
37 	if (a->backward_size != LZMA_VLI_UNKNOWN
38 			&& b->backward_size != LZMA_VLI_UNKNOWN) {
39 		if (!is_backward_size_valid(a) || !is_backward_size_valid(b))
40 			return LZMA_PROG_ERROR;
41 
42 		if (a->backward_size != b->backward_size)
43 			return LZMA_DATA_ERROR;
44 	}
45 
46 	return LZMA_OK;
47 }
48