VirtualBox

source: vbox/trunk/src/libs/liblzma-5.8.1/common/index.h@ 108911

Last change on this file since 108911 was 108911, checked in by vboxsync, 4 weeks ago

libs/liblzma: Applied and adjusted our liblzma changes to 5.8.1 and export to OSE. jiraref:VBP-1635

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property sync-process set to export
File size: 2.4 KB
Line 
1// SPDX-License-Identifier: 0BSD
2
3///////////////////////////////////////////////////////////////////////////////
4//
5/// \file index.h
6/// \brief Handling of Index
7/// \note This header file does not include common.h or lzma.h because
8/// this file is needed by both liblzma internally and by the
9/// tests. Including common.h will include and define many things
10/// the tests do not need and prevents issues with header file
11/// include order. This way, if lzma.h or common.h are not
12/// included before this file it will break on every OS instead
13/// of causing more subtle errors.
14//
15// Author: Lasse Collin
16//
17///////////////////////////////////////////////////////////////////////////////
18
19#ifndef LZMA_INDEX_H
20#define LZMA_INDEX_H
21
22
23/// Minimum Unpadded Size
24#define UNPADDED_SIZE_MIN LZMA_VLI_C(5)
25
26/// Maximum Unpadded Size
27#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3))
28
29/// Index Indicator based on xz specification
30#define INDEX_INDICATOR 0
31
32
33/// Get the size of the Index Padding field. This is needed by Index encoder
34/// and decoder, but applications should have no use for this.
35extern uint32_t lzma_index_padding_size(const lzma_index *i);
36
37
38/// Set for how many Records to allocate memory the next time
39/// lzma_index_append() needs to allocate space for a new Record.
40/// This is used only by the Index decoder.
41extern void lzma_index_prealloc(lzma_index *i, lzma_vli records);
42
43
44/// Round the variable-length integer to the next multiple of four.
45static inline lzma_vli
46vli_ceil4(lzma_vli vli)
47{
48 assert(vli <= UNPADDED_SIZE_MAX);
49 return (vli + 3) & ~LZMA_VLI_C(3);
50}
51
52
53/// Calculate the size of the Index field excluding Index Padding
54static inline lzma_vli
55index_size_unpadded(lzma_vli count, lzma_vli index_list_size)
56{
57 // Index Indicator + Number of Records + List of Records + CRC32
58 return 1 + lzma_vli_size(count) + index_list_size + 4;
59}
60
61
62/// Calculate the size of the Index field including Index Padding
63static inline lzma_vli
64index_size(lzma_vli count, lzma_vli index_list_size)
65{
66 return vli_ceil4(index_size_unpadded(count, index_list_size));
67}
68
69
70/// Calculate the total size of the Stream
71static inline lzma_vli
72index_stream_size(lzma_vli blocks_size,
73 lzma_vli count, lzma_vli index_list_size)
74{
75 return LZMA_STREAM_HEADER_SIZE + blocks_size
76 + index_size(count, index_list_size)
77 + LZMA_STREAM_HEADER_SIZE;
78}
79
80#endif
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette