chd 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +30 -0
  3. data/chd.gemspec +29 -0
  4. data/ext/chd.c +1008 -0
  5. data/ext/extconf.rb +60 -0
  6. data/lib/chd/cd.rb +272 -0
  7. data/lib/chd/metadata.rb +196 -0
  8. data/lib/chd/version.rb +4 -0
  9. data/lib/chd.rb +21 -0
  10. data/libchdr/CMakeLists.txt +104 -0
  11. data/libchdr/LICENSE.txt +24 -0
  12. data/libchdr/README.md +7 -0
  13. data/libchdr/deps/lzma-19.00/CMakeLists.txt +33 -0
  14. data/libchdr/deps/lzma-19.00/LICENSE +3 -0
  15. data/libchdr/deps/lzma-19.00/include/7zTypes.h +375 -0
  16. data/libchdr/deps/lzma-19.00/include/Alloc.h +51 -0
  17. data/libchdr/deps/lzma-19.00/include/Bra.h +64 -0
  18. data/libchdr/deps/lzma-19.00/include/Compiler.h +33 -0
  19. data/libchdr/deps/lzma-19.00/include/CpuArch.h +336 -0
  20. data/libchdr/deps/lzma-19.00/include/Delta.h +19 -0
  21. data/libchdr/deps/lzma-19.00/include/LzFind.h +121 -0
  22. data/libchdr/deps/lzma-19.00/include/LzHash.h +57 -0
  23. data/libchdr/deps/lzma-19.00/include/Lzma86.h +111 -0
  24. data/libchdr/deps/lzma-19.00/include/LzmaDec.h +234 -0
  25. data/libchdr/deps/lzma-19.00/include/LzmaEnc.h +76 -0
  26. data/libchdr/deps/lzma-19.00/include/LzmaLib.h +131 -0
  27. data/libchdr/deps/lzma-19.00/include/Precomp.h +10 -0
  28. data/libchdr/deps/lzma-19.00/include/Sort.h +18 -0
  29. data/libchdr/deps/lzma-19.00/lzma-history.txt +446 -0
  30. data/libchdr/deps/lzma-19.00/lzma.txt +328 -0
  31. data/libchdr/deps/lzma-19.00/lzma.vcxproj +543 -0
  32. data/libchdr/deps/lzma-19.00/lzma.vcxproj.filters +17 -0
  33. data/libchdr/deps/lzma-19.00/src/Alloc.c +455 -0
  34. data/libchdr/deps/lzma-19.00/src/Bra86.c +82 -0
  35. data/libchdr/deps/lzma-19.00/src/BraIA64.c +53 -0
  36. data/libchdr/deps/lzma-19.00/src/CpuArch.c +218 -0
  37. data/libchdr/deps/lzma-19.00/src/Delta.c +64 -0
  38. data/libchdr/deps/lzma-19.00/src/LzFind.c +1127 -0
  39. data/libchdr/deps/lzma-19.00/src/Lzma86Dec.c +54 -0
  40. data/libchdr/deps/lzma-19.00/src/LzmaDec.c +1185 -0
  41. data/libchdr/deps/lzma-19.00/src/LzmaEnc.c +1330 -0
  42. data/libchdr/deps/lzma-19.00/src/Sort.c +141 -0
  43. data/libchdr/deps/zlib-1.2.11/CMakeLists.txt +29 -0
  44. data/libchdr/deps/zlib-1.2.11/ChangeLog +1515 -0
  45. data/libchdr/deps/zlib-1.2.11/FAQ +368 -0
  46. data/libchdr/deps/zlib-1.2.11/INDEX +68 -0
  47. data/libchdr/deps/zlib-1.2.11/Makefile +5 -0
  48. data/libchdr/deps/zlib-1.2.11/Makefile.in +410 -0
  49. data/libchdr/deps/zlib-1.2.11/README +115 -0
  50. data/libchdr/deps/zlib-1.2.11/adler32.c +186 -0
  51. data/libchdr/deps/zlib-1.2.11/compress.c +86 -0
  52. data/libchdr/deps/zlib-1.2.11/configure +921 -0
  53. data/libchdr/deps/zlib-1.2.11/crc32.c +442 -0
  54. data/libchdr/deps/zlib-1.2.11/crc32.h +441 -0
  55. data/libchdr/deps/zlib-1.2.11/deflate.c +2163 -0
  56. data/libchdr/deps/zlib-1.2.11/deflate.h +349 -0
  57. data/libchdr/deps/zlib-1.2.11/doc/algorithm.txt +209 -0
  58. data/libchdr/deps/zlib-1.2.11/doc/rfc1950.txt +619 -0
  59. data/libchdr/deps/zlib-1.2.11/doc/rfc1951.txt +955 -0
  60. data/libchdr/deps/zlib-1.2.11/doc/rfc1952.txt +675 -0
  61. data/libchdr/deps/zlib-1.2.11/doc/txtvsbin.txt +107 -0
  62. data/libchdr/deps/zlib-1.2.11/gzclose.c +25 -0
  63. data/libchdr/deps/zlib-1.2.11/gzguts.h +218 -0
  64. data/libchdr/deps/zlib-1.2.11/gzlib.c +637 -0
  65. data/libchdr/deps/zlib-1.2.11/gzread.c +654 -0
  66. data/libchdr/deps/zlib-1.2.11/gzwrite.c +665 -0
  67. data/libchdr/deps/zlib-1.2.11/infback.c +640 -0
  68. data/libchdr/deps/zlib-1.2.11/inffast.c +323 -0
  69. data/libchdr/deps/zlib-1.2.11/inffast.h +11 -0
  70. data/libchdr/deps/zlib-1.2.11/inffixed.h +94 -0
  71. data/libchdr/deps/zlib-1.2.11/inflate.c +1561 -0
  72. data/libchdr/deps/zlib-1.2.11/inflate.h +125 -0
  73. data/libchdr/deps/zlib-1.2.11/inftrees.c +304 -0
  74. data/libchdr/deps/zlib-1.2.11/inftrees.h +62 -0
  75. data/libchdr/deps/zlib-1.2.11/make_vms.com +867 -0
  76. data/libchdr/deps/zlib-1.2.11/treebuild.xml +116 -0
  77. data/libchdr/deps/zlib-1.2.11/trees.c +1203 -0
  78. data/libchdr/deps/zlib-1.2.11/trees.h +128 -0
  79. data/libchdr/deps/zlib-1.2.11/uncompr.c +93 -0
  80. data/libchdr/deps/zlib-1.2.11/zconf.h +534 -0
  81. data/libchdr/deps/zlib-1.2.11/zconf.h.cmakein +536 -0
  82. data/libchdr/deps/zlib-1.2.11/zconf.h.in +534 -0
  83. data/libchdr/deps/zlib-1.2.11/zlib.3 +149 -0
  84. data/libchdr/deps/zlib-1.2.11/zlib.3.pdf +0 -0
  85. data/libchdr/deps/zlib-1.2.11/zlib.h +1912 -0
  86. data/libchdr/deps/zlib-1.2.11/zlib.map +94 -0
  87. data/libchdr/deps/zlib-1.2.11/zlib.pc.cmakein +13 -0
  88. data/libchdr/deps/zlib-1.2.11/zlib.pc.in +13 -0
  89. data/libchdr/deps/zlib-1.2.11/zlib2ansi +152 -0
  90. data/libchdr/deps/zlib-1.2.11/zutil.c +325 -0
  91. data/libchdr/deps/zlib-1.2.11/zutil.h +271 -0
  92. data/libchdr/include/dr_libs/dr_flac.h +12280 -0
  93. data/libchdr/include/libchdr/bitstream.h +43 -0
  94. data/libchdr/include/libchdr/cdrom.h +110 -0
  95. data/libchdr/include/libchdr/chd.h +427 -0
  96. data/libchdr/include/libchdr/chdconfig.h +10 -0
  97. data/libchdr/include/libchdr/coretypes.h +60 -0
  98. data/libchdr/include/libchdr/flac.h +50 -0
  99. data/libchdr/include/libchdr/huffman.h +90 -0
  100. data/libchdr/pkg-config.pc.in +10 -0
  101. data/libchdr/src/libchdr_bitstream.c +125 -0
  102. data/libchdr/src/libchdr_cdrom.c +415 -0
  103. data/libchdr/src/libchdr_chd.c +2744 -0
  104. data/libchdr/src/libchdr_flac.c +302 -0
  105. data/libchdr/src/libchdr_huffman.c +545 -0
  106. data/libchdr/src/link.T +5 -0
  107. data/libchdr/tests/CMakeLists.txt +2 -0
  108. data/libchdr/tests/benchmark.c +52 -0
  109. metadata +183 -0
@@ -0,0 +1,94 @@
1
+ ZLIB_1.2.0 {
2
+ global:
3
+ compressBound;
4
+ deflateBound;
5
+ inflateBack;
6
+ inflateBackEnd;
7
+ inflateBackInit_;
8
+ inflateCopy;
9
+ local:
10
+ deflate_copyright;
11
+ inflate_copyright;
12
+ inflate_fast;
13
+ inflate_table;
14
+ zcalloc;
15
+ zcfree;
16
+ z_errmsg;
17
+ gz_error;
18
+ gz_intmax;
19
+ _*;
20
+ };
21
+
22
+ ZLIB_1.2.0.2 {
23
+ gzclearerr;
24
+ gzungetc;
25
+ zlibCompileFlags;
26
+ } ZLIB_1.2.0;
27
+
28
+ ZLIB_1.2.0.8 {
29
+ deflatePrime;
30
+ } ZLIB_1.2.0.2;
31
+
32
+ ZLIB_1.2.2 {
33
+ adler32_combine;
34
+ crc32_combine;
35
+ deflateSetHeader;
36
+ inflateGetHeader;
37
+ } ZLIB_1.2.0.8;
38
+
39
+ ZLIB_1.2.2.3 {
40
+ deflateTune;
41
+ gzdirect;
42
+ } ZLIB_1.2.2;
43
+
44
+ ZLIB_1.2.2.4 {
45
+ inflatePrime;
46
+ } ZLIB_1.2.2.3;
47
+
48
+ ZLIB_1.2.3.3 {
49
+ adler32_combine64;
50
+ crc32_combine64;
51
+ gzopen64;
52
+ gzseek64;
53
+ gztell64;
54
+ inflateUndermine;
55
+ } ZLIB_1.2.2.4;
56
+
57
+ ZLIB_1.2.3.4 {
58
+ inflateReset2;
59
+ inflateMark;
60
+ } ZLIB_1.2.3.3;
61
+
62
+ ZLIB_1.2.3.5 {
63
+ gzbuffer;
64
+ gzoffset;
65
+ gzoffset64;
66
+ gzclose_r;
67
+ gzclose_w;
68
+ } ZLIB_1.2.3.4;
69
+
70
+ ZLIB_1.2.5.1 {
71
+ deflatePending;
72
+ } ZLIB_1.2.3.5;
73
+
74
+ ZLIB_1.2.5.2 {
75
+ deflateResetKeep;
76
+ gzgetc_;
77
+ inflateResetKeep;
78
+ } ZLIB_1.2.5.1;
79
+
80
+ ZLIB_1.2.7.1 {
81
+ inflateGetDictionary;
82
+ gzvprintf;
83
+ } ZLIB_1.2.5.2;
84
+
85
+ ZLIB_1.2.9 {
86
+ inflateCodesUsed;
87
+ inflateValidate;
88
+ uncompress2;
89
+ gzfread;
90
+ gzfwrite;
91
+ deflateGetDictionary;
92
+ adler32_z;
93
+ crc32_z;
94
+ } ZLIB_1.2.7.1;
@@ -0,0 +1,13 @@
1
+ prefix=@CMAKE_INSTALL_PREFIX@
2
+ exec_prefix=@CMAKE_INSTALL_PREFIX@
3
+ libdir=@INSTALL_LIB_DIR@
4
+ sharedlibdir=@INSTALL_LIB_DIR@
5
+ includedir=@INSTALL_INC_DIR@
6
+
7
+ Name: zlib
8
+ Description: zlib compression library
9
+ Version: @VERSION@
10
+
11
+ Requires:
12
+ Libs: -L${libdir} -L${sharedlibdir} -lz
13
+ Cflags: -I${includedir}
@@ -0,0 +1,13 @@
1
+ prefix=@prefix@
2
+ exec_prefix=@exec_prefix@
3
+ libdir=@libdir@
4
+ sharedlibdir=@sharedlibdir@
5
+ includedir=@includedir@
6
+
7
+ Name: zlib
8
+ Description: zlib compression library
9
+ Version: @VERSION@
10
+
11
+ Requires:
12
+ Libs: -L${libdir} -L${sharedlibdir} -lz
13
+ Cflags: -I${includedir}
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/perl
2
+
3
+ # Transform K&R C function definitions into ANSI equivalent.
4
+ #
5
+ # Author: Paul Marquess
6
+ # Version: 1.0
7
+ # Date: 3 October 2006
8
+
9
+ # TODO
10
+ #
11
+ # Asumes no function pointer parameters. unless they are typedefed.
12
+ # Assumes no literal strings that look like function definitions
13
+ # Assumes functions start at the beginning of a line
14
+
15
+ use strict;
16
+ use warnings;
17
+
18
+ local $/;
19
+ $_ = <>;
20
+
21
+ my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments
22
+
23
+ my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ;
24
+ my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ;
25
+ my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;
26
+
27
+
28
+ while (s/^
29
+ ( # Start $1
30
+ ( # Start $2
31
+ .*? # Minimal eat content
32
+ ( ^ \w [\w\s\*]+ ) # $3 -- function name
33
+ \s* # optional whitespace
34
+ ) # $2 - Matched up to before parameter list
35
+
36
+ \( \s* # Literal "(" + optional whitespace
37
+ ( [^\)]+ ) # $4 - one or more anythings except ")"
38
+ \s* \) # optional whitespace surrounding a Literal ")"
39
+
40
+ ( (?: $dList )+ ) # $5
41
+
42
+ $sp ^ { # literal "{" at start of line
43
+ ) # Remember to $1
44
+ //xsom
45
+ )
46
+ {
47
+ my $all = $1 ;
48
+ my $prefix = $2;
49
+ my $param_list = $4 ;
50
+ my $params = $5;
51
+
52
+ StripComments($params);
53
+ StripComments($param_list);
54
+ $param_list =~ s/^\s+//;
55
+ $param_list =~ s/\s+$//;
56
+
57
+ my $i = 0 ;
58
+ my %pList = map { $_ => $i++ }
59
+ split /\s*,\s*/, $param_list;
60
+ my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ;
61
+
62
+ my @params = split /\s*;\s*/, $params;
63
+ my @outParams = ();
64
+ foreach my $p (@params)
65
+ {
66
+ if ($p =~ /,/)
67
+ {
68
+ my @bits = split /\s*,\s*/, $p;
69
+ my $first = shift @bits;
70
+ $first =~ s/^\s*//;
71
+ push @outParams, $first;
72
+ $first =~ /^(\w+\s*)/;
73
+ my $type = $1 ;
74
+ push @outParams, map { $type . $_ } @bits;
75
+ }
76
+ else
77
+ {
78
+ $p =~ s/^\s+//;
79
+ push @outParams, $p;
80
+ }
81
+ }
82
+
83
+
84
+ my %tmp = map { /$pMatch/; $_ => $pList{$1} }
85
+ @outParams ;
86
+
87
+ @outParams = map { " $_" }
88
+ sort { $tmp{$a} <=> $tmp{$b} }
89
+ @outParams ;
90
+
91
+ print $prefix ;
92
+ print "(\n" . join(",\n", @outParams) . ")\n";
93
+ print "{" ;
94
+
95
+ }
96
+
97
+ # Output any trailing code.
98
+ print ;
99
+ exit 0;
100
+
101
+
102
+ sub StripComments
103
+ {
104
+
105
+ no warnings;
106
+
107
+ # Strip C & C++ coments
108
+ # From the perlfaq
109
+ $_[0] =~
110
+
111
+ s{
112
+ /\* ## Start of /* ... */ comment
113
+ [^*]*\*+ ## Non-* followed by 1-or-more *'s
114
+ (
115
+ [^/*][^*]*\*+
116
+ )* ## 0-or-more things which don't start with /
117
+ ## but do end with '*'
118
+ / ## End of /* ... */ comment
119
+
120
+ | ## OR C++ Comment
121
+ // ## Start of C++ comment //
122
+ [^\n]* ## followed by 0-or-more non end of line characters
123
+
124
+ | ## OR various things which aren't comments:
125
+
126
+ (
127
+ " ## Start of " ... " string
128
+ (
129
+ \\. ## Escaped char
130
+ | ## OR
131
+ [^"\\] ## Non "\
132
+ )*
133
+ " ## End of " ... " string
134
+
135
+ | ## OR
136
+
137
+ ' ## Start of ' ... ' string
138
+ (
139
+ \\. ## Escaped char
140
+ | ## OR
141
+ [^'\\] ## Non '\
142
+ )*
143
+ ' ## End of ' ... ' string
144
+
145
+ | ## OR
146
+
147
+ . ## Anything other char
148
+ [^/"'\\]* ## Chars which doesn't start a comment, string or escape
149
+ )
150
+ }{$2}gxs;
151
+
152
+ }
@@ -0,0 +1,325 @@
1
+ /* zutil.c -- target dependent utility functions for the compression library
2
+ * Copyright (C) 1995-2017 Jean-loup Gailly
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ */
5
+
6
+ /* @(#) $Id$ */
7
+
8
+ #include "zutil.h"
9
+ #ifndef Z_SOLO
10
+ # include "gzguts.h"
11
+ #endif
12
+
13
+ z_const char * const z_errmsg[10] = {
14
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
15
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
16
+ (z_const char *)"", /* Z_OK 0 */
17
+ (z_const char *)"file error", /* Z_ERRNO (-1) */
18
+ (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */
19
+ (z_const char *)"data error", /* Z_DATA_ERROR (-3) */
20
+ (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
21
+ (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */
22
+ (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
23
+ (z_const char *)""
24
+ };
25
+
26
+
27
+ const char * ZEXPORT zlibVersion()
28
+ {
29
+ return ZLIB_VERSION;
30
+ }
31
+
32
+ uLong ZEXPORT zlibCompileFlags()
33
+ {
34
+ uLong flags;
35
+
36
+ flags = 0;
37
+ switch ((int)(sizeof(uInt))) {
38
+ case 2: break;
39
+ case 4: flags += 1; break;
40
+ case 8: flags += 2; break;
41
+ default: flags += 3;
42
+ }
43
+ switch ((int)(sizeof(uLong))) {
44
+ case 2: break;
45
+ case 4: flags += 1 << 2; break;
46
+ case 8: flags += 2 << 2; break;
47
+ default: flags += 3 << 2;
48
+ }
49
+ switch ((int)(sizeof(voidpf))) {
50
+ case 2: break;
51
+ case 4: flags += 1 << 4; break;
52
+ case 8: flags += 2 << 4; break;
53
+ default: flags += 3 << 4;
54
+ }
55
+ switch ((int)(sizeof(z_off_t))) {
56
+ case 2: break;
57
+ case 4: flags += 1 << 6; break;
58
+ case 8: flags += 2 << 6; break;
59
+ default: flags += 3 << 6;
60
+ }
61
+ #ifdef ZLIB_DEBUG
62
+ flags += 1 << 8;
63
+ #endif
64
+ #if defined(ASMV) || defined(ASMINF)
65
+ flags += 1 << 9;
66
+ #endif
67
+ #ifdef ZLIB_WINAPI
68
+ flags += 1 << 10;
69
+ #endif
70
+ #ifdef BUILDFIXED
71
+ flags += 1 << 12;
72
+ #endif
73
+ #ifdef DYNAMIC_CRC_TABLE
74
+ flags += 1 << 13;
75
+ #endif
76
+ #ifdef NO_GZCOMPRESS
77
+ flags += 1L << 16;
78
+ #endif
79
+ #ifdef NO_GZIP
80
+ flags += 1L << 17;
81
+ #endif
82
+ #ifdef PKZIP_BUG_WORKAROUND
83
+ flags += 1L << 20;
84
+ #endif
85
+ #ifdef FASTEST
86
+ flags += 1L << 21;
87
+ #endif
88
+ #if defined(STDC) || defined(Z_HAVE_STDARG_H)
89
+ # ifdef NO_vsnprintf
90
+ flags += 1L << 25;
91
+ # ifdef HAS_vsprintf_void
92
+ flags += 1L << 26;
93
+ # endif
94
+ # else
95
+ # ifdef HAS_vsnprintf_void
96
+ flags += 1L << 26;
97
+ # endif
98
+ # endif
99
+ #else
100
+ flags += 1L << 24;
101
+ # ifdef NO_snprintf
102
+ flags += 1L << 25;
103
+ # ifdef HAS_sprintf_void
104
+ flags += 1L << 26;
105
+ # endif
106
+ # else
107
+ # ifdef HAS_snprintf_void
108
+ flags += 1L << 26;
109
+ # endif
110
+ # endif
111
+ #endif
112
+ return flags;
113
+ }
114
+
115
+ #ifdef ZLIB_DEBUG
116
+ #include <stdlib.h>
117
+ # ifndef verbose
118
+ # define verbose 0
119
+ # endif
120
+ int ZLIB_INTERNAL z_verbose = verbose;
121
+
122
+ void ZLIB_INTERNAL z_error (m)
123
+ char *m;
124
+ {
125
+ fprintf(stderr, "%s\n", m);
126
+ exit(1);
127
+ }
128
+ #endif
129
+
130
+ /* exported to allow conversion of error code to string for compress() and
131
+ * uncompress()
132
+ */
133
+ const char * ZEXPORT zError(err)
134
+ int err;
135
+ {
136
+ return ERR_MSG(err);
137
+ }
138
+
139
+ #if defined(_WIN32_WCE)
140
+ /* The Microsoft C Run-Time Library for Windows CE doesn't have
141
+ * errno. We define it as a global variable to simplify porting.
142
+ * Its value is always 0 and should not be used.
143
+ */
144
+ int errno = 0;
145
+ #endif
146
+
147
+ #ifndef HAVE_MEMCPY
148
+
149
+ void ZLIB_INTERNAL zmemcpy(dest, source, len)
150
+ Bytef* dest;
151
+ const Bytef* source;
152
+ uInt len;
153
+ {
154
+ if (len == 0) return;
155
+ do {
156
+ *dest++ = *source++; /* ??? to be unrolled */
157
+ } while (--len != 0);
158
+ }
159
+
160
+ int ZLIB_INTERNAL zmemcmp(s1, s2, len)
161
+ const Bytef* s1;
162
+ const Bytef* s2;
163
+ uInt len;
164
+ {
165
+ uInt j;
166
+
167
+ for (j = 0; j < len; j++) {
168
+ if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
169
+ }
170
+ return 0;
171
+ }
172
+
173
+ void ZLIB_INTERNAL zmemzero(dest, len)
174
+ Bytef* dest;
175
+ uInt len;
176
+ {
177
+ if (len == 0) return;
178
+ do {
179
+ *dest++ = 0; /* ??? to be unrolled */
180
+ } while (--len != 0);
181
+ }
182
+ #endif
183
+
184
+ #ifndef Z_SOLO
185
+
186
+ #ifdef SYS16BIT
187
+
188
+ #ifdef __TURBOC__
189
+ /* Turbo C in 16-bit mode */
190
+
191
+ # define MY_ZCALLOC
192
+
193
+ /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
194
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
195
+ * must fix the pointer. Warning: the pointer must be put back to its
196
+ * original form in order to free it, use zcfree().
197
+ */
198
+
199
+ #define MAX_PTR 10
200
+ /* 10*64K = 640K */
201
+
202
+ local int next_ptr = 0;
203
+
204
+ typedef struct ptr_table_s {
205
+ voidpf org_ptr;
206
+ voidpf new_ptr;
207
+ } ptr_table;
208
+
209
+ local ptr_table table[MAX_PTR];
210
+ /* This table is used to remember the original form of pointers
211
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
212
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
213
+ * protected from concurrent access. This hack doesn't work anyway on
214
+ * a protected system like OS/2. Use Microsoft C instead.
215
+ */
216
+
217
+ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
218
+ {
219
+ voidpf buf;
220
+ ulg bsize = (ulg)items*size;
221
+
222
+ (void)opaque;
223
+
224
+ /* If we allocate less than 65520 bytes, we assume that farmalloc
225
+ * will return a usable pointer which doesn't have to be normalized.
226
+ */
227
+ if (bsize < 65520L) {
228
+ buf = farmalloc(bsize);
229
+ if (*(ush*)&buf != 0) return buf;
230
+ } else {
231
+ buf = farmalloc(bsize + 16L);
232
+ }
233
+ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
234
+ table[next_ptr].org_ptr = buf;
235
+
236
+ /* Normalize the pointer to seg:0 */
237
+ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
238
+ *(ush*)&buf = 0;
239
+ table[next_ptr++].new_ptr = buf;
240
+ return buf;
241
+ }
242
+
243
+ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
244
+ {
245
+ int n;
246
+
247
+ (void)opaque;
248
+
249
+ if (*(ush*)&ptr != 0) { /* object < 64K */
250
+ farfree(ptr);
251
+ return;
252
+ }
253
+ /* Find the original pointer */
254
+ for (n = 0; n < next_ptr; n++) {
255
+ if (ptr != table[n].new_ptr) continue;
256
+
257
+ farfree(table[n].org_ptr);
258
+ while (++n < next_ptr) {
259
+ table[n-1] = table[n];
260
+ }
261
+ next_ptr--;
262
+ return;
263
+ }
264
+ Assert(0, "zcfree: ptr not found");
265
+ }
266
+
267
+ #endif /* __TURBOC__ */
268
+
269
+
270
+ #ifdef M_I86
271
+ /* Microsoft C in 16-bit mode */
272
+
273
+ # define MY_ZCALLOC
274
+
275
+ #if (!defined(_MSC_VER) || (_MSC_VER <= 600))
276
+ # define _halloc halloc
277
+ # define _hfree hfree
278
+ #endif
279
+
280
+ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
281
+ {
282
+ (void)opaque;
283
+ return _halloc((long)items, size);
284
+ }
285
+
286
+ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
287
+ {
288
+ (void)opaque;
289
+ _hfree(ptr);
290
+ }
291
+
292
+ #endif /* M_I86 */
293
+
294
+ #endif /* SYS16BIT */
295
+
296
+
297
+ #ifndef MY_ZCALLOC /* Any system without a special alloc function */
298
+
299
+ #ifndef STDC
300
+ extern voidp malloc OF((uInt size));
301
+ extern voidp calloc OF((uInt items, uInt size));
302
+ extern void free OF((voidpf ptr));
303
+ #endif
304
+
305
+ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
306
+ voidpf opaque;
307
+ unsigned items;
308
+ unsigned size;
309
+ {
310
+ (void)opaque;
311
+ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
312
+ (voidpf)calloc(items, size);
313
+ }
314
+
315
+ void ZLIB_INTERNAL zcfree (opaque, ptr)
316
+ voidpf opaque;
317
+ voidpf ptr;
318
+ {
319
+ (void)opaque;
320
+ free(ptr);
321
+ }
322
+
323
+ #endif /* MY_ZCALLOC */
324
+
325
+ #endif /* !Z_SOLO */