Showing preview only (424K chars total). Download the full file or copy to clipboard to get everything.
Repository: dpdkcap/dpdkcap
Branch: master
Commit: 3ef1997e378c
Files: 32
Total size: 409.2 KB
Directory structure:
gitextract_tkxhxst4/
├── .gitignore
├── .travis.yml
├── LICENSE.txt
├── Makefile
├── README.md
└── src/
├── core_capture.c
├── core_capture.h
├── core_write.c
├── core_write.h
├── dpdkcap.c
├── lzo/
│ ├── lzowrite.c
│ ├── lzowrite.h
│ └── minilzo/
│ ├── README.LZO
│ ├── lzoconf.h
│ ├── lzodefs.h
│ ├── minilzo.c
│ └── minilzo.h
├── numa.c
├── numa.h
├── parse.c
├── parse.h
├── pcap.c
├── pcap.h
├── statistics.c
├── statistics.h
├── statistics_ncurses.c
├── tasks.c
├── tasks.h
├── timestamp.c
├── timestamp.h
├── utils.c
└── utils.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
build
================================================
FILE: .travis.yml
================================================
language: c
addons:
apt:
packages:
- libncurses-dev
- linux-headers-4.15.0-58-generic
- libnuma-dev
cache:
directories:
- $HOME/dpdk
before_install:
- >
[ -z "$(ls -A $HOME/dpdk)" ] &&
cd $HOME/dpdk &&
wget http://fast.dpdk.org/rel/dpdk-18.11.5.tar.xz &&
tar --strip-components=1 -axvf dpdk-18.11.5.tar.xz &&
export RTE_KERNELDIR=/lib/modules/4.15.0-58-generic/build &&
make install T=x86_64-native-linuxapp-gcc; true
script:
- cd $TRAVIS_BUILD_DIR
- export RTE_SDK=$HOME/dpdk
- export RTE_TARGET=x86_64-native-linuxapp-gcc
- make
================================================
FILE: LICENSE.txt
================================================
BSD LICENSE
Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
Copyright(c) 2015 University of Twente
Copyright(c) 2015 Wouter de Vries <w.b.devries[at]utwente.nl>
Copyright(c) 2016 LAAS-CNRS
Copyright(c) 2016 Gilles roudiere <gilles.roudiere[at]laas.fr>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of Intel Corporation, LAAS-CNRS nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: Makefile
================================================
# binary name
APP = dpdkcap
# all source (prefix gets added later)
SRC_DIR = src
#SOURCES := dpdkcap.c core_write.c core_capture.c statistics_ncurses.c pcap.c utils.c lzo/minilzo/minilzo.c lzo/lzowrite.c
SOURCES := dpdkcap.c core_write.c core_capture.c statistics.c timestamp.c numa.c tasks.c parse.c pcap.c utils.c lzo/minilzo/minilzo.c lzo/lzowrite.c
PKGCONF ?= pkg-config
# Build using pkg-config variables if possible
ifneq ($(shell $(PKGCONF) --exists libdpdk && echo 0),0)
$(error "no installation of DPDK found")
endif
SRCS-y += $(addprefix $(SRC_DIR)/, $(SOURCES))
all: shared
.PHONY: shared static
shared: build/$(APP)-shared
ln -sf $(APP)-shared build/$(APP)
static: build/$(APP)-static
ln -sf $(APP)-static build/$(APP)
PC_FILE := $(shell $(PKGCONF) --path libdpdk 2>/dev/null)
CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk)
LDFLAGS_SHARED = $(shell $(PKGCONF) --libs libdpdk)
LDFLAGS_STATIC = $(shell $(PKGCONF) --static --libs libdpdk)
LDFLAGS_SHARED += $(shell $(PKGCONF) --libs ncurses)
LDFLAGS_STATIC += $(shell $(PKGCONF) --static --libs ncurses)
LDFLAGS_SHARED += $(shell $(PKGCONF) --libs libpcap)
LDFLAGS_STATIC += $(shell $(PKGCONF) --static --libs libpcap)
ifeq ($(MAKECMDGOALS),static)
# check for broken pkg-config
ifeq ($(shell echo $(LDFLAGS_STATIC) | grep 'whole-archive.*l:lib.*no-whole-archive'),)
$(warning "pkg-config output list does not contain drivers between 'whole-archive'/'no-whole-archive' flags.")
$(error "Cannot generate statically-linked binaries with this version of pkg-config")
endif
endif
CFLAGS += -DALLOW_EXPERIMENTAL_API
build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build
$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC)
build:
@mkdir -p $@
.PHONY: clean
clean:
rm -f build/$(APP) build/$(APP)-static build/$(APP)-shared
test -d build && rmdir -p build || true
================================================
FILE: README.md
================================================
<p align="center">
<img src="./media/DPDKCapLogo_400x260.png"/>
<p/>
# DPDKCap
DPDKCap is packet capture tool based on DPDK. It provides a multi-port,
multi-core optimized capture with on the fly compression. Thus particularly
suiting captures at very high speeds (more than 10Gpbs).
### Build status
| Branch | Status |
|---|---|
| Master | [](https://travis-ci.org/dpdkcap/dpdkcap) |
| Develop | [](https://travis-ci.org/dpdkcap/dpdkcap) |
## 1. Installation and platform configuration
### 1.1 Install DPDK
Please DPDK installation instruction, either from the [DPDK quick start
instructions](http://dpdk.org/doc/quick-start) or from your operating system
specific [Getting started
guide](http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html).
### 1.2 Install dependencies
DPDKCap requires the following dependencies to be built:
- libncurses-dev
### 1.3 Build and Install DPDKCap
To build DPDKCap, you first need to set `RTE_SDK` and `RTE_TARGET`.
```
$ export RTE_SDK=... # Replace by your DPDK install directory
$ export RTE_TARGET=x86_64-native-linuxapp-gcc # Replace by your target
```
To build DPDKCap, run the following command into DPDKCap root directory:
```
$ make
```
## 2. Usage
DPDKCap works as a standard DPDK application. Thus it needs Environment
Abstraction Layer (EAL) arguments before dpdkcap specific ones:
```
# ./build/dpdkcap [EAL args] -- [dpdkcap args]
```
Check out the [dpdk documentation](http://dpdk.org/doc/guides/index.html) for
more information on EAL arguments. You will probably need the `-l` option for
cores allocation and the `--huge-dir` one for providing huge pages directory.
To get a list of DPDKCap specific available options, run:
```
# ./build/dpdkcap [EAL args] -- --help
```
### 2.1 Selecting cores for capture
From the available ports detected by DPDK, you can select ports to capture by
using the `-p, --portmask` option. This option takes as argument an hexadecimal
mask whose bits represent each port. By default, DPDKCap uses only the first
port (portmask=0x1).
For example, if you want to capture ports 1, 2 and 4, use: `--portmask 0xb`
### 2.2 Assigning tasks to lcores
DPDKCap assigns two different tasks to lcores:
- Capturing cores enqueue packets from Ethernet ports queues into a main
buffer. Each captured port must be assigned at least a core.
- Writing cores extract packets from this buffer and write them into LZO
compressed pcap capture files. Each writing core writes into a different
file.
As a consequence, DPDKCap needs, at least, a single writing core and as many
capturing cores as ports you want to capture. Finally, a last lcore must be
kept to handle logs and statistics. However, depending on your traffic
bandwidth and your system capabilities, you might need to use more cores.
The `-c, --per_port_c_cores` option allocates `NB_CORES_PER_PORT` capturing
cores **per selected port**.
The `-w, --num_w_cores` option allocates a **total** of `NB_CORES` writing
cores.
Note that the writing task requires more computational power than the capture
one (due to compression), thus you will probably need to allow more writing
cores than capture ones. This being said, size your storage system accordingly,
as thousands cores could not achieve a full capture with a too low storage
system bandwidth.
### 2.3 Limiting file size or duration
Depending on the data you want to capture, you might need to split the capture
into several files. Two options are available to limit file size/duration:
- The `-G, --rotate_seconds` option creates a new file every `T` seconds.
- The `-C, --limit_file_size` option creates a new file when the current file
size goes over the specified `SIZE`.
You can specify the output file template using the `-o, --output` option. This
is necessary with the `-G, --rotate_seconds` option if you do not want to erase
the same file again and again. See the following section.
### 2.4 Setting output template
The `-o,--output` let you provide a template for the output file. This template
is formatted according to the following tokens:
- `%COREID` this is replaced by the writing core id into the filename. This
token is mandatory and will be automatically appended to the output file
template if not present.
- `%FCOUNT` this is replaced by a counter that allows distinguishing files
created by the `-C, --limit_file_size` option. If this option is used, this
token is mandatory and will be automatically appended to the output file
template if not present.
- Date *strftime* tokens. These tokens are replaced according to *strftime*
standard. This date is updated every time the `-G, --rotate_seconds` option
triggers a file change. These tokens are not mandatory with this option, but
you might overwrite previously created files.
### 2.5 Other options
- `-s, --snaplen` limits the packet capture to LENGTH bytes.
- `-S, --statistics` prints a set of statistics while the capture is
running.
- `--logs` output logs into the specified file instead of stderr.
- `--no-compression` disables the LZO compression. This is not advised, as it
greatly increase the disk I/O. It can however be used for capturing low speed
traffic.
- `-m, --num_mbufs` changes the number of memory buffers used by dpdkcap. Note
that the default value might not work in your situation (mbufs pool
allocation failure at startup or RX mbufs allocation failures while running).
Optimal values (in term of memory usage) are powers of 2 minus one
(n=2^q-1).
- `-d, --rx_desc` allow you to fix the number of RX descriptors per queue used.
This value can be fixed in a per port fashion. The following formats are
available:
- A single integer value: fixes the given number of RX descriptors for all
ports.
- A list of key-values, assigning a value to the given port id, following this
format:
```
<matrix> := <key>.<nb_rx_desc> { "," <key>.<nb_rx_desc> "," ...}
<key> := { <interval> | <port> }
<interval> := <lower_port> "-" <upper_port>
```
Examples:
```
512 - all ports have 512 RX desc per queue
0.256, 1.512 - port 0 has 256 RX desc per queue,
port 1 has 512 RX desc per queue
0-2.256, 3.1024 - ports 0, 1 and 2 have 256 RX desc per queue,
port 3 has 1024 RX desc per queue
```
</div>
## 3. Troubleshooting
Here is a list of common issues and how to solve them:
- Mbufs pool allocation failure: try to reduce the number of memory buffers
used with the `-m, -num_mbufs` option.
- Mbufs allocation failures (while running): try to raise the number of memory
buffers used with the `-m, -num_mbufs` option.
- Problems with with RX queues configuration: the default number of RX
descriptors configured might be too high for your interface. Try to change
the number of RX descriptors used with the `-d, --rx_desc` option.
## 4. Software License Agreements
DPDKCap is distributed under the BSD License, see LICENSE.txt.
================================================
FILE: src/core_capture.c
================================================
#include <stdbool.h>
#include <signal.h>
#include <string.h>
#include <rte_log.h>
#include <rte_lcore.h>
#include <rte_ethdev.h>
#include <rte_version.h>
#include "core_capture.h"
#include "timestamp.h"
#define RTE_LOGTYPE_DPDKCAP RTE_LOGTYPE_USER1
uint32_t wait_link_up(const struct core_capture_config *config, bool wait)
{
struct rte_eth_link link;
if (wait) {
rte_eth_link_get(config->port, &link);
} else {
rte_eth_link_get_nowait(config->port, &link);
}
if (link.link_status != RTE_ETH_LINK_UP) {
while (link.link_status != RTE_ETH_LINK_UP) {
RTE_LOG(INFO, DPDKCAP,
"Capture core %u waiting for port %u to come up\n",
rte_lcore_id(), config->port);
rte_eth_link_get(config->port, &link);
}
RTE_LOG(INFO, DPDKCAP,
"Core %u is capturing packets for port %u at %u Mbps\n",
rte_lcore_id(), config->port, link.link_speed);
}
return (link.link_speed);
}
/*
* Capture the traffic from the given port/queue tuple
*/
int capture_core(const struct core_capture_config *config)
{
struct rte_mbuf *bufs[DPDKCAP_CAPTURE_BURST_SIZE];
uint16_t nb_rx;
uint32_t linkspeed = 0;
struct timeval tv;
uint64_t tvns;
int nb_rx_enqueued;
int i;
/* Init stats */
*(config->stats) = (struct core_capture_stats) {
.core_id = rte_lcore_id(),
.packets = 0,
.missed_packets = 0,
};
linkspeed = wait_link_up(config, true);
/* Run until the application is quit or killed. */
for (;;) {
/* Stop condition */
if (unlikely(*(config->stop_condition))) {
break;
}
/* get timestamp, convert to ns */
gettimeofday(&tv, NULL);
tvns = (tv.tv_sec * NSEC_PER_SEC) + (tv.tv_usec * 1000);
/* Retrieve packets and put them into the ring */
nb_rx = rte_eth_rx_burst(config->port, config->queue,
bufs, DPDKCAP_CAPTURE_BURST_SIZE);
if (unlikely(nb_rx == 0)) {
rte_delay_us(2);
linkspeed = wait_link_up(config, false);
continue;
} else {
/* add timestamps to mbufs */
for (i = 0; i < nb_rx; i++) {
*timestamp_field(bufs[i]) = tvns;
}
#if RTE_VERSION >= RTE_VERSION_NUM(17,5,0,16)
nb_rx_enqueued =
rte_ring_enqueue_burst(config->ring, (void *)bufs,
nb_rx, NULL);
#else
nb_rx_enqueued =
rte_ring_enqueue_burst(config->ring, (void *)bufs,
nb_rx);
#endif
/* Update stats */
if (nb_rx_enqueued == nb_rx) {
config->stats->packets += nb_rx;
} else {
config->stats->missed_packets += nb_rx;
/* Free whatever we can't put in the write ring */
for (i = nb_rx_enqueued; i < nb_rx; i++) {
rte_pktmbuf_free(bufs[i]);
}
}
}
}
RTE_LOG(INFO, DPDKCAP, "Closed capture core %d (port %d)\n",
rte_lcore_id(), config->port);
return 0;
}
================================================
FILE: src/core_capture.h
================================================
#ifndef DPDKCAP_CORE_CAPTURE_H
#define DPDKCAP_CORE_CAPTURE_H
#include <stdint.h>
#define DPDKCAP_CAPTURE_BURST_SIZE 256
/* Core configuration structures */
struct core_capture_config {
struct rte_ring *ring;
bool volatile *stop_condition;
struct core_capture_stats *stats;
uint8_t port;
uint8_t queue;
};
/* Statistics structure */
struct core_capture_stats {
int core_id;
uint64_t packets; //Packets successfully enqueued
uint64_t missed_packets; //Packets core could not enqueue
};
/* Launches a capture task */
int capture_core(const struct core_capture_config *config);
#endif
================================================
FILE: src/core_write.c
================================================
#include <stdbool.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
#include <rte_ring.h>
#include <rte_lcore.h>
#include <rte_log.h>
#include <rte_mbuf.h>
#include <rte_branch_prediction.h>
#include <rte_version.h>
#include <rte_random.h>
#include "lzo/lzowrite.h"
#include "pcap.h"
#include "utils.h"
#include "core_write.h"
#include "timestamp.h"
#define MIN(a,b) (((a)<(b))?(a):(b))
#define RTE_LOGTYPE_DPDKCAP RTE_LOGTYPE_USER1
/*
* Change file name from template
*/
static void format_from_template(char *filename,
const char *template,
const int core_id,
const int file_count,
const struct timeval *file_start)
{
char str_buf[DPDKCAP_OUTPUT_FILENAME_LENGTH];
//Change file name
strncpy(filename, template, DPDKCAP_OUTPUT_FILENAME_LENGTH);
snprintf(str_buf, 50, "%02d", core_id);
while (str_replace(filename, "\%COREID", str_buf)) ;
snprintf(str_buf, 50, "%03d", file_count);
while (str_replace(filename, "\%FCOUNT", str_buf)) ;
strncpy(str_buf, filename, DPDKCAP_OUTPUT_FILENAME_LENGTH);
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
strftime(filename, DPDKCAP_OUTPUT_FILENAME_LENGTH, str_buf,
localtime(&(file_start->tv_sec)));
#pragma GCC diagnostic pop
}
/*
* Open pcap file for writing
*/
static FILE *open_pcap(char *output_file)
{
FILE *file;
//Open file
file = fopen(output_file, "w");
if (unlikely(!file)) {
RTE_LOG(ERR, DPDKCAP,
"Core %d could not open '%s' in write mode: %d (%s)\n",
rte_lcore_id(), output_file, errno, strerror(errno));
}
return file;
}
/*
* Write into a pcap file
*/
static int write_pcap(FILE * file, void *src, size_t len)
{
size_t retval;
// Write file
retval = fwrite(src, 1, len, file);
if (unlikely(retval != len)) {
RTE_LOG(ERR, DPDKCAP, "Could not write into file: %d (%s)\n",
errno, strerror(errno));
return -1;
}
return retval;
}
/*
* Close and free a pcap file
*/
static int close_pcap(FILE * file)
{
int retval;
// Close file
retval = fclose(file);
if (unlikely(retval)) {
RTE_LOG(ERR, DPDKCAP, "Could not close file: %d (%s)\n",
errno, strerror(errno));
}
return retval;
}
/*
* Allocates a new lzowrite_buffer from the given file
*/
static struct lzowrite_buffer *open_lzo_pcap(char *output_file)
{
struct lzowrite_buffer *buffer;
FILE *file;
//Open file
file = fopen(output_file, "w");
if (unlikely(!file)) {
RTE_LOG(ERR, DPDKCAP,
"Core %d could not open '%s' in write mode: %d (%s)\n",
rte_lcore_id(), output_file, errno, strerror(errno));
goto cleanup;
}
//Init lzo file
buffer = lzowrite_init(file);
if (unlikely(!buffer)) {
RTE_LOG(ERR, DPDKCAP,
"Core %d could not init lzo in file: %s\n",
rte_lcore_id(), output_file);
goto cleanup_file;
}
return buffer;
cleanup_file:
fclose(file);
cleanup:
return NULL;
}
/*
* Free a lzowrite_buffer
*/
static int close_lzo_pcap(struct lzowrite_buffer *buffer)
{
FILE *file = buffer->output;
int retval;
/* Closes the lzo buffer */
retval = lzowrite_close(buffer);
if (unlikely(retval)) {
RTE_LOG(ERR, DPDKCAP, "Could not close lzowrite_buffer.\n");
return retval;
}
/* Close file */
retval = fclose(file);
if (unlikely(retval)) {
RTE_LOG(ERR, DPDKCAP, "Could not close file: %d (%s)\n",
errno, strerror(errno));
return retval;
}
return 0;
}
/*
* Write the packets form the write ring into a pcap compressed file
*/
int write_core(const struct core_write_config *config)
{
unsigned int packet_length, wire_packet_length, compressed_length;
unsigned int remaining_bytes;
int to_write;
int bytes_to_write;
uint64_t bpf_rc[DPDKCAP_WRITE_BURST_SIZE];
struct rte_mbuf *dequeued[DPDKCAP_WRITE_BURST_SIZE];
struct rte_mbuf *bufptr;
struct pcap_packet_header header;
struct timeval tv;
struct pcap_header pcp;
int retval = 0;
int written;
void *(*file_open_func)(char *);
int (*file_write_func)(void *, void *, int);
int (*file_close_func)(void *);
int task_idx;
//Init stats
*(config->stats) = (struct core_write_stats) {
.core_id = rte_lcore_id(),
.current_file_packets = 0,
.current_file_bytes = 0,
.current_file_compressed_bytes = 0,
.packets = 0,
.bytes = 0,
.compressed_bytes = 0,
};
for (;;) {
if (unlikely
(*(config->stop_condition)
&& rte_ring_empty(config->ring))) {
break;
}
//Get time
gettimeofday(&tv, NULL);
check_scan_taskdir(config->taskdir, tv.tv_sec);
// TODO something clever so tasks dont explode if update changes compression
//Get packets from the ring
#if RTE_VERSION >= RTE_VERSION_NUM(17,5,0,16)
to_write =
rte_ring_dequeue_burst(config->ring, (void *)dequeued,
DPDKCAP_WRITE_BURST_SIZE, NULL);
#else
to_write =
rte_ring_dequeue_burst(config->ring, (void *)dequeued,
DPDKCAP_WRITE_BURST_SIZE);
#endif
if (unlikely(to_write == 0)) {
rte_delay_us(2);
continue;
}
for (task_idx = 0; task_idx < DPDKCAP_MAX_TASKS_PER_DIR;
task_idx++) {
struct task *task = &config->taskdir->tasks[task_idx];
if (task->task_state != TASK_ACTIVE)
continue;
if (task->compression) {
file_open_func =
(void *(*)(char *))open_lzo_pcap;
file_write_func =
(int (*)(void *, void *, int))lzowrite;
file_close_func =
(int (*)(void *))close_lzo_pcap;
} else {
file_open_func = (void *(*)(char *))open_pcap;
file_write_func =
(int (*)(void *, void *, int))write_pcap;
file_close_func = (int (*)(void *))close_pcap;
}
if (task->bpf) {
rte_bpf_exec_burst(task->bpf, (void *)dequeued,
bpf_rc, to_write);
}
// TODO fix stats
//Update stats
config->stats->packets += to_write;
int i;
bool file_changed;
uint64_t tvns;
for (i = 0; i < to_write; i++) {
if (task->bpf) {
if (!bpf_rc[i]) {
// TODO stats
continue;
}
}
if (task->sampling) {
if (rte_rand_max(task->sampling)) {
// TODO stats
continue;
}
}
//Cast to packet
bufptr = dequeued[i];
wire_packet_length =
rte_pktmbuf_pkt_len(bufptr);
//get pkt timestamp
tvns = *timestamp_field(bufptr);
tv.tv_sec = tvns / NSEC_PER_SEC;
tv.tv_usec = (tvns % NSEC_PER_SEC) / 1000;
//Truncate packet if needed
packet_length =
MIN(task->snaplen, wire_packet_length);
// Need to close existing file?
//
// expired output_rotate_seconds?
if (task->output_buffer &&
task->output_rotate_seconds &&
(uint32_t) (tv.tv_sec -
task->output_tstamp.tv_sec) >=
task->output_rotate_seconds) {
task->output_count = 0;
file_close_func(task->output_buffer);
task->output_buffer = NULL;
}
// changed strftime?
if (task->output_buffer &&
!task->output_rotate_seconds &&
tv.tv_sec > task->output_tstamp.tv_sec) {
char check_fn[DPDKCAP_MAX_PATH_LEN];
task->output_tstamp = tv;
format_from_template(check_fn,
task->
output_template,
rte_lcore_id(),
task->output_count,
&tv);
if (strcmp(check_fn,task->output_filename)) {
task->output_count = 0;
file_close_func(task->output_buffer);
task->output_buffer = NULL;
}
}
// reached output_rotate_size?
if (task->output_buffer
&& task->output_rotate_size
&& task->output_size >=
task->output_rotate_size) {
task->output_count++;
file_close_func(task->output_buffer);
task->output_buffer = NULL;
}
//Open new file
if (task->output_buffer == NULL) {
task->output_tstamp = tv;
//Change file name
format_from_template(task->
output_filename,
task->
output_template,
rte_lcore_id(),
task->output_count,
&task->
output_tstamp);
//Update stats
config->stats->current_file_packets = 0;
config->stats->current_file_bytes = 0;
memcpy(config->stats->output_file,
task->output_filename,
DPDKCAP_OUTPUT_FILENAME_LENGTH);
RTE_LOG(INFO, DPDKCAP,
"Core %d task %d:%s writing to '%s'.\n",
rte_lcore_id(), task_idx,
task->task_filename,
task->output_filename);
//TODO append mode
//Reopen a file
task->output_buffer =
file_open_func(task->
output_filename);
if (unlikely(!task->output_buffer)) {
task->task_state =
TASK_INACTIVE;
RTE_LOG(WARNING, DPDKCAP,
"Core %d task %d open(%s) failed.\n",
rte_lcore_id(),
task_idx,
task->output_filename);
break;
}
//Init the common pcap header
pcap_header_init(&pcp, task->snaplen);
//Write pcap header
written =
file_write_func(task->output_buffer,
&pcp,
sizeof(struct
pcap_header));
if (unlikely(written < 0)) {
retval = -1;
goto cleanup;
}
//Reset file size
task->output_size = written;
}
//Write block header
// TODO get better packet timestamps
header.timestamp = (int32_t) tv.tv_sec;
header.microseconds = (int32_t) tv.tv_usec;
header.packet_length = packet_length;
header.packet_length_wire = wire_packet_length;
written =
file_write_func(task->output_buffer,
&header,
sizeof(struct
pcap_packet_header));
if (unlikely(written < 0)) {
retval = -1;
goto cleanup;
}
task->output_size += written;
//Write content
remaining_bytes = packet_length;
compressed_length = 0;
while (bufptr != NULL && remaining_bytes > 0) {
bytes_to_write =
MIN(rte_pktmbuf_data_len(bufptr),
remaining_bytes);
written =
file_write_func(task->output_buffer,
rte_pktmbuf_mtod
(bufptr, void *),
bytes_to_write);
if (unlikely(written < 0)) {
retval = -1;
goto cleanup;
}
bufptr = bufptr->next;
remaining_bytes -= bytes_to_write;
compressed_length += written;
task->output_size += written;
}
//Update stats
config->stats->bytes += packet_length;
config->stats->compressed_bytes +=
compressed_length;
config->stats->current_file_packets++;
config->stats->current_file_bytes +=
packet_length;
config->stats->current_file_compressed_bytes =
task->output_size;
} // for pkt
} // for task
// Free all buffers
// TODO archive ring
rte_pktmbuf_free_bulk(dequeued, to_write);
}
cleanup:
//Close pcap file
for (task_idx = 0; task_idx < DPDKCAP_MAX_TASKS_PER_DIR; task_idx++) {
struct task *task = &config->taskdir->tasks[task_idx];
if (task->output_buffer) {
if (task->compression) {
file_close_func =
(int (*)(void *))close_lzo_pcap;
} else {
file_close_func = (int (*)(void *))close_pcap;
}
file_close_func(task->output_buffer);
task->output_buffer = NULL;
}
}
RTE_LOG(INFO, DPDKCAP, "Closed writing core %d\n", rte_lcore_id());
return retval;
}
================================================
FILE: src/core_write.h
================================================
#ifndef DPDKCAP_CORE_WRITE_H
#define DPDKCAP_CORE_WRITE_H
#include <stdbool.h>
#include <stdint.h>
#include "tasks.h"
#define DPDKCAP_OUTPUT_FILENAME_LENGTH 100
#define DPDKCAP_WRITE_BURST_SIZE 256
/* Writing core configuration */
struct core_write_config {
struct rte_ring *ring;
bool volatile *stop_condition;
struct core_write_stats *stats;
struct taskdir *taskdir;
};
/* Statistics structure */
struct core_write_stats {
int core_id;
char output_file[DPDKCAP_OUTPUT_FILENAME_LENGTH];
uint64_t current_file_packets;
uint64_t current_file_bytes;
uint64_t current_file_compressed_bytes;
uint64_t packets;
uint64_t bytes;
uint64_t compressed_bytes;
};
/* Launches a write task */
int write_core(const struct core_write_config *config);
#endif
================================================
FILE: src/dpdkcap.c
================================================
#include <stdint.h>
#include <stdbool.h>
#include <signal.h>
#include <argp.h>
#include <inttypes.h>
#include <rte_common.h>
#include <rte_log.h>
#include <rte_memcpy.h>
#include <rte_ethdev.h>
#include <rte_errno.h>
#include <rte_string_fns.h>
#include <rte_version.h>
#include <rte_malloc.h>
#include "pcap.h"
#include "numa.h"
#include "core_write.h"
#include "core_capture.h"
#include "statistics.h"
#include "timestamp.h"
#define STR1(x) #x
#define STR(x) STR1(x)
#define RX_DESC_DEFAULT 512
#define NUM_MBUFS_DEFAULT 8192
#define MBUF_CACHE_SIZE 256
#define MAX_LCORES 1000
#define DPDKCAP_OUTPUT_TEMPLATE_TOKEN_FILECOUNT "\%FCOUNT"
#define DPDKCAP_OUTPUT_TEMPLATE_TOKEN_CORE_ID "\%COREID"
#define DPDKCAP_OUTPUT_TEMPLATE_DEFAULT "output_" \
DPDKCAP_OUTPUT_TEMPLATE_TOKEN_CORE_ID
#define DPDKCAP_OUTPUT_TEMPLATE_LENGTH 2 * DPDKCAP_OUTPUT_FILENAME_LENGTH
#define RTE_LOGTYPE_DPDKCAP RTE_LOGTYPE_USER1
/* ARGP */
const char *argp_program_version = "dpdkcap 1.1";
const char *argp_program_bug_address = "w.b.devries@utwente.nl";
static char doc[] = "A DPDK-based packet capture tool";
static char args_doc[] = "";
static struct argp_option options[] = {
{"output", 'o', "FILE", 0, "Output FILE template (don't add the "
"extension). Use \"" DPDKCAP_OUTPUT_TEMPLATE_TOKEN_CORE_ID "\" for "
"inserting the lcore id into the file name (automatically added if not "
"used). (default: " DPDKCAP_OUTPUT_TEMPLATE_DEFAULT ")", 0},
{"statistics", 'S', 0, 0, "Print statistics every few seconds.", 0},
{"num-mbuf", 'm', "NB_MBUF", 0, "Total number of memory buffer used to "
"store the packets. Optimal values, in terms of memory usage, are powers "
"of 2 minus 1 (2^q-1) (default: " STR(NUM_MBUFS_DEFAULT) ")", 0},
{"per_port_c_cores", 'c', "NB_CORES_PER_PORT", 0, "Number of cores per "
"port used for capture (default: 1)", 0},
{"num_w_cores", 'w', "NB_CORES", 0, "Total number of cores used for "
"writing (default: 1).", 0},
{"rx_desc", 'd', "RX_DESC_MATRIX", 0, "This option can be used to "
"override the default number of RX descriptors configured for all queues "
"of each port (" STR(RX_DESC_DEFAULT) "). RX_DESC_MATRIX can have "
"multiple formats:\n"
"- A single positive value, which will simply replace the default "
" number of RX descriptors,\n"
"- A list of key-values, assigning a configured number of RX "
"descriptors to the given port(s). Format: \n"
" <matrix> := <key>.<nb_rx_desc> { \",\" <key>.<nb_rx_desc> \",\" "
"...\n"
" <key> := { <interval> | <port> }\n"
" <interval> := <lower_port> \"-\" <upper_port>\n"
" Examples: \n"
" 512 - all ports have 512 RX desc per queue\n"
" 0.256, 1.512 - port 0 has 256 RX desc per queue,\n"
" port 1 has 512 RX desc per queue\n"
" 0-2.256, 3.1024 - ports 0, 1 and 2 have 256 RX desc per "
" queue,\n"
" port 3 has 1024 RX desc per queue.", 0},
{"rotate_seconds", 'G', "T", 0, "Create a new set of files every T "
"seconds. Use strftime formats within the output file template to rename "
"each file accordingly.", 0},
{"limit_file_size", 'C', "SIZE", 0, "Before writing a packet, check "
"whether the target file excess SIZE bytes. If so, creates a new file. "
"Use \"" DPDKCAP_OUTPUT_TEMPLATE_TOKEN_FILECOUNT
"\" within the output " "file template to index each new file.", 0},
{"portmask", 'p', "PORTMASK", 0, "Ethernet ports mask (default: 0x1).",
0},
{"snaplen", 's', "LENGTH", 0,
"Snap the capture to snaplen bytes " "(default: 65535).", 0},
{"logs", 700, "FILE", 0,
"Writes the logs into FILE instead of " "stderr.", 0},
{"no-compression", 701, 0, 0, "Do not compress capture files.", 0},
{"taskdir", 't', "TASKDIR", 0, "Directory to scan for task files.", 0},
{"taskinterval", 'T', "TASKINTERVAL", 0,
"Taskdir scan interval in seconds.", 0},
{0}
};
// XXX TODO NUMA
struct arguments {
char *args[2];
char output_file_template[DPDKCAP_OUTPUT_FILENAME_LENGTH];
uint64_t portmask;
int statistics;
unsigned long nb_mbufs;
char *num_rx_desc_str_matrix;
unsigned long per_port_c_cores;
unsigned long num_w_cores;
int no_compression;
unsigned long snaplen;
unsigned long rotate_seconds;
uint64_t file_size_limit;
char *log_file;
char *taskdir;
int taskinterval;
};
static int parse_matrix_opt(char *arg, unsigned long *matrix,
unsigned long max_len)
{
char *comma_tokens[100];
int nb_comma_tokens;
char *dot_tokens[3];
int nb_dot_tokens;
char *dash_tokens[3];
int nb_dash_tokens;
char *end;
unsigned long left_key;
unsigned long right_key;
unsigned long value;
nb_comma_tokens =
rte_strsplit(arg, strlen(arg), comma_tokens, 100, ',');
// Case with a single value
if (nb_comma_tokens == 1 && strchr(arg, '.') == NULL) {
errno = 0;
value = strtoul(arg, &end, 10);
if (errno || *end != '\0')
return -EINVAL;
for (unsigned long key = 0; key < max_len; key++) {
matrix[key] = value;
}
return 0;
}
// Key-value matrix
if (nb_comma_tokens > 0) {
for (int comma = 0; comma < nb_comma_tokens; comma++) {
// Split between left and right side of the dot
nb_dot_tokens = rte_strsplit(comma_tokens[comma],
strlen(comma_tokens
[comma]),
dot_tokens, 3, '.');
if (nb_dot_tokens != 2)
return -EINVAL;
// Handle value
errno = 0;
value = strtoul(dot_tokens[1], &end, 10);
if (errno || *end != '\0')
return -EINVAL;
// Handle key
nb_dash_tokens = rte_strsplit(dot_tokens[0],
strlen(dot_tokens[0]),
dash_tokens, 3, '-');
if (nb_dash_tokens == 1) {
// Single value
left_key = strtoul(dash_tokens[0], &end, 10);
if (errno || *end != '\0')
return -EINVAL;
right_key = left_key;
} else if (nb_dash_tokens == 2) {
// Interval value
left_key = strtoul(dash_tokens[0], &end, 10);
if (errno || *end != '\0')
return -EINVAL;
right_key = strtoul(dash_tokens[1], &end, 10);
if (errno || *end != '\0')
return -EINVAL;
} else {
return -EINVAL;
}
// Fill-in the matrix
if (right_key < max_len && right_key >= left_key) {
for (unsigned long key = left_key;
key <= right_key; key++) {
matrix[key] = value;
}
} else {
return -EINVAL;
}
}
} else {
return -EINVAL;
}
return 0;
}
static error_t parse_opt(int key, char *arg, struct argp_state *state)
{
struct arguments *arguments = state->input;
char *end;
errno = 0;
end = NULL;
switch (key) {
case 'p':
/* parse hexadecimal string */
arguments->portmask = strtoul(arg, &end, 16);
if (arguments->portmask == 0) {
RTE_LOG(ERR, DPDKCAP,
"Invalid portmask '%s', no port used\n", arg);
return -EINVAL;
}
break;
case 'o':
strncpy(arguments->output_file_template, arg,
DPDKCAP_OUTPUT_FILENAME_LENGTH);
break;
case 'S':
arguments->statistics = 1;
break;
case 'm':
arguments->nb_mbufs = strtoul(arg, &end, 10);
break;
case 'd':
arguments->num_rx_desc_str_matrix = arg;
break;
case 'c':
arguments->per_port_c_cores = strtoul(arg, &end, 10);
break;
case 'w':
arguments->num_w_cores = strtoul(arg, &end, 10);
break;
case 's':
arguments->snaplen = strtoul(arg, &end, 10);
break;
case 'G':
arguments->rotate_seconds = strtoul(arg, &end, 10);
break;
case 'C':
arguments->file_size_limit = strtoll(arg, &end, 10);
break;
case 700:
arguments->log_file = arg;
break;
case 701:
arguments->no_compression = 1;
break;
case 't':
arguments->taskdir = arg;
break;
case 'T':
arguments->taskinterval = strtoll(arg, &end, 10);
break;
default:
return ARGP_ERR_UNKNOWN;
}
if (errno || (end != NULL && *end != '\0')) {
RTE_LOG(ERR, DPDKCAP, "Invalid value '%s'\n", arg);
return -EINVAL;
}
return 0;
}
static struct argp argp = { options, parse_opt, args_doc, doc, 0, 0, 0 };
/* END OF ARGP */
static struct rte_ring *write_ring;
struct arguments arguments;
static unsigned int portlist[64];
static unsigned int nb_ports;
static struct core_write_stats *cores_stats_write_list[MAX_LCORES];
static struct core_capture_stats *cores_stats_capture_list[MAX_LCORES];
static const struct rte_eth_conf port_conf_default = {
.rxmode = {
.mq_mode = RTE_ETH_MQ_RX_NONE,
.max_lro_pkt_size = RTE_ETHER_MAX_LEN,
}
};
/*
* Initializes a given port using global settings and with the RX buffers
* coming from the mbuf_pool passed as a parameter.
*/
static int port_init(uint8_t port,
const uint16_t rx_rings,
unsigned int num_rxdesc, struct rte_mempool *mbuf_pool)
{
struct rte_eth_conf port_conf = port_conf_default;
struct rte_eth_dev_info dev_info;
int retval;
uint16_t q;
uint16_t dev_count;
/* Check if the port id is valid */
#if RTE_VERSION >= RTE_VERSION_NUM(18,11,3,16)
dev_count = rte_eth_dev_count_avail() - 1;
#else
dev_count = rte_eth_dev_count() - 1;
#endif
if (rte_eth_dev_is_valid_port(port) == 0) {
RTE_LOG(ERR, DPDKCAP,
"Port identifier %d out of range (0 to %d) or not"
" attached.\n", port, dev_count);
return -EINVAL;
}
/* Get the device info */
rte_eth_dev_info_get(port, &dev_info);
/* Check if the requested number of queue is valid */
if (rx_rings > dev_info.max_rx_queues) {
RTE_LOG(ERR, DPDKCAP,
"Port %d can only handle up to %d queues (%d "
"requested).\n", port, dev_info.max_rx_queues,
rx_rings);
return -EINVAL;
}
/* Check if the number of requested RX descriptors is valid */
if (num_rxdesc > dev_info.rx_desc_lim.nb_max ||
num_rxdesc < dev_info.rx_desc_lim.nb_min ||
num_rxdesc % dev_info.rx_desc_lim.nb_align != 0) {
RTE_LOG(ERR, DPDKCAP, "Port %d cannot be configured with %d RX "
"descriptors per queue (min:%d, max:%d, align:%d)\n",
port, num_rxdesc, dev_info.rx_desc_lim.nb_min,
dev_info.rx_desc_lim.nb_max,
dev_info.rx_desc_lim.nb_align);
return -EINVAL;
}
/* Configure multiqueue (Activate Receive Side Scaling on UDP/TCP fields) */
if (rx_rings > 1) {
port_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_RSS;
port_conf.rx_adv_conf.rss_conf.rss_key = NULL;
//port_conf.rx_adv_conf.rss_conf.rss_hf = RTE_ETH_RSS_PROTO_MASK & dev_info.flow_type_rss_offloads;
port_conf.rx_adv_conf.rss_conf.rss_hf =
dev_info.flow_type_rss_offloads;
//port_conf.rx_adv_conf.rss_conf.rss_hf = RTE_ETH_RSS_PROTO_MASK;
}
/* Configure the Ethernet device. */
retval = rte_eth_dev_configure(port, rx_rings, 0, &port_conf);
if (retval) {
RTE_LOG(ERR, DPDKCAP, "rte_eth_dev_configure(...): %s\n",
rte_strerror(-retval));
return retval;
}
/* Allocate and set up RX queues. */
for (q = 0; q < rx_rings; q++) {
retval = rte_eth_rx_queue_setup(port, q, num_rxdesc,
rte_eth_dev_socket_id(port),
NULL, mbuf_pool);
if (retval) {
RTE_LOG(ERR, DPDKCAP,
"rte_eth_rx_queue_setup(...): %s\n",
rte_strerror(-retval));
return retval;
}
}
/* Stats bindings (if more than one queue) */
if (dev_info.max_rx_queues > 1) {
for (q = 0; q < rx_rings; q++) {
retval =
rte_eth_dev_set_rx_queue_stats_mapping(port, q, q);
if (retval) {
RTE_LOG(WARNING, DPDKCAP,
"rte_eth_dev_set_rx_queue_stats_mapping(...):"
" %s\n", rte_strerror(-retval));
RTE_LOG(WARNING, DPDKCAP,
"The queues statistics mapping failed. The "
"displayed queue statistics are thus unreliable.\n");
}
}
}
/* Enable RX in promiscuous mode for the Ethernet device. */
rte_eth_promiscuous_enable(port);
/* Display the port MAC address. */
struct rte_ether_addr addr;
rte_eth_macaddr_get(port, &addr);
RTE_LOG(INFO, DPDKCAP,
"Port %u: MAC=%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8
":%02" PRIx8 ":%02" PRIx8 ", RXdesc/queue=%d, rx_capa=%#016x\n",
(unsigned)port, addr.addr_bytes[0], addr.addr_bytes[1],
addr.addr_bytes[2], addr.addr_bytes[3], addr.addr_bytes[4],
addr.addr_bytes[5], num_rxdesc, dev_info.rx_offload_capa);
return 0;
}
/*
* Handles signals
*/
static void signal_handler(int sig)
{
RTE_LOG(NOTICE, DPDKCAP, "Caught signal %s on core %u%s\n",
strsignal(sig), rte_lcore_id(),
rte_get_main_lcore() == rte_lcore_id()? " (MAIN CORE)" : "");
stop_all_sockets();
}
/*
* The main function, which does initialization and calls the per-lcore
* functions.
*/
int main(int argc, char *argv[])
{
signal(SIGINT, signal_handler);
struct core_capture_config *cores_config_capture_list[MAX_LCORES];
struct core_write_config *cores_config_write_list[MAX_LCORES];
unsigned int lcoreid_list[MAX_LCORES];
unsigned int nb_lcores;
struct rte_mempool *mbuf_pool;
int socket_id;
unsigned int port_id;
unsigned int port_index;
unsigned int j;
unsigned int required_cores;
int core_id;
unsigned int core_index;
int result;
uint16_t dev_count;
FILE *log_file;
/* Initialize the Environment Abstraction Layer (EAL). */
int ret = rte_eal_init(argc, argv);
if (ret < 0)
rte_exit(EXIT_FAILURE, "Error with EAL initialization\n");
argc -= ret;
argv += ret;
/* Parse arguments */
arguments = (struct arguments) {
.statistics = 0,
.nb_mbufs = NUM_MBUFS_DEFAULT,
.num_rx_desc_str_matrix = NULL,
.per_port_c_cores = 1,
.num_w_cores = 1,
.no_compression = 0,
.snaplen = PCAP_SNAPLEN_DEFAULT,
.portmask = 0x1,
.rotate_seconds = 0,
.file_size_limit = 0,
.log_file = NULL,
.taskdir = NULL,
.taskinterval = 1,
};
strncpy(arguments.output_file_template, DPDKCAP_OUTPUT_TEMPLATE_DEFAULT,
DPDKCAP_OUTPUT_FILENAME_LENGTH);
argp_parse(&argp, argc, argv, 0, 0, &arguments);
/* Set log level */
#if RTE_VERSION >= RTE_VERSION_NUM(17,5,0,16)
rte_log_set_level(RTE_LOG_DEBUG, RTE_LOG_DEBUG);
#else
rte_set_log_type(RTE_LOGTYPE_DPDKCAP, 1);
rte_set_log_level(RTE_LOG_DEBUG);
#endif
// TODO confify
rte_delay_us_callback_register(&rte_delay_us_sleep);
register_timestamp_dynfield();
/* Change log stream if needed */
if (arguments.log_file) {
log_file = fopen(arguments.log_file, "w");
if (!log_file) {
rte_exit(EXIT_FAILURE,
"Error: Could not open log file: (%d) %s\n",
errno, strerror(errno));
}
result = rte_openlog_stream(log_file);
if (result) {
rte_exit(EXIT_FAILURE,
"Error: Could not change log stream: (%d) %s\n",
errno, strerror(errno));
}
}
/* Add suffixes to output if needed */
if (!strstr(arguments.output_file_template,
DPDKCAP_OUTPUT_TEMPLATE_TOKEN_CORE_ID))
strcat(arguments.output_file_template,
"_" DPDKCAP_OUTPUT_TEMPLATE_TOKEN_CORE_ID);
if (arguments.file_size_limit &&
!strstr(arguments.output_file_template,
DPDKCAP_OUTPUT_TEMPLATE_TOKEN_FILECOUNT))
strcat(arguments.output_file_template,
"_" DPDKCAP_OUTPUT_TEMPLATE_TOKEN_FILECOUNT);
strcat(arguments.output_file_template, ".pcap");
if (!arguments.no_compression)
strcat(arguments.output_file_template, ".lzo");
/* Check if at least one port is available */
#if RTE_VERSION >= RTE_VERSION_NUM(18,11,3,16)
dev_count = rte_eth_dev_count_avail();
#else
dev_count = rte_eth_dev_count();
#endif
if (dev_count == 0)
rte_exit(EXIT_FAILURE, "Error: No port available.\n");
/* Fills in the number of rx descriptors matrix */
unsigned long *num_rx_desc_matrix = calloc(dev_count, sizeof(unsigned long));
if (arguments.num_rx_desc_str_matrix != NULL &&
parse_matrix_opt(arguments.num_rx_desc_str_matrix,
num_rx_desc_matrix, dev_count) < 0) {
rte_exit(EXIT_FAILURE, "Invalid RX descriptors matrix.\n");
}
/* Creates the port list */
nb_ports = 0;
for (port_id = 0; port_id < 64; port_id++) {
if (!((uint64_t) (1ULL << port_id) & arguments.portmask))
continue;
if (port_id < dev_count)
portlist[nb_ports++] = port_id;
else
RTE_LOG(WARNING, DPDKCAP,
"Warning: port %d is in portmask, "
"but not enough ports are available. Ignoring...\n",
port_id);
}
if (nb_ports == 0)
rte_exit(EXIT_FAILURE,
"Error: Found no usable port. Check portmask "
"option.\n");
RTE_LOG(INFO, DPDKCAP, "Using %u ports to listen on\n", nb_ports);
/* Checks core number */
required_cores =
(1 + nb_ports * arguments.per_port_c_cores + arguments.num_w_cores);
if (rte_lcore_count() < required_cores) {
rte_exit(EXIT_FAILURE, "Assign at least %d cores to dpdkcap.\n",
required_cores);
}
RTE_LOG(INFO, DPDKCAP, "Using %u cores out of %d allocated\n",
required_cores, rte_lcore_count());
nb_lcores = 0;
/* For each port */
for (port_index = 0; port_index < nb_ports; port_index++) {
port_id = portlist[port_index];
RTE_LOG(INFO, DPDKCAP, "Setup port %d\n", port_id);
socket_id = rte_eth_dev_socket_id(port_id);
if (socket_id < 0) {
rte_exit(EXIT_FAILURE,
"Cannot determine port socket\n");
// } else if (socket_id == 0) {
// RTE_LOG(WARNING,DPDKCAP,"No socket_id for port %d\n",port_id);
// socket_id = SOCKET_ID_ANY;
} else {
RTE_LOG(INFO, DPDKCAP, "Port %d on socket_id %u\n",
port_id, socket_id);
}
/* Creates a new mempool in memory to hold the mbufs. */
char strbuf[200];
sprintf(strbuf, "MBUF_POOL_P%d", port_id);
mbuf_pool =
rte_pktmbuf_pool_create(strbuf, arguments.nb_mbufs,
MBUF_CACHE_SIZE, 0,
RTE_MBUF_DEFAULT_BUF_SIZE,
socket_id);
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
//Initialize buffer for writing to disk
sprintf(strbuf, "RING_POOL_P%d", port_id);
write_ring = rte_ring_create(strbuf,
rte_align32pow2(arguments.
nb_mbufs),
socket_id, 0);
/* Writing cores */
for (j = 0; j < arguments.num_w_cores; j++) {
core_id = get_core_on_socket(socket_id);
if (core_id < 0)
rte_exit(EXIT_FAILURE,
"Cannot get core on socket %d\n",
socket_id);
cores_stats_write_list[nb_lcores] =
rte_zmalloc_socket("STATS WRITE",
sizeof(struct core_write_stats),
0, socket_id);
cores_config_write_list[nb_lcores] =
rte_zmalloc_socket("CONFIG WRITE",
sizeof(struct core_write_config),
0, socket_id);
//Configure writing core
struct core_write_config *config =
cores_config_write_list[nb_lcores];
config->ring = write_ring;
config->stop_condition =
get_stopper_for_socket(socket_id);
config->stats = cores_stats_write_list[nb_lcores];
config->taskdir =
rte_zmalloc_socket("CONFIG TASKDIR",
sizeof(struct taskdir), 0,
socket_id);
if (arguments.taskdir == NULL) {
// add default task
struct task *t = &(config->taskdir->tasks[0]);
strncpy(t->output_template,
arguments.output_file_template,
DPDKCAP_MAX_PATH_LEN);
t->output_rotate_seconds =
arguments.rotate_seconds;
t->output_rotate_size =
arguments.file_size_limit;
t->compression = !arguments.rotate_seconds;
t->snaplen = arguments.snaplen;
t->task_state = TASK_ACTIVE;
} else {
strncpy(config->taskdir->dirname,
arguments.taskdir,
DPDKCAP_MAX_PATH_LEN);
config->taskdir->interval =
arguments.taskinterval;
}
//Launch writing core
if (rte_eal_remote_launch
((lcore_function_t *) write_core, config,
core_id) < 0)
rte_exit(EXIT_FAILURE,
"Could not launch writing process on lcore %d.\n",
core_id);
//Add the core to the list
lcoreid_list[nb_lcores] = core_id;
nb_lcores++;
}
/* Port init */
int retval = port_init(port_id,
arguments.per_port_c_cores,
(num_rx_desc_matrix[port_index] !=
0) ? num_rx_desc_matrix[port_index] :
RX_DESC_DEFAULT,
mbuf_pool);
if (retval) {
rte_exit(EXIT_FAILURE, "Cannot init port %" PRIu8 "\n",
port_id);
}
/* Capturing cores */
for (j = 0; j < arguments.per_port_c_cores; j++) {
core_id = get_core_on_socket(socket_id);
if (core_id < 0)
rte_exit(EXIT_FAILURE,
"Cannot get core on socket %d\n",
socket_id);
cores_stats_capture_list[nb_lcores] =
rte_zmalloc_socket("STATS CAPTURE",
sizeof(struct
core_capture_stats), 0,
socket_id);
cores_config_capture_list[nb_lcores] =
rte_zmalloc_socket("CONFIG CAPTURE",
sizeof(struct
core_capture_config), 0,
socket_id);
//Configure capture core
struct core_capture_config *config =
cores_config_capture_list[nb_lcores];
config->ring = write_ring;
config->stop_condition =
get_stopper_for_socket(socket_id);
config->stats = cores_stats_capture_list[nb_lcores];
config->port = port_id;
config->queue = j;
//Launch capture core
if (rte_eal_remote_launch
((lcore_function_t *) capture_core, config,
core_id) < 0)
rte_exit(EXIT_FAILURE,
"Could not launch capture process on lcore "
"%d.\n", core_id);
//Add the core to the list
lcoreid_list[nb_lcores] = core_id;
nb_lcores++;
}
/* Start the port once everything is ready to capture */
retval = rte_eth_dev_start(port_id);
if (retval) {
rte_exit(EXIT_FAILURE, "Cannot start port %" PRIu8 "\n",
port_id);
}
} // end foreach port
//Initialize statistics timer
struct stats_data sd = {
.ring = write_ring,
.cores_stats_write_list = cores_stats_write_list,
.cores_stats_capture_list = cores_stats_capture_list,
.num_cores = nb_lcores,
.stop_condition =
get_stopper_for_socket(rte_lcore_to_socket_id
(rte_lcore_id())),
.port_list = portlist,
.port_list_size = nb_ports,
.queue_per_port = arguments.per_port_c_cores,
.log_file = arguments.log_file,
};
if (arguments.statistics) {
//End the capture when the interface returns
start_stats_display(&sd);
stop_all_sockets();
} else {
volatile bool *stop_condition =
get_stopper_for_socket(rte_lcore_to_socket_id(rte_lcore_id()));
while (!*(stop_condition)) {
rte_delay_us(100);
}
}
#define RTE_FREE(x) if(!(x == NULL)){rte_free(x);x=NULL;}
//Wait for all the cores to complete and exit
RTE_LOG(NOTICE, DPDKCAP, "Waiting for all cores to exit\n");
for (core_index = 0; core_index < nb_lcores; core_index++) {
core_id = lcoreid_list[core_index];
result = rte_eal_wait_lcore(core_id);
if (result < 0) {
RTE_LOG(ERR, DPDKCAP,
"Core %d did not stop correctly.\n", core_id);
}
RTE_FREE(cores_stats_write_list[core_index]);
RTE_FREE(cores_stats_capture_list[core_index]);
RTE_FREE(cores_config_write_list[core_index]);
RTE_FREE(cores_config_capture_list[core_index]);
}
//Finalize
free(num_rx_desc_matrix);
return 0;
}
================================================
FILE: src/lzo/lzowrite.c
================================================
#include "lzowrite.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdio_ext.h>
#include <string.h>
#include <errno.h>
#include <byteswap.h>
#include <rte_branch_prediction.h>
#include <rte_log.h>
#include "minilzo/minilzo.h"
#define RTE_LOGTYPE_LZO RTE_LOGTYPE_USER2
#define HEAP_ALLOC(var,size) \
lzo_align_t __LZO_MMODEL var \
[ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]
static int lzowrite_wbuf(struct lzowrite_buffer *lzowrite_buffer)
{
struct __attribute__((__packed__)) {
uint32_t len;
uint32_t out_length;
} block_header;
unsigned char out_buffer[LZOWRITE_OUT_BUFFER_SIZE];
uint32_t out_length;
int to_be_written;
int retval;
if (lzowrite_buffer->length == 0)
return 0;
lzo1x_1_compress(lzowrite_buffer->buffer, lzowrite_buffer->length,
out_buffer, (lzo_uintp) & (out_length),
lzowrite_buffer->workmemory);
//Write block_header header
block_header.len = __bswap_32(lzowrite_buffer->length);
if (lzowrite_buffer->length <= out_length) {
block_header.out_length = __bswap_32(lzowrite_buffer->length);
} else {
block_header.out_length = __bswap_32(out_length);
}
retval =
fwrite(&block_header, sizeof(block_header), 1,
lzowrite_buffer->output);
//Check if no write error occured
if (unlikely(retval != 1)) {
RTE_LOG(ERR, LZO,
"Could not write lzo block header in file: %d (%s)\n",
errno, strerror(errno));
retval = -1;
}
//Write data
if (lzowrite_buffer->length <= out_length) {
to_be_written = lzowrite_buffer->length;
retval = fwrite(lzowrite_buffer->buffer, sizeof(unsigned char),
to_be_written, lzowrite_buffer->output);
} else {
to_be_written = out_length;
retval = fwrite(out_buffer, sizeof(unsigned char),
to_be_written, lzowrite_buffer->output);
}
//Check if no write error occured
if (unlikely(retval != to_be_written)) {
RTE_LOG(ERR, LZO,
"Could not write lzo block data in file: %d (%s)\n",
errno, strerror(errno));
retval = -1;
}
//Reset buffer
lzowrite_buffer->length = 0;
return sizeof(block_header) + to_be_written;
}
struct lzowrite_buffer *lzowrite_init(FILE * file)
{
static int initialized = 0;
int status;
/* To be written */
struct __attribute__((__packed__)) {
const char magic[LZOWRITE_LZO_MAGIC_LEN];
struct lzowrite_file_header lzoheader;
} fheader = {
.magic = LZOWRITE_LZO_MAGIC,
};
struct lzowrite_buffer *buffer = NULL;
int written;
//Initialize minilzo if needed
if (!initialized) {
status = lzo_init();
if (status) {
RTE_LOG(ERR, LZO, "Could not initialize minilzo: %d\n",
status);
return NULL;
}
initialized = 1;
}
//Prepare the buffers
if (unlikely(!file || !__fwritable(file))) {
RTE_LOG(ERR, LZO,
"Could not write into stream (NULL or unwritable)\n");
goto cleanup;
}
buffer =
(struct lzowrite_buffer *)malloc(sizeof(struct lzowrite_buffer));
buffer->output = file;
buffer->length = 0;
//Allocate workmemory
HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
buffer->workmemory = wrkmem;
//Init header
fheader.lzoheader = (struct lzowrite_file_header) {
.version = LZOWRITE_LZO_VERSION,
.library_version = lzo_version(),
.needed_version = LZOWRITE_LZO_VERSION_NEEDED_TO_EXTRACT,
.compression_method = LZOWRITE_LZO_METHOD,
.compression_level = LZOWRITE_LZO_COMPRESSION_LEVEL,
.compression_flags = LZOWRITE_LZO_FLAGS,
.mode = LZOWRITE_LZO_MODE,
.file_mtime_low = 0,
.file_mtime_high = 0,
.file_name_length = 0,
.file_header_checksum = 1,
};
//Calculate checksum
fheader.lzoheader.file_header_checksum =
__bswap_32(lzo_adler32(fheader.lzoheader.file_header_checksum,
(lzo_bytep) (&fheader.lzoheader),
sizeof(struct lzowrite_file_header) -
sizeof(uint32_t)));
//Write file header
written = fwrite(&fheader, sizeof(fheader), 1, buffer->output);
if (unlikely(written != 1)) {
RTE_LOG(ERR, LZO,
"Could not write lzo file header in file: %d (%s)\n",
errno, strerror(errno));
goto cleanup;
}
return buffer;
cleanup:
free(buffer);
return NULL;
}
int lzowrite(struct lzowrite_buffer *lzowrite_buffer, void *src, size_t len)
{
int retval = 0;
if (len > LZOWRITE_BUFFER_SIZE) {
RTE_LOG(ERR, LZO, "Data bigger than buffer!\n");
retval = -1;
goto cleanup;
}
if (lzowrite_buffer->length + len >= LZOWRITE_BUFFER_SIZE) {
retval = lzowrite_wbuf(lzowrite_buffer);
if (unlikely(retval < 0)) {
retval = -1;
}
}
memcpy(&(lzowrite_buffer->buffer[lzowrite_buffer->length]), src, len);
lzowrite_buffer->length += len;
cleanup:
return retval;
}
int lzowrite_close(struct lzowrite_buffer *lzowrite_buffer)
{
unsigned char zeros[4] = { 0 };
int retval = 0;
int written;
/* Write remaining data */
written = lzowrite_wbuf(lzowrite_buffer);
if (written < 0) {
RTE_LOG(ERR, LZO, "Could not write remaining data.\n");
retval = -1;
goto cleanup;
}
/* Write 4 zero bytes */
written =
fwrite(zeros, sizeof(unsigned char), 4, lzowrite_buffer->output);
if (unlikely(written != 4)) {
RTE_LOG(ERR, LZO, "Could not write 4 zeros in file: %d (%s)\n",
errno, strerror(errno));
retval = -1;
goto cleanup;
}
cleanup:
free(lzowrite_buffer);
return retval;
}
================================================
FILE: src/lzo/lzowrite.h
================================================
#include <stdio.h>
#include <stdint.h>
#include "minilzo/minilzo.h"
#define LZOWRITE_BUFFER_SIZE 32 * 1024
#define LZOWRITE_OUT_BUFFER_SIZE (LZOWRITE_BUFFER_SIZE + LZOWRITE_BUFFER_SIZE / 16 + 64 + 3)
#define LZOWRITE_LZO_MAGIC {0x89,0x4c,0x5a,0x4f,0x00,0x0d,0x0a,0x1a,0x0a}
#define LZOWRITE_LZO_MAGIC_LEN 9
#define LZOWRITE_LZO_VERSION 0x3010 // as in LZOP 1.03
#define LZOWRITE_LZO_LIB_VERSION (lzo_version() & 0xffff)
#define LZOWRITE_LZO_VERSION_NEEDED_TO_EXTRACT 0x4009 // not using filters, otherwise 0x0950
#define LZOWRITE_LZO_METHOD 1 // LZO1X
#define LZOWRITE_LZO_COMPRESSION_LEVEL 1 // with lzo, we have compression level = 1.
#define LZOWRITE_LZO_FLAGS 0 // no checksums on data!!
#define LZOWRITE_LZO_MODE 0xa481 // 100644 oct
void fwrite_int32_be(void *ptr, FILE * out);
struct lzowrite_buffer {
unsigned char buffer[LZOWRITE_BUFFER_SIZE];
uint32_t length;
FILE *output;
lzo_align_t *workmemory;
};
struct __attribute__((__packed__)) lzowrite_file_header {
uint16_t version;
uint16_t library_version;
uint16_t needed_version;
uint8_t compression_method;
uint8_t compression_level;
uint32_t compression_flags;
uint32_t mode;
uint32_t file_mtime_low;
uint32_t file_mtime_high;
uint8_t file_name_length;
uint32_t file_header_checksum;
};
struct __attribute__((__packed__)) lzowrite_block_header {
uint32_t uncompressed_size;
uint32_t compressed_size;
uint32_t uncompressed_adler32;
uint32_t uncompressed_crc32;
uint32_t compressed_adler32;
uint32_t compressed_crc32;
};
/*
* Inits an lzo buffer with the given output file
* Returns the buffer on success, NULL on error
*/
struct lzowrite_buffer *lzowrite_init(FILE *);
/*
* Writes len bytes from src into the given lzowrite_buffer
* Returns the number of written bytes on success (might be 0),
* -1 on failure.
*/
int lzowrite(struct lzowrite_buffer *lzowrite_buffer, void *src, size_t len);
/*
* Flushes the buffer by writting the last bytes into the output stream, then
* close it. lzowrite_buffer should be freed at the end.
* Returns 0 on success, -1 on failure.
*/
int lzowrite_close(struct lzowrite_buffer *lzowrite_buffer);
================================================
FILE: src/lzo/minilzo/README.LZO
================================================
============================================================================
miniLZO -- mini subset of the LZO real-time data compression library
============================================================================
Author : Markus Franz Xaver Johannes Oberhumer
<markus@oberhumer.com>
http://www.oberhumer.com/opensource/lzo/
Version : 2.09
Date : 04 Feb 2015
I've created miniLZO for projects where it is inconvenient to
include (or require) the full LZO source code just because you
want to add a little bit of data compression to your application.
miniLZO implements the LZO1X-1 compressor and both the standard and
safe LZO1X decompressor. Apart from fast compression it also useful
for situations where you want to use pre-compressed data files (which
must have been compressed with LZO1X-999).
miniLZO consists of one C source file and three header files:
minilzo.c
minilzo.h, lzoconf.h, lzodefs.h
To use miniLZO just copy these files into your source directory, add
minilzo.c to your Makefile and #include minilzo.h from your program.
Note: you also must distribute this file ('README.LZO') with your project.
minilzo.o compiles to about 6 KiB (using gcc or Visual C on an i386), and
the sources are about 30 KiB when packed with zip - so there's no more
excuse that your application doesn't support data compression :-)
For more information, documentation, example programs and other support
files (like Makefiles and build scripts) please download the full LZO
package from
http://www.oberhumer.com/opensource/lzo/
Have fun,
Markus
P.S. minilzo.c is generated automatically from the LZO sources and
therefore functionality is completely identical
Appendix A: building miniLZO
----------------------------
miniLZO is written such a way that it should compile and run
out-of-the-box on most machines.
If you are running on a very unusual architecture and lzo_init() fails then
you should first recompile with '-DLZO_DEBUG' to see what causes the failure.
The most probable case is something like 'sizeof(void *) != sizeof(size_t)'.
After identifying the problem you can compile by adding some defines
like '-DSIZEOF_VOID_P=8' to your Makefile.
The best solution is (of course) using Autoconf - if your project uses
Autoconf anyway just add '-DMINILZO_HAVE_CONFIG_H' to your compiler
flags when compiling minilzo.c. See the LZO distribution for an example
how to set up configure.ac.
Appendix B: list of public functions available in miniLZO
---------------------------------------------------------
Library initialization
lzo_init()
Compression
lzo1x_1_compress()
Decompression
lzo1x_decompress()
lzo1x_decompress_safe()
Checksum functions
lzo_adler32()
Version functions
lzo_version()
lzo_version_string()
lzo_version_date()
Portable (but slow) string functions
lzo_memcmp()
lzo_memcpy()
lzo_memmove()
lzo_memset()
Appendix C: suggested macros for 'configure.ac' when using Autoconf
-------------------------------------------------------------------
Checks for typedefs and structures
AC_CHECK_TYPE(ptrdiff_t,long)
AC_TYPE_SIZE_T
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(size_t)
AC_CHECK_SIZEOF(ptrdiff_t)
Checks for compiler characteristics
AC_C_CONST
Checks for library functions
AC_CHECK_FUNCS(memcmp memcpy memmove memset)
Appendix D: Copyright
---------------------
LZO and miniLZO are Copyright (C) 1996-2015 Markus Franz Xaver Oberhumer
All Rights Reserved.
LZO and miniLZO are distributed under the terms of the GNU General
Public License (GPL). See the file COPYING.
Special licenses for commercial and other applications which
are not willing to accept the GNU General Public License
are available by contacting the author.
================================================
FILE: src/lzo/minilzo/lzoconf.h
================================================
/* lzoconf.h -- configuration of the LZO data compression library
This file is part of the LZO real-time data compression library.
Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
The LZO library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The LZO library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the LZO library; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Markus F.X.J. Oberhumer
<markus@oberhumer.com>
http://www.oberhumer.com/opensource/lzo/
*/
#ifndef __LZOCONF_H_INCLUDED
#define __LZOCONF_H_INCLUDED 1
#define LZO_VERSION 0x2090
#define LZO_VERSION_STRING "2.09"
#define LZO_VERSION_DATE "Feb 04 2015"
/* internal Autoconf configuration file - only used when building LZO */
#if defined(LZO_HAVE_CONFIG_H)
#include <config.h>
#endif
#include <limits.h>
#include <stddef.h>
/***********************************************************************
// LZO requires a conforming <limits.h>
************************************************************************/
#if !defined(CHAR_BIT) || (CHAR_BIT != 8)
#error "invalid CHAR_BIT"
#endif
#if !defined(UCHAR_MAX) || !defined(USHRT_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX)
#error "check your compiler installation"
#endif
#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1)
#error "your limits.h macros are broken"
#endif
/* get OS and architecture defines */
#ifndef __LZODEFS_H_INCLUDED
#include <lzo/lzodefs.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/***********************************************************************
// some core defines
************************************************************************/
/* memory checkers */
#if !defined(__LZO_CHECKER)
#if defined(__BOUNDS_CHECKING_ON)
#define __LZO_CHECKER 1
#elif defined(__CHECKER__)
#define __LZO_CHECKER 1
#elif defined(__INSURE__)
#define __LZO_CHECKER 1
#elif defined(__PURIFY__)
#define __LZO_CHECKER 1
#endif
#endif
/***********************************************************************
// integral and pointer types
************************************************************************/
/* lzo_uint must match size_t */
#if !defined(LZO_UINT_MAX)
#if (LZO_ABI_LLP64)
#if (LZO_OS_WIN64)
typedef unsigned __int64 lzo_uint;
typedef __int64 lzo_int;
#define LZO_TYPEOF_LZO_INT LZO_TYPEOF___INT64
#else
typedef lzo_ullong_t lzo_uint;
typedef lzo_llong_t lzo_int;
#define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG_LONG
#endif
#define LZO_SIZEOF_LZO_INT 8
#define LZO_UINT_MAX 0xffffffffffffffffull
#define LZO_INT_MAX 9223372036854775807LL
#define LZO_INT_MIN (-1LL - LZO_INT_MAX)
#elif (LZO_ABI_IP32L64) /* MIPS R5900 */
typedef unsigned int lzo_uint;
typedef int lzo_int;
#define LZO_SIZEOF_LZO_INT LZO_SIZEOF_INT
#define LZO_TYPEOF_LZO_INT LZO_TYPEOF_INT
#define LZO_UINT_MAX UINT_MAX
#define LZO_INT_MAX INT_MAX
#define LZO_INT_MIN INT_MIN
#elif (ULONG_MAX >= LZO_0xffffffffL)
typedef unsigned long lzo_uint;
typedef long lzo_int;
#define LZO_SIZEOF_LZO_INT LZO_SIZEOF_LONG
#define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG
#define LZO_UINT_MAX ULONG_MAX
#define LZO_INT_MAX LONG_MAX
#define LZO_INT_MIN LONG_MIN
#else
#error "lzo_uint"
#endif
#endif
/* The larger type of lzo_uint and lzo_uint32_t. */
#if (LZO_SIZEOF_LZO_INT >= 4)
#define lzo_xint lzo_uint
#else
#define lzo_xint lzo_uint32_t
#endif
typedef int lzo_bool;
/* sanity checks */
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int) == LZO_SIZEOF_LZO_INT)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) ==
LZO_SIZEOF_LZO_INT)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >= sizeof(lzo_uint))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >=
sizeof(lzo_uint32_t))
#ifndef __LZO_MMODEL
#define __LZO_MMODEL /*empty */
#endif
/* no typedef here because of const-pointer issues */
#define lzo_bytep unsigned char __LZO_MMODEL *
#define lzo_charp char __LZO_MMODEL *
#define lzo_voidp void __LZO_MMODEL *
#define lzo_shortp short __LZO_MMODEL *
#define lzo_ushortp unsigned short __LZO_MMODEL *
#define lzo_intp lzo_int __LZO_MMODEL *
#define lzo_uintp lzo_uint __LZO_MMODEL *
#define lzo_xintp lzo_xint __LZO_MMODEL *
#define lzo_voidpp lzo_voidp __LZO_MMODEL *
#define lzo_bytepp lzo_bytep __LZO_MMODEL *
#define lzo_int8_tp lzo_int8_t __LZO_MMODEL *
#define lzo_uint8_tp lzo_uint8_t __LZO_MMODEL *
#define lzo_int16_tp lzo_int16_t __LZO_MMODEL *
#define lzo_uint16_tp lzo_uint16_t __LZO_MMODEL *
#define lzo_int32_tp lzo_int32_t __LZO_MMODEL *
#define lzo_uint32_tp lzo_uint32_t __LZO_MMODEL *
#if defined(lzo_int64_t)
#define lzo_int64_tp lzo_int64_t __LZO_MMODEL *
#define lzo_uint64_tp lzo_uint64_t __LZO_MMODEL *
#endif
/* Older LZO versions used to support ancient systems and memory models
* such as 16-bit MSDOS with __huge pointers or Cray PVP, but these
* obsolete configurations are not supported any longer.
*/
#if defined(__LZO_MMODEL_HUGE)
#error "__LZO_MMODEL_HUGE memory model is unsupported"
#endif
#if (LZO_MM_PVP)
#error "LZO_MM_PVP memory model is unsupported"
#endif
#if (LZO_SIZEOF_INT < 4)
#error "LZO_SIZEOF_INT < 4 is unsupported"
#endif
#if (__LZO_UINTPTR_T_IS_POINTER)
#error "__LZO_UINTPTR_T_IS_POINTER is unsupported"
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) >= 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) >= 4)
/* Strange configurations where sizeof(lzo_uint) != sizeof(size_t) should
* work but have not received much testing lately, so be strict here.
*/
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(size_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) ==
sizeof(ptrdiff_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) ==
sizeof(lzo_uintptr_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) ==
sizeof(lzo_uintptr_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) ==
sizeof(lzo_uintptr_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long *) ==
sizeof(lzo_uintptr_t))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) == sizeof(lzo_voidp))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) == sizeof(lzo_bytep))
/***********************************************************************
// function types
************************************************************************/
/* name mangling */
#if !defined(__LZO_EXTERN_C)
#ifdef __cplusplus
#define __LZO_EXTERN_C extern "C"
#else
#define __LZO_EXTERN_C extern
#endif
#endif
/* calling convention */
#if !defined(__LZO_CDECL)
#define __LZO_CDECL __lzo_cdecl
#endif
/* DLL export information */
#if !defined(__LZO_EXPORT1)
#define __LZO_EXPORT1 /*empty */
#endif
#if !defined(__LZO_EXPORT2)
#define __LZO_EXPORT2 /*empty */
#endif
/* __cdecl calling convention for public C and assembly functions */
#if !defined(LZO_PUBLIC)
#define LZO_PUBLIC(r) __LZO_EXPORT1 r __LZO_EXPORT2 __LZO_CDECL
#endif
#if !defined(LZO_EXTERN)
#define LZO_EXTERN(r) __LZO_EXTERN_C LZO_PUBLIC(r)
#endif
#if !defined(LZO_PRIVATE)
#define LZO_PRIVATE(r) static r __LZO_CDECL
#endif
/* function types */
typedef int
(__LZO_CDECL * lzo_compress_t) (const lzo_bytep src, lzo_uint src_len,
lzo_bytep dst, lzo_uintp dst_len,
lzo_voidp wrkmem);
typedef int
(__LZO_CDECL * lzo_decompress_t) (const lzo_bytep src,
lzo_uint src_len, lzo_bytep dst,
lzo_uintp dst_len, lzo_voidp wrkmem);
typedef int
(__LZO_CDECL * lzo_optimize_t) (lzo_bytep src, lzo_uint src_len,
lzo_bytep dst, lzo_uintp dst_len,
lzo_voidp wrkmem);
typedef int
(__LZO_CDECL * lzo_compress_dict_t) (const lzo_bytep src,
lzo_uint src_len, lzo_bytep dst,
lzo_uintp dst_len,
lzo_voidp wrkmem,
const lzo_bytep dict,
lzo_uint dict_len);
typedef int
(__LZO_CDECL * lzo_decompress_dict_t) (const lzo_bytep src,
lzo_uint src_len, lzo_bytep dst,
lzo_uintp dst_len,
lzo_voidp wrkmem,
const lzo_bytep dict,
lzo_uint dict_len);
/* Callback interface. Currently only the progress indicator ("nprogress")
* is used, but this may change in a future release. */
struct lzo_callback_t;
typedef struct lzo_callback_t lzo_callback_t;
#define lzo_callback_p lzo_callback_t __LZO_MMODEL *
/* malloc & free function types */
typedef lzo_voidp(__LZO_CDECL * lzo_alloc_func_t)
(lzo_callback_p self, lzo_uint items, lzo_uint size);
typedef void (__LZO_CDECL * lzo_free_func_t)
(lzo_callback_p self, lzo_voidp ptr);
/* a progress indicator callback function */
typedef void (__LZO_CDECL * lzo_progress_func_t)
(lzo_callback_p, lzo_uint, lzo_uint, int);
struct lzo_callback_t {
/* custom allocators (set to 0 to disable) */
lzo_alloc_func_t nalloc; /* [not used right now] */
lzo_free_func_t nfree; /* [not used right now] */
/* a progress indicator callback function (set to 0 to disable) */
lzo_progress_func_t nprogress;
/* INFO: the first parameter "self" of the nalloc/nfree/nprogress
* callbacks points back to this struct, so you are free to store
* some extra info in the following variables. */
lzo_voidp user1;
lzo_xint user2;
lzo_xint user3;
};
/***********************************************************************
// error codes and prototypes
************************************************************************/
/* Error codes for the compression/decompression functions. Negative
* values are errors, positive values will be used for special but
* normal events.
*/
#define LZO_E_OK 0
#define LZO_E_ERROR (-1)
#define LZO_E_OUT_OF_MEMORY (-2) /* [lzo_alloc_func_t failure] */
#define LZO_E_NOT_COMPRESSIBLE (-3) /* [not used right now] */
#define LZO_E_INPUT_OVERRUN (-4)
#define LZO_E_OUTPUT_OVERRUN (-5)
#define LZO_E_LOOKBEHIND_OVERRUN (-6)
#define LZO_E_EOF_NOT_FOUND (-7)
#define LZO_E_INPUT_NOT_CONSUMED (-8)
#define LZO_E_NOT_YET_IMPLEMENTED (-9) /* [not used right now] */
#define LZO_E_INVALID_ARGUMENT (-10)
#define LZO_E_INVALID_ALIGNMENT (-11) /* pointer argument is not properly aligned */
#define LZO_E_OUTPUT_NOT_CONSUMED (-12)
#define LZO_E_INTERNAL_ERROR (-99)
#ifndef lzo_sizeof_dict_t
#define lzo_sizeof_dict_t ((unsigned)sizeof(lzo_bytep))
#endif
/* lzo_init() should be the first function you call.
* Check the return code !
*
* lzo_init() is a macro to allow checking that the library and the
* compiler's view of various types are consistent.
*/
#define lzo_init() __lzo_init_v2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\
(int)sizeof(long),(int)sizeof(lzo_uint32_t),(int)sizeof(lzo_uint),\
(int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\
(int)sizeof(lzo_callback_t))
LZO_EXTERN(int) __lzo_init_v2(unsigned, int, int, int, int, int, int,
int, int, int);
/* version functions (useful for shared libraries) */
LZO_EXTERN(unsigned) lzo_version(void);
LZO_EXTERN(const char *) lzo_version_string(void);
LZO_EXTERN(const char *) lzo_version_date(void);
LZO_EXTERN(const lzo_charp) _lzo_version_string(void);
LZO_EXTERN(const lzo_charp) _lzo_version_date(void);
/* string functions */
LZO_EXTERN(int)
lzo_memcmp(const lzo_voidp a, const lzo_voidp b, lzo_uint len);
LZO_EXTERN(lzo_voidp)
lzo_memcpy(lzo_voidp dst, const lzo_voidp src, lzo_uint len);
LZO_EXTERN(lzo_voidp)
lzo_memmove(lzo_voidp dst, const lzo_voidp src, lzo_uint len);
LZO_EXTERN(lzo_voidp)
lzo_memset(lzo_voidp buf, int c, lzo_uint len);
/* checksum functions */
LZO_EXTERN(lzo_uint32_t)
lzo_adler32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len);
LZO_EXTERN(lzo_uint32_t)
lzo_crc32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len);
LZO_EXTERN(const lzo_uint32_tp)
lzo_get_crc32_table(void);
/* misc. */
LZO_EXTERN(int) _lzo_config_check(void);
typedef union {
lzo_voidp a00;
lzo_bytep a01;
lzo_uint a02;
lzo_xint a03;
lzo_uintptr_t a04;
void *a05;
unsigned char *a06;
unsigned long a07;
size_t a08;
ptrdiff_t a09;
#if defined(lzo_int64_t)
lzo_uint64_t a10;
#endif
} lzo_align_t;
/* align a char pointer on a boundary that is a multiple of 'size' */
LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp p, lzo_uint size);
#define LZO_PTR_ALIGN_UP(p,size) \
((p) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(p),(lzo_uint)(size)))
/***********************************************************************
// deprecated macros - only for backward compatibility
************************************************************************/
/* deprecated - use 'lzo_bytep' instead of 'lzo_byte *' */
#define lzo_byte unsigned char
/* deprecated type names */
#define lzo_int32 lzo_int32_t
#define lzo_uint32 lzo_uint32_t
#define lzo_int32p lzo_int32_t __LZO_MMODEL *
#define lzo_uint32p lzo_uint32_t __LZO_MMODEL *
#define LZO_INT32_MAX LZO_INT32_C(2147483647)
#define LZO_UINT32_MAX LZO_UINT32_C(4294967295)
#if defined(lzo_int64_t)
#define lzo_int64 lzo_int64_t
#define lzo_uint64 lzo_uint64_t
#define lzo_int64p lzo_int64_t __LZO_MMODEL *
#define lzo_uint64p lzo_uint64_t __LZO_MMODEL *
#define LZO_INT64_MAX LZO_INT64_C(9223372036854775807)
#define LZO_UINT64_MAX LZO_UINT64_C(18446744073709551615)
#endif
/* deprecated types */
typedef union {
lzo_bytep a;
lzo_uint b;
} __lzo_pu_u;
typedef union {
lzo_bytep a;
lzo_uint32_t b;
} __lzo_pu32_u;
/* deprecated defines */
#if !defined(LZO_SIZEOF_LZO_UINT)
#define LZO_SIZEOF_LZO_UINT LZO_SIZEOF_LZO_INT
#endif
#if defined(LZO_CFG_COMPAT)
#define __LZOCONF_H 1
#if defined(LZO_ARCH_I086)
#define __LZO_i386 1
#elif defined(LZO_ARCH_I386)
#define __LZO_i386 1
#endif
#if defined(LZO_OS_DOS16)
#define __LZO_DOS 1
#define __LZO_DOS16 1
#elif defined(LZO_OS_DOS32)
#define __LZO_DOS 1
#elif defined(LZO_OS_WIN16)
#define __LZO_WIN 1
#define __LZO_WIN16 1
#elif defined(LZO_OS_WIN32)
#define __LZO_WIN 1
#endif
#define __LZO_CMODEL /*empty */
#define __LZO_DMODEL /*empty */
#define __LZO_ENTRY __LZO_CDECL
#define LZO_EXTERN_CDECL LZO_EXTERN
#define LZO_ALIGN LZO_PTR_ALIGN_UP
#define lzo_compress_asm_t lzo_compress_t
#define lzo_decompress_asm_t lzo_decompress_t
#endif /* LZO_CFG_COMPAT */
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* already included */
/* vim:set ts=4 sw=4 et: */
================================================
FILE: src/lzo/minilzo/lzodefs.h
================================================
/* lzodefs.h -- architecture, OS and compiler specific defines
This file is part of the LZO real-time data compression library.
Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
The LZO library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The LZO library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the LZO library; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Markus F.X.J. Oberhumer
<markus@oberhumer.com>
http://www.oberhumer.com/opensource/lzo/
*/
#ifndef __LZODEFS_H_INCLUDED
#define __LZODEFS_H_INCLUDED 1
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
#define __CYGWIN__ __CYGWIN32__
#endif
#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
#define _ALL_SOURCE 1
#endif
#if defined(__mips__) && defined(__R5900__)
#if !defined(__LONG_MAX__)
#define __LONG_MAX__ 9223372036854775807L
#endif
#endif
#if !defined(LZO_CFG_NO_DISABLE_WUNDEF)
#if defined(__ARMCC_VERSION)
#pragma diag_suppress 193
#elif defined(__clang__) && defined(__clang_minor__)
#pragma clang diagnostic ignored "-Wundef"
#elif defined(__INTEL_COMPILER)
#pragma warning(disable: 193)
#elif defined(__KEIL__) && defined(__C166__)
#pragma warning disable = 322
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && !defined(__PATHSCALE__)
#if ((__GNUC__-0) >= 5 || ((__GNUC__-0) == 4 && (__GNUC_MINOR__-0) >= 2))
#pragma GCC diagnostic ignored "-Wundef"
#endif
#elif defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
#if ((_MSC_VER-0) >= 1300)
#pragma warning(disable: 4668)
#endif
#endif
#endif
#if 0 && defined(__POCC__) && defined(_WIN32)
#if (__POCC__ >= 400)
#pragma warn(disable: 2216)
#endif
#endif
#if 0 && defined(__WATCOMC__)
#if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
#pragma warning 203 9
#endif
#endif
#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
#pragma option -h
#endif
#if !(LZO_CFG_NO_DISABLE_WCRTNONSTDC)
#ifndef _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
#ifndef _CRT_NONSTDC_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS 1
#endif
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#endif
#if 0
#define LZO_0xffffUL 0xfffful
#define LZO_0xffffffffUL 0xfffffffful
#else
#define LZO_0xffffUL 65535ul
#define LZO_0xffffffffUL 4294967295ul
#endif
#define LZO_0xffffL LZO_0xffffUL
#define LZO_0xffffffffL LZO_0xffffffffUL
#if (LZO_0xffffL == LZO_0xffffffffL)
#error "your preprocessor is broken 1"
#endif
#if (16ul * 16384ul != 262144ul)
#error "your preprocessor is broken 2"
#endif
#if 0
#if (32767 >= 4294967295ul)
#error "your preprocessor is broken 3"
#endif
#if (65535u >= 4294967295ul)
#error "your preprocessor is broken 4"
#endif
#endif
#if defined(__COUNTER__)
#ifndef LZO_CFG_USE_COUNTER
#define LZO_CFG_USE_COUNTER 1
#endif
#else
#undef LZO_CFG_USE_COUNTER
#endif
#if (UINT_MAX == LZO_0xffffL)
#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
#if !defined(MSDOS)
#define MSDOS 1
#endif
#if !defined(_MSDOS)
#define _MSDOS 1
#endif
#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
#if (__VERSION == 520) && (MB_LEN_MAX == 1)
#if !defined(__AZTEC_C__)
#define __AZTEC_C__ __VERSION
#endif
#if !defined(__DOS__)
#define __DOS__ 1
#endif
#endif
#endif
#endif
#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL)
#define ptrdiff_t long
#define _PTRDIFF_T_DEFINED 1
#endif
#if (UINT_MAX == LZO_0xffffL)
#undef __LZO_RENAME_A
#undef __LZO_RENAME_B
#if defined(__AZTEC_C__) && defined(__DOS__)
#define __LZO_RENAME_A 1
#elif defined(_MSC_VER) && defined(MSDOS)
#if (_MSC_VER < 600)
#define __LZO_RENAME_A 1
#elif (_MSC_VER < 700)
#define __LZO_RENAME_B 1
#endif
#elif defined(__TSC__) && defined(__OS2__)
#define __LZO_RENAME_A 1
#elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)
#define __LZO_RENAME_A 1
#elif defined(__PACIFIC__) && defined(DOS)
#if !defined(__far)
#define __far far
#endif
#if !defined(__near)
#define __near near
#endif
#endif
#if defined(__LZO_RENAME_A)
#if !defined(__cdecl)
#define __cdecl cdecl
#endif
#if !defined(__far)
#define __far far
#endif
#if !defined(__huge)
#define __huge huge
#endif
#if !defined(__near)
#define __near near
#endif
#if !defined(__pascal)
#define __pascal pascal
#endif
#if !defined(__huge)
#define __huge huge
#endif
#elif defined(__LZO_RENAME_B)
#if !defined(__cdecl)
#define __cdecl _cdecl
#endif
#if !defined(__far)
#define __far _far
#endif
#if !defined(__huge)
#define __huge _huge
#endif
#if !defined(__near)
#define __near _near
#endif
#if !defined(__pascal)
#define __pascal _pascal
#endif
#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
#if !defined(__cdecl)
#define __cdecl cdecl
#endif
#if !defined(__pascal)
#define __pascal pascal
#endif
#endif
#undef __LZO_RENAME_A
#undef __LZO_RENAME_B
#endif
#if (UINT_MAX == LZO_0xffffL)
#if defined(__AZTEC_C__) && defined(__DOS__)
#define LZO_BROKEN_CDECL_ALT_SYNTAX 1
#elif defined(_MSC_VER) && defined(MSDOS)
#if (_MSC_VER < 600)
#define LZO_BROKEN_INTEGRAL_CONSTANTS 1
#endif
#if (_MSC_VER < 700)
#define LZO_BROKEN_INTEGRAL_PROMOTION 1
#define LZO_BROKEN_SIZEOF 1
#endif
#elif defined(__PACIFIC__) && defined(DOS)
#define LZO_BROKEN_INTEGRAL_CONSTANTS 1
#elif defined(__TURBOC__) && defined(__MSDOS__)
#if (__TURBOC__ < 0x0150)
#define LZO_BROKEN_CDECL_ALT_SYNTAX 1
#define LZO_BROKEN_INTEGRAL_CONSTANTS 1
#define LZO_BROKEN_INTEGRAL_PROMOTION 1
#endif
#if (__TURBOC__ < 0x0200)
#define LZO_BROKEN_SIZEOF 1
#endif
#if (__TURBOC__ < 0x0400) && defined(__cplusplus)
#define LZO_BROKEN_CDECL_ALT_SYNTAX 1
#endif
#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
#define LZO_BROKEN_CDECL_ALT_SYNTAX 1
#define LZO_BROKEN_SIZEOF 1
#endif
#endif
#if defined(__WATCOMC__) && (__WATCOMC__ < 900)
#define LZO_BROKEN_INTEGRAL_CONSTANTS 1
#endif
#if defined(_CRAY) && defined(_CRAY1)
#define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1
#endif
#define LZO_PP_STRINGIZE(x) #x
#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x)
#define LZO_PP_CONCAT0() /*empty */
#define LZO_PP_CONCAT1(a) a
#define LZO_PP_CONCAT2(a,b) a ## b
#define LZO_PP_CONCAT3(a,b,c) a ## b ## c
#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d
#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
#define LZO_PP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f
#define LZO_PP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g
#define LZO_PP_ECONCAT0() LZO_PP_CONCAT0()
#define LZO_PP_ECONCAT1(a) LZO_PP_CONCAT1(a)
#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b)
#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c)
#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d)
#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e)
#define LZO_PP_ECONCAT6(a,b,c,d,e,f) LZO_PP_CONCAT6(a,b,c,d,e,f)
#define LZO_PP_ECONCAT7(a,b,c,d,e,f,g) LZO_PP_CONCAT7(a,b,c,d,e,f,g)
#define LZO_PP_EMPTY /*empty */
#define LZO_PP_EMPTY0() /*empty */
#define LZO_PP_EMPTY1(a) /*empty */
#define LZO_PP_EMPTY2(a,b) /*empty */
#define LZO_PP_EMPTY3(a,b,c) /*empty */
#define LZO_PP_EMPTY4(a,b,c,d) /*empty */
#define LZO_PP_EMPTY5(a,b,c,d,e) /*empty */
#define LZO_PP_EMPTY6(a,b,c,d,e,f) /*empty */
#define LZO_PP_EMPTY7(a,b,c,d,e,f,g) /*empty */
#if 1
#define LZO_CPP_STRINGIZE(x) #x
#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x)
#define LZO_CPP_CONCAT2(a,b) a ## b
#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c
#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d
#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e
#define LZO_CPP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f
#define LZO_CPP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g
#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b)
#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c)
#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d)
#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e)
#define LZO_CPP_ECONCAT6(a,b,c,d,e,f) LZO_CPP_CONCAT6(a,b,c,d,e,f)
#define LZO_CPP_ECONCAT7(a,b,c,d,e,f,g) LZO_CPP_CONCAT7(a,b,c,d,e,f,g)
#endif
#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-!!(b))) - (o)) << 1) + (o)*!!(b))
#if 1 && defined(__cplusplus)
#if !defined(__STDC_CONSTANT_MACROS)
#define __STDC_CONSTANT_MACROS 1
#endif
#if !defined(__STDC_LIMIT_MACROS)
#define __STDC_LIMIT_MACROS 1
#endif
#endif
#if defined(__cplusplus)
#define LZO_EXTERN_C extern "C"
#define LZO_EXTERN_C_BEGIN extern "C" {
#define LZO_EXTERN_C_END }
#else
#define LZO_EXTERN_C extern
#define LZO_EXTERN_C_BEGIN /*empty */
#define LZO_EXTERN_C_END /*empty */
#endif
#if !defined(__LZO_OS_OVERRIDE)
#if (LZO_OS_FREESTANDING)
#define LZO_INFO_OS "freestanding"
#elif (LZO_OS_EMBEDDED)
#define LZO_INFO_OS "embedded"
#elif 1 && defined(__IAR_SYSTEMS_ICC__)
#define LZO_OS_EMBEDDED 1
#define LZO_INFO_OS "embedded"
#elif defined(__CYGWIN__) && defined(__GNUC__)
#define LZO_OS_CYGWIN 1
#define LZO_INFO_OS "cygwin"
#elif defined(__EMX__) && defined(__GNUC__)
#define LZO_OS_EMX 1
#define LZO_INFO_OS "emx"
#elif defined(__BEOS__)
#define LZO_OS_BEOS 1
#define LZO_INFO_OS "beos"
#elif defined(__Lynx__)
#define LZO_OS_LYNXOS 1
#define LZO_INFO_OS "lynxos"
#elif defined(__OS400__)
#define LZO_OS_OS400 1
#define LZO_INFO_OS "os400"
#elif defined(__QNX__)
#define LZO_OS_QNX 1
#define LZO_INFO_OS "qnx"
#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
#define LZO_OS_DOS32 1
#define LZO_INFO_OS "dos32"
#elif defined(__BORLANDC__) && defined(__DPMI16__)
#define LZO_OS_DOS16 1
#define LZO_INFO_OS "dos16"
#elif defined(__ZTC__) && defined(DOS386)
#define LZO_OS_DOS32 1
#define LZO_INFO_OS "dos32"
#elif defined(__OS2__) || defined(__OS2V2__)
#if (UINT_MAX == LZO_0xffffL)
#define LZO_OS_OS216 1
#define LZO_INFO_OS "os216"
#elif (UINT_MAX == LZO_0xffffffffL)
#define LZO_OS_OS2 1
#define LZO_INFO_OS "os2"
#else
#error "check your limits.h header"
#endif
#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
#define LZO_OS_WIN64 1
#define LZO_INFO_OS "win64"
#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
#define LZO_OS_WIN32 1
#define LZO_INFO_OS "win32"
#elif defined(__MWERKS__) && defined(__INTEL__)
#define LZO_OS_WIN32 1
#define LZO_INFO_OS "win32"
#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
#if (UINT_MAX == LZO_0xffffL)
#define LZO_OS_WIN16 1
#define LZO_INFO_OS "win16"
#elif (UINT_MAX == LZO_0xffffffffL)
#define LZO_OS_WIN32 1
#define LZO_INFO_OS "win32"
#else
#error "check your limits.h header"
#endif
#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
#if (UINT_MAX == LZO_0xffffL)
#define LZO_OS_DOS16 1
#define LZO_INFO_OS "dos16"
#elif (UINT_MAX == LZO_0xffffffffL)
#define LZO_OS_DOS32 1
#define LZO_INFO_OS "dos32"
#else
#error "check your limits.h header"
#endif
#elif defined(__WATCOMC__)
#if defined(__NT__) && (UINT_MAX == LZO_0xffffL)
#define LZO_OS_DOS16 1
#define LZO_INFO_OS "dos16"
#elif defined(__NT__) && (__WATCOMC__ < 1100)
#define LZO_OS_WIN32 1
#define LZO_INFO_OS "win32"
#elif defined(__linux__) || defined(__LINUX__)
#define LZO_OS_POSIX 1
#define LZO_INFO_OS "posix"
#else
#error "please specify a target using the -bt compiler option"
#endif
#elif defined(__palmos__)
#define LZO_OS_PALMOS 1
#define LZO_INFO_OS "palmos"
#elif defined(__TOS__) || defined(__atarist__)
#define LZO_OS_TOS 1
#define LZO_INFO_OS "tos"
#elif defined(macintosh) && !defined(__arm__) && !defined(__i386__) && !defined(__ppc__) && !defined(__x64_64__)
#define LZO_OS_MACCLASSIC 1
#define LZO_INFO_OS "macclassic"
#elif defined(__VMS)
#define LZO_OS_VMS 1
#define LZO_INFO_OS "vms"
#elif (defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)
#define LZO_OS_CONSOLE 1
#define LZO_OS_CONSOLE_PS2 1
#define LZO_INFO_OS "console"
#define LZO_INFO_OS_CONSOLE "ps2"
#elif defined(__mips__) && defined(__psp__)
#define LZO_OS_CONSOLE 1
#define LZO_OS_CONSOLE_PSP 1
#define LZO_INFO_OS "console"
#define LZO_INFO_OS_CONSOLE "psp"
#else
#define LZO_OS_POSIX 1
#define LZO_INFO_OS "posix"
#endif
#if (LZO_OS_POSIX)
#if defined(_AIX) || defined(__AIX__) || defined(__aix__)
#define LZO_OS_POSIX_AIX 1
#define LZO_INFO_OS_POSIX "aix"
#elif defined(__FreeBSD__)
#define LZO_OS_POSIX_FREEBSD 1
#define LZO_INFO_OS_POSIX "freebsd"
#elif defined(__hpux__) || defined(__hpux)
#define LZO_OS_POSIX_HPUX 1
#define LZO_INFO_OS_POSIX "hpux"
#elif defined(__INTERIX)
#define LZO_OS_POSIX_INTERIX 1
#define LZO_INFO_OS_POSIX "interix"
#elif defined(__IRIX__) || defined(__irix__)
#define LZO_OS_POSIX_IRIX 1
#define LZO_INFO_OS_POSIX "irix"
#elif defined(__linux__) || defined(__linux) || defined(__LINUX__)
#define LZO_OS_POSIX_LINUX 1
#define LZO_INFO_OS_POSIX "linux"
#elif defined(__APPLE__) && defined(__MACH__)
#if ((__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__-0) >= 20000)
#define LZO_OS_POSIX_DARWIN 1040
#define LZO_INFO_OS_POSIX "darwin_iphone"
#elif ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1040)
#define LZO_OS_POSIX_DARWIN __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
#define LZO_INFO_OS_POSIX "darwin"
#else
#define LZO_OS_POSIX_DARWIN 1
#define LZO_INFO_OS_POSIX "darwin"
#endif
#define LZO_OS_POSIX_MACOSX LZO_OS_POSIX_DARWIN
#elif defined(__minix__) || defined(__minix)
#define LZO_OS_POSIX_MINIX 1
#define LZO_INFO_OS_POSIX "minix"
#elif defined(__NetBSD__)
#define LZO_OS_POSIX_NETBSD 1
#define LZO_INFO_OS_POSIX "netbsd"
#elif defined(__OpenBSD__)
#define LZO_OS_POSIX_OPENBSD 1
#define LZO_INFO_OS_POSIX "openbsd"
#elif defined(__osf__)
#define LZO_OS_POSIX_OSF 1
#define LZO_INFO_OS_POSIX "osf"
#elif defined(__solaris__) || defined(__sun)
#if defined(__SVR4) || defined(__svr4__)
#define LZO_OS_POSIX_SOLARIS 1
#define LZO_INFO_OS_POSIX "solaris"
#else
#define LZO_OS_POSIX_SUNOS 1
#define LZO_INFO_OS_POSIX "sunos"
#endif
#elif defined(__ultrix__) || defined(__ultrix)
#define LZO_OS_POSIX_ULTRIX 1
#define LZO_INFO_OS_POSIX "ultrix"
#elif defined(_UNICOS)
#define LZO_OS_POSIX_UNICOS 1
#define LZO_INFO_OS_POSIX "unicos"
#else
#define LZO_OS_POSIX_UNKNOWN 1
#define LZO_INFO_OS_POSIX "unknown"
#endif
#endif
#endif
#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
#if (UINT_MAX != LZO_0xffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#if (ULONG_MAX != LZO_0xffffffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#endif
#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64)
#if (UINT_MAX != LZO_0xffffffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#if (ULONG_MAX != LZO_0xffffffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#endif
#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__)
#define LZO_CC_CILLY 1
#define LZO_INFO_CC "Cilly"
#if defined(__CILLY__)
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__)
#else
#define LZO_INFO_CCVER "unknown"
#endif
#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__)
#define LZO_CC_SDCC 1
#define LZO_INFO_CC "sdcc"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC)
#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__)
#define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + (__PATHCC_MINOR__-0) * 0x100 + (__PATHCC_PATCHLEVEL__-0))
#define LZO_INFO_CC "Pathscale C"
#define LZO_INFO_CCVER __PATHSCALE__
#if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#define LZO_CC_PATHSCALE_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#endif
#elif defined(__INTEL_COMPILER) && ((__INTEL_COMPILER-0) > 0)
#define LZO_CC_INTELC __INTEL_COMPILER
#define LZO_INFO_CC "Intel C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER)
#if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
#define LZO_CC_INTELC_MSC _MSC_VER
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#define LZO_CC_INTELC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#endif
#elif defined(__POCC__) && defined(_WIN32)
#define LZO_CC_PELLESC 1
#define LZO_INFO_CC "Pelles C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__)
#elif defined(__ARMCC_VERSION) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#if defined(__GNUC_PATCHLEVEL__)
#define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#else
#define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
#endif
#define LZO_CC_ARMCC __ARMCC_VERSION
#define LZO_INFO_CC "ARM C Compiler"
#define LZO_INFO_CCVER __VERSION__
#elif defined(__clang__) && defined(__llvm__) && defined(__VERSION__)
#if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__)
#define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0))
#else
#define LZO_CC_CLANG 0x010000L
#endif
#if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
#define LZO_CC_CLANG_MSC _MSC_VER
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#endif
#define LZO_INFO_CC "clang"
#define LZO_INFO_CCVER __VERSION__
#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#if defined(__GNUC_PATCHLEVEL__)
#define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#else
#define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
#endif
#define LZO_CC_LLVM LZO_CC_LLVM_GNUC
#define LZO_INFO_CC "llvm-gcc"
#define LZO_INFO_CCVER __VERSION__
#elif defined(__ACK__) && defined(_ACK)
#define LZO_CC_ACK 1
#define LZO_INFO_CC "Amsterdam Compiler Kit C"
#define LZO_INFO_CCVER "unknown"
#elif defined(__ARMCC_VERSION) && !defined(__GNUC__)
#define LZO_CC_ARMCC __ARMCC_VERSION
#define LZO_CC_ARMCC_ARMCC __ARMCC_VERSION
#define LZO_INFO_CC "ARM C Compiler"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ARMCC_VERSION)
#elif defined(__AZTEC_C__)
#define LZO_CC_AZTECC 1
#define LZO_INFO_CC "Aztec C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__)
#elif defined(__CODEGEARC__)
#define LZO_CC_CODEGEARC 1
#define LZO_INFO_CC "CodeGear C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__)
#elif defined(__BORLANDC__)
#define LZO_CC_BORLANDC 1
#define LZO_INFO_CC "Borland C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__)
#elif defined(_CRAYC) && defined(_RELEASE)
#define LZO_CC_CRAYC 1
#define LZO_INFO_CC "Cray C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE)
#elif defined(__DMC__) && defined(__SC__)
#define LZO_CC_DMC 1
#define LZO_INFO_CC "Digital Mars C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__)
#elif defined(__DECC)
#define LZO_CC_DECC 1
#define LZO_INFO_CC "DEC C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC)
#elif (defined(__ghs) || defined(__ghs__)) && defined(__GHS_VERSION_NUMBER) && ((__GHS_VERSION_NUMBER-0) > 0)
#define LZO_CC_GHS 1
#define LZO_INFO_CC "Green Hills C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__GHS_VERSION_NUMBER)
#if defined(_MSC_VER) && ((_MSC_VER-0) > 0)
#define LZO_CC_GHS_MSC _MSC_VER
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__)
#define LZO_CC_GHS_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#endif
#elif defined(__HIGHC__)
#define LZO_CC_HIGHC 1
#define LZO_INFO_CC "MetaWare High C"
#define LZO_INFO_CCVER "unknown"
#elif defined(__HP_aCC) && ((__HP_aCC-0) > 0)
#define LZO_CC_HPACC __HP_aCC
#define LZO_INFO_CC "HP aCC"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__HP_aCC)
#elif defined(__IAR_SYSTEMS_ICC__)
#define LZO_CC_IARC 1
#define LZO_INFO_CC "IAR C"
#if defined(__VER__)
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__)
#else
#define LZO_INFO_CCVER "unknown"
#endif
#elif defined(__IBMC__) && ((__IBMC__-0) > 0)
#define LZO_CC_IBMC __IBMC__
#define LZO_INFO_CC "IBM C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__)
#elif defined(__IBMCPP__) && ((__IBMCPP__-0) > 0)
#define LZO_CC_IBMC __IBMCPP__
#define LZO_INFO_CC "IBM C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMCPP__)
#elif defined(__KEIL__) && defined(__C166__)
#define LZO_CC_KEILC 1
#define LZO_INFO_CC "Keil C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__)
#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL)
#define LZO_CC_LCCWIN32 1
#define LZO_INFO_CC "lcc-win32"
#define LZO_INFO_CCVER "unknown"
#elif defined(__LCC__)
#define LZO_CC_LCC 1
#define LZO_INFO_CC "lcc"
#if defined(__LCC_VERSION__)
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__)
#else
#define LZO_INFO_CCVER "unknown"
#endif
#elif defined(__MWERKS__) && ((__MWERKS__-0) > 0)
#define LZO_CC_MWERKS __MWERKS__
#define LZO_INFO_CC "Metrowerks C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__)
#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386)
#define LZO_CC_NDPC 1
#define LZO_INFO_CC "Microway NDP C"
#define LZO_INFO_CCVER "unknown"
#elif defined(__PACIFIC__)
#define LZO_CC_PACIFICC 1
#define LZO_INFO_CC "Pacific C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__)
#elif defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__)
#if defined(__PGIC_PATCHLEVEL__)
#define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100 + (__PGIC_PATCHLEVEL__-0))
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) "." LZO_PP_MACRO_EXPAND(__PGIC_PATCHLEVEL__)
#else
#define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100)
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) ".0"
#endif
#define LZO_INFO_CC "Portland Group PGI C"
#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__))
#define LZO_CC_PGI 1
#define LZO_INFO_CC "Portland Group PGI C"
#define LZO_INFO_CCVER "unknown"
#elif defined(__PUREC__) && defined(__TOS__)
#define LZO_CC_PUREC 1
#define LZO_INFO_CC "Pure C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__)
#elif defined(__SC__) && defined(__ZTC__)
#define LZO_CC_SYMANTECC 1
#define LZO_INFO_CC "Symantec C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__)
#elif defined(__SUNPRO_C)
#define LZO_INFO_CC "SunPro C"
#if ((__SUNPRO_C-0) > 0)
#define LZO_CC_SUNPROC __SUNPRO_C
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C)
#else
#define LZO_CC_SUNPROC 1
#define LZO_INFO_CCVER "unknown"
#endif
#elif defined(__SUNPRO_CC)
#define LZO_INFO_CC "SunPro C"
#if ((__SUNPRO_CC-0) > 0)
#define LZO_CC_SUNPROC __SUNPRO_CC
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC)
#else
#define LZO_CC_SUNPROC 1
#define LZO_INFO_CCVER "unknown"
#endif
#elif defined(__TINYC__)
#define LZO_CC_TINYC 1
#define LZO_INFO_CC "Tiny C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__)
#elif defined(__TSC__)
#define LZO_CC_TOPSPEEDC 1
#define LZO_INFO_CC "TopSpeed C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__)
#elif defined(__WATCOMC__)
#define LZO_CC_WATCOMC 1
#define LZO_INFO_CC "Watcom C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__)
#elif defined(__TURBOC__)
#define LZO_CC_TURBOC 1
#define LZO_INFO_CC "Turbo C"
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__)
#elif defined(__ZTC__)
#define LZO_CC_ZORTECHC 1
#define LZO_INFO_CC "Zortech C"
#if ((__ZTC__-0) == 0x310)
#define LZO_INFO_CCVER "0x310"
#else
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__)
#endif
#elif defined(__GNUC__) && defined(__VERSION__)
#if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
#define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0))
#elif defined(__GNUC_MINOR__)
#define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100)
#else
#define LZO_CC_GNUC (__GNUC__ * 0x10000L)
#endif
#define LZO_INFO_CC "gcc"
#define LZO_INFO_CCVER __VERSION__
#elif defined(_MSC_VER) && ((_MSC_VER-0) > 0)
#define LZO_CC_MSC _MSC_VER
#define LZO_INFO_CC "Microsoft C"
#if defined(_MSC_FULL_VER)
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER)
#else
#define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER)
#endif
#else
#define LZO_CC_UNKNOWN 1
#define LZO_INFO_CC "unknown"
#define LZO_INFO_CCVER "unknown"
#endif
#if (LZO_CC_GNUC) && defined(__OPEN64__)
#if defined(__OPENCC__) && defined(__OPENCC_MINOR__) && defined(__OPENCC_PATCHLEVEL__)
#define LZO_CC_OPEN64 (__OPENCC__ * 0x10000L + (__OPENCC_MINOR__-0) * 0x100 + (__OPENCC_PATCHLEVEL__-0))
#define LZO_CC_OPEN64_GNUC LZO_CC_GNUC
#endif
#endif
#if (LZO_CC_GNUC) && defined(__PCC__)
#if defined(__PCC__) && defined(__PCC_MINOR__) && defined(__PCC_MINORMINOR__)
#define LZO_CC_PCC (__PCC__ * 0x10000L + (__PCC_MINOR__-0) * 0x100 + (__PCC_MINORMINOR__-0))
#define LZO_CC_PCC_GNUC LZO_CC_GNUC
#endif
#endif
#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
#error "LZO_CC_MSC: _MSC_FULL_VER is not defined"
#endif
#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY)
#if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY)
#if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E)
#define LZO_ARCH_CRAY_MPP 1
#elif defined(_CRAY1)
#define LZO_ARCH_CRAY_PVP 1
#endif
#endif
#endif
#if !defined(__LZO_ARCH_OVERRIDE)
#if (LZO_ARCH_GENERIC)
#define LZO_INFO_ARCH "generic"
#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
#define LZO_ARCH_I086 1
#define LZO_INFO_ARCH "i086"
#elif defined(__aarch64__)
#define LZO_ARCH_ARM64 1
#define LZO_INFO_ARCH "arm64"
#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
#define LZO_ARCH_ALPHA 1
#define LZO_INFO_ARCH "alpha"
#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E))
#define LZO_ARCH_ALPHA 1
#define LZO_INFO_ARCH "alpha"
#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
#define LZO_ARCH_AMD64 1
#define LZO_INFO_ARCH "amd64"
#elif defined(__arm__) || defined(_M_ARM)
#define LZO_ARCH_ARM 1
#define LZO_INFO_ARCH "arm"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__)
#define LZO_ARCH_ARM 1
#define LZO_INFO_ARCH "arm"
#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__)
#define LZO_ARCH_AVR 1
#define LZO_INFO_ARCH "avr"
#elif defined(__avr32__) || defined(__AVR32__)
#define LZO_ARCH_AVR32 1
#define LZO_INFO_ARCH "avr32"
#elif defined(__bfin__)
#define LZO_ARCH_BLACKFIN 1
#define LZO_INFO_ARCH "blackfin"
#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__)
#define LZO_ARCH_C166 1
#define LZO_INFO_ARCH "c166"
#elif defined(__cris__)
#define LZO_ARCH_CRIS 1
#define LZO_INFO_ARCH "cris"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__)
#define LZO_ARCH_EZ80 1
#define LZO_INFO_ARCH "ez80"
#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
#define LZO_ARCH_H8300 1
#define LZO_INFO_ARCH "h8300"
#elif defined(__hppa__) || defined(__hppa)
#define LZO_ARCH_HPPA 1
#define LZO_INFO_ARCH "hppa"
#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386)
#define LZO_ARCH_I386 1
#define LZO_ARCH_IA32 1
#define LZO_INFO_ARCH "i386"
#elif (LZO_CC_ZORTECHC && defined(__I86__))
#define LZO_ARCH_I386 1
#define LZO_ARCH_IA32 1
#define LZO_INFO_ARCH "i386"
#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386)
#define LZO_ARCH_I386 1
#define LZO_ARCH_IA32 1
#define LZO_INFO_ARCH "i386"
#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
#define LZO_ARCH_IA64 1
#define LZO_INFO_ARCH "ia64"
#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__)
#define LZO_ARCH_M16C 1
#define LZO_INFO_ARCH "m16c"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__)
#define LZO_ARCH_M16C 1
#define LZO_INFO_ARCH "m16c"
#elif defined(__m32r__)
#define LZO_ARCH_M32R 1
#define LZO_INFO_ARCH "m32r"
#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K)
#define LZO_ARCH_M68K 1
#define LZO_INFO_ARCH "m68k"
#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__)
#define LZO_ARCH_MCS251 1
#define LZO_INFO_ARCH "mcs251"
#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__)
#define LZO_ARCH_MCS51 1
#define LZO_INFO_ARCH "mcs51"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__)
#define LZO_ARCH_MCS51 1
#define LZO_INFO_ARCH "mcs51"
#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
#define LZO_ARCH_MIPS 1
#define LZO_INFO_ARCH "mips"
#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__)
#define LZO_ARCH_MSP430 1
#define LZO_INFO_ARCH "msp430"
#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__)
#define LZO_ARCH_MSP430 1
#define LZO_INFO_ARCH "msp430"
#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR)
#define LZO_ARCH_POWERPC 1
#define LZO_INFO_ARCH "powerpc"
#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
#define LZO_ARCH_S390 1
#define LZO_INFO_ARCH "s390"
#elif defined(__sh__) || defined(_M_SH)
#define LZO_ARCH_SH 1
#define LZO_INFO_ARCH "sh"
#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
#define LZO_ARCH_SPARC 1
#define LZO_INFO_ARCH "sparc"
#elif defined(__SPU__)
#define LZO_ARCH_SPU 1
#define LZO_INFO_ARCH "spu"
#elif (UINT_MAX == LZO_0xffffL) && defined(__z80)
#define LZO_ARCH_Z80 1
#define LZO_INFO_ARCH "z80"
#elif (LZO_ARCH_CRAY_PVP)
#if defined(_CRAYSV1)
#define LZO_ARCH_CRAY_SV1 1
#define LZO_INFO_ARCH "cray_sv1"
#elif (_ADDR64)
#define LZO_ARCH_CRAY_T90 1
#define LZO_INFO_ARCH "cray_t90"
#elif (_ADDR32)
#define LZO_ARCH_CRAY_YMP 1
#define LZO_INFO_ARCH "cray_ymp"
#else
#define LZO_ARCH_CRAY_XMP 1
#define LZO_INFO_ARCH "cray_xmp"
#endif
#else
#define LZO_ARCH_UNKNOWN 1
#define LZO_INFO_ARCH "unknown"
#endif
#endif
#if !defined(LZO_ARCH_ARM_THUMB2)
#if (LZO_ARCH_ARM)
#if defined(__ARM_ARCH_ISA_THUMB)
#if ((__ARM_ARCH_ISA_THUMB)+0 >= 2)
#define LZO_ARCH_ARM_THUMB2 1
#endif
#elif 1 && defined(__thumb2__)
#define LZO_ARCH_ARM_THUMB2 1
#elif 1 && defined(__TARGET_ARCH_THUMB) && ((__TARGET_ARCH_THUMB)+0 >= 4)
#define LZO_ARCH_ARM_THUMB2 1
#endif
#endif
#endif
#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2)
#error "FIXME - missing define for CPU architecture"
#endif
#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32)
#error "FIXME - missing LZO_OS_WIN32 define for CPU architecture"
#endif
#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64)
#error "FIXME - missing LZO_OS_WIN64 define for CPU architecture"
#endif
#if (LZO_OS_OS216 || LZO_OS_WIN16)
#define LZO_ARCH_I086PM 1
#elif 1 && (LZO_OS_DOS16 && defined(BLX286))
#define LZO_ARCH_I086PM 1
#elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
#define LZO_ARCH_I086PM 1
#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__))
#define LZO_ARCH_I086PM 1
#endif
#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64)
#define LZO_ARCH_X64 1
#elif (!LZO_ARCH_AMD64 && LZO_ARCH_X64) && defined(__LZO_ARCH_OVERRIDE)
#define LZO_ARCH_AMD64 1
#endif
#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64)
#define LZO_ARCH_AARCH64 1
#elif (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) && defined(__LZO_ARCH_OVERRIDE)
#define LZO_ARCH_ARM64 1
#endif
#if (LZO_ARCH_I386 && !LZO_ARCH_X86)
#define LZO_ARCH_X86 1
#elif (!LZO_ARCH_I386 && LZO_ARCH_X86) && defined(__LZO_ARCH_OVERRIDE)
#define LZO_ARCH_I386 1
#endif
#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) || (!LZO_ARCH_AMD64 && LZO_ARCH_X64)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) || (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_I386 && !LZO_ARCH_X86) || (!LZO_ARCH_I386 && LZO_ARCH_X86)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_ARM_THUMB1 && !LZO_ARCH_ARM)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_ARM_THUMB2 && !LZO_ARCH_ARM)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_ARM_THUMB1 && LZO_ARCH_ARM_THUMB2)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_I086PM && !LZO_ARCH_I086)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_I086)
#if (UINT_MAX != LZO_0xffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#if (ULONG_MAX != LZO_0xffffffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#endif
#if (LZO_ARCH_I386)
#if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__)
#error "unexpected configuration - check your compiler defines"
#endif
#if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__)
#error "unexpected configuration - check your compiler defines"
#endif
#if (ULONG_MAX != LZO_0xffffffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#endif
#if (LZO_ARCH_AMD64 || LZO_ARCH_I386)
#if !defined(LZO_TARGET_FEATURE_SSE2)
#if defined(__SSE2__)
#define LZO_TARGET_FEATURE_SSE2 1
#elif defined(_MSC_VER) && (defined(_M_IX86_FP) && ((_M_IX86_FP)+0 >= 2))
#define LZO_TARGET_FEATURE_SSE2 1
#elif (LZO_CC_INTELC_MSC || LZO_CC_MSC) && defined(_M_AMD64)
#define LZO_TARGET_FEATURE_SSE2 1
#endif
#endif
#if !defined(LZO_TARGET_FEATURE_SSSE3)
#if (LZO_TARGET_FEATURE_SSE2)
#if defined(__SSSE3__)
#define LZO_TARGET_FEATURE_SSSE3 1
#elif defined(_MSC_VER) && defined(__AVX__)
#define LZO_TARGET_FEATURE_SSSE3 1
#endif
#endif
#endif
#if !defined(LZO_TARGET_FEATURE_SSE4_2)
#if (LZO_TARGET_FEATURE_SSSE3)
#if defined(__SSE4_2__)
#define LZO_TARGET_FEATURE_SSE4_2 1
#endif
#endif
#endif
#if !defined(LZO_TARGET_FEATURE_AVX)
#if (LZO_TARGET_FEATURE_SSSE3)
#if defined(__AVX__)
#define LZO_TARGET_FEATURE_AVX 1
#endif
#endif
#endif
#if !defined(LZO_TARGET_FEATURE_AVX2)
#if (LZO_TARGET_FEATURE_AVX)
#if defined(__AVX2__)
#define LZO_TARGET_FEATURE_AVX2 1
#endif
#endif
#endif
#endif
#if (LZO_TARGET_FEATURE_SSSE3 && !(LZO_TARGET_FEATURE_SSE2))
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_TARGET_FEATURE_SSE4_2 && !(LZO_TARGET_FEATURE_SSSE3))
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_TARGET_FEATURE_AVX && !(LZO_TARGET_FEATURE_SSSE3))
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_TARGET_FEATURE_AVX2 && !(LZO_TARGET_FEATURE_AVX))
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ARCH_ARM)
#if !defined(LZO_TARGET_FEATURE_NEON)
#if defined(__ARM_NEON) && ((__ARM_NEON)+0)
#define LZO_TARGET_FEATURE_NEON 1
#elif 1 && defined(__ARM_NEON__) && ((__ARM_NEON__)+0)
#define LZO_TARGET_FEATURE_NEON 1
#elif 1 && defined(__TARGET_FEATURE_NEON) && ((__TARGET_FEATURE_NEON)+0)
#define LZO_TARGET_FEATURE_NEON 1
#endif
#endif
#elif (LZO_ARCH_ARM64)
#if !defined(LZO_TARGET_FEATURE_NEON)
#if 1
#define LZO_TARGET_FEATURE_NEON 1
#endif
#endif
#endif
#if 0
#elif !defined(__LZO_MM_OVERRIDE)
#if (LZO_ARCH_I086)
#if (UINT_MAX != LZO_0xffffL)
#error "unexpected configuration - check your compiler defines"
#endif
#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
#define LZO_MM_TINY 1
#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
#define LZO_MM_HUGE 1
#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
#define LZO_MM_SMALL 1
#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
#define LZO_MM_MEDIUM 1
#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
#define LZO_MM_COMPACT 1
#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
#define LZO_MM_LARGE 1
#elif (LZO_CC_AZTECC)
#if defined(_LARGE_CODE) && defined(_LARGE_DATA)
#define LZO_MM_LARGE 1
#elif defined(_LARGE_CODE)
#define LZO_MM_MEDIUM 1
#elif defined(_LARGE_DATA)
#define LZO_MM_COMPACT 1
#else
#define LZO_MM_SMALL 1
#endif
#elif (LZO_CC_ZORTECHC && defined(__VCM__))
#define LZO_MM_LARGE 1
#else
#error "unknown LZO_ARCH_I086 memory model"
#endif
#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
#define LZO_HAVE_MM_HUGE_PTR 1
#define LZO_HAVE_MM_HUGE_ARRAY 1
#if (LZO_MM_TINY)
#undef LZO_HAVE_MM_HUGE_ARRAY
#endif
#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC)
#undef LZO_HAVE_MM_HUGE_PTR
#undef LZO_HAVE_MM_HUGE_ARRAY
#elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
#undef LZO_HAVE_MM_HUGE_ARRAY
#elif (LZO_CC_MSC && defined(_QC))
#undef LZO_HAVE_MM_HUGE_ARRAY
#if (_MSC_VER < 600)
#undef LZO_HAVE_MM_HUGE_PTR
#endif
#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295))
#undef LZO_HAVE_MM_HUGE_ARRAY
#endif
#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR)
#if (LZO_OS_DOS16)
#error "unexpected configuration - check your compiler defines"
#elif (LZO_CC_ZORTECHC)
#else
#error "unexpected configuration - check your compiler defines"
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
extern void __near __cdecl _AHSHIFT(void);
#define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
extern void __near __cdecl _AHSHIFT(void);
#define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC)
extern void __near __cdecl _AHSHIFT(void);
#define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295))
extern void __near __cdecl _AHSHIFT(void);
#define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT)
#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16)
#define LZO_MM_AHSHIFT 12
#elif (LZO_CC_WATCOMC)
extern unsigned char _HShift;
#define LZO_MM_AHSHIFT ((unsigned) _HShift)
#else
#error "FIXME - implement LZO_MM_AHSHIFT"
#endif
#ifdef __cplusplus
}
#endif
#endif
#elif (LZO_ARCH_C166)
#if !defined(__MODEL__)
#error "FIXME - LZO_ARCH_C166 __MODEL__"
#elif ((__MODEL__) == 0)
#define LZO_MM_SMALL 1
#elif ((__MODEL__) == 1)
#define LZO_MM_SMALL 1
#elif ((__MODEL__) == 2)
#define LZO_MM_LARGE 1
#elif ((__MODEL__) == 3)
#define LZO_MM_TINY 1
#elif ((__MODEL__) == 4)
#define LZO_MM_XTINY 1
#elif ((__MODEL__) == 5)
#define LZO_MM_XSMALL 1
#else
#error "FIXME - LZO_ARCH_C166 __MODEL__"
#endif
#elif (LZO_ARCH_MCS251)
#if !defined(__MODEL__)
#error "FIXME - LZO_ARCH_MCS251 __MODEL__"
#elif ((__MODEL__) == 0)
#define LZO_MM_SMALL 1
#elif ((__MODEL__) == 2)
#define LZO_MM_LARGE 1
#elif ((__MODEL__) == 3)
#define LZO_MM_TINY 1
#elif ((__MODEL__) == 4)
#define LZO_MM_XTINY 1
#elif ((__MODEL__) == 5)
#define LZO_MM_XSMALL 1
#else
#error "FIXME - LZO_ARCH_MCS251 __MODEL__"
#endif
#elif (LZO_ARCH_MCS51)
#if !defined(__MODEL__)
#error "FIXME - LZO_ARCH_MCS51 __MODEL__"
#elif ((__MODEL__) == 1)
#define LZO_MM_SMALL 1
#elif ((__MODEL__) == 2)
#define LZO_MM_LARGE 1
#elif ((__MODEL__) == 3)
#define LZO_MM_TINY 1
#elif ((__MODEL__) == 4)
#define LZO_MM_XTINY 1
#elif ((__MODEL__) == 5)
#define LZO_MM_XSMALL 1
#else
#error "FIXME - LZO_ARCH_MCS51 __MODEL__"
#endif
#elif (LZO_ARCH_CRAY_PVP)
#define LZO_MM_PVP 1
#else
#define LZO_MM_FLAT 1
#endif
#if (LZO_MM_COMPACT)
#define LZO_INFO_MM "compact"
#elif (LZO_MM_FLAT)
#define LZO_INFO_MM "flat"
#elif (LZO_MM_HUGE)
#define LZO_INFO_MM "huge"
#elif (LZO_MM_LARGE)
#define LZO_INFO_MM "large"
#elif (LZO_MM_MEDIUM)
#define LZO_INFO_MM "medium"
#elif (LZO_MM_PVP)
#define LZO_INFO_MM "pvp"
#elif (LZO_MM_SMALL)
#define LZO_INFO_MM "small"
#elif (LZO_MM_TINY)
#define LZO_INFO_MM "tiny"
#else
#error "unknown memory model"
#endif
#endif
#if !defined(__lzo_gnuc_extension__)
#if (LZO_CC_GNUC >= 0x020800ul)
#define __lzo_gnuc_extension__ __extension__
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_gnuc_extension__ __extension__
#elif (LZO_CC_IBMC >= 600)
#define __lzo_gnuc_extension__ __extension__
#else
#endif
#endif
#if !defined(__lzo_gnuc_extension__)
#define __lzo_gnuc_extension__ /*empty */
#endif
#if !defined(lzo_has_builtin)
#if (LZO_CC_CLANG) && defined(__has_builtin)
#define lzo_has_builtin __has_builtin
#endif
#endif
#if !defined(lzo_has_builtin)
#define lzo_has_builtin(x) 0
#endif
#if !defined(lzo_has_attribute)
#if (LZO_CC_CLANG) && defined(__has_attribute)
#define lzo_has_attribute __has_attribute
#endif
#endif
#if !defined(lzo_has_attribute)
#define lzo_has_attribute(x) 0
#endif
#if !defined(lzo_has_declspec_attribute)
#if (LZO_CC_CLANG) && defined(__has_declspec_attribute)
#define lzo_has_declspec_attribute __has_declspec_attribute
#endif
#endif
#if !defined(lzo_has_declspec_attribute)
#define lzo_has_declspec_attribute(x) 0
#endif
#if !defined(lzo_has_feature)
#if (LZO_CC_CLANG) && defined(__has_feature)
#define lzo_has_feature __has_feature
#endif
#endif
#if !defined(lzo_has_feature)
#define lzo_has_feature(x) 0
#endif
#if !defined(lzo_has_extension)
#if (LZO_CC_CLANG) && defined(__has_extension)
#define lzo_has_extension __has_extension
#elif (LZO_CC_CLANG) && defined(__has_feature)
#define lzo_has_extension __has_feature
#endif
#endif
#if !defined(lzo_has_extension)
#define lzo_has_extension 0
#endif
#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) && defined(__cplusplus) && 0
#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul))
#define LZO_CFG_USE_NEW_STYLE_CASTS 0
#elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1200))
#define LZO_CFG_USE_NEW_STYLE_CASTS 0
#else
#define LZO_CFG_USE_NEW_STYLE_CASTS 1
#endif
#endif
#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_CFG_USE_NEW_STYLE_CASTS 0
#endif
#if !defined(__cplusplus)
#if defined(LZO_CFG_USE_NEW_STYLE_CASTS)
#undef LZO_CFG_USE_NEW_STYLE_CASTS
#endif
#define LZO_CFG_USE_NEW_STYLE_CASTS 0
#endif
#if !defined(LZO_REINTERPRET_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_REINTERPRET_CAST(t,e) (reinterpret_cast<t> (e))
#endif
#endif
#if !defined(LZO_REINTERPRET_CAST)
#define LZO_REINTERPRET_CAST(t,e) ((t) (e))
#endif
#if !defined(LZO_STATIC_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_STATIC_CAST(t,e) (static_cast<t> (e))
#endif
#endif
#if !defined(LZO_STATIC_CAST)
#define LZO_STATIC_CAST(t,e) ((t) (e))
#endif
#if !defined(LZO_STATIC_CAST2)
#define LZO_STATIC_CAST2(t1,t2,e) LZO_STATIC_CAST(t1, LZO_STATIC_CAST(t2, e))
#endif
#if !defined(LZO_UNCONST_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_UNCONST_CAST(t,e) (const_cast<t> (e))
#elif (LZO_HAVE_MM_HUGE_PTR)
#define LZO_UNCONST_CAST(t,e) ((t) (e))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((const void *) (e)))))
#endif
#endif
#if !defined(LZO_UNCONST_CAST)
#define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((const void *) (e))))
#endif
#if !defined(LZO_UNCONST_VOLATILE_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_UNCONST_VOLATILE_CAST(t,e) (const_cast<t> (e))
#elif (LZO_HAVE_MM_HUGE_PTR)
#define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) (e))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((lzo_uintptr_t) ((volatile const void *) (e)))))
#endif
#endif
#if !defined(LZO_UNCONST_VOLATILE_CAST)
#define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((volatile const void *) (e))))
#endif
#if !defined(LZO_UNVOLATILE_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_UNVOLATILE_CAST(t,e) (const_cast<t> (e))
#elif (LZO_HAVE_MM_HUGE_PTR)
#define LZO_UNVOLATILE_CAST(t,e) ((t) (e))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((volatile void *) (e)))))
#endif
#endif
#if !defined(LZO_UNVOLATILE_CAST)
#define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((volatile void *) (e))))
#endif
#if !defined(LZO_UNVOLATILE_CONST_CAST)
#if (LZO_CFG_USE_NEW_STYLE_CASTS)
#define LZO_UNVOLATILE_CONST_CAST(t,e) (const_cast<t> (e))
#elif (LZO_HAVE_MM_HUGE_PTR)
#define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) (e))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((lzo_uintptr_t) ((volatile const void *) (e)))))
#endif
#endif
#if !defined(LZO_UNVOLATILE_CONST_CAST)
#define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((volatile const void *) (e))))
#endif
#if !defined(LZO_PCAST)
#if (LZO_HAVE_MM_HUGE_PTR)
#define LZO_PCAST(t,e) ((t) (e))
#endif
#endif
#if !defined(LZO_PCAST)
#define LZO_PCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(void *, e))
#endif
#if !defined(LZO_CCAST)
#if (LZO_HAVE_MM_HUGE_PTR)
#define LZO_CCAST(t,e) ((t) (e))
#endif
#endif
#if !defined(LZO_CCAST)
#define LZO_CCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(const void *, e))
#endif
#if !defined(LZO_ICONV)
#define LZO_ICONV(t,e) LZO_STATIC_CAST(t, e)
#endif
#if !defined(LZO_ICAST)
#define LZO_ICAST(t,e) LZO_STATIC_CAST(t, e)
#endif
#if !defined(LZO_ITRUNC)
#define LZO_ITRUNC(t,e) LZO_STATIC_CAST(t, e)
#endif
#if !defined(__lzo_cte)
#if (LZO_CC_MSC || LZO_CC_WATCOMC)
#define __lzo_cte(e) ((void)0,(e))
#elif 1
#define __lzo_cte(e) ((void)0,(e))
#endif
#endif
#if !defined(__lzo_cte)
#define __lzo_cte(e) (e)
#endif
#if !defined(LZO_BLOCK_BEGIN)
#define LZO_BLOCK_BEGIN do {
#define LZO_BLOCK_END } while __lzo_cte(0)
#endif
#if !defined(LZO_UNUSED)
#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
#define LZO_UNUSED(var) ((void) &var)
#elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC)
#define LZO_UNUSED(var) if (&var) ; else
#elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030200ul))
#define LZO_UNUSED(var) ((void) &var)
#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_UNUSED(var) ((void) var)
#elif (LZO_CC_MSC && (_MSC_VER < 900))
#define LZO_UNUSED(var) if (&var) ; else
#elif (LZO_CC_KEILC)
#define LZO_UNUSED(var) {extern int lzo_unused__[1-2*!(sizeof(var)>0)]; (void)lzo_unused__;}
#elif (LZO_CC_PACIFICC)
#define LZO_UNUSED(var) ((void) sizeof(var))
#elif (LZO_CC_WATCOMC) && defined(__cplusplus)
#define LZO_UNUSED(var) ((void) var)
#else
#define LZO_UNUSED(var) ((void) &var)
#endif
#endif
#if !defined(LZO_UNUSED_FUNC)
#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
#define LZO_UNUSED_FUNC(func) ((void) func)
#elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC)
#define LZO_UNUSED_FUNC(func) if (func) ; else
#elif (LZO_CC_CLANG || LZO_CC_LLVM)
#define LZO_UNUSED_FUNC(func) ((void) &func)
#elif (LZO_CC_MSC && (_MSC_VER < 900))
#define LZO_UNUSED_FUNC(func) if (func) ; else
#elif (LZO_CC_MSC)
#define LZO_UNUSED_FUNC(func) ((void) &func)
#elif (LZO_CC_KEILC || LZO_CC_PELLESC)
#define LZO_UNUSED_FUNC(func) {extern int lzo_unused__[1-2*!(sizeof((int)func)>0)]; (void)lzo_unused__;}
#else
#define LZO_UNUSED_FUNC(func) ((void) func)
#endif
#endif
#if !defined(LZO_UNUSED_LABEL)
#if (LZO_CC_CLANG >= 0x020800ul)
#define LZO_UNUSED_LABEL(l) (__lzo_gnuc_extension__ ((void) ((const void *) &&l)))
#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC)
#define LZO_UNUSED_LABEL(l) if __lzo_cte(0) goto l
#else
#define LZO_UNUSED_LABEL(l) switch (0) case 1:goto l
#endif
#endif
#if !defined(LZO_DEFINE_UNINITIALIZED_VAR)
#if 0
#define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var
#elif 0 && (LZO_CC_GNUC)
#define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var
#else
#define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init
#endif
#endif
#if !defined(__lzo_inline)
#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295))
#elif defined(__cplusplus)
#define __lzo_inline inline
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L)
#define __lzo_inline inline
#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550))
#define __lzo_inline __inline
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
#define __lzo_inline __inline__
#elif (LZO_CC_DMC)
#define __lzo_inline __inline
#elif (LZO_CC_GHS)
#define __lzo_inline __inline__
#elif (LZO_CC_IBMC >= 600)
#define __lzo_inline __inline__
#elif (LZO_CC_INTELC)
#define __lzo_inline __inline
#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405))
#define __lzo_inline __inline
#elif (LZO_CC_MSC && (_MSC_VER >= 900))
#define __lzo_inline __inline
#elif (LZO_CC_SUNPROC >= 0x5100)
#define __lzo_inline __inline__
#endif
#endif
#if defined(__lzo_inline)
#ifndef __lzo_HAVE_inline
#define __lzo_HAVE_inline 1
#endif
#else
#define __lzo_inline /*empty */
#endif
#if !defined(__lzo_forceinline)
#if (LZO_CC_GNUC >= 0x030200ul)
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#elif (LZO_CC_IBMC >= 700)
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450))
#define __lzo_forceinline __forceinline
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#elif (LZO_CC_MSC && (_MSC_VER >= 1200))
#define __lzo_forceinline __forceinline
#elif (LZO_CC_PGI >= 0x0d0a00ul)
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#elif (LZO_CC_SUNPROC >= 0x5100)
#define __lzo_forceinline __inline__ __attribute__((__always_inline__))
#endif
#endif
#if defined(__lzo_forceinline)
#ifndef __lzo_HAVE_forceinline
#define __lzo_HAVE_forceinline 1
#endif
#else
#define __lzo_forceinline __lzo_inline
#endif
#if !defined(__lzo_noinline)
#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul)
#define __lzo_noinline __attribute__((__noinline__,__used__))
#elif (LZO_CC_GNUC >= 0x030200ul)
#define __lzo_noinline __attribute__((__noinline__))
#elif (LZO_CC_IBMC >= 700)
#define __lzo_noinline __attribute__((__noinline__))
#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600))
#define __lzo_noinline __declspec(noinline)
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
#define __lzo_noinline __attribute__((__noinline__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_noinline __attribute__((__noinline__))
#elif (LZO_CC_MSC && (_MSC_VER >= 1300))
#define __lzo_noinline __declspec(noinline)
#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64))
#if defined(__cplusplus)
#else
#define __lzo_noinline __declspec(noinline)
#endif
#elif (LZO_CC_PGI >= 0x0d0a00ul)
#define __lzo_noinline __attribute__((__noinline__))
#elif (LZO_CC_SUNPROC >= 0x5100)
#define __lzo_noinline __attribute__((__noinline__))
#endif
#endif
#if defined(__lzo_noinline)
#ifndef __lzo_HAVE_noinline
#define __lzo_HAVE_noinline 1
#endif
#else
#define __lzo_noinline /*empty */
#endif
#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline)
#error "unexpected configuration - check your compiler defines"
#endif
#if !defined(__lzo_static_inline)
#if (LZO_CC_IBMC)
#define __lzo_static_inline __lzo_gnuc_extension__ static __lzo_inline
#endif
#endif
#if !defined(__lzo_static_inline)
#define __lzo_static_inline static __lzo_inline
#endif
#if !defined(__lzo_static_forceinline)
#if (LZO_CC_IBMC)
#define __lzo_static_forceinline __lzo_gnuc_extension__ static __lzo_forceinline
#endif
#endif
#if !defined(__lzo_static_forceinline)
#define __lzo_static_forceinline static __lzo_forceinline
#endif
#if !defined(__lzo_static_noinline)
#if (LZO_CC_IBMC)
#define __lzo_static_noinline __lzo_gnuc_extension__ static __lzo_noinline
#endif
#endif
#if !defined(__lzo_static_noinline)
#define __lzo_static_noinline static __lzo_noinline
#endif
#if !defined(__lzo_c99_extern_inline)
#if defined(__GNUC_GNU_INLINE__)
#define __lzo_c99_extern_inline __lzo_inline
#elif defined(__GNUC_STDC_INLINE__)
#define __lzo_c99_extern_inline extern __lzo_inline
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L)
#define __lzo_c99_extern_inline extern __lzo_inline
#endif
#if !defined(__lzo_c99_extern_inline) && (__lzo_HAVE_inline)
#define __lzo_c99_extern_inline __lzo_inline
#endif
#endif
#if defined(__lzo_c99_extern_inline)
#ifndef __lzo_HAVE_c99_extern_inline
#define __lzo_HAVE_c99_extern_inline 1
#endif
#else
#define __lzo_c99_extern_inline /*empty */
#endif
#if !defined(__lzo_may_alias)
#if (LZO_CC_GNUC >= 0x030400ul)
#define __lzo_may_alias __attribute__((__may_alias__))
#elif (LZO_CC_CLANG >= 0x020900ul)
#define __lzo_may_alias __attribute__((__may_alias__))
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1210)) && 0
#define __lzo_may_alias __attribute__((__may_alias__))
#elif (LZO_CC_PGI >= 0x0d0a00ul) && 0
#define __lzo_may_alias __attribute__((__may_alias__))
#endif
#endif
#if defined(__lzo_may_alias)
#ifndef __lzo_HAVE_may_alias
#define __lzo_HAVE_may_alias 1
#endif
#else
#define __lzo_may_alias /*empty */
#endif
#if !defined(__lzo_noreturn)
#if (LZO_CC_GNUC >= 0x020700ul)
#define __lzo_noreturn __attribute__((__noreturn__))
#elif (LZO_CC_IBMC >= 700)
#define __lzo_noreturn __attribute__((__noreturn__))
#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450))
#define __lzo_noreturn __declspec(noreturn)
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600))
#define __lzo_noreturn __attribute__((__noreturn__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_noreturn __attribute__((__noreturn__))
#elif (LZO_CC_MSC && (_MSC_VER >= 1200))
#define __lzo_noreturn __declspec(noreturn)
#elif (LZO_CC_PGI >= 0x0d0a00ul)
#define __lzo_noreturn __attribute__((__noreturn__))
#endif
#endif
#if defined(__lzo_noreturn)
#ifndef __lzo_HAVE_noreturn
#define __lzo_HAVE_noreturn 1
#endif
#else
#define __lzo_noreturn /*empty */
#endif
#if !defined(__lzo_nothrow)
#if (LZO_CC_GNUC >= 0x030300ul)
#define __lzo_nothrow __attribute__((__nothrow__))
#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) && defined(__cplusplus)
#define __lzo_nothrow __declspec(nothrow)
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 900))
#define __lzo_nothrow __attribute__((__nothrow__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_nothrow __attribute__((__nothrow__))
#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus)
#define __lzo_nothrow __declspec(nothrow)
#endif
#endif
#if defined(__lzo_nothrow)
#ifndef __lzo_HAVE_nothrow
#define __lzo_HAVE_nothrow 1
#endif
#else
#define __lzo_nothrow /*empty */
#endif
#if !defined(__lzo_restrict)
#if (LZO_CC_GNUC >= 0x030400ul)
#define __lzo_restrict __restrict__
#elif (LZO_CC_IBMC >= 800) && !defined(__cplusplus)
#define __lzo_restrict __restrict__
#elif (LZO_CC_IBMC >= 1210)
#define __lzo_restrict __restrict__
#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600))
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600))
#define __lzo_restrict __restrict__
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM)
#define __lzo_restrict __restrict__
#elif (LZO_CC_MSC && (_MSC_VER >= 1400))
#define __lzo_restrict __restrict
#elif (LZO_CC_PGI >= 0x0d0a00ul)
#define __lzo_restrict __restrict__
#endif
#endif
#if defined(__lzo_restrict)
#ifndef __lzo_HAVE_restrict
#define __lzo_HAVE_restrict 1
#endif
#else
#define __lzo_restrict /*empty */
#endif
#if !defined(__lzo_alignof)
#if (LZO_CC_ARMCC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
#define __lzo_alignof(e) __alignof__(e)
#elif (LZO_CC_GHS) && !defined(__cplusplus)
#define __lzo_alignof(e) __alignof__(e)
#elif (LZO_CC_IBMC >= 600)
#define __lzo_alignof(e) (__lzo_gnuc_extension__ __alignof__(e))
#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700))
#define __lzo_alignof(e) __alignof__(e)
#elif (LZO_CC_MSC && (_MSC_VER >= 1300))
#define __lzo_alignof(e) __alignof(e)
#elif (LZO_CC_SUNPROC >= 0x5100)
#define __lzo_alignof(e) __alignof__(e)
#endif
#endif
#if defined(__lzo_alignof)
#ifndef __lzo_HAVE_alignof
#define __lzo_HAVE_alignof 1
#endif
#endif
#if !defined(__lzo_struct_packed)
#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul))
#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus)
#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul))
#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus)
#elif (LZO_CC_GNUC >= 0x030400ul) && !(LZO_CC_PCC_GNUC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
#define __lzo_struct_packed(s) struct s {
#define __lzo_struct_packed_end() } __attribute__((__gcc_struct__,__packed__));
#define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__gcc_struct__,__packed__));
#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100))
#define __lzo_struct_packed(s) struct s {
#define __lzo_struct_packed_end() } __attribute__((__packed__));
#define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__));
#elif (LZO_CC_IBMC >= 700)
#define __lzo_struct_packed(s) __lzo_gnuc_extension__ struct s {
#define __lzo_struct_packed_end() } __attribute__((__packed__));
#define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__));
#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
#define __lzo_struct_packed(s) __pragma(pack(push,1)) struct s {
#define __lzo_struct_packed_end() } __pragma(pack(pop));
#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900))
#define __lzo_struct_packed(s) _Packed struct s {
#define __lzo_struct_packed_end() };
#endif
#endif
#if defined(__lzo_struct_packed) && !defined(__lzo_struct_packed_ma)
#define __lzo_struct_packed_ma(s) __lzo_struct_packed(s)
#endif
#if defined(__lzo_struct_packed_end) && !defined(__lzo_struct_packed_ma_end)
#define __lzo_struct_packed_ma_end() __lzo_struct_packed_end()
#endif
#if !defined(__lzo_byte_struct)
#if defined(__lzo_struct_packed)
#define __lzo_byte_struct(s,n) __lzo_struct_packed(s) unsigned char a[n]; __lzo_struct_packed_end()
#define __lzo_byte_struct_ma(s,n) __lzo_struct_packed_ma(s) unsigned char a[n]; __lzo_struct_packed_ma_end()
#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_PGI || (LZO_CC_SUNPROC >= 0x5100))
#define __lzo_byte_struct(s,n) struct s { unsigned char a[n]; } __attribute__((__packed__));
#define __lzo_byte_struct_ma(s,n) struct s { unsigned char a[n]; } __lzo_may_alias __attribute__((__packed__));
#endif
#endif
#if defined(__lzo_byte_struct) && !defined(__lzo_byte_struct_ma)
#define __lzo_byte_struct_ma(s,n) __lzo_byte_struct(s,n)
#endif
#if !defined(__lzo_struct_align16) && (__lzo_HAVE_alignof)
#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul))
#elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
#elif (LZO_CC_CILLY || LZO_CC_PCC)
#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
#define __lzo_struct_align16(s) struct __declspec(align(16)) s {
#define __lzo_struct_align16_end() };
#define __lzo_struct_align32(s) struct __declspec(align(32)) s {
#define __lzo_struct_align32_end() };
#define __lzo_struct_align64(s) struct __declspec(align(64)) s {
#define __lzo_struct_align64_end() };
#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || (LZO_CC_IBMC >= 700) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_struct_align16(s) struct s {
#define __lzo_struct_align16_end() } __attribute__((__aligned__(16)));
#define __lzo_struct_align32(s) struct s {
#define __lzo_struct_align32_end() } __attribute__((__aligned__(32)));
#define __lzo_struct_align64(s) struct s {
#define __lzo_struct_align64_end() } __attribute__((__aligned__(64)));
#endif
#endif
#if !defined(__lzo_union_um)
#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus)
#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul))
#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus)
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER < 810))
#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul))
#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus)
#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100))
#define __lzo_union_am(s) union s {
#define __lzo_union_am_end() } __lzo_may_alias;
#define __lzo_union_um(s) union s {
#define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__));
#elif (LZO_CC_IBMC >= 700)
#define __lzo_union_am(s) __lzo_gnuc_extension__ union s {
#define __lzo_union_am_end() } __lzo_may_alias;
#define __lzo_union_um(s) __lzo_gnuc_extension__ union s {
#define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__));
#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300))
#define __lzo_union_um(s) __pragma(pack(push,1)) union s {
#define __lzo_union_um_end() } __pragma(pack(pop));
#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900))
#define __lzo_union_um(s) _Packed union s {
#define __lzo_union_um_end() };
#endif
#endif
#if !defined(__lzo_union_am)
#define __lzo_union_am(s) union s {
#define __lzo_union_am_end() };
#endif
#if !defined(__lzo_constructor)
#if (LZO_CC_GNUC >= 0x030400ul)
#define __lzo_constructor __attribute__((__constructor__,__used__))
#elif (LZO_CC_GNUC >= 0x020700ul)
#define __lzo_constructor __attribute__((__constructor__))
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
#define __lzo_constructor __attribute__((__constructor__,__used__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_constructor __attribute__((__constructor__))
#endif
#endif
#if defined(__lzo_constructor)
#ifndef __lzo_HAVE_constructor
#define __lzo_HAVE_constructor 1
#endif
#endif
#if !defined(__lzo_destructor)
#if (LZO_CC_GNUC >= 0x030400ul)
#define __lzo_destructor __attribute__((__destructor__,__used__))
#elif (LZO_CC_GNUC >= 0x020700ul)
#define __lzo_destructor __attribute__((__destructor__))
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800))
#define __lzo_destructor __attribute__((__destructor__,__used__))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_destructor __attribute__((__destructor__))
#endif
#endif
#if defined(__lzo_destructor)
#ifndef __lzo_HAVE_destructor
#define __lzo_HAVE_destructor 1
#endif
#endif
#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor)
#error "unexpected configuration - check your compiler defines"
#endif
#if !defined(__lzo_likely) && !defined(__lzo_unlikely)
#if (LZO_CC_GNUC >= 0x030200ul)
#define __lzo_likely(e) (__builtin_expect(!!(e),1))
#define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
#elif (LZO_CC_IBMC >= 1010)
#define __lzo_likely(e) (__builtin_expect(!!(e),1))
#define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
#define __lzo_likely(e) (__builtin_expect(!!(e),1))
#define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define __lzo_likely(e) (__builtin_expect(!!(e),1))
#define __lzo_unlikely(e) (__builtin_expect(!!(e),0))
#endif
#endif
#if defined(__lzo_likely)
#ifndef __lzo_HAVE_likely
#define __lzo_HAVE_likely 1
#endif
#else
#define __lzo_likely(e) (e)
#endif
#if defined(__lzo_very_likely)
#ifndef __lzo_HAVE_very_likely
#define __lzo_HAVE_very_likely 1
#endif
#else
#define __lzo_very_likely(e) __lzo_likely(e)
#endif
#if defined(__lzo_unlikely)
#ifndef __lzo_HAVE_unlikely
#define __lzo_HAVE_unlikely 1
#endif
#else
#define __lzo_unlikely(e) (e)
#endif
#if defined(__lzo_very_unlikely)
#ifndef __lzo_HAVE_very_unlikely
#define __lzo_HAVE_very_unlikely 1
#endif
#else
#define __lzo_very_unlikely(e) __lzo_unlikely(e)
#endif
#if !defined(__lzo_loop_forever)
#if (LZO_CC_IBMC)
#define __lzo_loop_forever() LZO_BLOCK_BEGIN for (;;) { ; } LZO_BLOCK_END
#else
#define __lzo_loop_forever() do { ; } while __lzo_cte(1)
#endif
#endif
#if !defined(__lzo_unreachable)
#if (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x020800ul)) && lzo_has_builtin(__builtin_unreachable)
#define __lzo_unreachable() __builtin_unreachable();
#elif (LZO_CC_GNUC >= 0x040500ul)
#define __lzo_unreachable() __builtin_unreachable();
#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1300)) && 1
#define __lzo_unreachable() __builtin_unreachable();
#endif
#endif
#if defined(__lzo_unreachable)
#ifndef __lzo_HAVE_unreachable
#define __lzo_HAVE_unreachable 1
#endif
#else
#if 0
#define __lzo_unreachable() ((void)0);
#else
#define __lzo_unreachable() __lzo_loop_forever();
#endif
#endif
#if !defined(lzo_unused_funcs_impl)
#if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
#define lzo_unused_funcs_impl(r,f) static r __attribute__((__unused__)) f
#elif 1 && (LZO_CC_BORLANDC || LZO_CC_GNUC)
#define lzo_unused_funcs_impl(r,f) static r f
#else
#define lzo_unused_funcs_impl(r,f) __lzo_static_forceinline r f
#endif
#endif
#ifndef __LZO_CTA_NAME
#if (LZO_CFG_USE_COUNTER)
#define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__COUNTER__)
#else
#define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__LINE__)
#endif
#endif
#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER)
#if (LZO_CC_AZTECC || LZO_CC_ZORTECHC)
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END
#elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1u-2*!(e)]; LZO_EXTERN_C_END
#elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END
#elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020900ul)) && defined(__cplusplus)
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN int __LZO_CTA_NAME(lzo_cta_f__)(int [1-2*!(e)]); LZO_EXTERN_C_END
#elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__)
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__)); LZO_EXTERN_C_END
#else
#define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-2*!(e)]; LZO_EXTERN_C_END
#endif
#endif
#if !defined(LZO_COMPILE_TIME_ASSERT)
#if (LZO_CC_AZTECC)
#define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-!(e)];}
#elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030000ul))
#define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));}
#elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
#define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
#elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__)
#define LZO_COMPILE_TIME_ASSERT(e) {(void) (0/!!(e));}
#elif (LZO_CC_GNUC >= 0x040700ul) && (LZO_CFG_USE_COUNTER) && defined(__cplusplus)
#define LZO_COMPILE_TIME_ASSERT(e) {enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__));}
#elif (LZO_CC_GNUC >= 0x040700ul)
#define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));}
#elif (LZO_CC_MSC && (_MSC_VER < 900))
#define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
#elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
#define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break;
#else
#define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)];}
#endif
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(1 == 1)
#if defined(__cplusplus)
extern "C" {
LZO_COMPILE_TIME_ASSERT_HEADER(2 == 2)}
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(3 == 3)
#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
#if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC)
#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
#define __lzo_cdecl __cdecl
#define __lzo_cdecl_atexit /*empty */
#define __lzo_cdecl_main __cdecl
#if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
#define __lzo_cdecl_qsort __pascal
#elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
#define __lzo_cdecl_qsort _stdcall
#else
#define __lzo_cdecl_qsort __cdecl
#endif
#elif (LZO_CC_WATCOMC)
#define __lzo_cdecl __cdecl
#else
#define __lzo_cdecl __cdecl
#define __lzo_cdecl_atexit __cdecl
#define __lzo_cdecl_main __cdecl
#define __lzo_cdecl_qsort __cdecl
#endif
#if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC)
#elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
#define __lzo_cdecl_sighandler __pascal
#elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
#define __lzo_cdecl_sighandler _stdcall
#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
#define __lzo_cdecl_sighandler __clrcall
#elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
#if defined(_DLL)
#define __lzo_cdecl_sighandler _far _cdecl _loadds
#elif defined(_MT)
#define __lzo_cdecl_sighandler _far _cdecl
#else
#define __lzo_cdecl_sighandler _cdecl
#endif
#else
#define __lzo_cdecl_sighandler __cdecl
#endif
#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC)
#define __lzo_cdecl __cdecl
#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
#define __lzo_cdecl cdecl
#endif
#if !defined(__lzo_cdecl)
#define __lzo_cdecl /*empty */
#endif
#if !defined(__lzo_cdecl_atexit)
#define __lzo_cdecl_atexit /*empty */
#endif
#if !defined(__lzo_cdecl_main)
#define __lzo_cdecl_main /*empty */
#endif
#if !defined(__lzo_cdecl_qsort)
#define __lzo_cdecl_qsort /*empty */
#endif
#if !defined(__lzo_cdecl_sighandler)
#define __lzo_cdecl_sighandler /*empty */
#endif
#if !defined(__lzo_cdecl_va)
#define __lzo_cdecl_va __lzo_cdecl
#endif
#if !(LZO_CFG_NO_WINDOWS_H)
#if !defined(LZO_HAVE_WINDOWS_H)
#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64)
#if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
#elif ((LZO_OS_WIN32 && defined(__PW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul)))
#elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul)))
#else
#define LZO_HAVE_WINDOWS_H 1
#endif
#endif
#endif
#endif
#ifndef LZO_SIZEOF_SHORT
#if defined(SIZEOF_SHORT)
#define LZO_SIZEOF_SHORT (SIZEOF_SHORT)
#elif defined(__SIZEOF_SHORT__)
#define LZO_SIZEOF_SHORT (__SIZEOF_SHORT__)
#endif
#endif
#ifndef LZO_SIZEOF_INT
#if defined(SIZEOF_INT)
#define LZO_SIZEOF_INT (SIZEOF_INT)
#elif defined(__SIZEOF_INT__)
#define LZO_SIZEOF_INT (__SIZEOF_INT__)
#endif
#endif
#ifndef LZO_SIZEOF_LONG
#if defined(SIZEOF_LONG)
#define LZO_SIZEOF_LONG (SIZEOF_LONG)
#elif defined(__SIZEOF_LONG__)
#define LZO_SIZEOF_LONG (__SIZEOF_LONG__)
#endif
#endif
#ifndef LZO_SIZEOF_LONG_LONG
#if defined(SIZEOF_LONG_LONG)
#define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG)
#elif defined(__SIZEOF_LONG_LONG__)
#define LZO_SIZEOF_LONG_LONG (__SIZEOF_LONG_LONG__)
#endif
#endif
#ifndef LZO_SIZEOF___INT16
#if defined(SIZEOF___INT16)
#define LZO_SIZEOF___INT16 (SIZEOF___INT16)
#endif
#endif
#ifndef LZO_SIZEOF___INT32
#if defined(SIZEOF___INT32)
#define LZO_SIZEOF___INT32 (SIZEOF___INT32)
#endif
#endif
#ifndef LZO_SIZEOF___INT64
#if defined(SIZEOF___INT64)
#define LZO_SIZEOF___INT64 (SIZEOF___INT64)
#endif
#endif
#ifndef LZO_SIZEOF_VOID_P
#if defined(SIZEOF_VOID_P)
#define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P)
#elif defined(__SIZEOF_POINTER__)
#define LZO_SIZEOF_VOID_P (__SIZEOF_POINTER__)
#endif
#endif
#ifndef LZO_SIZEOF_SIZE_T
#if defined(SIZEOF_SIZE_T)
#define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T)
#elif defined(__SIZEOF_SIZE_T__)
#define LZO_SIZEOF_SIZE_T (__SIZEOF_SIZE_T__)
#endif
#endif
#ifndef LZO_SIZEOF_PTRDIFF_T
#if defined(SIZEOF_PTRDIFF_T)
#define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T)
#elif defined(__SIZEOF_PTRDIFF_T__)
#define LZO_SIZEOF_PTRDIFF_T (__SIZEOF_PTRDIFF_T__)
#endif
#endif
#define __LZO_LSR(x,b) (((x)+0ul) >> (b))
#if !defined(LZO_SIZEOF_SHORT)
#if (LZO_ARCH_CRAY_PVP)
#define LZO_SIZEOF_SHORT 8
#elif (USHRT_MAX == LZO_0xffffL)
#define LZO_SIZEOF_SHORT 2
#elif (__LZO_LSR(USHRT_MAX,7) == 1)
#define LZO_SIZEOF_SHORT 1
#elif (__LZO_LSR(USHRT_MAX,15) == 1)
#define LZO_SIZEOF_SHORT 2
#elif (__LZO_LSR(USHRT_MAX,31) == 1)
#define LZO_SIZEOF_SHORT 4
#elif (__LZO_LSR(USHRT_MAX,63) == 1)
#define LZO_SIZEOF_SHORT 8
#elif (__LZO_LSR(USHRT_MAX,127) == 1)
#define LZO_SIZEOF_SHORT 16
#else
#error "LZO_SIZEOF_SHORT"
#endif
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SHORT == sizeof(short))
#if !defined(LZO_SIZEOF_INT)
#if (LZO_ARCH_CRAY_PVP)
#define LZO_SIZEOF_INT 8
#elif (UINT_MAX == LZO_0xffffL)
#define LZO_SIZEOF_INT 2
#elif (UINT_MAX == LZO_0xffffffffL)
#define LZO_SIZEOF_INT 4
#elif (__LZO_LSR(UINT_MAX,7) == 1)
#define LZO_SIZEOF_INT 1
#elif (__LZO_LSR(UINT_MAX,15) == 1)
#define LZO_SIZEOF_INT 2
#elif (__LZO_LSR(UINT_MAX,31) == 1)
#define LZO_SIZEOF_INT 4
#elif (__LZO_LSR(UINT_MAX,63) == 1)
#define LZO_SIZEOF_INT 8
#elif (__LZO_LSR(UINT_MAX,127) == 1)
#define LZO_SIZEOF_INT 16
#else
#error "LZO_SIZEOF_INT"
#endif
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_INT == sizeof(int))
#if !defined(LZO_SIZEOF_LONG)
#if (ULONG_MAX == LZO_0xffffffffL)
#define LZO_SIZEOF_LONG 4
#elif (__LZO_LSR(ULONG_MAX,7) == 1)
#define LZO_SIZEOF_LONG 1
#elif (__LZO_LSR(ULONG_MAX,15) == 1)
#define LZO_SIZEOF_LONG 2
#elif (__LZO_LSR(ULONG_MAX,31) == 1)
#define LZO_SIZEOF_LONG 4
#elif (__LZO_LSR(ULONG_MAX,39) == 1)
#define LZO_SIZEOF_LONG 5
#elif (__LZO_LSR(ULONG_MAX,63) == 1)
#define LZO_SIZEOF_LONG 8
#elif (__LZO_LSR(ULONG_MAX,127) == 1)
#define LZO_SIZEOF_LONG 16
#else
#error "LZO_SIZEOF_LONG"
#endif
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_LONG == sizeof(long))
#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
#if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__)
#if (LZO_CC_GNUC >= 0x030300ul)
#if ((__LONG_MAX__-0) == (__LONG_LONG_MAX__-0))
#define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG
#elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1)
#define LZO_SIZEOF_LONG_LONG 4
#endif
#endif
#endif
#endif
#endif
#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
#if (LZO_ARCH_I086 && LZO_CC_DMC)
#elif (LZO_CC_CILLY) && defined(__GNUC__)
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
#define LZO_SIZEOF_LONG_LONG 8
#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_OS_WIN64 || defined(_WIN64))
#define LZO_SIZEOF___INT64 8
#elif (LZO_ARCH_I386 && (LZO_CC_DMC))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700)))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__)))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC))
#define LZO_SIZEOF___INT64 8
#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC))
#define LZO_SIZEOF___INT64 8
#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
#define LZO_SIZEOF___INT64 8
#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100)))
#define LZO_SIZEOF___INT64 8
#elif (LZO_CC_GHS && defined(__LLONG_BIT) && ((__LLONG_BIT-0) == 64))
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && ((_INTEGRAL_MAX_BITS-0) == 64))
#define LZO_SIZEOF___INT64 8
#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__)
#define LZO_SIZEOF_LONG_LONG 8
#elif (defined(__vms) || defined(__VMS)) && ((__INITIAL_POINTER_SIZE-0) == 64)
#define LZO_SIZEOF_LONG_LONG 8
#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2)
#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
#define LZO_SIZEOF_LONG_LONG 8
#endif
#endif
#endif
#if defined(__cplusplus) && (LZO_CC_GNUC)
#if (LZO_CC_GNUC < 0x020800ul)
#undef LZO_SIZEOF_LONG_LONG
#endif
#endif
#if (LZO_CFG_NO_LONG_LONG)
#undef LZO_SIZEOF_LONG_LONG
#elif defined(__NO_LONG_LONG)
#undef LZO_SIZEOF_LONG_LONG
#elif defined(_NO_LONGLONG)
#undef LZO_SIZEOF_LONG_LONG
#endif
#if !defined(LZO_WORDSIZE)
#if (LZO_ARCH_ALPHA)
#define LZO_WORDSIZE 8
#elif (LZO_ARCH_AMD64)
#define LZO_WORDSIZE 8
#elif (LZO_ARCH_AVR)
#define LZO_WORDSIZE 1
#elif (LZO_ARCH_H8300)
#if defined(__NORMAL_MODE__)
#define LZO_WORDSIZE 4
#elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
#define LZO_WORDSIZE 4
#else
#define LZO_WORDSIZE 2
#endif
#elif (LZO_ARCH_I086)
#define LZO_WORDSIZE 2
#elif (LZO_ARCH_IA64)
#define LZO_WORDSIZE 8
#elif (LZO_ARCH_M16C)
#define LZO_WORDSIZE 2
#elif (LZO_ARCH_SPU)
#define LZO_WORDSIZE 4
#elif (LZO_ARCH_Z80)
#define LZO_WORDSIZE 1
#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
#define LZO_WORDSIZE 8
#elif (LZO_OS_OS400 || defined(__OS400__))
#define LZO_WORDSIZE 8
#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
#define LZO_WORDSIZE 8
#endif
#endif
#if !defined(LZO_SIZEOF_VOID_P)
#if defined(__ILP32__) || defined(__ILP32) || defined(_ILP32)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4)
#define LZO_SIZEOF_VOID_P 4
#elif defined(__ILP64__) || defined(__ILP64) || defined(_ILP64)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8)
#define LZO_SIZEOF_VOID_P 8
#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4)
#define LZO_SIZEOF_VOID_P 8
#elif defined(__LP64__) || defined(__LP64) || defined(_LP64)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8)
#define LZO_SIZEOF_VOID_P 8
#elif (LZO_ARCH_AVR)
#define LZO_SIZEOF_VOID_P 2
#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430)
#define LZO_SIZEOF_VOID_P 2
#elif (LZO_ARCH_H8300)
#if defined(__NORMAL_MODE__)
#define LZO_SIZEOF_VOID_P 2
#elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
#define LZO_SIZEOF_VOID_P 4
#else
#define LZO_SIZEOF_VOID_P 2
#endif
#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4)
#define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT
#endif
#elif (LZO_ARCH_I086)
#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
#define LZO_SIZEOF_VOID_P 2
#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
#define LZO_SIZEOF_VOID_P 4
#else
#error "invalid LZO_ARCH_I086 memory model"
#endif
#elif (LZO_ARCH_M16C)
#if defined(__m32c_cpu__) || defined(__m32cm_cpu__)
#define LZO_SIZEOF_VOID_P 4
#else
#define LZO_SIZEOF_VOID_P 2
#endif
#elif (LZO_ARCH_SPU)
#define LZO_SIZEOF_VOID_P 4
#elif (LZO_ARCH_Z80)
#define LZO_SIZEOF_VOID_P 2
#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
#define LZO_SIZEOF_VOID_P 4
#elif (LZO_OS_OS400 || defined(__OS400__))
#if defined(__LLP64_IFC__)
#define LZO_SIZEOF_VOID_P 8
#define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
#else
#define LZO_SIZEOF_VOID_P 16
#define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
#endif
#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
#define LZO_SIZEOF_VOID_P 8
#define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG
#endif
#endif
#if !defined(LZO_SIZEOF_VOID_P)
#define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG
#endif
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_VOID_P == sizeof(void *))
#if !defined(LZO_SIZEOF_SIZE_T)
#if (LZO_ARCH_I086 || LZO_ARCH_M16C)
#define LZO_SIZEOF_SIZE_T 2
#endif
#endif
#if !defined(LZO_SIZEOF_SIZE_T)
#define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P
#endif
#if defined(offsetof)
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SIZE_T == sizeof(size_t))
#endif
#if !defined(LZO_SIZEOF_PTRDIFF_T)
#if (LZO_ARCH_I086)
#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE)
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P
#elif (LZO_MM_COMPACT || LZO_MM_LARGE)
#if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
#define LZO_SIZEOF_PTRDIFF_T 4
#else
#define LZO_SIZEOF_PTRDIFF_T 2
#endif
#else
#error "invalid LZO_ARCH_I086 memory model"
#endif
#endif
#endif
#if !defined(LZO_SIZEOF_PTRDIFF_T)
#define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T
#endif
#if defined(offsetof)
LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_PTRDIFF_T == sizeof(ptrdiff_t))
#endif
#if !defined(LZO_WORDSIZE)
#define LZO_WORDSIZE LZO_SIZEOF_VOID_P
#endif
#if (LZO_ABI_NEUTRAL_ENDIAN)
#undef LZO_ABI_BIG_ENDIAN
#undef LZO_ABI_LITTLE_ENDIAN
#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN)
#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP)
#define LZO_ABI_BIG_ENDIAN 1
#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64)
#define LZO_ABI_LITTLE_ENDIAN 1
#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430)
#define LZO_ABI_LITTLE_ENDIAN 1
#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390 || LZO_ARCH_SPU)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__)
#if (__LITTLE_ENDIAN__ == 1)
#define LZO_ABI_LITTLE_ENDIAN 1
#else
#define LZO_ABI_BIG_ENDIAN 1
#endif
#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
#define LZO_ABI_LITTLE_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__)
#define LZO_ABI_LITTLE_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM && LZO_CC_ARMCC_ARMCC)
#if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN)
#error "unexpected configuration - check your compiler defines"
#elif defined(__BIG_ENDIAN)
#define LZO_ABI_BIG_ENDIAN 1
#else
#define LZO_ABI_LITTLE_ENDIAN 1
#endif
#define LZO_ABI_LITTLE_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM64) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EB__) && !defined(__AARCH64EL__)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EL__) && !defined(__AARCH64EB__)
#define LZO_ABI_LITTLE_ENDIAN 1
#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__)
#define LZO_ABI_BIG_ENDIAN 1
#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__)
#define LZO_ABI_LITTLE_ENDIAN 1
#endif
#endif
#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN)
#error "unexpected configuration - check your compiler defines"
#endif
#if (LZO_ABI_BIG_ENDIAN)
#define LZO_INFO_ABI_ENDIAN "be"
#elif (LZO_ABI_LITTLE_ENDIAN)
#define LZO_INFO_ABI_ENDIAN "le"
#elif (LZO_ABI_NEUTRAL_ENDIAN)
#define LZO_INFO_ABI_ENDIAN "neutral"
#endif
#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
#define LZO_ABI_I8LP16 1
#define LZO_INFO_ABI_PM "i8lp16"
#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
#define LZO_ABI_ILP16 1
#define LZO_INFO_ABI_PM "ilp16"
#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
#define LZO_ABI_LP32 1
#define LZO_INFO_ABI_PM "lp32"
#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
#define LZO_ABI_ILP32 1
#define LZO_INFO_ABI_PM "ilp32"
#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8)
#define LZO_ABI_LLP64 1
#define LZO_INFO_ABI_PM "llp64"
#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
#define LZO_ABI_LP64 1
#define LZO_INFO_ABI_PM "lp64"
#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
#define LZO_ABI_ILP64 1
#define LZO_INFO_ABI_PM "ilp64"
#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4)
#define LZO_ABI_IP32L64 1
#define LZO_INFO_ABI_PM "ip32l64"
#endif
#if 0
#elif !defined(__LZO_LIBC_OVERRIDE)
#if (LZO_LIBC_NAKED)
#define LZO_INFO_LIBC "naked"
#elif (LZO_LIBC_FREESTANDING)
#define LZO_INFO_LIBC "freestanding"
#elif (LZO_LIBC_MOSTLY_FREESTANDING)
#define LZO_INFO_LIBC "mfreestanding"
#elif (LZO_LIBC_ISOC90)
#define LZO_INFO_LIBC "isoc90"
#elif (LZO_LIBC_ISOC99)
#define LZO_INFO_LIBC "isoc99"
#elif (LZO_CC_ARMCC_ARMCC) && defined(__ARMCLIB_VERSION)
#define LZO_LIBC_ISOC90 1
#define LZO_INFO_LIBC "isoc90"
#elif defined(__dietlibc__)
#define LZO_LIBC_DIETLIBC 1
#define LZO_INFO_LIBC "dietlibc"
#elif defined(_NEWLIB_VERSION)
#define LZO_LIBC_NEWLIB 1
#define LZO_INFO_LIBC "newlib"
#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__)
#if defined(__UCLIBC_SUBLEVEL__)
#define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + (__UCLIBC_MINOR__-0) * 0x100 + (__UCLIBC_SUBLEVEL__-0))
#else
#define LZO_LIBC_UCLIBC 0x00090bL
#endif
#define LZO_INFO_LIBC "uc" "libc"
#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
#define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + (__GLIBC_MINOR__-0) * 0x100)
#define LZO_INFO_LIBC "glibc"
#elif (LZO_CC_MWERKS) && defined(__MSL__)
#define LZO_LIBC_MSL __MSL__
#define LZO_INFO_LIBC "msl"
#elif 1 && defined(__IAR_SYSTEMS_ICC__)
#define LZO_LIBC_ISOC90 1
#define LZO_INFO_LIBC "isoc90"
#else
#define LZO_LIBC_DEFAULT 1
#define LZO_INFO_LIBC "default"
#endif
#endif
#if (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
#define LZO_ASM_SYNTAX_MSC 1
#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul))
#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
#define LZO_ASM_SYNTAX_GNUC 1
#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
#define LZO_ASM_SYNTAX_GNUC 1
#elif (LZO_CC_GNUC)
#define LZO_ASM_SYNTAX_GNUC 1
#endif
#if (LZO_ASM_SYNTAX_GNUC)
#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
#define __LZO_ASM_CLOBBER "ax"
#define __LZO_ASM_CLOBBER_LIST_CC /*empty */
#define __LZO_ASM_CLOBBER_LIST_CC_MEMORY /*empty */
#define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty */
#elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1000))
#define __LZO_ASM_CLOBBER "memory"
#define __LZO_ASM_CLOBBER_LIST_CC /*empty */
#define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "memory"
#define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty */
#else
#define __LZO_ASM_CLOBBER "cc", "memory"
#define __LZO_ASM_CLOBBER_LIST_CC : "cc"
#define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "cc", "memory"
#define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty */
#endif
#endif
#if (LZO_ARCH_ALPHA)
#define LZO_OPT_AVOID_UINT_INDEX 1
#elif (LZO_ARCH_AMD64)
#define LZO_OPT_AVOID_INT_INDEX 1
#define LZO_OPT_AVOID_UINT_INDEX 1
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#ifndef LZO_OPT_UNALIGNED64
#define LZO_OPT_UNALIGNED64 1
#endif
#elif (LZO_ARCH_ARM)
#if defined(__ARM_FEATURE_UNALIGNED)
#if ((__ARM_FEATURE_UNALIGNED)+0)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#endif
#elif 1 && (LZO_ARCH_ARM_THUMB2)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 7)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 6) && (defined(__TARGET_PROFILE_A) || defined(__TARGET_PROFILE_R))
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#endif
#elif (LZO_ARCH_ARM64)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#ifndef LZO_OPT_UNALIGNED64
#define LZO_OPT_UNALIGNED64 1
#endif
#elif (LZO_ARCH_CRIS)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#elif (LZO_ARCH_I386)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#elif (LZO_ARCH_IA64)
#define LZO_OPT_AVOID_INT_INDEX 1
#define LZO_OPT_AVOID_UINT_INDEX 1
#define LZO_OPT_PREFER_POSTINC 1
#elif (LZO_ARCH_M68K)
#define LZO_OPT_PREFER_POSTINC 1
#define LZO_OPT_PREFER_PREDEC 1
#if defined(__mc68020__) && !defined(__mcoldfire__)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#endif
#elif (LZO_ARCH_MIPS)
#define LZO_OPT_AVOID_UINT_INDEX 1
#elif (LZO_ARCH_POWERPC)
#define LZO_OPT_PREFER_PREINC 1
#define LZO_OPT_PREFER_PREDEC 1
#if (LZO_ABI_BIG_ENDIAN)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#if (LZO_WORDSIZE == 8)
#ifndef LZO_OPT_UNALIGNED64
#define LZO_OPT_UNALIGNED64 1
#endif
#endif
#endif
#elif (LZO_ARCH_S390)
#ifndef LZO_OPT_UNALIGNED16
#define LZO_OPT_UNALIGNED16 1
#endif
#ifndef LZO_OPT_UNALIGNED32
#define LZO_OPT_UNALIGNED32 1
#endif
#if (LZO_WORDSIZE == 8)
#ifndef LZO_OPT_UNALIGNED64
#define LZO_OPT_UNALIGNED64 1
#endif
#endif
#elif (LZO_ARCH_SH)
#define LZO_OPT_PREFER_POSTINC 1
#define LZO_OPT_PREFER_PREDEC 1
#endif
#ifndef LZO_CFG_NO_INLINE_ASM
#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC)
#define LZO_CFG_NO_INLINE_ASM 1
#elif (LZO_CC_LLVM)
#define LZO_CFG_NO_INLINE_ASM 1
#endif
#endif
#if (LZO_CFG_NO_INLINE_ASM)
#undef LZO_ASM_SYNTAX_MSC
#undef LZO_ASM_SYNTAX_GNUC
#undef __LZO_ASM_CLOBBER
#undef __LZO_ASM_CLOBBER_LIST_CC
#undef __LZO_ASM_CLOBBER_LIST_CC_MEMORY
#undef __LZO_ASM_CLOBBER_LIST_EMPTY
#endif
#ifndef LZO_CFG_NO_UNALIGNED
#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC)
#define LZO_CFG_NO_UNALIGNED 1
#endif
#endif
#if (LZO_CFG_NO_UNALIGNED)
#undef LZO_OPT_UNALIGNED16
#undef LZO_OPT_UNALIGNED32
#undef LZO_OPT_UNALIGNED64
#endif
#if defined(__LZO_INFOSTR_MM)
#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM))
#define __LZO_INFOSTR_MM ""
#elif defined(LZO_INFO_MM)
#define __LZO_INFOSTR_MM "." LZO_INFO_MM
#else
#define __LZO_INFOSTR_MM ""
#endif
#if defined(__LZO_INFOSTR_PM)
#elif defined(LZO_INFO_ABI_PM)
#define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM
#else
#define __LZO_INFOSTR_PM ""
#endif
#if defined(__LZO_INFOSTR_ENDIAN)
#elif defined(LZO_INFO_ABI_ENDIAN)
#define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN
#else
#define __LZO_INFOSTR_ENDIAN ""
#endif
#if defined(__LZO_INFOSTR_OSNAME)
#elif defined(LZO_INFO_OS_CONSOLE)
#define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE
#elif defined(LZO_INFO_OS_POSIX)
#define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX
#else
#define __LZO_INFOSTR_OSNAME LZO_INFO_OS
#endif
#if defined(__LZO_INFOSTR_LIBC)
#elif defined(LZO_INFO_LIBC)
#define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC
#else
#define __LZO_INFOSTR_LIBC ""
#endif
#if defined(__LZO_INFOSTR_CCVER)
#elif defined(LZO_INFO_CCVER)
#define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER
#else
#define __LZO_INFOSTR_CCVER ""
#endif
#define LZO_INFO_STRING \
LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \
" " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER
#if !(LZO_CFG_SKIP_LZO_TYPES)
#if (!(LZO_SIZEOF_SHORT+0 > 0 && LZO_SIZEOF_INT+0 > 0 && LZO_SIZEOF_LONG+0 > 0))
#error "missing defines for sizes"
#endif
#if (!(LZO_SIZEOF_PTRDIFF_T+0 > 0 && LZO_SIZEOF_SIZE_T+0 > 0 && LZO_SIZEOF_VOID_P+0 > 0))
#error "missing defines for sizes"
#endif
#define LZO_TYPEOF_CHAR 1u
#define LZO_TYPEOF_SHORT 2u
#define LZO_TYPEOF_INT 3u
#define LZO_TYPEOF_LONG 4u
#define LZO_TYPEOF_LONG_LONG 5u
#define LZO_TYPEOF___INT8 17u
#define LZO_TYPEOF___INT16 18u
#define LZO_TYPEOF___INT32 19u
#define LZO_TYPEOF___INT64 20u
#define LZO_TYPEOF___INT128 21u
#define LZO_TYPEOF___INT256 22u
#define LZO_TYPEOF___MODE_QI 33u
#define LZO_TYPEOF___MODE_HI 34u
#define LZO_TYPEOF___MODE_SI 35u
#define LZO_TYPEOF___MODE_DI 36u
#define LZO_TYPEOF___MODE_TI 37u
#define LZO_TYPEOF_CHAR_P 129u
#if !defined(lzo_llong_t)
#if (LZO_SIZEOF_LONG_LONG+0 > 0)
__lzo_gnuc_extension__ typedef long long lzo_llong_t__;
__lzo_gnuc_extension__ typedef unsigned long long lzo_ullong_t__;
#define lzo_llong_t lzo_llong_t__
#define lzo_ullong_t lzo_ullong_t__
#endif
#endif
#if !defined(lzo_int16e_t)
#if (LZO_SIZEOF_LONG == 2)
#define lzo_int16e_t long
#define lzo_uint16e_t unsigned long
#define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_LONG
#elif (LZO_SIZEOF_INT == 2)
#define lzo_int16e_t int
#define lzo_uint16e_t unsigned int
#define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_INT
#elif (LZO_SIZEOF_SHORT == 2)
#define lzo_int16e_t short int
#define lzo_uint16e_t unsigned short int
#define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_SHORT
#elif 1 && !(LZO_CFG_TYPE_NO_MODE_HI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM)
typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__)));
typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__)));
#define lzo_int16e_t lzo_int16e_hi_t__
#define lzo_uint16e_t lzo_uint16e_hi_t__
#define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___MODE_HI
#elif (LZO_SIZEOF___INT16 == 2)
#define lzo_int16e_t __int16
#define lzo_uint16e_t unsigned __int16
#define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___INT16
#else
#endif
#endif
#if defined(lzo_int16e_t)
#define LZO_SIZEOF_LZO_INT16E_T 2
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == 2)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T)
#endif
#if !defined(lzo_int32e_t)
#if (LZO_SIZEOF_LONG == 4)
#define lzo_int32e_t long int
#define lzo_uint32e_t unsigned long int
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG
#elif (LZO_SIZEOF_INT == 4)
#define lzo_int32e_t int
#define lzo_uint32e_t unsigned int
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_INT
#elif (LZO_SIZEOF_SHORT == 4)
#define lzo_int32e_t short int
#define lzo_uint32e_t unsigned short int
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_SHORT
#elif (LZO_SIZEOF_LONG_LONG == 4)
#define lzo_int32e_t lzo_llong_t
#define lzo_uint32e_t lzo_ullong_t
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG_LONG
#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) && (__INT_MAX__+0 > 2147483647L)
typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
#define lzo_int32e_t lzo_int32e_si_t__
#define lzo_uint32e_t lzo_uint32e_si_t__
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI
#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_GNUC >= 0x025f00ul) && defined(__AVR__) && (__LONG_MAX__+0 == 32767L)
typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
#define lzo_int32e_t lzo_int32e_si_t__
#define lzo_uint32e_t lzo_uint32e_si_t__
#define LZO_INT32_C(c) (c##LL)
#define LZO_UINT32_C(c) (c##ULL)
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI
#elif (LZO_SIZEOF___INT32 == 4)
#define lzo_int32e_t __int32
#define lzo_uint32e_t unsigned __int32
#define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___INT32
#else
#endif
#endif
#if defined(lzo_int32e_t)
#define LZO_SIZEOF_LZO_INT32E_T 4
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T)
#endif
#if !defined(lzo_int64e_t)
#if (LZO_SIZEOF___INT64 == 8)
#if (LZO_CC_BORLANDC) && !(LZO_CFG_TYPE_PREFER___INT64)
#define LZO_CFG_TYPE_PREFER___INT64 1
#endif
#endif
#if (LZO_SIZEOF_INT == 8) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
#define lzo_int64e_t int
#define lzo_uint64e_t unsigned int
#define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_INT
#elif (LZO_SIZEOF_LONG == 8)
#define lzo_int64e_t long int
#define lzo_uint64e_t unsigned long int
#define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG
#elif (LZO_SIZEOF_LONG_LONG == 8) && !(LZO_CFG_TYPE_PREFER___INT64)
#define lzo_int64e_t lzo_llong_t
#define lzo_uint64e_t lzo_ullong_t
#define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG_LONG
#if (LZO_CC_BORLANDC)
#define LZO_INT64_C(c) ((c) + 0ll)
#define LZO_UINT64_C(c) ((c) + 0ull)
#elif 0
#define LZO_INT64_C(c) (__lzo_gnuc_extension__ (c##LL))
#define LZO_UINT64_C(c) (__lzo_gnuc_extension__ (c##ULL))
#else
#define LZO_INT64_C(c) (c##LL)
#define LZO_UINT64_C(c) (c##ULL)
#endif
#elif (LZO_SIZEOF___INT64 == 8)
#define lzo_int64e_t __int64
#define lzo_uint64e_t unsigned __int64
#define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF___INT64
#if (LZO_CC_BORLANDC)
#define LZO_INT64_C(c) ((c) + 0i64)
#define LZO_UINT64_C(c) ((c) + 0ui64)
#else
#define LZO_INT64_C(c) (c##i64)
#define LZO_UINT64_C(c) (c##ui64)
#endif
#else
#endif
#endif
#if defined(lzo_int64e_t)
#define LZO_SIZEOF_LZO_INT64E_T 8
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T)
#endif
#if !defined(lzo_int32l_t)
#if defined(lzo_int32e_t)
#define lzo_int32l_t lzo_int32e_t
#define lzo_uint32l_t lzo_uint32e_t
#define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LZO_INT32E_T
#define LZO_TYPEOF_LZO_INT32L_T LZO_TYPEOF_LZO_INT32E_T
#elif (LZO_SIZEOF_INT >= 4) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
#define lzo_int32l_t int
#define lzo_uint32l_t unsigned int
#define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_INT
#define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_INT
#elif (LZO_SIZEOF_LONG >= 4)
#define lzo_int32l_t long int
#define lzo_uint32l_t unsigned long int
#define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LONG
#define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_LONG
#else
#error "lzo_int32l_t"
#endif
#endif
#if 1
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) >= 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T)
#endif
#if !defined(lzo_int64l_t)
#if defined(lzo_int64e_t)
#define lzo_int64l_t lzo_int64e_t
#define lzo_uint64l_t lzo_uint64e_t
#define LZO_SIZEOF_LZO_INT64L_T LZO_SIZEOF_LZO_INT64E_T
#define LZO_TYPEOF_LZO_INT64L_T LZO_TYPEOF_LZO_INT64E_T
#else
#endif
#endif
#if defined(lzo_int64l_t)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) >= 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T)
#endif
#if !defined(lzo_int32f_t)
#if (LZO_SIZEOF_SIZE_T >= 8)
#define lzo_int32f_t lzo_int64l_t
#define lzo_uint32f_t lzo_uint64l_t
#define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT64L_T
#define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT64L_T
#else
#define lzo_int32f_t lzo_int32l_t
#define lzo_uint32f_t lzo_uint32l_t
#define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT32L_T
#define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT32L_T
#endif
#endif
#if 1
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) >= 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T)
#endif
#if !defined(lzo_int64f_t)
#if defined(lzo_int64l_t)
#define lzo_int64f_t lzo_int64l_t
#define lzo_uint64f_t lzo_uint64l_t
#define LZO_SIZEOF_LZO_INT64F_T LZO_SIZEOF_LZO_INT64L_T
#define LZO_TYPEOF_LZO_INT64F_T LZO_TYPEOF_LZO_INT64L_T
#else
#endif
#endif
#if defined(lzo_int64f_t)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) >= 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T)
#endif
#if !defined(lzo_intptr_t)
#if 1 && (LZO_OS_OS400 && (LZO_SIZEOF_VOID_P == 16))
#define __LZO_INTPTR_T_IS_POINTER 1
typedef char *lzo_intptr_t;
typedef char *lzo_uintptr_t;
#define lzo_intptr_t lzo_intptr_t
#define lzo_uintptr_t lzo_uintptr_t
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_VOID_P
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_CHAR_P
#elif (LZO_CC_MSC && (_MSC_VER >= 1300) && (LZO_SIZEOF_VOID_P == 4) && (LZO_SIZEOF_INT == 4))
typedef __w64 int lzo_intptr_t;
typedef __w64 unsigned int lzo_uintptr_t;
#define lzo_intptr_t lzo_intptr_t
#define lzo_uintptr_t lzo_uintptr_t
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT
#elif (LZO_SIZEOF_SHORT == LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT > LZO_SIZEOF_VOID_P)
#define lzo_intptr_t short
#define lzo_uintptr_t unsigned short
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_SHORT
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_SHORT
#elif (LZO_SIZEOF_INT >= LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG)
#define lzo_intptr_t int
#define lzo_uintptr_t unsigned int
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT
#elif (LZO_SIZEOF_LONG >= LZO_SIZEOF_VOID_P)
#define lzo_intptr_t long
#define lzo_uintptr_t unsigned long
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LONG
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LONG
#elif (LZO_SIZEOF_LZO_INT64L_T >= LZO_SIZEOF_VOID_P)
#define lzo_intptr_t lzo_int64l_t
#define lzo_uintptr_t lzo_uint64l_t
#define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LZO_INT64L_T
#define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LZO_INT64L_T
#else
#error "lzo_intptr_t"
#endif
#endif
#if 1
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) >= sizeof(void *))
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t))
#endif
#if !defined(lzo_word_t)
#if defined(LZO_WORDSIZE) && (LZO_WORDSIZE+0 > 0)
#if (LZO_WORDSIZE == LZO_SIZEOF_LZO_INTPTR_T) && !(__LZO_INTPTR_T_IS_POINTER)
#define lzo_word_t lzo_uintptr_t
#define lzo_sword_t lzo_intptr_t
#define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INTPTR_T
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LZO_INTPTR_T
#elif (LZO_WORDSIZE == LZO_SIZEOF_LONG)
#define lzo_word_t unsigned long
#define lzo_sword_t long
#define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LONG
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LONG
#elif (LZO_WORDSIZE == LZO_SIZEOF_INT)
#define lzo_word_t unsigned int
#define lzo_sword_t int
#define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_INT
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_INT
#elif (LZO_WORDSIZE == LZO_SIZEOF_SHORT)
#define lzo_word_t unsigned short
#define lzo_sword_t short
#define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_SHORT
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_SHORT
#elif (LZO_WORDSIZE == 1)
#define lzo_word_t unsigned char
#define lzo_sword_t signed char
#define LZO_SIZEOF_LZO_WORD_T 1
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_CHAR
#elif (LZO_WORDSIZE == LZO_SIZEOF_LZO_INT64L_T)
#define lzo_word_t lzo_uint64l_t
#define lzo_sword_t lzo_int64l_t
#define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T
#define LZO_TYPEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T
#elif (LZO_ARCH_SPU) && (LZO_CC_GNUC)
#if 0
typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__)));
typedef int lzo_sword_t __attribute__((__mode__(__V16QI__)));
#define lzo_word_t lzo_word_t
#define lzo_sword_t lzo_sword_t
#define LZO_SIZEOF_LZO_WORD_T 16
#define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF___MODE_V16QI
#endif
#else
#error "lzo_word_t"
#endif
#endif
#endif
#if 1 && defined(lzo_word_t)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_word_t) == LZO_WORDSIZE)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_sword_t) == LZO_WORDSIZE)
#endif
#if 1
#define lzo_int8_t signed char
#define lzo_uint8_t unsigned char
#define LZO_SIZEOF_LZO_INT8_T 1
#define LZO_TYPEOF_LZO_INT8_T LZO_TYPEOF_CHAR
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t))
#endif
#if defined(lzo_int16e_t)
#define lzo_int16_t lzo_int16e_t
#define lzo_uint16_t lzo_uint16e_t
#define LZO_SIZEOF_LZO_INT16_T LZO_SIZEOF_LZO_INT16E_T
#define LZO_TYPEOF_LZO_INT16_T LZO_TYPEOF_LZO_INT16E_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == sizeof(lzo_uint16_t))
#endif
#if defined(lzo_int32e_t)
#define lzo_int32_t lzo_int32e_t
#define lzo_uint32_t lzo_uint32e_t
#define LZO_SIZEOF_LZO_INT32_T LZO_SIZEOF_LZO_INT32E_T
#define LZO_TYPEOF_LZO_INT32_T LZO_TYPEOF_LZO_INT32E_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == sizeof(lzo_uint32_t))
#endif
#if defined(lzo_int64e_t)
#define lzo_int64_t lzo_int64e_t
#define lzo_uint64_t lzo_uint64e_t
#define LZO_SIZEOF_LZO_INT64_T LZO_SIZEOF_LZO_INT64E_T
#define LZO_TYPEOF_LZO_INT64_T LZO_TYPEOF_LZO_INT64E_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == sizeof(lzo_uint64_t))
#endif
#if 1
#define lzo_int_least32_t lzo_int32l_t
#define lzo_uint_least32_t lzo_uint32l_t
#define LZO_SIZEOF_LZO_INT_LEAST32_T LZO_SIZEOF_LZO_INT32L_T
#define LZO_TYPEOF_LZO_INT_LEAST32_T LZO_TYPEOF_LZO_INT32L_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) >= 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) ==
sizeof(lzo_uint_least32_t))
#endif
#if defined(lzo_int64l_t)
#define lzo_int_least64_t lzo_int64l_t
#define lzo_uint_least64_t lzo_uint64l_t
#define LZO_SIZEOF_LZO_INT_LEAST64_T LZO_SIZEOF_LZO_INT64L_T
#define LZO_TYPEOF_LZO_INT_LEAST64_T LZO_TYPEOF_LZO_INT64L_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) >= 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) ==
sizeof(lzo_uint_least64_t))
#endif
#if 1
#define lzo_int_fast32_t lzo_int32f_t
#define lzo_uint_fast32_t lzo_uint32f_t
#define LZO_SIZEOF_LZO_INT_FAST32_T LZO_SIZEOF_LZO_INT32F_T
#define LZO_TYPEOF_LZO_INT_FAST32_T LZO_TYPEOF_LZO_INT32F_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) >= 4)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) ==
sizeof(lzo_uint_fast32_t))
#endif
#if defined(lzo_int64f_t)
#define lzo_int_fast64_t lzo_int64f_t
#define lzo_uint_fast64_t lzo_uint64f_t
#define LZO_SIZEOF_LZO_INT_FAST64_T LZO_SIZEOF_LZO_INT64F_T
#define LZO_TYPEOF_LZO_INT_FAST64_T LZO_TYPEOF_LZO_INT64F_T
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) >= 8)
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) ==
sizeof(lzo_uint_fast64_t))
#endif
#if !defined(LZO_INT16_C)
#if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 2)
#define LZO_INT16_C(c) ((c) + 0)
#define LZO_UINT16_C(c) ((c) + 0U)
#elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 2)
#define LZO_INT16_C(c) ((c) + 0L)
#define LZO_UINT16_C(c) ((c) + 0UL)
#elif (LZO_SIZEOF_INT >= 2)
#define LZO_INT16_C(c) (c)
#define LZO_UINT16_C(c) (c##U)
#elif (LZO_SIZEOF_LONG >= 2)
#define LZO_INT16_C(c) (c##L)
#define LZO_UINT16_C(c) (c##UL)
#else
#error "LZO_INT16_C"
#endif
#endif
#if !defined(LZO_INT32_C)
#if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 4)
#define LZO_INT32_C(c) ((c) + 0)
#define LZO_UINT32_C(c) ((c) + 0U)
#elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 4)
#define LZO_INT32_C(c) ((c) + 0L)
#define LZO_UINT32_C(c) ((c) + 0UL)
#elif (LZO_SIZEOF_INT >= 4)
#define LZO_INT32_C(c) (c)
#define LZO_UINT32_C(c) (c##U)
#elif (LZO_SIZEOF_LONG >= 4)
#define LZO_INT32_C(c) (c##L)
#define LZO_UINT32_C(c) (c##UL)
#elif (LZO_SIZEOF_LONG_LONG >= 4)
#define LZO_INT32_C(c) (c##LL)
#define LZO_UINT32_C(c) (c##ULL)
#else
#error "LZO_INT32_C"
#endif
#endif
#if !defined(LZO_INT64_C) && defined(lzo_int64l_t)
#if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 8)
#define LZO_INT64_C(c) ((c) + 0)
#define LZO_UINT64_C(c) ((c) + 0U)
#elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 8)
#define LZO_INT64_C(c) ((c) + 0L)
#define LZO_UINT64_C(c) ((c) + 0UL)
#elif (LZO_SIZEOF_INT >= 8)
#define LZO_INT64_C(c) (c)
#define LZO_UINT64_C(c) (c##U)
#elif (LZO_SIZEOF_LONG >= 8)
#define LZO_INT64_C(c) (c##L)
#define LZO_UINT64_C(c) (c##UL)
#else
#error "LZO_INT64_C"
#endif
#endif
#endif
#endif /* already included */
/* vim:set ts=4 sw=4 et: */
================================================
FILE: src/lzo/minilzo/minilzo.c
================================================
/* minilzo.c -- mini subset of the LZO real-time data compression library
This file is part of the LZO real-time data compression library.
Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
The LZO library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The LZO library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the LZO library; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Markus F.X.J. Oberhumer
<markus@oberhumer.com>
http://www.oberhumer.com/opensource/lzo/
*/
/*
* NOTE:
* the full LZO package can be found at
* http://www.oberhumer.com/opensource/lzo/
*/
#define __LZO_IN_MINILZO 1
#if defined(LZO_CFG_FREESTANDING)
#undef MINILZO_HAVE_CONFIG_H
#define LZO_LIBC_FREESTANDING 1
#define LZO_OS_FREESTANDING 1
#endif
#ifdef MINILZO_HAVE_CONFIG_H
#include <config.h>
#endif
#include <limits.h>
#include <stddef.h>
#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS)
#ifndef __LZODEFS_H_INCLUDED
#define __LZODEFS_H_INCLUDED 1
#if defined(__CYGWIN32__) && !defined(__CYGWIN__)
#define __CYGWIN__ __CYGWIN32__
#endif
#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
#define _ALL_SOURCE 1
#endif
#if defined(__mips__) && defined(__R5900__)
#if !defined(__LONG_MAX__)
#define __LONG_MAX__ 9223372036854775807L
#endif
#endif
#if !defined(LZO_CFG_NO_DISABLE_WUNDEF)
#if defined(__ARMCC_VERSION)
#pragma diag_suppress 193
#elif defined(__clang__) && defined(__clang_minor__)
#pragma clang diagnostic ignored "-Wundef"
#elif defined(__INTEL_COMPILER)
#pragma warning(disable: 193)
#elif defined(__KEIL__) && defined(__C166__)
#pragma warning disable = 322
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && !defined(__PATHSCALE__)
#if ((__GNUC__-0) >= 5 || ((__GNUC__-0) == 4 && (__GNUC_MINOR__-0) >= 2))
#pragma GCC diagnostic ignored "-Wundef"
#endif
#elif defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
#if ((_MSC_VER-0) >= 1300)
#pragma warning(disable: 4668)
#endif
#endif
#endif
#if 0 && defined(__POCC__) && defined(_WIN32)
#if (__POCC__ >= 400)
#pragma warn(disable: 2216)
#endif
#endif
#if 0 && defined(__WATCOMC__)
#if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
#pragma warning 203 9
#endif
#endif
#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
#pragma option -h
#endif
#if !(LZO_CFG_NO_DISABLE_WCRTNONSTDC)
#ifndef _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
#ifndef _CRT_NONSTDC_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS 1
#endif
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#endif
#if 0
#define LZO_0xffffUL 0xfffful
#define LZO_0xffffffffUL 0xfffffffful
#else
#define LZO_0xffffUL 65535ul
#define LZO_0xffffffffUL 4294967295ul
#endif
#define LZO_0xffffL LZO_0xffffUL
#define LZO_0xffffffffL LZO_0xffffffffUL
#if (LZO_0xffffL == LZO_0xffffffffL)
#error "your preprocessor is broken 1"
#endif
#if (16ul * 16384ul != 262144ul)
#error "your preprocessor is broken 2"
#endif
#if 0
#if (32767 >= 4294967295ul)
#error "your preprocessor is broken 3"
#endif
#if (65535u >= 4294967295ul)
#error "your preprocessor is broken 4"
#endif
#endif
#if defined(__COUNTER__)
#ifndef LZO_CFG_USE_COUNTER
#define LZO_CFG_USE_COUNTER 1
#endif
#else
#undef LZO_CFG_USE_COUNTER
#endif
#if (UINT_MAX == LZO_0xffffL)
#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
#if !defined(MSDOS)
#define MSDOS 1
#endif
#if !defined(_MSDOS)
#define _MSDOS 1
#endif
#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
#if (__VERSION == 520) && (MB_LEN_MAX == 1)
#if !defined(__AZTEC_C__)
#define __AZTEC_C__ __VERSION
#endif
#if !defined(__DOS__)
#define __DOS__ 1
#endif
#endif
#endif
#endif
#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL)
#define ptrdiff_t long
#define _PTRDIFF_T_DEFINED 1
#endif
#if (UINT_MAX == LZO_0xffffL)
#undef __LZO_RENAME_A
#undef __LZO_RENAME_B
#if defined(__AZTEC_C__) && defined(__DOS__)
#define __LZO_RENAME_A 1
#elif defined(_MSC_VER) && defined(MSDOS)
#if (_MSC_VER < 600)
#define __LZO_RENAME_A 1
#elif (_MSC_VER < 700)
#define __LZO_RENAME_B 1
#endif
#elif defined(__TSC__) && defined(__OS2__)
#define __LZO_RENAME_A 1
#elif defined(__MSDOS__) && defined(__TURBOC__) && (__
gitextract_tkxhxst4/
├── .gitignore
├── .travis.yml
├── LICENSE.txt
├── Makefile
├── README.md
└── src/
├── core_capture.c
├── core_capture.h
├── core_write.c
├── core_write.h
├── dpdkcap.c
├── lzo/
│ ├── lzowrite.c
│ ├── lzowrite.h
│ └── minilzo/
│ ├── README.LZO
│ ├── lzoconf.h
│ ├── lzodefs.h
│ ├── minilzo.c
│ └── minilzo.h
├── numa.c
├── numa.h
├── parse.c
├── parse.h
├── pcap.c
├── pcap.h
├── statistics.c
├── statistics.h
├── statistics_ncurses.c
├── tasks.c
├── tasks.h
├── timestamp.c
├── timestamp.h
├── utils.c
└── utils.h
SYMBOL INDEX (160 symbols across 21 files)
FILE: src/core_capture.c
function wait_link_up (line 15) | uint32_t wait_link_up(const struct core_capture_config *config, bool wait)
function capture_core (line 42) | int capture_core(const struct core_capture_config *config)
FILE: src/core_capture.h
type core_capture_config (line 9) | struct core_capture_config {
type core_capture_stats (line 18) | struct core_capture_stats {
type core_capture_config (line 25) | struct core_capture_config
FILE: src/core_write.c
function format_from_template (line 30) | static void format_from_template(char *filename,
function FILE (line 54) | static FILE *open_pcap(char *output_file)
function write_pcap (line 71) | static int write_pcap(FILE * file, void *src, size_t len)
function close_pcap (line 87) | static int close_pcap(FILE * file)
type lzowrite_buffer (line 102) | struct lzowrite_buffer
type lzowrite_buffer (line 104) | struct lzowrite_buffer
function close_lzo_pcap (line 134) | static int close_lzo_pcap(struct lzowrite_buffer *buffer)
function write_core (line 160) | int write_core(const struct core_write_config *config)
FILE: src/core_write.h
type core_write_config (line 12) | struct core_write_config {
type core_write_stats (line 20) | struct core_write_stats {
type core_write_config (line 32) | struct core_write_config
FILE: src/dpdkcap.c
type argp_option (line 47) | struct argp_option
type arguments (line 100) | struct arguments {
function parse_matrix_opt (line 118) | static int parse_matrix_opt(char *arg, unsigned long *matrix,
function error_t (line 202) | static error_t parse_opt(int key, char *arg, struct argp_state *state)
type argp (line 268) | struct argp
type rte_ring (line 272) | struct rte_ring
type arguments (line 274) | struct arguments
type core_write_stats (line 279) | struct core_write_stats
type core_capture_stats (line 280) | struct core_capture_stats
type rte_eth_conf (line 282) | struct rte_eth_conf
function port_init (line 293) | static int port_init(uint8_t port,
function signal_handler (line 408) | static void signal_handler(int sig)
function main (line 420) | int main(int argc, char *argv[])
FILE: src/lzo/lzowrite.c
function lzowrite_wbuf (line 21) | static int lzowrite_wbuf(struct lzowrite_buffer *lzowrite_buffer)
type lzowrite_buffer (line 79) | struct lzowrite_buffer
type lzowrite_file_header (line 87) | struct lzowrite_file_header
type lzowrite_buffer (line 91) | struct lzowrite_buffer
type lzowrite_buffer (line 111) | struct lzowrite_buffer
type lzowrite_buffer (line 111) | struct lzowrite_buffer
type lzowrite_file_header (line 120) | struct lzowrite_file_header
type lzowrite_file_header (line 137) | struct lzowrite_file_header
function lzowrite (line 156) | int lzowrite(struct lzowrite_buffer *lzowrite_buffer, void *src, size_t ...
function lzowrite_close (line 179) | int lzowrite_close(struct lzowrite_buffer *lzowrite_buffer)
FILE: src/lzo/lzowrite.h
type lzowrite_buffer (line 20) | struct lzowrite_buffer {
type lzowrite_file_header (line 27) | struct __attribute__((__packed__)) lzowrite_file_header {
type lzowrite_block_header (line 41) | struct __attribute__((__packed__)) lzowrite_block_header {
type lzowrite_buffer (line 54) | struct lzowrite_buffer
type lzowrite_buffer (line 61) | struct lzowrite_buffer
type lzowrite_buffer (line 68) | struct lzowrite_buffer
FILE: src/lzo/minilzo/lzoconf.h
type lzo_uint (line 90) | typedef unsigned __int64 lzo_uint;
type __int64 (line 91) | typedef __int64 lzo_int;
type lzo_ullong_t (line 94) | typedef lzo_ullong_t lzo_uint;
type lzo_llong_t (line 95) | typedef lzo_llong_t lzo_int;
type lzo_uint (line 103) | typedef unsigned int lzo_uint;
type lzo_int (line 104) | typedef int lzo_int;
type lzo_uint (line 111) | typedef unsigned long lzo_uint;
type lzo_int (line 112) | typedef long lzo_int;
type lzo_bool (line 130) | typedef int lzo_bool;
type lzo_callback_t (line 264) | struct lzo_callback_t
type lzo_callback_t (line 265) | typedef struct lzo_callback_t lzo_callback_t;
type lzo_callback_t (line 278) | struct lzo_callback_t {
type lzo_align_t (line 361) | typedef union {
type __lzo_pu_u (line 404) | typedef union {
type __lzo_pu32_u (line 408) | typedef union {
FILE: src/lzo/minilzo/lzodefs.h
type lzo_int16e_hi_t__ (line 2744) | typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__)));
type lzo_uint16e_hi_t__ (line 2745) | typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__)));
type lzo_int32e_si_t__ (line 2779) | typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_uint32e_si_t__ (line 2780) | typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_int32e_si_t__ (line 2785) | typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_uint32e_si_t__ (line 2786) | typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
type __w64 (line 2928) | typedef __w64 int lzo_intptr_t;
type lzo_uintptr_t (line 2929) | typedef __w64 unsigned int lzo_uintptr_t;
type lzo_word_t (line 2996) | typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__)));
type lzo_sword_t (line 2997) | typedef int lzo_sword_t __attribute__((__mode__(__V16QI__)));
FILE: src/lzo/minilzo/minilzo.c
type lzo_int16e_hi_t__ (line 2765) | typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__)));
type lzo_uint16e_hi_t__ (line 2766) | typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__)));
type lzo_int32e_si_t__ (line 2800) | typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_uint32e_si_t__ (line 2801) | typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_int32e_si_t__ (line 2806) | typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__)));
type lzo_uint32e_si_t__ (line 2807) | typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__)));
type __w64 (line 2949) | typedef __w64 int lzo_intptr_t;
type lzo_uintptr_t (line 2950) | typedef __w64 unsigned int lzo_uintptr_t;
type lzo_word_t (line 3017) | typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__)));
type lzo_sword_t (line 3018) | typedef int lzo_sword_t __attribute__((__mode__(__V16QI__)));
function lzo_bitops_ctlz32_func (line 3406) | __lzo_static_forceinline unsigned lzo_bitops_ctlz32_func(lzo_uint32_t v)
function lzo_bitops_ctlz64_func (line 3435) | __lzo_static_forceinline unsigned lzo_bitops_ctlz64_func(lzo_uint64_t v)
function lzo_bitops_cttz32_func (line 3464) | __lzo_static_forceinline unsigned lzo_bitops_cttz32_func(lzo_uint32_t v)
function lzo_bitops_cttz64_func (line 3488) | __lzo_static_forceinline unsigned lzo_bitops_cttz64_func(lzo_uint64_t v)
type lzo_uint16_t (line 3540) | typedef lzo_uint16_t __lzo_may_alias
type lzo_memops_TU2 (line 3544) | typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
type lzo_memops_TU2_struct (line 3546) | struct lzo_memops_TU2_struct {
type lzo_memops_TU2 (line 3549) | typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
type lzo_uint32_t (line 3557) | typedef lzo_uint32_t __lzo_may_alias
type lzo_memops_TU4 (line 3561) | typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
type lzo_memops_TU4_struct (line 3563) | struct lzo_memops_TU4_struct {
type lzo_memops_TU4 (line 3566) | typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
type lzo_uint64_t (line 3574) | typedef lzo_uint64_t __lzo_may_alias
type lzo_memops_TU8 (line 3578) | typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
type lzo_memops_TU8_struct (line 3580) | struct lzo_memops_TU8_struct {
type lzo_memops_TU8 (line 3583) | typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
function __lzo_static_forceinline (line 3701) | __lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_void...
function __lzo_static_forceinline (line 3724) | __lzo_static_forceinline lzo_uint32_t lzo_memops_get_le32(const lzo_void...
function __lzo_static_forceinline (line 3753) | __lzo_static_forceinline lzo_uint16_t lzo_memops_get_ne16(const lzo_void...
function __lzo_static_forceinline (line 3767) | __lzo_static_forceinline lzo_uint32_t lzo_memops_get_ne32(const lzo_void...
function __lzo_static_forceinline (line 3785) | __lzo_static_forceinline void lzo_memops_put_le16(lzo_voidp dd, lzo_uint...
function __lzo_static_forceinline (line 3806) | __lzo_static_forceinline void lzo_memops_put_le32(lzo_voidp dd, lzo_uint...
function __lzo_static_forceinline (line 3829) | __lzo_static_forceinline void lzo_memops_put_ne16(lzo_voidp dd, lzo_uint...
function __lzo_static_forceinline (line 3840) | __lzo_static_forceinline void lzo_memops_put_ne32(lzo_voidp dd, lzo_uint...
type lzo_full_align_t (line 3986) | typedef union {
function __lzo_ptr_linear (line 4040) | LZO_PUBLIC(lzo_uintptr_t) __lzo_ptr_linear(const lzo_voidp ptr)
function __lzo_align_gap (line 4055) | LZO_PUBLIC(unsigned) __lzo_align_gap(const lzo_voidp ptr, lzo_uint size)
function lzo_copyright (line 4100) | LZO_PUBLIC(const lzo_bytep) lzo_copyright(void)
function lzo_version (line 4105) | LZO_PUBLIC(unsigned) lzo_version(void)
function lzo_version_string (line 4110) | LZO_PUBLIC(const char *) lzo_version_string(void)
function lzo_version_date (line 4115) | LZO_PUBLIC(const char *) lzo_version_date(void)
function _lzo_version_string (line 4120) | LZO_PUBLIC(const lzo_charp) _lzo_version_string(void)
function _lzo_version_date (line 4125) | LZO_PUBLIC(const lzo_charp) _lzo_version_date(void)
function lzo_adler32 (line 4139) | LZO_PUBLIC(lzo_uint32_t)
function __lzo_noinline (line 4308) | static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off)
function _lzo_config_check (line 4314) | LZO_PUBLIC(int) _lzo_config_check(void)
function __lzo_init_v2 (line 4434) | LZO_PUBLIC(int)
function __pascal (line 4479) | __pascal LibMain(int a, short b, short c, long d)
function DVAL_ASSERT (line 4721) | static void __attribute__((__unused__))
function __lzo_noinline (line 4805) | static __lzo_noinline lzo_uint
function DO_COMPRESS (line 5119) | LZO_PUBLIC(int)
FILE: src/numa.c
type lsock (line 8) | struct lsock {
type lsock (line 13) | struct lsock
type lsock (line 28) | struct lsock
function stop_all_sockets (line 36) | void stop_all_sockets()
function get_core_on_socket (line 46) | int get_core_on_socket(int socket)
FILE: src/parse.c
function parse_config (line 39) | int parse_config(int fd, ssize_t size, void (*cb)(char *, char *, void *),
FILE: src/pcap.c
function pcap_header_init (line 4) | void pcap_header_init(struct pcap_header *header, unsigned int snaplen)
FILE: src/pcap.h
type pcap_header (line 8) | struct __attribute__((__packed__)) pcap_header {
type pcap_packet_header (line 18) | struct pcap_packet_header {
type pcap_header (line 25) | struct pcap_header
FILE: src/statistics.c
function print_stats (line 18) | static int print_stats( __attribute__((unused))
type rte_timer (line 95) | struct rte_timer
function start_stats_display (line 97) | void start_stats_display(struct stats_data *data)
FILE: src/statistics.h
type stats_data (line 7) | struct stats_data {
type stats_data (line 22) | struct stats_data
FILE: src/statistics_ncurses.c
function wglobal_stats (line 22) | static void wglobal_stats(WINDOW * window, struct stats_data *data)
function wcapture_stats (line 32) | static void wcapture_stats(WINDOW * window, struct stats_data *data)
function wwrite_stats (line 113) | static void wwrite_stats(WINDOW * window, struct stats_data *data)
function signal_handler (line 177) | static void signal_handler(int sig)
function mv_windows (line 188) | static void mv_windows(void)
function init_windows (line 219) | static void init_windows(void)
function printscreen (line 236) | static int printscreen( __attribute__((unused))
type rte_timer (line 267) | struct rte_timer
function start_stats_display (line 269) | void start_stats_display(struct stats_data *data)
FILE: src/tasks.c
function apply_taskkv (line 21) | void apply_taskkv(char *key, char *val, void *cbd)
function scan_by_fd (line 49) | void scan_by_fd(int dirfd, void (*cb)(char *, int, struct stat *, void *),
function scan_by_name (line 116) | void scan_by_name(char *dirname, void (*cb)(char *, int, struct stat *, ...
function compile_filter (line 128) | void compile_filter(struct task *task)
function check_scan_task (line 166) | void check_scan_task(char *fn, int fd, struct stat *st, void *cbd)
function check_scan_taskdir (line 263) | void check_scan_taskdir(struct taskdir *td, int now)
FILE: src/tasks.h
type task_state_t (line 26) | enum task_state_t {
type task (line 34) | struct task {
type taskdir (line 59) | struct taskdir {
type stat (line 68) | struct stat
type stat (line 70) | struct stat
type taskdir (line 73) | struct taskdir
FILE: src/timestamp.c
type rte_mbuf (line 7) | struct rte_mbuf
function register_timestamp_dynfield (line 13) | void register_timestamp_dynfield()
FILE: src/timestamp.h
type rte_mbuf (line 10) | struct rte_mbuf
Condensed preview — 32 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (445K chars).
[
{
"path": ".gitignore",
"chars": 6,
"preview": "build\n"
},
{
"path": ".travis.yml",
"chars": 593,
"preview": "language: c\naddons:\n apt:\n packages:\n - libncurses-dev\n - linux-headers-4.15.0-58-generic\n - libnuma-dev\n\nc"
},
{
"path": "LICENSE.txt",
"chars": 1729,
"preview": "BSD LICENSE\n\nCopyright(c) 2010-2015 Intel Corporation. All rights reserved.\nCopyright(c) 2015 University of Twente\nCopyr"
},
{
"path": "Makefile",
"chars": 1978,
"preview": "\n# binary name\nAPP = dpdkcap\n\n# all source (prefix gets added later)\nSRC_DIR = src\n#SOURCES := dpdkcap.c core_write.c co"
},
{
"path": "README.md",
"chars": 7160,
"preview": "<p align=\"center\">\n <img src=\"./media/DPDKCapLogo_400x260.png\"/>\n<p/>\n\n# DPDKCap\nDPDKCap is packet capture tool based o"
},
{
"path": "src/core_capture.c",
"chars": 2678,
"preview": "#include <stdbool.h>\n#include <signal.h>\n#include <string.h>\n\n#include <rte_log.h>\n#include <rte_lcore.h>\n#include <rte_"
},
{
"path": "src/core_capture.h",
"chars": 596,
"preview": "#ifndef DPDKCAP_CORE_CAPTURE_H\n#define DPDKCAP_CORE_CAPTURE_H\n\n#include <stdint.h>\n\n#define DPDKCAP_CAPTURE_BURST_SIZE 2"
},
{
"path": "src/core_write.c",
"chars": 11115,
"preview": "#include <stdbool.h>\n#include <sys/time.h>\n#include <time.h>\n#include <string.h>\n#include <stdio.h>\n#include <signal.h>\n"
},
{
"path": "src/core_write.h",
"chars": 761,
"preview": "#ifndef DPDKCAP_CORE_WRITE_H\n#define DPDKCAP_CORE_WRITE_H\n\n#include <stdbool.h>\n#include <stdint.h>\n#include \"tasks.h\"\n\n"
},
{
"path": "src/dpdkcap.c",
"chars": 22497,
"preview": "#include <stdint.h>\n#include <stdbool.h>\n#include <signal.h>\n#include <argp.h>\n#include <inttypes.h>\n\n#include <rte_comm"
},
{
"path": "src/lzo/lzowrite.c",
"chars": 5172,
"preview": "#include \"lzowrite.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdio_ext.h>\n#include <string.h>\n#include <errno"
},
{
"path": "src/lzo/lzowrite.h",
"chars": 2132,
"preview": "#include <stdio.h>\n#include <stdint.h>\n\n#include \"minilzo/minilzo.h\"\n\n#define LZOWRITE_BUFFER_SIZE 32 * 1024\n#define LZO"
},
{
"path": "src/lzo/minilzo/README.LZO",
"chars": 4003,
"preview": "\n ============================================================================\n miniLZO -- mini subset of the LZO real-t"
},
{
"path": "src/lzo/minilzo/lzoconf.h",
"chars": 15423,
"preview": "/* lzoconf.h -- configuration of the LZO data compression library\n\n This file is part of the LZO real-time data compre"
},
{
"path": "src/lzo/minilzo/lzodefs.h",
"chars": 117247,
"preview": "/* lzodefs.h -- architecture, OS and compiler specific defines\n\n This file is part of the LZO real-time data compressi"
},
{
"path": "src/lzo/minilzo/minilzo.c",
"chars": 194579,
"preview": "/* minilzo.c -- mini subset of the LZO real-time data compression library\n\n This file is part of the LZO real-time dat"
},
{
"path": "src/lzo/minilzo/minilzo.h",
"chars": 2897,
"preview": "/* minilzo.h -- mini subset of the LZO real-time data compression library\n\n This file is part of the LZO real-time dat"
},
{
"path": "src/numa.c",
"chars": 1092,
"preview": "\n#include <rte_lcore.h>\n#include <rte_memory.h>\n#include <rte_malloc.h>\n\n#define MAX_LSOCKS 20\n\nstruct lsock {\n\tint sock"
},
{
"path": "src/numa.h",
"chars": 114,
"preview": "\nint get_core_on_socket(int socket);\n\nvolatile bool *get_stopper_for_socket(int socket);\nvoid stop_all_sockets();\n"
},
{
"path": "src/parse.c",
"chars": 2531,
"preview": "\n//#include <stdio.h>\n#include <dirent.h>\n#include <sys/types.h>\n//#include <sys/stat.h>\n//#include <fcntl.h>\n#include <"
},
{
"path": "src/parse.h",
"chars": 144,
"preview": "#ifndef DPDKCAP_PARSE_H\n#define DPDKCAP_PARSE_H\n\nint parse_config(int fd, ssize_t size, void (*cb)(char *, char *, void "
},
{
"path": "src/pcap.c",
"chars": 321,
"preview": "#include <stdlib.h>\n#include \"pcap.h\"\n\nvoid pcap_header_init(struct pcap_header *header, unsigned int snaplen)\n{\n\theader"
},
{
"path": "src/pcap.h",
"chars": 721,
"preview": "#ifndef DPDKCAP_PCAP_H\n#define DPDKCAP_PCAP_H\n\n#include <stdint.h>\n\n#define PCAP_SNAPLEN_DEFAULT 65535\n\nstruct __attribu"
},
{
"path": "src/statistics.c",
"chars": 3525,
"preview": "#include \"statistics.h\"\n\n#include <rte_ethdev.h>\n#include <rte_timer.h>\n#include <rte_ring.h>\n#include <rte_log.h>\n\n#inc"
},
{
"path": "src/statistics.h",
"chars": 534,
"preview": "#ifndef DPDKCAP_STATISTICS_H\n#define DPDKCAP_STATISTICS_H\n\n#include \"core_write.h\"\n#include \"core_capture.h\"\n\nstruct sta"
},
{
"path": "src/statistics_ncurses.c",
"chars": 8681,
"preview": "#include \"statistics.h\"\n\n#include <signal.h>\n#include <ncurses.h>\n#include <unistd.h>\n#include <stdint.h>\n\n#include <rte"
},
{
"path": "src/tasks.c",
"chars": 6992,
"preview": "\n#include <stdio.h>\n#include <dirent.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n#include <unistd"
},
{
"path": "src/tasks.h",
"chars": 1619,
"preview": "#ifndef DPDKCAP_TASKS_H\n#define DPDKCAP_TASKS_H\n\n#include <sys/types.h>\n#include <sys/stat.h>\n\n#include <rte_bpf.h>\n#inc"
},
{
"path": "src/timestamp.c",
"chars": 543,
"preview": "\n#include \"timestamp.h\"\n\nstatic int timestamp_dynfield_offset = -1;\nstatic uint64_t timestamp_dynfield_flag = 0;\n\ninline"
},
{
"path": "src/timestamp.h",
"chars": 246,
"preview": "#ifndef DPDKCAP_TIMESTAMP_H\n#define DPDKCAP_TIMESTAMP_H\n\n#include <sys/time.h>\n\n#include <rte_mbuf.h>\n#include <rte_mbuf"
},
{
"path": "src/utils.c",
"chars": 1143,
"preview": "#include \"utils.h\"\n#include <stdio.h>\n#include <stdint.h>\n#include <string.h>\n\nconst char *bytes_unit[] = { \"B\", \"KB\", \""
},
{
"path": "src/utils.h",
"chars": 210,
"preview": "#ifndef DPDKCAP_UTILS_H\n#define DPDKCAP_UTILS_H\n\n#include <stdint.h>\n\nchar *bytes_format(uint64_t);\nchar *ul_format(uint"
}
]
About this extraction
This page contains the full source code of the dpdkcap/dpdkcap GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 32 files (409.2 KB), approximately 134.9k tokens, and a symbol index with 160 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.