Merge pull request #2051 from graphitemaster/dale/vendor-zlib

Vendor zlib
This commit is contained in:
gingerBill
2022-09-17 11:17:07 +01:00
committed by GitHub
4 changed files with 290 additions and 1 deletions

9
vendor/README.md vendored
View File

@@ -141,4 +141,11 @@ Includes full bindings as well as wrappers to match the `core:crypto` API.
[CMark](https://github.com/commonmark/cmark) CommonMark parsing library.
See also LICENSE in the `commonmark` directory itself.
Includes full bindings and Windows `.lib` and `.dll`.
Includes full bindings and Windows `.lib` and `.dll`.
## CommonMark
[zlib](https://github.com/madler/zlib) data compression library
See also LICENSE in the `zlib` directory itself.
Includes full bindings.

20
vendor/zlib/LICENSE vendored Normal file
View File

@@ -0,0 +1,20 @@
(C) 1995-2022 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly Mark Adler
jloup@gzip.org madler@alumni.caltech.edu

BIN
vendor/zlib/libz.lib vendored Normal file

Binary file not shown.

262
vendor/zlib/zlib.odin vendored Normal file
View File

@@ -0,0 +1,262 @@
package zlib
import "core:c"
when ODIN_OS == .Windows do foreign import zlib "libz.lib"
when ODIN_OS == .Linux do foreign import zlib "system:z"
VERSION :: "1.2.12"
VERNUM :: 0x12c0
VER_MAJOR :: 1
VER_MINOR :: 2
VER_REVISION :: 12
VER_SUBREVISION :: 0
voidp :: rawptr
voidpf :: rawptr
voidpc :: rawptr
Byte :: c.uchar
Bytef :: c.uchar
uInt :: c.uint
uIntf :: c.uint
uLong :: c.ulong
uLongf :: c.ulong
size_t :: c.size_t
off_t :: c.long
off64_t :: i64
crc_t :: u32
alloc_func :: proc "c" (opaque: voidp, items: uInt, size: uInt) -> voidpf
free_func :: proc "c" (opaque: voidp, address: voidpf)
in_func :: proc "c" (rawptr, [^][^]c.uchar) -> c.uint
out_func :: proc "c" (rawptr, [^]c.uchar, c.uint) -> c.int
gzFile_s :: struct {
have: c.uint,
next: [^]c.uchar,
pos: off64_t,
}
gzFile :: ^gzFile_s
z_stream_s :: struct {
next_in: ^Bytef,
avail_in: uInt,
total_in: uLong,
next_out: ^Bytef,
avail_out: uInt,
total_out: uLong,
msg: [^]c.char,
state: rawptr,
zalloc: alloc_func,
zfree: free_func,
opaque: voidpf,
data_type: c.int,
adler: uLong,
reserved: uLong,
}
z_stream :: z_stream_s
z_streamp :: ^z_stream
gz_header_s :: struct {
text: c.int,
time: uLong,
xflags: c.int,
os: c.int,
extra: [^]Bytef,
extra_len: uInt,
extra_max: uInt,
name: [^]Bytef,
name_max: uInt,
comment: [^]Bytef,
comm_max: uInt,
hcrc: c.int,
done: c.int,
}
gz_header :: gz_header_s
gz_headerp :: ^gz_header
// Allowed flush values; see deflate() and inflate() below for details
NO_FLUSH :: 0
PARTIAL_FLUSH :: 1
SYNC_FLUSH :: 2
FULL_FLUSH :: 3
FINISH :: 4
BLOCK :: 5
TREES :: 6
// Return codes for the compression/decompression functions. Negative values are
// errors, positive values are used for special but normal events.
OK :: 0
STREAM_END :: 1
NEED_DICT :: 2
ERRNO :: -1
STREAM_ERROR :: -2
DATA_ERROR :: -3
MEM_ERROR :: -4
BUF_ERROR :: -5
VERSION_ERROR :: -6
// compression levels
NO_COMPRESSION :: 0
BEST_SPEED :: 1
BEST_COMPRESSION :: 9
DEFAULT_COMPRESSION :: -1
// compression strategy; see deflateInit2() below for details
FILTERED :: 1
HUFFMAN_ONLY :: 2
RLE :: 3
FIXED :: 4
DEFAULT_STRATEGY :: 0
// Possible values of the data_type field for deflate()
BINARY :: 0
TEXT :: 1
ASCII :: TEXT // for compatibility with 1.2.2 and earlier
UNKNOWN :: 2
// The deflate compression method (the only one supported in this version)
DEFLATED :: 8
NULL :: 0 // for initializing zalloc, zfree, opaque
version :: Version // for compatibility with versions < 1.0.2
@(default_calling_convention="c")
foreign zlib {
// becase zlib.zlibVersion would be silly to write
@(link_prefix="zlib")
Version :: proc() -> cstring ---
deflate :: proc(strm: z_streamp, flush: c.int) -> c.int ---
deflateEnd :: proc(strm: z_streamp) -> c.int ---
inflate :: proc(strm: z_streamp, flush: c.int) -> c.int ---
inflateEnd :: proc(strm: z_streamp) -> c.int ---
deflateSetDictionary :: proc(strm: z_streamp, dictionary: [^]Bytef, dictLength: uInt) -> c.int ---
deflateGetDictionary :: proc(strm: z_streamp, dictionary: [^]Bytef, dictLength: ^uInt) -> c.int ---
deflateCopy :: proc(dest, source: z_streamp) -> c.int ---
deflateReset :: proc(strm: z_streamp) -> c.int ---
deflateParams :: proc(strm: z_streamp, level, strategy: c.int) -> c.int ---
deflateTune :: proc(strm: z_streamp, good_length, max_lazy, nice_length, max_chain: c.int) -> c.int ---
deflateBound :: proc(strm: z_streamp, sourceLen: uLong) -> uLong ---
deflatePending :: proc(strm: z_streamp, pending: [^]c.uint, bits: [^]c.int) -> c.int ---
deflatePrime :: proc(strm: z_streamp, bits, value: c.int) -> c.int ---
deflateSetHeader :: proc(strm: z_streamp, head: gz_headerp) -> c.int ---
inflateSetDictionary :: proc(strm: z_streamp, dictionary: [^]Bytef, dictLength: uInt) -> c.int ---
inflateGetDictionary :: proc(strm: z_streamp, dictionary: [^]Bytef, dictLength: ^uInt) -> c.int ---
inflateSync :: proc(strm: z_streamp) -> c.int ---
inflateCopy :: proc(dest, source: z_streamp) -> c.int ---
inflateReset :: proc(strm: z_streamp) -> c.int ---
inflateReset2 :: proc(strm: z_streamp, windowBits: c.int) -> c.int ---
inflatePrime :: proc(strm: z_streamp, bits, value: c.int) -> c.int ---
inflateMark :: proc(strm: z_streamp) -> c.long ---
inflateGetHeader :: proc(strm: z_streamp, head: gz_headerp) -> c.int ---
inflateBack :: proc(strm: z_streamp, _in: in_func, in_desc: rawptr, out: out_func, out_desc: rawptr) -> c.int ---
inflateBackEnd :: proc(strm: z_streamp) -> c.int ---
zlibCompileFlags :: proc() -> uLong ---
compress :: proc(dest: [^]Bytef, destLen: ^uLongf, source: [^]Bytef, sourceLen: uLong) -> c.int ---
compress2 :: proc(dest: [^]Bytef, destLen: ^uLongf, source: [^]Bytef, sourceLen: uLong, level: c.int) -> c.int ---
compressBound :: proc(sourceLen: uLong) -> uLong ---
uncompress :: proc(dest: [^]Bytef, destLen: ^uLongf, source: [^]Bytef, sourceLen: uLong) -> c.int ---
uncompress2 :: proc(dest: [^]Bytef, destLen: ^uLongf, source: [^]Bytef, sourceLen: ^uLong) -> c.int ---
gzdopen :: proc(fd: c.int, mode: cstring) -> gzFile ---
gzbuffer :: proc(file: gzFile, size: c.uint) -> c.int ---
gzsetparams :: proc(file: gzFile, level, strategy: c.int) -> c.int ---
gzread :: proc(file: gzFile, buf: voidp, len: c.uint) -> c.int ---
gzfread :: proc(buf: voidp, size, nitems: size_t, file: gzFile) -> size_t ---
gzwrite :: proc(file: gzFile, buf: voidpc, len: c.uint) -> c.int ---
gzfwrite :: proc(buf: voidpc, size, nitems: size_t, file: gzFile) -> size_t ---
gzprintf :: proc(file: gzFile, format: cstring, #c_vararg args: ..any) -> c.int ---
gzputs :: proc(file: gzFile, s: cstring) -> c.int ---
gzgets :: proc(file: gzFile, buf: [^]c.char, len: c.int) -> [^]c.char ---
gzputc :: proc(file: gzFile, ch: c.int) -> c.int ---
gzgetc_ :: proc(file: gzFile) -> c.int --- // backwards compat, not the same as gzget
gzungetc :: proc(ch: c.int, file: gzFile) -> c.int ---
gzflush :: proc(file: gzFile, flush: c.int) -> c.int ---
gzrewind :: proc(file: gzFile) -> c.int ---
gzeof :: proc(file: gzFile) -> c.int ---
gzdirect :: proc(file: gzFile) -> c.int ---
gzclose :: proc(file: gzFile) -> c.int ---
gzclose_r :: proc(file: gzFile) -> c.int ---
gzclose_w :: proc(file: gzFile) -> c.int ---
gzerror :: proc(file: gzFile, errnum: ^c.int) -> cstring ---
gzclearerr :: proc(file: gzFile) ---
adler32 :: proc(adler: uLong, buf: [^]Bytef, len: uInt) -> uLong ---
adler32_z :: proc(adler: uLong, buf: [^]Bytef, len: size_t) -> uLong ---
crc32 :: proc(crc: uLong, buf: [^]Bytef, len: uInt) -> uLong ---
crc32_z :: proc(crc: uLong, buf: [^]Bytef, len: size_t) -> uLong ---
crc32_combine_op :: proc(crc1, crc2, op: uLong) -> uLong ---
gzopen64 :: proc(cstring, cstring) -> gzFile ---
gzseek64 :: proc(gzFile, off64_t, c.int) -> off64_t ---
gztell64 :: proc(gzFile) -> off64_t ---
gzoffset64 :: proc(gzFile) -> off64_t ---
adler32_combine64 :: proc(uLong, uLong, off64_t) -> uLong ---
crc32_combine64 :: proc(uLong, uLong, off64_t) -> uLong ---
crc32_combine_gen64 :: proc(off64_t) -> uLong ---
adler32_combine :: proc(uLong, uLong, off_t) -> uLong ---
crc32_combine :: proc(uLong, uLong, off_t) -> uLong ---
crc32_combine_gen :: proc(off_t) -> uLong ---
zError :: proc(c.int) -> cstring ---
inflateSyncPoint :: proc(z_streamp) -> c.int ---
get_crc_table :: proc() -> [^]crc_t ---
inflateUndermine :: proc(z_streamp, c.int) -> c.int ---
inflateValidate :: proc(z_streamp, c.int) -> c.int ---
inflateCodesUsed :: proc(z_streamp) -> c.ulong ---
inflateResetKeep :: proc(z_streamp) -> c.int ---
deflateResetKeep :: proc(z_streamp) -> c.int ---
}
// Make these private since we create wrappers below passing in version and size
// of the stream structure like zlib.h does
@(private)
@(default_calling_convention="c")
foreign zlib {
deflateInit_ :: proc(strm: z_streamp, level: c.int, version: cstring, stream_size: c.int) -> c.int ---
inflateInit_ :: proc(strm: z_streamp, level: c.int, version: cstring, stream_size: c.int) -> c.int ---
deflateInit2_ :: proc(strm: z_streamp, level, method, windowBits, memLevel, strategy: c.int, version: cstring, stream_size: c.int) -> c.int ---
inflateInit2_ :: proc(strm: z_streamp, windowBits: c.int, version: cstring, stream_size: c.int) -> c.int ---
inflateBackInit_ :: proc(strm: z_streamp, windowBits: c.int, window: [^]c.uchar, version: cstring, stream_size: c.int) -> c.int ---
// see below for explanation
@(link_name="gzgetc")
gzgetc_unique :: proc(file: gzFile) -> c.int ---
}
deflateInit :: #force_inline proc "c" (strm: z_streamp, level: c.int) -> c.int {
return deflateInit_(strm, level, VERSION, c.int(size_of(z_stream)))
}
inflateInit :: #force_inline proc "c" (strm: z_streamp, level: c.int) -> c.int {
return inflateInit_(strm, level, VERSION, c.int(size_of(z_stream)))
}
deflateInit2 :: #force_inline proc "c" (strm: z_streamp, level, method, windowBits, memLevel, strategy: c.int) -> c.int {
return deflateInit2_(strm, level, method, windowBits, memLevel, strategy, VERSION, c.int(size_of(z_stream)))
}
inflateInit2 :: #force_inline proc "c" (strm: z_streamp, windowBits: c.int) -> c.int {
return inflateInit2_(strm, windowBits, VERSION, c.int(size_of(z_stream)))
}
inflateBackInit :: #force_inline proc "c" (strm: z_streamp, windowBits: c.int, window: [^]c.uchar) -> c.int {
return inflateBackInit_(strm, windowBits, window, VERSION, c.int(size_of(z_stream)))
}
// zlib.h redefines gzgetc with a macro and uses (gzgetc)(g) to invoke it from
// inside the same macro (preventing macro expansion), in Odin we give that a
// unique name using link_prefix then implement the body of the macro in our own
// procedure calling the unique named gzgetc instead.
gzgetc :: #force_inline proc(file: gzFile) -> c.int {
if file.have != 0 {
file.have -= 1
file.pos += 1
ch := c.int(file.next[0])
file.next = &file.next[1]
return ch
}
return gzgetc_unique(file)
}