183d5177f1ca25d90a343df5a9c6d202e6cb415afPhillip Lougher#ifndef GZIP_WRAPPER_H
283d5177f1ca25d90a343df5a9c6d202e6cb415afPhillip Lougher#define GZIP_WRAPPER_H
30c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher/*
40c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * Squashfs
50c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
60c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * Copyright (c) 2014
70c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * Phillip Lougher <phillip@squashfs.org.uk>
80c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
90c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * This program is free software; you can redistribute it and/or
100c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * modify it under the terms of the GNU General Public License
110c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * as published by the Free Software Foundation; either version 2,
120c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * or (at your option) any later version.
130c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
140c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * This program is distributed in the hope that it will be useful,
150c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * but WITHOUT ANY WARRANTY; without even the implied warranty of
160c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
170c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * GNU General Public License for more details.
180c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
190c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * You should have received a copy of the GNU General Public License
200c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * along with this program; if not, write to the Free Software
210c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
220c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
230c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher * gzip_wrapper.h
240c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher *
250c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher */
260c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
270c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#ifndef linux
280c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define __BYTE_ORDER BYTE_ORDER
290c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define __BIG_ENDIAN BIG_ENDIAN
300c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define __LITTLE_ENDIAN LITTLE_ENDIAN
310c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#else
320c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#include <endian.h>
330c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#endif
340c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
350c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#if __BYTE_ORDER == __BIG_ENDIAN
36ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougherextern unsigned int inswap_le16(unsigned short);
370c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougherextern unsigned int inswap_le32(unsigned int);
380c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
390c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define SQUASHFS_INSWAP_COMP_OPTS(s) { \
400c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher	(s)->compression_level = inswap_le32((s)->compression_level); \
41ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	(s)->window_size = inswap_le16((s)->window_size); \
42ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	(s)->strategy = inswap_le16((s)->strategy); \
430c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher}
440c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#else
450c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define SQUASHFS_INSWAP_COMP_OPTS(s)
460c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#endif
470c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
480c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher/* Default compression */
490c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define GZIP_DEFAULT_COMPRESSION_LEVEL 9
500c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#define GZIP_DEFAULT_WINDOW_SIZE 15
510c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
520c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougherstruct gzip_comp_opts {
530c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher	int compression_level;
54ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	short window_size;
55ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	short strategy;
560c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher};
570c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher
58ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougherstruct strategy {
59ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	char *name;
60ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	int strategy;
61ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	int selected;
62ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher};
63ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher
64ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougherstruct gzip_strategy {
65ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	int strategy;
66ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	int length;
67ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	void *buffer;
68ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher};
69ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher
70ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougherstruct gzip_stream {
71ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	z_stream stream;
72ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	int strategies;
73ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher	struct gzip_strategy strategy[0];
74ef50ceabd93384b842032e0f6abec2a10256bdedPhillip Lougher};
750c84e6ffcd10f9eace6be2d4a085c25928ed77ddPhillip Lougher#endif
76