xref: /dflybsd-src/contrib/xz/src/liblzma/common/stream_flags_common.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino ///////////////////////////////////////////////////////////////////////////////
286d7f5d3SJohn Marino //
386d7f5d3SJohn Marino /// \file       stream_flags_common.c
486d7f5d3SJohn Marino /// \brief      Common stuff for Stream flags coders
586d7f5d3SJohn Marino //
686d7f5d3SJohn Marino //  Author:     Lasse Collin
786d7f5d3SJohn Marino //
886d7f5d3SJohn Marino //  This file has been put into the public domain.
986d7f5d3SJohn Marino //  You can do whatever you want with this file.
1086d7f5d3SJohn Marino //
1186d7f5d3SJohn Marino ///////////////////////////////////////////////////////////////////////////////
1286d7f5d3SJohn Marino 
1386d7f5d3SJohn Marino #include "stream_flags_common.h"
1486d7f5d3SJohn Marino 
1586d7f5d3SJohn Marino 
1686d7f5d3SJohn Marino const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 };
1786d7f5d3SJohn Marino const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A };
1886d7f5d3SJohn Marino 
1986d7f5d3SJohn Marino 
2086d7f5d3SJohn Marino extern LZMA_API(lzma_ret)
lzma_stream_flags_compare(const lzma_stream_flags * a,const lzma_stream_flags * b)2186d7f5d3SJohn Marino lzma_stream_flags_compare(
2286d7f5d3SJohn Marino 		const lzma_stream_flags *a, const lzma_stream_flags *b)
2386d7f5d3SJohn Marino {
2486d7f5d3SJohn Marino 	// We can compare only version 0 structures.
2586d7f5d3SJohn Marino 	if (a->version != 0 || b->version != 0)
2686d7f5d3SJohn Marino 		return LZMA_OPTIONS_ERROR;
2786d7f5d3SJohn Marino 
2886d7f5d3SJohn Marino 	// Check type
2986d7f5d3SJohn Marino 	if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX
3086d7f5d3SJohn Marino 			|| (unsigned int)(b->check) > LZMA_CHECK_ID_MAX)
3186d7f5d3SJohn Marino 		return LZMA_PROG_ERROR;
3286d7f5d3SJohn Marino 
3386d7f5d3SJohn Marino 	if (a->check != b->check)
3486d7f5d3SJohn Marino 		return LZMA_DATA_ERROR;
3586d7f5d3SJohn Marino 
3686d7f5d3SJohn Marino 	// Backward Sizes are compared only if they are known in both.
3786d7f5d3SJohn Marino 	if (a->backward_size != LZMA_VLI_UNKNOWN
3886d7f5d3SJohn Marino 			&& b->backward_size != LZMA_VLI_UNKNOWN) {
3986d7f5d3SJohn Marino 		if (!is_backward_size_valid(a) || !is_backward_size_valid(b))
4086d7f5d3SJohn Marino 			return LZMA_PROG_ERROR;
4186d7f5d3SJohn Marino 
4286d7f5d3SJohn Marino 		if (a->backward_size != b->backward_size)
4386d7f5d3SJohn Marino 			return LZMA_DATA_ERROR;
4486d7f5d3SJohn Marino 	}
4586d7f5d3SJohn Marino 
4686d7f5d3SJohn Marino 	return LZMA_OK;
4786d7f5d3SJohn Marino }
48