1bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin/*
2bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin * Test application to test buffer-to-buffer decoding
3bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin *
4bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin * Author: Lasse Collin <lasse.collin@tukaani.org>
5bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin *
6bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin * This file has been put into the public domain.
7bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin * You can do whatever you want with this file.
8bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin */
9bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
10bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin#include <stdbool.h>
11bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin#include <stdio.h>
12bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin#include <string.h>
13bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin#include "xz.h"
14bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
15bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin#define BUFFER_SIZE (1024 * 1024)
16bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
17bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collinstatic uint8_t in[BUFFER_SIZE];
18bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collinstatic uint8_t out[BUFFER_SIZE];
19bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
20bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collinint main(void)
21bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin{
22bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	struct xz_buf b;
23bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	struct xz_dec *s;
24bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	enum xz_ret ret;
25bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
26bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	xz_crc32_init();
27bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
28c4c6f5c427c246a5b08f25105e8a5183c24fd077Lasse Collin	s = xz_dec_init(XZ_SINGLE, 0);
29bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	if (s == NULL) {
30e75f4eb79165213a02d567940d344f5c2ff1be03Du Huanpeng		fputs("Initialization failed\n", stderr);
31bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin		return 1;
32bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	}
33bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
34bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.in = in;
35bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.in_pos = 0;
36bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.in_size = fread(in, 1, sizeof(in), stdin);
37e75f4eb79165213a02d567940d344f5c2ff1be03Du Huanpeng
38bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.out = out;
39bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.out_pos = 0;
40bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	b.out_size = sizeof(out);
41bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
42bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	ret = xz_dec_run(s, &b);
43bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	xz_dec_end(s);
44bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
45bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	fwrite(out, 1, b.out_pos, stdout);
46bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	fprintf(stderr, "%d\n", ret);
47bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin
48bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin	return 0;
49bcc4b36559e38e30afe6030c42ea4f369df9498Lasse Collin}
50