1*d9a51c35Sjmc /* $OpenBSD: compress.h,v 1.16 2022/12/26 19:16:00 jmc Exp $ */ 2f041f44aSmickey 3f041f44aSmickey /* 4f041f44aSmickey * Copyright (c) 1997 Michael Shalayeff 5f041f44aSmickey * All rights reserved. 6f041f44aSmickey * 7f041f44aSmickey * Redistribution and use in source and binary forms, with or without 8f041f44aSmickey * modification, are permitted provided that the following conditions 9f041f44aSmickey * are met: 10f041f44aSmickey * 1. Redistributions of source code must retain the above copyright 11f041f44aSmickey * notice, this list of conditions and the following disclaimer. 12f041f44aSmickey * 2. Redistributions in binary form must reproduce the above copyright 13f041f44aSmickey * notice, this list of conditions and the following disclaimer in the 14f041f44aSmickey * documentation and/or other materials provided with the distribution. 15f041f44aSmickey * 16f041f44aSmickey * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17f041f44aSmickey * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18f041f44aSmickey * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19f041f44aSmickey * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20f041f44aSmickey * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21f041f44aSmickey * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22f041f44aSmickey * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23f041f44aSmickey * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24f041f44aSmickey * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25f041f44aSmickey * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26f041f44aSmickey * SUCH DAMAGE. 27f041f44aSmickey * 28f041f44aSmickey */ 29f041f44aSmickey 30766a4c19Sotto #include <sys/stat.h> 31766a4c19Sotto 32b2b9c6b0Smillert struct z_info { 33b2b9c6b0Smillert u_int32_t mtime; /* timestamp */ 34b2b9c6b0Smillert u_int32_t crc; /* crc */ 35b2b9c6b0Smillert u_int32_t hlen; /* header length */ 36b2b9c6b0Smillert u_int64_t total_in; /* # bytes in */ 37b2b9c6b0Smillert u_int64_t total_out; /* # bytes out */ 38b2b9c6b0Smillert }; 39b2b9c6b0Smillert 406b0cc2f2Smickey /* 41*d9a51c35Sjmc * making it any bigger does not affect performance very much. 426b0cc2f2Smickey * actually this value is just a little bit better than 8192. 436b0cc2f2Smickey */ 44f041f44aSmickey #define Z_BUFSIZE 16384 45f041f44aSmickey 46dbf8dc76Ssobrado enum program_mode { 47dbf8dc76Ssobrado MODE_COMP, 48dbf8dc76Ssobrado MODE_DECOMP, 49dbf8dc76Ssobrado MODE_CAT 509365c04eSmortimer }; 515a768aecSsobrado 525a768aecSsobrado /* 53b2b9c6b0Smillert * exit codes for compress 54b2b9c6b0Smillert */ 55b2b9c6b0Smillert #define SUCCESS 0 56b2b9c6b0Smillert #define FAILURE 1 57b2b9c6b0Smillert #define WARNING 2 58b2b9c6b0Smillert 594b1ca57aStedu extern char null_magic[]; 606b0cc2f2Smickey 61379ad95aStedu extern void *z_ropen(int, char *, int); 62379ad95aStedu extern void *z_wopen(int, char *, int, u_int32_t); 63c72b5b24Smillert extern FILE *zopen(const char *, const char *,int); 64c72b5b24Smillert extern int zread(void *, char *, int); 65c72b5b24Smillert extern int zwrite(void *, const char *, int); 66766a4c19Sotto extern int z_close(void *, struct z_info *, const char *, struct stat *); 676b0cc2f2Smickey 68379ad95aStedu extern void *gz_ropen(int, char *, int); 69379ad95aStedu extern void *gz_wopen(int, char *, int, u_int32_t); 70c72b5b24Smillert extern int gz_read(void *, char *, int); 71c72b5b24Smillert extern int gz_write(void *, const char *, int); 72766a4c19Sotto extern int gz_close(void *, struct z_info *, const char *, struct stat *); 73c72b5b24Smillert extern int gz_flush(void *, int); 746b0cc2f2Smickey 753ab258a1Smillert extern void *zip_ropen(int, char *, int); 763ab258a1Smillert extern int zip_read(void *, char *, int); 773ab258a1Smillert extern int zip_close(void *, struct z_info *, const char *, struct stat *); 783ab258a1Smillert 79379ad95aStedu extern void *null_ropen(int, char *, int); 80379ad95aStedu extern void *null_wopen(int, char *, int, u_int32_t); 814b1ca57aStedu extern int null_read(void *, char *, int); 824b1ca57aStedu extern int null_write(void *, const char *, int); 83766a4c19Sotto extern int null_close(void *, struct z_info *, const char *, struct stat *); 844b1ca57aStedu extern int null_flush(void *, int); 85766a4c19Sotto 86766a4c19Sotto extern void setfile(const char *, int, struct stat *); 87