RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
cpukit
compression
xz
xz_config.h
1
/*
2
* Private includes and definitions for userspace use of XZ Embedded
3
*
4
* Author: Lasse Collin <lasse.collin@tukaani.org>
5
*
6
* This file has been put into the public domain.
7
* You can do whatever you want with this file.
8
*/
9
10
#ifndef XZ_CONFIG_H
11
#define XZ_CONFIG_H
12
13
/* Uncomment to enable CRC64 support. */
14
/* #define XZ_USE_CRC64 */
15
16
/* Uncomment as needed to enable BCJ filter decoders. */
17
/* #define XZ_DEC_X86 */
18
/* #define XZ_DEC_POWERPC */
19
/* #define XZ_DEC_IA64 */
20
/* #define XZ_DEC_ARM */
21
/* #define XZ_DEC_ARMTHUMB */
22
/* #define XZ_DEC_SPARC */
23
24
/*
25
* MSVC doesn't support modern C but XZ Embedded is mostly C89
26
* so these are enough.
27
*/
28
#ifdef _MSC_VER
29
typedef
unsigned
char
bool;
30
# define true 1
31
# define false 0
32
# define inline __inline
33
#else
34
# include <stdbool.h>
35
#endif
36
37
#include <stdlib.h>
38
#include <string.h>
39
40
#include "xz.h"
41
42
#define kmalloc(size, flags) malloc(size)
43
#define kfree(ptr) free(ptr)
44
#define vmalloc(size) malloc(size)
45
#define vfree(ptr) free(ptr)
46
47
#define memeq(a, b, size) (memcmp(a, b, size) == 0)
48
#define memzero(buf, size) memset(buf, 0, size)
49
50
#ifndef min
51
# define min(x, y) ((x) < (y) ? (x) : (y))
52
#endif
53
#define min_t(type, x, y) min(x, y)
54
55
/*
56
* Some functions have been marked with __always_inline to keep the
57
* performance reasonable even when the compiler is optimizing for
58
* small code size. You may be able to save a few bytes by #defining
59
* __always_inline to plain inline, but don't complain if the code
60
* becomes slow.
61
*
62
* NOTE: System headers on GNU/Linux may #define this macro already,
63
* so if you want to change it, you need to #undef it first.
64
*/
65
#ifndef __always_inline
66
# ifdef __GNUC__
67
# define __always_inline \
68
inline __attribute__((__always_inline__))
69
# else
70
# define __always_inline inline
71
# endif
72
#endif
73
74
/* Inline functions to access unaligned unsigned 32-bit integers */
75
#ifndef get_unaligned_le32
76
static
inline
uint32_t get_unaligned_le32(
const
uint8_t *buf)
77
{
78
return
(uint32_t)buf[0]
79
| ((uint32_t)buf[1] << 8)
80
| ((uint32_t)buf[2] << 16)
81
| ((uint32_t)buf[3] << 24);
82
}
83
#endif
84
85
#ifndef get_unaligned_be32
86
static
inline
uint32_t get_unaligned_be32(
const
uint8_t *buf)
87
{
88
return
(uint32_t)(buf[0] << 24)
89
| ((uint32_t)buf[1] << 16)
90
| ((uint32_t)buf[2] << 8)
91
| (uint32_t)buf[3];
92
}
93
#endif
94
95
#ifndef put_unaligned_le32
96
static
inline
void
put_unaligned_le32(uint32_t val, uint8_t *buf)
97
{
98
buf[0] = (uint8_t)val;
99
buf[1] = (uint8_t)(val >> 8);
100
buf[2] = (uint8_t)(val >> 16);
101
buf[3] = (uint8_t)(val >> 24);
102
}
103
#endif
104
105
#ifndef put_unaligned_be32
106
static
inline
void
put_unaligned_be32(uint32_t val, uint8_t *buf)
107
{
108
buf[0] = (uint8_t)(val >> 24);
109
buf[1] = (uint8_t)(val >> 16);
110
buf[2] = (uint8_t)(val >> 8);
111
buf[3] = (uint8_t)val;
112
}
113
#endif
114
115
/*
116
* Use get_unaligned_le32() also for aligned access for simplicity. On
117
* little endian systems, #define get_le32(ptr) (*(const uint32_t *)(ptr))
118
* could save a few bytes in code size.
119
*/
120
#ifndef get_le32
121
# define get_le32 get_unaligned_le32
122
#endif
123
124
#endif
Generated by
1.18.0