libmspack 0.0.5 → 0.10.1.2

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 (141) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/rake.yml +37 -0
  3. data/.gitignore +2 -0
  4. data/.yardopts +1 -1
  5. data/README.md +1 -1
  6. data/Rakefile +11 -5
  7. data/ext/Rakefile +1 -1
  8. data/ext/libmspack/AUTHORS +1 -0
  9. data/ext/libmspack/ChangeLog +321 -4
  10. data/ext/libmspack/INSTALL +368 -0
  11. data/ext/libmspack/Makefile.am +86 -95
  12. data/ext/libmspack/Makefile.in +1729 -0
  13. data/ext/libmspack/README +30 -30
  14. data/ext/libmspack/acinclude.m4 +99 -0
  15. data/ext/libmspack/aclocal.m4 +1218 -0
  16. data/ext/libmspack/ar-lib +270 -0
  17. data/ext/libmspack/compile +347 -0
  18. data/ext/libmspack/config.guess +1480 -0
  19. data/ext/libmspack/config.h.in +129 -0
  20. data/ext/libmspack/config.sub +1801 -0
  21. data/ext/libmspack/configure +15487 -0
  22. data/ext/libmspack/configure.ac +11 -13
  23. data/ext/libmspack/depcomp +791 -0
  24. data/ext/libmspack/install-sh +508 -0
  25. data/ext/libmspack/libmscabd.la +41 -0
  26. data/ext/libmspack/libmschmd.la +41 -0
  27. data/ext/libmspack/libmspack.la +41 -0
  28. data/ext/libmspack/ltmain.sh +11156 -0
  29. data/ext/libmspack/m4/libtool.m4 +8387 -0
  30. data/ext/libmspack/m4/ltoptions.m4 +437 -0
  31. data/ext/libmspack/m4/ltsugar.m4 +124 -0
  32. data/ext/libmspack/m4/ltversion.m4 +23 -0
  33. data/ext/libmspack/m4/lt~obsolete.m4 +99 -0
  34. data/ext/libmspack/missing +215 -0
  35. data/ext/libmspack/mspack/cab.h +20 -7
  36. data/ext/libmspack/mspack/cabd.c +301 -236
  37. data/ext/libmspack/mspack/chmd.c +304 -319
  38. data/ext/libmspack/mspack/crc32.c +52 -52
  39. data/ext/libmspack/mspack/crc32.h +1 -1
  40. data/ext/libmspack/mspack/kwajd.c +178 -172
  41. data/ext/libmspack/mspack/lzss.h +4 -4
  42. data/ext/libmspack/mspack/lzssd.c +42 -42
  43. data/ext/libmspack/mspack/lzx.h +11 -11
  44. data/ext/libmspack/mspack/lzxd.c +370 -361
  45. data/ext/libmspack/mspack/mspack.h +109 -77
  46. data/ext/libmspack/mspack/mszip.h +6 -6
  47. data/ext/libmspack/mspack/mszipd.c +140 -139
  48. data/ext/libmspack/mspack/oab.h +1 -0
  49. data/ext/libmspack/mspack/oabd.c +71 -73
  50. data/ext/libmspack/mspack/qtm.h +4 -4
  51. data/ext/libmspack/mspack/qtmd.c +118 -117
  52. data/ext/libmspack/mspack/readbits.h +52 -52
  53. data/ext/libmspack/mspack/readhuff.h +61 -61
  54. data/ext/libmspack/mspack/system.c +15 -9
  55. data/ext/libmspack/mspack/system.h +38 -50
  56. data/ext/libmspack/mspack/szddd.c +35 -35
  57. data/ext/libmspack/test-driver +148 -0
  58. data/ext/x86_64-linux/libmspack.so +0 -0
  59. data/ext/x86_64-windows/mspack.dll +0 -0
  60. data/lib/libmspack/version.rb +2 -1
  61. data/lib/libmspack.rb +1 -1
  62. data/libmspack.gemspec +4 -4
  63. data/spec/libmspack_spec.rb +5 -4
  64. metadata +38 -105
  65. data/.travis.yml +0 -5
  66. data/ext/i386-windows/libmspack.dll +0 -0
  67. data/ext/libmspack/cleanup.sh +0 -9
  68. data/ext/libmspack/debian/changelog +0 -6
  69. data/ext/libmspack/debian/control +0 -14
  70. data/ext/libmspack/debian/rules +0 -101
  71. data/ext/libmspack/doc/Doxyfile.in +0 -22
  72. data/ext/libmspack/doc/Makefile.in +0 -14
  73. data/ext/libmspack/doc/szdd_kwaj_format.html +0 -331
  74. data/ext/libmspack/mspack/mspack.def +0 -28
  75. data/ext/libmspack/mspack/qtmc.c +0 -18
  76. data/ext/libmspack/rebuild.sh +0 -8
  77. data/ext/libmspack/test/cabd_c10 +0 -19
  78. data/ext/libmspack/test/cabd_compare +0 -34
  79. data/ext/libmspack/test/cabd_md5.c +0 -161
  80. data/ext/libmspack/test/cabd_memory.c +0 -179
  81. data/ext/libmspack/test/cabd_test.c +0 -386
  82. data/ext/libmspack/test/cabrip.c +0 -81
  83. data/ext/libmspack/test/chmd_compare +0 -38
  84. data/ext/libmspack/test/chmd_find.c +0 -95
  85. data/ext/libmspack/test/chmd_md5.c +0 -67
  86. data/ext/libmspack/test/chmd_order.c +0 -144
  87. data/ext/libmspack/test/chminfo.c +0 -284
  88. data/ext/libmspack/test/chmx.c +0 -216
  89. data/ext/libmspack/test/error.h +0 -22
  90. data/ext/libmspack/test/expand.c +0 -79
  91. data/ext/libmspack/test/md5.c +0 -457
  92. data/ext/libmspack/test/md5.h +0 -165
  93. data/ext/libmspack/test/md5_fh.h +0 -123
  94. data/ext/libmspack/test/msdecompile_md5 +0 -24
  95. data/ext/libmspack/test/msexpand_md5 +0 -39
  96. data/ext/libmspack/test/multifh.c +0 -435
  97. data/ext/libmspack/test/oabx.c +0 -41
  98. data/ext/libmspack/test/test_files/cabd/1.pl +0 -84
  99. data/ext/libmspack/test/test_files/cabd/2.pl +0 -75
  100. data/ext/libmspack/test/test_files/cabd/bad_folderindex.cab +0 -0
  101. data/ext/libmspack/test/test_files/cabd/bad_nofiles.cab +0 -0
  102. data/ext/libmspack/test/test_files/cabd/bad_nofolders.cab +0 -0
  103. data/ext/libmspack/test/test_files/cabd/bad_signature.cab +0 -0
  104. data/ext/libmspack/test/test_files/cabd/multi_basic_pt1.cab +0 -0
  105. data/ext/libmspack/test/test_files/cabd/multi_basic_pt2.cab +0 -0
  106. data/ext/libmspack/test/test_files/cabd/multi_basic_pt3.cab +0 -0
  107. data/ext/libmspack/test/test_files/cabd/multi_basic_pt4.cab +0 -0
  108. data/ext/libmspack/test/test_files/cabd/multi_basic_pt5.cab +0 -0
  109. data/ext/libmspack/test/test_files/cabd/normal_255c_filename.cab +0 -0
  110. data/ext/libmspack/test/test_files/cabd/normal_2files_1folder.cab +0 -0
  111. data/ext/libmspack/test/test_files/cabd/partial_nodata.cab +0 -0
  112. data/ext/libmspack/test/test_files/cabd/partial_nofiles.cab +0 -0
  113. data/ext/libmspack/test/test_files/cabd/partial_nofolder.cab +0 -0
  114. data/ext/libmspack/test/test_files/cabd/partial_shortextheader.cab +0 -0
  115. data/ext/libmspack/test/test_files/cabd/partial_shortfile1.cab +0 -0
  116. data/ext/libmspack/test/test_files/cabd/partial_shortfile2.cab +0 -0
  117. data/ext/libmspack/test/test_files/cabd/partial_shortfolder.cab +0 -0
  118. data/ext/libmspack/test/test_files/cabd/partial_shortheader.cab +0 -0
  119. data/ext/libmspack/test/test_files/cabd/partial_str_nofname.cab +0 -0
  120. data/ext/libmspack/test/test_files/cabd/partial_str_noninfo.cab +0 -0
  121. data/ext/libmspack/test/test_files/cabd/partial_str_nonname.cab +0 -0
  122. data/ext/libmspack/test/test_files/cabd/partial_str_nopinfo.cab +0 -0
  123. data/ext/libmspack/test/test_files/cabd/partial_str_nopname.cab +0 -0
  124. data/ext/libmspack/test/test_files/cabd/partial_str_shortfname.cab +0 -0
  125. data/ext/libmspack/test/test_files/cabd/partial_str_shortninfo.cab +0 -0
  126. data/ext/libmspack/test/test_files/cabd/partial_str_shortnname.cab +0 -0
  127. data/ext/libmspack/test/test_files/cabd/partial_str_shortpinfo.cab +0 -0
  128. data/ext/libmspack/test/test_files/cabd/partial_str_shortpname.cab +0 -0
  129. data/ext/libmspack/test/test_files/cabd/reserve_---.cab +0 -0
  130. data/ext/libmspack/test/test_files/cabd/reserve_--D.cab +0 -0
  131. data/ext/libmspack/test/test_files/cabd/reserve_-F-.cab +0 -0
  132. data/ext/libmspack/test/test_files/cabd/reserve_-FD.cab +0 -0
  133. data/ext/libmspack/test/test_files/cabd/reserve_H--.cab +0 -0
  134. data/ext/libmspack/test/test_files/cabd/reserve_H-D.cab +0 -0
  135. data/ext/libmspack/test/test_files/cabd/reserve_HF-.cab +0 -0
  136. data/ext/libmspack/test/test_files/cabd/reserve_HFD.cab +0 -0
  137. data/ext/libmspack/test/test_files/cabd/search_basic.cab +0 -0
  138. data/ext/libmspack/test/test_files/cabd/search_tricky1.cab +0 -0
  139. data/ext/libmspack/winbuild.sh +0 -26
  140. data/ext/libmspack.h +0 -259
  141. data/ext/x86_64-windows/libmspack.dll +0 -0
@@ -1,216 +0,0 @@
1
- #ifdef HAVE_CONFIG_H
2
- #include <config.h>
3
- #endif
4
-
5
- #include <stdio.h>
6
- #include <stdlib.h>
7
- #include <string.h>
8
- #include <mspack.h>
9
- #include <ctype.h>
10
- #include <sys/stat.h>
11
-
12
- #include <error.h>
13
-
14
- mode_t user_umask;
15
-
16
- #define FILENAME ".test.chmx"
17
-
18
- /**
19
- * Ensures that all directory components in a filepath exist. New directory
20
- * components are created, if necessary.
21
- *
22
- * @param path the filepath to check
23
- * @return non-zero if all directory components in a filepath exist, zero
24
- * if components do not exist and cannot be created
25
- */
26
- static int ensure_filepath(char *path) {
27
- struct stat st_buf;
28
- char *p;
29
- int ok;
30
-
31
- for (p = &path[1]; *p; p++) {
32
- if (*p != '/') continue;
33
- *p = '\0';
34
- ok = (stat(path, &st_buf) == 0) && S_ISDIR(st_buf.st_mode);
35
- if (!ok) ok = (mkdir(path, 0777 & ~user_umask) == 0);
36
- *p = '/';
37
- if (!ok) return 0;
38
- }
39
- return 1;
40
- }
41
-
42
- /**
43
- * Creates a UNIX filename from the internal CAB filename and the given
44
- * parameters.
45
- *
46
- * @param fname the internal CAB filename.
47
- * @param dir a directory path to prepend to the output filename.
48
- * @param lower if non-zero, filename should be made lower-case.
49
- * @param isunix if zero, MS-DOS path seperators are used in the internal
50
- * CAB filename. If non-zero, UNIX path seperators are used.
51
- * @param utf8 if non-zero, the internal CAB filename is encoded in UTF8.
52
- * @return a freshly allocated and created filename, or NULL if there was
53
- * not enough memory.
54
- * @see unix_path_seperators()
55
- */
56
- static char *create_output_name(unsigned char *fname, unsigned char *dir,
57
- int lower, int isunix, int utf8)
58
- {
59
- unsigned char *p, *name, c, *fe, sep, slash;
60
- unsigned int x;
61
-
62
- sep = (isunix) ? '/' : '\\'; /* the path-seperator */
63
- slash = (isunix) ? '\\' : '/'; /* the other slash */
64
-
65
- /* length of filename */
66
- x = strlen((char *) fname);
67
- /* UTF8 worst case scenario: tolower() expands all chars from 1 to 3 bytes */
68
- if (utf8) x *= 3;
69
- /* length of output directory */
70
- if (dir) x += strlen((char *) dir);
71
-
72
- if (!(name = (unsigned char *) malloc(x + 2))) {
73
- fprintf(stderr, "out of memory!\n");
74
- return NULL;
75
- }
76
-
77
- /* start with blank name */
78
- *name = '\0';
79
-
80
- /* add output directory if needed */
81
- if (dir) {
82
- strcpy((char *) name, (char *) dir);
83
- strcat((char *) name, "/");
84
- }
85
-
86
- /* remove leading slashes */
87
- while (*fname == sep) fname++;
88
-
89
- /* copy from fi->filename to new name, converting MS-DOS slashes to UNIX
90
- * slashes as we go. Also lowercases characters if needed.
91
- */
92
- p = &name[strlen((char *)name)];
93
- fe = &fname[strlen((char *)fname)];
94
-
95
- if (utf8) {
96
- /* UTF8 translates two-byte unicode characters into 1, 2 or 3 bytes.
97
- * %000000000xxxxxxx -> %0xxxxxxx
98
- * %00000xxxxxyyyyyy -> %110xxxxx %10yyyyyy
99
- * %xxxxyyyyyyzzzzzz -> %1110xxxx %10yyyyyy %10zzzzzz
100
- *
101
- * Therefore, the inverse is as follows:
102
- * First char:
103
- * 0x00 - 0x7F = one byte char
104
- * 0x80 - 0xBF = invalid
105
- * 0xC0 - 0xDF = 2 byte char (next char only 0x80-0xBF is valid)
106
- * 0xE0 - 0xEF = 3 byte char (next 2 chars only 0x80-0xBF is valid)
107
- * 0xF0 - 0xFF = invalid
108
- */
109
- do {
110
- if (fname >= fe) {
111
- free(name);
112
- return NULL;
113
- }
114
-
115
- /* get next UTF8 char */
116
- if ((c = *fname++) < 0x80) x = c;
117
- else {
118
- if ((c >= 0xC0) && (c < 0xE0)) {
119
- x = (c & 0x1F) << 6;
120
- x |= *fname++ & 0x3F;
121
- }
122
- else if ((c >= 0xE0) && (c < 0xF0)) {
123
- x = (c & 0xF) << 12;
124
- x |= (*fname++ & 0x3F) << 6;
125
- x |= *fname++ & 0x3F;
126
- }
127
- else x = '?';
128
- }
129
-
130
- /* whatever is the path seperator -> '/'
131
- * whatever is the other slash -> '\\'
132
- * otherwise, if lower is set, the lowercase version */
133
- if (x == sep) x = '/';
134
- else if (x == slash) x = '\\';
135
- else if (lower) x = (unsigned int) tolower((int) x);
136
-
137
- /* integer back to UTF8 */
138
- if (x < 0x80) {
139
- *p++ = (unsigned char) x;
140
- }
141
- else if (x < 0x800) {
142
- *p++ = 0xC0 | (x >> 6);
143
- *p++ = 0x80 | (x & 0x3F);
144
- }
145
- else {
146
- *p++ = 0xE0 | (x >> 12);
147
- *p++ = 0x80 | ((x >> 6) & 0x3F);
148
- *p++ = 0x80 | (x & 0x3F);
149
- }
150
- } while (x);
151
- }
152
- else {
153
- /* regular non-utf8 version */
154
- do {
155
- c = *fname++;
156
- if (c == sep) c = '/';
157
- else if (c == slash) c = '\\';
158
- else if (lower) c = (unsigned char) tolower((int) c);
159
- } while ((*p++ = c));
160
- }
161
- return (char *) name;
162
- }
163
-
164
- static int sortfunc(const void *a, const void *b) {
165
- off_t diff =
166
- ((* ((struct mschmd_file **) a))->offset) -
167
- ((* ((struct mschmd_file **) b))->offset);
168
- return (diff < 0) ? -1 : ((diff > 0) ? 1 : 0);
169
- }
170
-
171
- int main(int argc, char *argv[]) {
172
- struct mschm_decompressor *chmd;
173
- struct mschmd_header *chm;
174
- struct mschmd_file *file, **f;
175
- unsigned int numf, i;
176
-
177
- setbuf(stdout, NULL);
178
- setbuf(stderr, NULL);
179
- user_umask = umask(0); umask(user_umask);
180
-
181
- MSPACK_SYS_SELFTEST(i);
182
- if (i) return 0;
183
-
184
- if ((chmd = mspack_create_chm_decompressor(NULL))) {
185
- for (argv++; *argv; argv++) {
186
- printf("%s\n", *argv);
187
- if ((chm = chmd->open(chmd, *argv))) {
188
-
189
- /* build an ordered list of files for maximum extraction speed */
190
- for (numf=0, file=chm->files; file; file = file->next) numf++;
191
- if ((f = (struct mschmd_file **) calloc(numf, sizeof(struct mschmd_file *)))) {
192
- for (i=0, file=chm->files; file; file = file->next) f[i++] = file;
193
- qsort(f, numf, sizeof(struct mschmd_file *), &sortfunc);
194
-
195
- for (i = 0; i < numf; i++) {
196
- char *outname = create_output_name((unsigned char *)f[i]->filename,NULL,0,1,0);
197
- printf("Extracting %s\n", outname);
198
- ensure_filepath(outname);
199
- if (chmd->extract(chmd, f[i], outname)) {
200
- printf("%s: extract error on \"%s\": %s\n",
201
- *argv, f[i]->filename, ERROR(chmd));
202
- }
203
- free(outname);
204
- }
205
- free(f);
206
- }
207
- chmd->close(chmd, chm);
208
- }
209
- else {
210
- printf("%s: can't open -- %s\n", *argv, ERROR(chmd));
211
- }
212
- }
213
- mspack_destroy_chm_decompressor(chmd);
214
- }
215
- return 0;
216
- }
@@ -1,22 +0,0 @@
1
- #define ERROR(base) error_msg(base->last_error(base))
2
-
3
- const char *error_msg(int error) {
4
- static char buf[32];
5
- switch (error) {
6
- case MSPACK_ERR_OK: return "no error";
7
- case MSPACK_ERR_ARGS: return "bad arguments to library function";
8
- case MSPACK_ERR_OPEN: return "error opening file";
9
- case MSPACK_ERR_READ: return "read error";
10
- case MSPACK_ERR_WRITE: return "write error";
11
- case MSPACK_ERR_SEEK: return "seek error";
12
- case MSPACK_ERR_NOMEMORY: return "out of memory";
13
- case MSPACK_ERR_SIGNATURE: return "bad signature";
14
- case MSPACK_ERR_DATAFORMAT: return "error in data format";
15
- case MSPACK_ERR_CHECKSUM: return "checksum error";
16
- case MSPACK_ERR_CRUNCH: return "compression error";
17
- case MSPACK_ERR_DECRUNCH: return "decompression error";
18
- }
19
-
20
- snprintf(buf, sizeof(buf), "unknown error %d", error);
21
- return buf;
22
- }
@@ -1,79 +0,0 @@
1
- /* acts like Microsoft's EXPAND.EXE */
2
- #ifdef HAVE_CONFIG_H
3
- #include <config.h>
4
- #endif
5
-
6
- #include <stdio.h>
7
- #include <stdlib.h>
8
- #include <string.h>
9
-
10
- #include <mspack.h>
11
- #include <error.h>
12
-
13
- int main(int argc, char *argv[]) {
14
- struct msszdd_decompressor *szddd;
15
- struct mskwaj_decompressor *kwajd;
16
- struct msszddd_header *szdd;
17
- struct mskwajd_header *kwaj;
18
- int err;
19
-
20
- if (argc != 3) {
21
- fprintf(stderr, "Usage: %s <input file> <output file>\n", argv[0]);
22
- return 1;
23
- }
24
-
25
- /* if self-test reveals an error */
26
- MSPACK_SYS_SELFTEST(err);
27
- if (err) return 1;
28
-
29
- szddd = mspack_create_szdd_decompressor(NULL);
30
- kwajd = mspack_create_kwaj_decompressor(NULL);
31
-
32
- if (!szddd || !kwajd) {
33
- fprintf(stderr, "can't make either SZDD or KWAJ decompressor\n");
34
- mspack_destroy_szdd_decompressor(szddd);
35
- mspack_destroy_kwaj_decompressor(kwajd);
36
- return 1;
37
- }
38
-
39
- /* open then extract; try SZDD */
40
- if ((szdd = szddd->open(szddd, argv[1]))) {
41
- if (szddd->extract(szddd, szdd, argv[2]) != MSPACK_ERR_OK) {
42
- fprintf(stderr, "%s: SZDD extract error: %s\n", argv[2], ERROR(szddd));
43
- }
44
- szddd->close(szddd, szdd);
45
- }
46
- else {
47
- if (szddd->last_error(szddd) == MSPACK_ERR_SIGNATURE) {
48
- /* try KWAJ */
49
- if ((kwaj = kwajd->open(kwajd, argv[1]))) {
50
- if (kwajd->extract(kwajd, kwaj, argv[2]) != MSPACK_ERR_OK) {
51
- fprintf(stderr, "%s: KWAJ extract error: %s\n", argv[2], ERROR(kwajd));
52
- }
53
- kwajd->close(kwajd, kwaj);
54
- }
55
- else {
56
- fprintf(stderr, "%s: KWAJ open error: %s\n", argv[1], ERROR(kwajd));
57
- }
58
- }
59
- else {
60
- fprintf(stderr, "%s: SZDD open error: %s\n", argv[1], ERROR(szddd));
61
- }
62
- }
63
-
64
- /* decompress in a single step; try KWAJ */
65
- if (kwajd->decompress(kwajd, argv[1], argv[2]) != MSPACK_ERR_OK) {
66
- if (kwajd->last_error(kwajd) == MSPACK_ERR_SIGNATURE) {
67
- if (szddd->decompress(szddd, argv[1], argv[2]) != MSPACK_ERR_OK) {
68
- fprintf(stderr, "%s -> %s: SZDD decompress error: %s\n", argv[1], argv[2], ERROR(szddd));
69
- }
70
- }
71
- else {
72
- fprintf(stderr, "%s -> %s: KWAJ decompress error: %s\n", argv[1], argv[2], ERROR(kwajd));
73
- }
74
- }
75
-
76
- mspack_destroy_szdd_decompressor(szddd);
77
- mspack_destroy_kwaj_decompressor(kwajd);
78
- return 0;
79
- }