]> icculus.org git repositories - icculus/xz.git/blob - src/liblzma/common/stream_flags_common.c
51dd981ca1930a90c7c277b341c17abebcc7e1b5
[icculus/xz.git] / src / liblzma / common / stream_flags_common.c
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 /// \file       stream_flags_common.c
4 /// \brief      Common stuff for Stream flags coders
5 //
6 //  Copyright (C) 2007-2008 Lasse Collin
7 //
8 //  This library is free software; you can redistribute it and/or
9 //  modify it under the terms of the GNU Lesser General Public
10 //  License as published by the Free Software Foundation; either
11 //  version 2.1 of the License, or (at your option) any later version.
12 //
13 //  This library is distributed in the hope that it will be useful,
14 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 //  Lesser General Public License for more details.
17 //
18 ///////////////////////////////////////////////////////////////////////////////
19
20 #include "stream_flags_common.h"
21
22
23 const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 };
24 const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A };
25
26
27 extern LZMA_API(lzma_ret)
28 lzma_stream_flags_compare(
29                 const lzma_stream_flags *a, const lzma_stream_flags *b)
30 {
31         // We can compare only version 0 structures.
32         if (a->version != 0 || b->version != 0)
33                 return LZMA_OPTIONS_ERROR;
34
35         // Check type
36         if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX
37                         || (unsigned int)(b->check) > LZMA_CHECK_ID_MAX)
38                 return LZMA_PROG_ERROR;
39
40         if (a->check != b->check)
41                 return LZMA_DATA_ERROR;
42
43         // Backward Sizes are compared only if they are known in both.
44         if (a->backward_size != LZMA_VLI_UNKNOWN
45                         && b->backward_size != LZMA_VLI_UNKNOWN) {
46                 if (!is_backward_size_valid(a) || !is_backward_size_valid(b))
47                         return LZMA_PROG_ERROR;
48
49                 if (a->backward_size != b->backward_size)
50                         return LZMA_DATA_ERROR;
51         }
52
53         return LZMA_OK;
54 }