Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/zlib/examples/zran.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 /* zran.h -- example of deflated stream indexing and random access | |
| 2 * Copyright (C) 2005, 2012, 2018, 2023 Mark Adler | |
| 3 * For conditions of distribution and use, see copyright notice in zlib.h | |
| 4 * Version 1.3 18 Feb 2023 Mark Adler */ | |
| 5 | |
| 6 #include <stdio.h> | |
| 7 #include "zlib.h" | |
| 8 | |
| 9 // Access point. | |
| 10 typedef struct point { | |
| 11 off_t out; // offset in uncompressed data | |
| 12 off_t in; // offset in compressed file of first full byte | |
| 13 int bits; // 0, or number of bits (1-7) from byte at in-1 | |
| 14 unsigned char window[32768]; // preceding 32K of uncompressed data | |
| 15 } point_t; | |
| 16 | |
| 17 // Access point list. | |
| 18 struct deflate_index { | |
| 19 int have; // number of access points in list | |
| 20 int mode; // -15 for raw, 15 for zlib, or 31 for gzip | |
| 21 off_t length; // total length of uncompressed data | |
| 22 point_t *list; // allocated list of access points | |
| 23 }; | |
| 24 | |
| 25 // Make one pass through a zlib, gzip, or raw deflate compressed stream and | |
| 26 // build an index, with access points about every span bytes of uncompressed | |
| 27 // output. gzip files with multiple members are fully indexed. span should be | |
| 28 // chosen to balance the speed of random access against the memory requirements | |
| 29 // of the list, which is about 32K bytes per access point. The return value is | |
| 30 // the number of access points on success (>= 1), Z_MEM_ERROR for out of | |
| 31 // memory, Z_BUF_ERROR for a premature end of input, Z_DATA_ERROR for a format | |
| 32 // or verification error in the input file, or Z_ERRNO for a file read error. | |
| 33 // On success, *built points to the resulting index. | |
| 34 int deflate_index_build(FILE *in, off_t span, struct deflate_index **built); | |
| 35 | |
| 36 // Use the index to read len bytes from offset into buf. Return the number of | |
| 37 // bytes read or a negative error code. If data is requested past the end of | |
| 38 // the uncompressed data, then deflate_index_extract() will return a value less | |
| 39 // than len, indicating how much was actually read into buf. If given a valid | |
| 40 // index, this function should not return an error unless the file was modified | |
| 41 // somehow since the index was generated, given that deflate_index_build() had | |
| 42 // validated all of the input. If nevertheless there is a failure, Z_BUF_ERROR | |
| 43 // is returned if the compressed data ends prematurely, Z_DATA_ERROR if the | |
| 44 // deflate compressed data is not valid, Z_MEM_ERROR if out of memory, | |
| 45 // Z_STREAM_ERROR if the index is not valid, or Z_ERRNO if there is an error | |
| 46 // reading or seeking on the input file. | |
| 47 ptrdiff_t deflate_index_extract(FILE *in, struct deflate_index *index, | |
| 48 off_t offset, unsigned char *buf, size_t len); | |
| 49 | |
| 50 // Deallocate an index built by deflate_index_build(). | |
| 51 void deflate_index_free(struct deflate_index *index); |
