xref: /openbsd-src/usr.bin/compress/compress.h (revision d9a51c353c88dac7b4a389c112b4cfe97b8e3a46)
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