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