The R Project SVN R

Rev

Blame | Last modification | View Log | Download | RSS feed

///////////////////////////////////////////////////////////////////////////////
//
/// \file       stream_flags_common.c
/// \brief      Common stuff for Stream flags coders
//
//  Author:     Lasse Collin
//
//  This file has been put into the public domain.
//  You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////

#include "stream_flags_common.h"


const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 };
const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A };


extern LZMA_API(lzma_ret)
lzma_stream_flags_compare(
        const lzma_stream_flags *a, const lzma_stream_flags *b)
{
    // We can compare only version 0 structures.
    if (a->version != 0 || b->version != 0)
        return LZMA_OPTIONS_ERROR;

    // Check type
    if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX
            || (unsigned int)(b->check) > LZMA_CHECK_ID_MAX)
        return LZMA_PROG_ERROR;

    if (a->check != b->check)
        return LZMA_DATA_ERROR;

    // Backward Sizes are compared only if they are known in both.
    if (a->backward_size != LZMA_VLI_UNKNOWN
            && b->backward_size != LZMA_VLI_UNKNOWN) {
        if (!is_backward_size_valid(a) || !is_backward_size_valid(b))
            return LZMA_PROG_ERROR;

        if (a->backward_size != b->backward_size)
            return LZMA_DATA_ERROR;
    }

    return LZMA_OK;
}