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
@@ -13,7 +13,7 @@
13
13
 
14
14
  #include <system.h>
15
15
 
16
- #ifndef LARGEFILE_SUPPORT
16
+ #if !LARGEFILE_SUPPORT
17
17
  const char *largefile_msg = "library not compiled to support large files.";
18
18
  #endif
19
19
 
@@ -27,13 +27,19 @@ int mspack_version(int entity) {
27
27
  * - added mschmd_header::chunk_cache;
28
28
  */
29
29
  case MSPACK_VER_MSCHMD:
30
+ /* CAB decoder version 1 -> 2 changes:
31
+ * - added MSCABD_PARAM_SALVAGE
32
+ */
33
+ case MSPACK_VER_MSCABD:
34
+ /* OAB decoder version 1 -> 2 changes:
35
+ * - added msoab_decompressor::set_param and MSOABD_PARAM_DECOMPBUF
36
+ */
37
+ case MSPACK_VER_MSOABD:
30
38
  return 2;
31
39
  case MSPACK_VER_LIBRARY:
32
40
  case MSPACK_VER_SYSTEM:
33
- case MSPACK_VER_MSCABD:
34
41
  case MSPACK_VER_MSSZDDD:
35
42
  case MSPACK_VER_MSKWAJD:
36
- case MSPACK_VER_MSOABD:
37
43
  return 1;
38
44
  case MSPACK_VER_MSCABC:
39
45
  case MSPACK_VER_MSCHMC:
@@ -63,7 +69,7 @@ int mspack_valid_system(struct mspack_system *sys) {
63
69
 
64
70
  /* returns the length of a file opened for reading */
65
71
  int mspack_sys_filelen(struct mspack_system *system,
66
- struct mspack_file *file, off_t *length)
72
+ struct mspack_file *file, off_t *length)
67
73
  {
68
74
  off_t current;
69
75
 
@@ -113,7 +119,7 @@ struct mspack_file_p {
113
119
  };
114
120
 
115
121
  static struct mspack_file *msp_open(struct mspack_system *self,
116
- const char *filename, int mode)
122
+ const char *filename, int mode)
117
123
  {
118
124
  struct mspack_file_p *fh;
119
125
  const char *fmode;
@@ -169,7 +175,7 @@ static int msp_seek(struct mspack_file *file, off_t offset, int mode) {
169
175
  case MSPACK_SYS_SEEK_END: mode = SEEK_END; break;
170
176
  default: return -1;
171
177
  }
172
- #ifdef HAVE_FSEEKO
178
+ #if HAVE_FSEEKO
173
179
  return fseeko(self->fh, offset, mode);
174
180
  #else
175
181
  return fseek(self->fh, offset, mode);
@@ -180,7 +186,7 @@ static int msp_seek(struct mspack_file *file, off_t offset, int mode) {
180
186
 
181
187
  static off_t msp_tell(struct mspack_file *file) {
182
188
  struct mspack_file_p *self = (struct mspack_file_p *) file;
183
- #ifdef HAVE_FSEEKO
189
+ #if HAVE_FSEEKO
184
190
  return (self) ? (off_t) ftello(self->fh) : 0;
185
191
  #else
186
192
  return (self) ? (off_t) ftell(self->fh) : 0;
@@ -198,7 +204,7 @@ static void msp_msg(struct mspack_file *file, const char *format, ...) {
198
204
  }
199
205
 
200
206
  static void *msp_alloc(struct mspack_system *self, size_t bytes) {
201
- #ifdef DEBUG
207
+ #if DEBUG
202
208
  /* make uninitialised data obvious */
203
209
  char *buf = malloc(bytes + 8);
204
210
  if (buf) memset(buf, 0xDC, bytes);
@@ -210,7 +216,7 @@ static void *msp_alloc(struct mspack_system *self, size_t bytes) {
210
216
  }
211
217
 
212
218
  static void msp_free(void *buffer) {
213
- #ifdef DEBUG
219
+ #if DEBUG
214
220
  char *buf = buffer;
215
221
  size_t bytes;
216
222
  if (buf) {
@@ -1,5 +1,5 @@
1
1
  /* This file is part of libmspack.
2
- * (C) 2003-2004 Stuart Caie.
2
+ * (C) 2003-2018 Stuart Caie.
3
3
  *
4
4
  * libmspack is free software; you can redistribute it and/or modify it under
5
5
  * the terms of the GNU Lesser General Public License (LGPL) version 2.1
@@ -21,6 +21,9 @@ extern "C" {
21
21
 
22
22
  #include <mspack.h>
23
23
 
24
+ /* assume <string.h> exists */
25
+ #include <string.h>
26
+
24
27
  /* fix for problem with GCC 4 and glibc (thanks to Ville Skytta)
25
28
  * http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=150429
26
29
  */
@@ -28,18 +31,19 @@ extern "C" {
28
31
  # undef read
29
32
  #endif
30
33
 
31
- #ifdef DEBUG
32
- # include <stdio.h>
33
34
  /* Old GCCs don't have __func__, but __FUNCTION__:
34
35
  * http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html
35
36
  */
36
- # if __STDC_VERSION__ < 199901L
37
- # if __GNUC__ >= 2
38
- # define __func__ __FUNCTION__
39
- # else
40
- # define __func__ "<unknown>"
41
- # endif
37
+ #if __STDC_VERSION__ < 199901L
38
+ # if __GNUC__ >= 2
39
+ # define __func__ __FUNCTION__
40
+ # else
41
+ # define __func__ "<unknown>"
42
42
  # endif
43
+ #endif
44
+
45
+ #if DEBUG
46
+ # include <stdio.h>
43
47
  # define D(x) do { printf("%s:%d (%s) ",__FILE__, __LINE__, __func__); \
44
48
  printf x ; fputc('\n', stdout); fflush(stdout);} while (0);
45
49
  #else
@@ -53,70 +57,54 @@ extern "C" {
53
57
  * greater than 2GB is detected, an error message indicating the library
54
58
  * can't support the file should be printed.
55
59
  */
56
- #ifdef HAVE_LIMITS_H
57
- # include <limits.h>
60
+ #if HAVE_INTTYPES_H
61
+ # include <inttypes.h>
62
+ #else
63
+ # define PRId64 "lld"
64
+ # define PRIu64 "llu"
65
+ # define PRId32 "ld"
66
+ # define PRIu32 "lu"
58
67
  #endif
59
68
 
69
+ #include <limits.h>
60
70
  #if ((defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS >= 64) || \
61
71
  (defined(FILESIZEBITS) && FILESIZEBITS >= 64) || \
62
- (defined(SIZEOF_OFF_T) && SIZEOF_OFF_T >= 8) || \
63
- defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE))
64
- # define LARGEFILE_SUPPORT
65
- # define LD "lld"
66
- # define LU "llu"
72
+ defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) || \
73
+ SIZEOF_OFF_T >= 8)
74
+ # define LARGEFILE_SUPPORT 1
75
+ # define LD PRId64
76
+ # define LU PRIu64
67
77
  #else
68
78
  extern const char *largefile_msg;
69
- # define LD "ld"
70
- # define LU "lu"
79
+ # define LD PRId32
80
+ # define LU PRIu32
71
81
  #endif
72
82
 
73
83
  /* endian-neutral reading of little-endian data */
74
- #define __egi32(a,n) ( ((((unsigned char *) a)[n+3]) << 24) | \
75
- ((((unsigned char *) a)[n+2]) << 16) | \
76
- ((((unsigned char *) a)[n+1]) << 8) | \
77
- ((((unsigned char *) a)[n+0])))
78
- #define EndGetI64(a) ((((unsigned long long int) __egi32(a,4)) << 32) | \
79
- ((unsigned int) __egi32(a,0)))
84
+ #define __egi32(a,n) (((unsigned int) ((unsigned char *)(a))[n+3] << 24) | \
85
+ ((unsigned int) ((unsigned char *)(a))[n+2] << 16) | \
86
+ ((unsigned int) ((unsigned char *)(a))[n+1] << 8) | \
87
+ ((unsigned int) ((unsigned char *)(a))[n]))
88
+ #define EndGetI64(a) (((unsigned long long int) __egi32(a,4) << 32) | __egi32(a,0))
80
89
  #define EndGetI32(a) __egi32(a,0)
81
90
  #define EndGetI16(a) ((((a)[1])<<8)|((a)[0]))
82
91
 
83
92
  /* endian-neutral reading of big-endian data */
84
- #define EndGetM32(a) (((((unsigned char *) a)[0]) << 24) | \
85
- ((((unsigned char *) a)[1]) << 16) | \
86
- ((((unsigned char *) a)[2]) << 8) | \
87
- ((((unsigned char *) a)[3])))
93
+ #define EndGetM32(a) (((unsigned int) ((unsigned char *)(a))[0] << 24) | \
94
+ ((unsigned int) ((unsigned char *)(a))[1] << 16) | \
95
+ ((unsigned int) ((unsigned char *)(a))[2] << 8) | \
96
+ ((unsigned int) ((unsigned char *)(a))[3]))
88
97
  #define EndGetM16(a) ((((a)[0])<<8)|((a)[1]))
89
98
 
90
99
  extern struct mspack_system *mspack_default_system;
91
100
 
92
101
  /* returns the length of a file opened for reading */
93
102
  extern int mspack_sys_filelen(struct mspack_system *system,
94
- struct mspack_file *file, off_t *length);
103
+ struct mspack_file *file, off_t *length);
95
104
 
96
105
  /* validates a system structure */
97
106
  extern int mspack_valid_system(struct mspack_system *sys);
98
107
 
99
- #if HAVE_STRINGS_H
100
- # include <strings.h>
101
- #endif
102
-
103
- #if HAVE_STRING_H
104
- # include <string.h>
105
- #endif
106
-
107
- #if HAVE_MEMCMP
108
- # define mspack_memcmp memcmp
109
- #else
110
- /* inline memcmp() */
111
- static inline int mspack_memcmp(const void *s1, const void *s2, size_t n) {
112
- unsigned char *c1 = (unsigned char *) s1;
113
- unsigned char *c2 = (unsigned char *) s2;
114
- if (n == 0) return 0;
115
- while (--n && (*c1 == *c2)) c1++, c2++;
116
- return *c1 - *c2;
117
- }
118
- #endif
119
-
120
108
  #ifdef __cplusplus
121
109
  }
122
110
  #endif
@@ -66,8 +66,8 @@ void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *base)
66
66
  {
67
67
  struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
68
68
  if (self) {
69
- struct mspack_system *sys = self->system;
70
- sys->free(self);
69
+ struct mspack_system *sys = self->system;
70
+ sys->free(self);
71
71
  }
72
72
  }
73
73
 
@@ -77,7 +77,7 @@ void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *base)
77
77
  * opens an SZDD file without decompressing, reads header
78
78
  */
79
79
  static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
80
- const char *filename)
80
+ const char *filename)
81
81
  {
82
82
  struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
83
83
  struct msszddd_header *hdr;
@@ -90,18 +90,18 @@ static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
90
90
  fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ);
91
91
  hdr = (struct msszddd_header *) sys->alloc(sys, sizeof(struct msszddd_header_p));
92
92
  if (fh && hdr) {
93
- ((struct msszddd_header_p *) hdr)->fh = fh;
94
- self->error = szddd_read_headers(sys, fh, hdr);
93
+ ((struct msszddd_header_p *) hdr)->fh = fh;
94
+ self->error = szddd_read_headers(sys, fh, hdr);
95
95
  }
96
96
  else {
97
- if (!fh) self->error = MSPACK_ERR_OPEN;
98
- if (!hdr) self->error = MSPACK_ERR_NOMEMORY;
97
+ if (!fh) self->error = MSPACK_ERR_OPEN;
98
+ if (!hdr) self->error = MSPACK_ERR_NOMEMORY;
99
99
  }
100
100
 
101
101
  if (self->error) {
102
- if (fh) sys->close(fh);
103
- if (hdr) sys->free(hdr);
104
- hdr = NULL;
102
+ if (fh) sys->close(fh);
103
+ sys->free(hdr);
104
+ hdr = NULL;
105
105
  }
106
106
 
107
107
  return hdr;
@@ -113,7 +113,7 @@ static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
113
113
  * closes an SZDD file
114
114
  */
115
115
  static void szddd_close(struct msszdd_decompressor *base,
116
- struct msszddd_header *hdr)
116
+ struct msszddd_header *hdr)
117
117
  {
118
118
  struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
119
119
  struct msszddd_header_p *hdr_p = (struct msszddd_header_p *) hdr;
@@ -142,33 +142,33 @@ static unsigned char szdd_signature_qbasic[8] = {
142
142
  };
143
143
 
144
144
  static int szddd_read_headers(struct mspack_system *sys,
145
- struct mspack_file *fh,
146
- struct msszddd_header *hdr)
145
+ struct mspack_file *fh,
146
+ struct msszddd_header *hdr)
147
147
  {
148
148
  unsigned char buf[8];
149
149
 
150
150
  /* read and check signature */
151
151
  if (sys->read(fh, buf, 8) != 8) return MSPACK_ERR_READ;
152
152
 
153
- if ((mspack_memcmp(buf, szdd_signature_expand, 8) == 0)) {
154
- /* common SZDD */
155
- hdr->format = MSSZDD_FMT_NORMAL;
153
+ if ((memcmp(buf, szdd_signature_expand, 8) == 0)) {
154
+ /* common SZDD */
155
+ hdr->format = MSSZDD_FMT_NORMAL;
156
156
 
157
- /* read the rest of the header */
158
- if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ;
159
- if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT;
160
- hdr->missing_char = buf[1];
161
- hdr->length = EndGetI32(&buf[2]);
157
+ /* read the rest of the header */
158
+ if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ;
159
+ if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT;
160
+ hdr->missing_char = buf[1];
161
+ hdr->length = EndGetI32(&buf[2]);
162
162
  }
163
- else if ((mspack_memcmp(buf, szdd_signature_qbasic, 8) == 0)) {
164
- /* special QBasic SZDD */
165
- hdr->format = MSSZDD_FMT_QBASIC;
166
- if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ;
167
- hdr->missing_char = '\0';
168
- hdr->length = EndGetI32(buf);
163
+ else if ((memcmp(buf, szdd_signature_qbasic, 8) == 0)) {
164
+ /* special QBasic SZDD */
165
+ hdr->format = MSSZDD_FMT_QBASIC;
166
+ if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ;
167
+ hdr->missing_char = '\0';
168
+ hdr->length = EndGetI32(buf);
169
169
  }
170
170
  else {
171
- return MSPACK_ERR_SIGNATURE;
171
+ return MSPACK_ERR_SIGNATURE;
172
172
  }
173
173
  return MSPACK_ERR_OK;
174
174
  }
@@ -179,7 +179,7 @@ static int szddd_read_headers(struct mspack_system *sys,
179
179
  * decompresses an SZDD file
180
180
  */
181
181
  static int szddd_extract(struct msszdd_decompressor *base,
182
- struct msszddd_header *hdr, const char *filename)
182
+ struct msszddd_header *hdr, const char *filename)
183
183
  {
184
184
  struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
185
185
  struct mspack_file *fh, *outfh;
@@ -195,19 +195,19 @@ static int szddd_extract(struct msszdd_decompressor *base,
195
195
  /* seek to the compressed data */
196
196
  data_offset = (hdr->format == MSSZDD_FMT_NORMAL) ? 14 : 12;
197
197
  if (sys->seek(fh, data_offset, MSPACK_SYS_SEEK_START)) {
198
- return self->error = MSPACK_ERR_SEEK;
198
+ return self->error = MSPACK_ERR_SEEK;
199
199
  }
200
200
 
201
201
  /* open file for output */
202
202
  if (!(outfh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) {
203
- return self->error = MSPACK_ERR_OPEN;
203
+ return self->error = MSPACK_ERR_OPEN;
204
204
  }
205
205
 
206
206
  /* decompress the data */
207
207
  self->error = lzss_decompress(sys, fh, outfh, SZDD_INPUT_SIZE,
208
- hdr->format == MSSZDD_FMT_NORMAL
209
- ? LZSS_MODE_EXPAND
210
- : LZSS_MODE_QBASIC);
208
+ hdr->format == MSSZDD_FMT_NORMAL
209
+ ? LZSS_MODE_EXPAND
210
+ : LZSS_MODE_QBASIC);
211
211
 
212
212
  /* close output file */
213
213
  sys->close(outfh);
@@ -221,7 +221,7 @@ static int szddd_extract(struct msszdd_decompressor *base,
221
221
  * unpacks directly from input to output
222
222
  */
223
223
  static int szddd_decompress(struct msszdd_decompressor *base,
224
- const char *input, const char *output)
224
+ const char *input, const char *output)
225
225
  {
226
226
  struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
227
227
  struct msszddd_header *hdr;
@@ -0,0 +1,148 @@
1
+ #! /bin/sh
2
+ # test-driver - basic testsuite driver script.
3
+
4
+ scriptversion=2013-07-13.22; # UTC
5
+
6
+ # Copyright (C) 2011-2014 Free Software Foundation, Inc.
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2, or (at your option)
11
+ # any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ # As a special exception to the GNU General Public License, if you
22
+ # distribute this file as part of a program that contains a
23
+ # configuration script generated by Autoconf, you may include it under
24
+ # the same distribution terms that you use for the rest of that program.
25
+
26
+ # This file is maintained in Automake, please report
27
+ # bugs to <bug-automake@gnu.org> or send patches to
28
+ # <automake-patches@gnu.org>.
29
+
30
+ # Make unconditional expansion of undefined variables an error. This
31
+ # helps a lot in preventing typo-related bugs.
32
+ set -u
33
+
34
+ usage_error ()
35
+ {
36
+ echo "$0: $*" >&2
37
+ print_usage >&2
38
+ exit 2
39
+ }
40
+
41
+ print_usage ()
42
+ {
43
+ cat <<END
44
+ Usage:
45
+ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
46
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
47
+ [--enable-hard-errors={yes|no}] [--]
48
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
49
+ The '--test-name', '--log-file' and '--trs-file' options are mandatory.
50
+ END
51
+ }
52
+
53
+ test_name= # Used for reporting.
54
+ log_file= # Where to save the output of the test script.
55
+ trs_file= # Where to save the metadata of the test run.
56
+ expect_failure=no
57
+ color_tests=no
58
+ enable_hard_errors=yes
59
+ while test $# -gt 0; do
60
+ case $1 in
61
+ --help) print_usage; exit $?;;
62
+ --version) echo "test-driver $scriptversion"; exit $?;;
63
+ --test-name) test_name=$2; shift;;
64
+ --log-file) log_file=$2; shift;;
65
+ --trs-file) trs_file=$2; shift;;
66
+ --color-tests) color_tests=$2; shift;;
67
+ --expect-failure) expect_failure=$2; shift;;
68
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
69
+ --) shift; break;;
70
+ -*) usage_error "invalid option: '$1'";;
71
+ *) break;;
72
+ esac
73
+ shift
74
+ done
75
+
76
+ missing_opts=
77
+ test x"$test_name" = x && missing_opts="$missing_opts --test-name"
78
+ test x"$log_file" = x && missing_opts="$missing_opts --log-file"
79
+ test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
80
+ if test x"$missing_opts" != x; then
81
+ usage_error "the following mandatory options are missing:$missing_opts"
82
+ fi
83
+
84
+ if test $# -eq 0; then
85
+ usage_error "missing argument"
86
+ fi
87
+
88
+ if test $color_tests = yes; then
89
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
90
+ red='' # Red.
91
+ grn='' # Green.
92
+ lgn='' # Light green.
93
+ blu='' # Blue.
94
+ mgn='' # Magenta.
95
+ std='' # No color.
96
+ else
97
+ red= grn= lgn= blu= mgn= std=
98
+ fi
99
+
100
+ do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
101
+ trap "st=129; $do_exit" 1
102
+ trap "st=130; $do_exit" 2
103
+ trap "st=141; $do_exit" 13
104
+ trap "st=143; $do_exit" 15
105
+
106
+ # Test script is run here.
107
+ "$@" >$log_file 2>&1
108
+ estatus=$?
109
+
110
+ if test $enable_hard_errors = no && test $estatus -eq 99; then
111
+ tweaked_estatus=1
112
+ else
113
+ tweaked_estatus=$estatus
114
+ fi
115
+
116
+ case $tweaked_estatus:$expect_failure in
117
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
118
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
119
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
120
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
121
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
122
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
123
+ esac
124
+
125
+ # Report the test outcome and exit status in the logs, so that one can
126
+ # know whether the test passed or failed simply by looking at the '.log'
127
+ # file, without the need of also peaking into the corresponding '.trs'
128
+ # file (automake bug#11814).
129
+ echo "$res $test_name (exit status: $estatus)" >>$log_file
130
+
131
+ # Report outcome to console.
132
+ echo "${col}${res}${std}: $test_name"
133
+
134
+ # Register the test result, and other relevant metadata.
135
+ echo ":test-result: $res" > $trs_file
136
+ echo ":global-test-result: $res" >> $trs_file
137
+ echo ":recheck: $recheck" >> $trs_file
138
+ echo ":copy-in-global-log: $gcopy" >> $trs_file
139
+
140
+ # Local Variables:
141
+ # mode: shell-script
142
+ # sh-indentation: 2
143
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
144
+ # time-stamp-start: "scriptversion="
145
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
146
+ # time-stamp-time-zone: "UTC"
147
+ # time-stamp-end: "; # UTC"
148
+ # End:
Binary file
Binary file
@@ -1,4 +1,5 @@
1
1
  module LibMsPack
2
2
  # Version
3
- VERSION = '0.0.5'
3
+ VERSION = '0.10.1.2'
4
4
  end
5
+
data/lib/libmspack.rb CHANGED
@@ -15,7 +15,7 @@ require 'libmspack/constants'
15
15
 
16
16
  module LibMsPack
17
17
  extend FFI::Library
18
- ffi_lib FFI::Compiler::Loader.find('libmspack')
18
+ ffi_lib FFI::Compiler::Loader.find('mspack')
19
19
 
20
20
  include LibMsPack::Constants
21
21
  include LibMsPack::MsPack
data/libmspack.gemspec CHANGED
@@ -10,24 +10,24 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['davispuh@gmail.com']
11
11
  spec.description = 'A library for compressing and decompressing some loosely related Microsoft compression formats, CAB, CHM, HLP, LIT, KWAJ and SZDD.'
12
12
  spec.summary = 'Ruby wrapper for libmspack.'
13
- spec.homepage = 'https://github.com/davispuh/ruby-libmspack'
13
+ spec.homepage = 'https://gitlab.com/davispuh/ruby-libmspack'
14
14
  spec.licenses = ['UNLICENSE', 'LGPL-2']
15
15
 
16
16
  spec.platform = Gem::Platform::RUBY
17
17
  spec.files = `git ls-files`.split($/)
18
- spec.files += Dir.glob('ext/**/*')
18
+ spec.files += Dir.glob('ext/**/*').reject {|f| %r{/libmspack/(doc|examples|test)/}.match?(f) }
19
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ['lib']
22
22
  spec.extensions << 'ext/Rakefile'
23
23
 
24
24
  spec.add_runtime_dependency 'ffi'
25
- spec.add_runtime_dependency 'ffi-compiler', '> 0.1.3'
25
+ spec.add_runtime_dependency 'ffi-compiler2', '>= 2.0.0'
26
26
 
27
27
  spec.add_development_dependency 'bundler'
28
28
  spec.add_development_dependency 'rake'
29
29
  spec.add_development_dependency 'rspec'
30
30
  spec.add_development_dependency 'yard'
31
31
  spec.add_development_dependency 'simplecov'
32
- spec.add_development_dependency 'svn-downloader'
33
32
  end
33
+
@@ -5,22 +5,23 @@ describe LibMsPack do
5
5
 
6
6
  describe '.MsPackSelfTest' do
7
7
  it 'should pass' do
8
- LibMsPack.SysSelfTest.should eq(LibMsPack::MSPACK_ERR_OK)
8
+ expect(LibMsPack.SysSelfTest).to eq(LibMsPack::MSPACK_ERR_OK)
9
9
  end
10
10
  end
11
11
 
12
12
  describe '.Version' do
13
13
  it 'should return LIBRARY version' do
14
- LibMsPack.Version(LibMsPack::MSPACK_VER_LIBRARY).should eq(1)
14
+ expect(LibMsPack.Version(LibMsPack::MSPACK_VER_LIBRARY)).to eq(1)
15
15
  end
16
16
 
17
17
  it 'should return SYSTEM version' do
18
- LibMsPack.Version(LibMsPack::MSPACK_VER_SYSTEM).should eq(1)
18
+ expect(LibMsPack.Version(LibMsPack::MSPACK_VER_SYSTEM)).to eq(1)
19
19
  end
20
20
 
21
21
  it 'should return MSCHMD version' do
22
- LibMsPack.Version(LibMsPack::MSPACK_VER_MSCHMD).should eq(2)
22
+ expect(LibMsPack.Version(LibMsPack::MSPACK_VER_MSCHMD)).to eq(2)
23
23
  end
24
24
  end
25
25
 
26
26
  end
27
+