zipruby 0.3.4-mswin32 → 0.3.5-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of zipruby might be problematic. Click here for more details.

Files changed (3) hide show
  1. data/README.txt +5 -0
  2. data/zipruby.c +40 -6
  3. metadata +2 -2
data/README.txt CHANGED
@@ -72,6 +72,7 @@ https://rubyforge.org/frs/?group_id=6124
72
72
 
73
73
  Zip::Archive.open('filename.zip', Zip::CREATE) do |ar|
74
74
  # if overwrite: ..., Zip::CREATE | Zip::TRUNC) do |ar|
75
+ # specifies compression level: ..., Zip::CREATE, Zip::BEST_SPEED) do |ar|
75
76
 
76
77
  ar.add_file('foo.txt') # add file to zip archive
77
78
 
@@ -183,6 +184,10 @@ https://rubyforge.org/frs/?group_id=6124
183
184
  Zip::Archive.open_buffer(buf, Zip::CREATE) do |ar|
184
185
  ar.add_buffer('bar.txt', 'zoo');
185
186
  end
187
+
188
+ buf2 = Zip::Archive.open_buffer(Zip::CREATE) do |ar|
189
+ ar.add_buffer('bar.txt', 'zoo');
190
+ end
186
191
 
187
192
  Zip::Archive.open_buffer(buf) do |ar|
188
193
  ar.each do |f|
data/zipruby.c CHANGED
@@ -193,8 +193,10 @@ void Init_zipruby() {
193
193
  Init_zipruby_error();
194
194
  }
195
195
  #include <errno.h>
196
+ #include <zlib.h>
196
197
 
197
198
  #include "zip.h"
199
+ #include "zipint.h"
198
200
  #include "zipruby.h"
199
201
  #include "zipruby_archive.h"
200
202
  #include "zipruby_zip_source_proc.h"
@@ -334,19 +336,28 @@ static void zipruby_archive_free(struct zipruby_archive *p) {
334
336
 
335
337
  /* */
336
338
  static VALUE zipruby_archive_s_open(int argc, VALUE *argv, VALUE self) {
337
- VALUE path, flags;
339
+ VALUE path, flags, comp_level;
338
340
  VALUE archive;
339
341
  struct zipruby_archive *p_archive;
340
342
  int i_flags = 0;
341
343
  int errorp;
344
+ int i_comp_level = Z_BEST_COMPRESSION;
342
345
 
343
- rb_scan_args(argc, argv, "11", &path, &flags);
346
+ rb_scan_args(argc, argv, "12", &path, &flags, &comp_level);
344
347
  Check_Type(path, T_STRING);
345
348
 
346
349
  if (!NIL_P(flags)) {
347
350
  i_flags = NUM2INT(flags);
348
351
  }
349
352
 
353
+ if (!NIL_P(comp_level)) {
354
+ i_comp_level = NUM2INT(comp_level);
355
+
356
+ if (i_comp_level != Z_DEFAULT_COMPRESSION && i_comp_level != Z_NO_COMPRESSION && (i_comp_level < Z_BEST_SPEED || Z_BEST_COMPRESSION < i_comp_level)) {
357
+ rb_raise(rb_eArgError, "Wrong compression level %d", i_comp_level);
358
+ }
359
+ }
360
+
350
361
  archive = rb_funcall(Archive, rb_intern("new"), 0);
351
362
  Data_Get_Struct(archive, struct zipruby_archive, p_archive);
352
363
 
@@ -356,6 +367,7 @@ static VALUE zipruby_archive_s_open(int argc, VALUE *argv, VALUE self) {
356
367
  rb_raise(Error, "Open archive failed - %s: %s", RSTRING_PTR(path), errstr);
357
368
  }
358
369
 
370
+ p_archive->archive->comp_level = i_comp_level;
359
371
  p_archive->path = path;
360
372
  p_archive->flags = i_flags;
361
373
  p_archive->sources = rb_ary_new();
@@ -379,16 +391,19 @@ static VALUE zipruby_archive_s_open(int argc, VALUE *argv, VALUE self) {
379
391
 
380
392
  /* */
381
393
  static VALUE zipruby_archive_s_open_buffer(int argc, VALUE *argv, VALUE self) {
382
- VALUE buffer, flags;
394
+ VALUE buffer, flags, comp_level;
383
395
  VALUE archive;
384
396
  struct zipruby_archive *p_archive;
385
397
  void *data = NULL;
386
398
  int len = 0, i_flags = 0;
387
399
  int errorp;
400
+ int i_comp_level = Z_BEST_COMPRESSION;
401
+ int buffer_is_temporary = 0;
388
402
 
389
- rb_scan_args(argc, argv, "02", &buffer, &flags);
403
+ rb_scan_args(argc, argv, "03", &buffer, &flags, &comp_level);
390
404
 
391
- if (FIXNUM_P(buffer) && NIL_P(flags)) {
405
+ if (FIXNUM_P(buffer) && NIL_P(comp_level)) {
406
+ comp_level = flags;
392
407
  flags = buffer;
393
408
  buffer = Qnil;
394
409
  }
@@ -397,9 +412,20 @@ static VALUE zipruby_archive_s_open_buffer(int argc, VALUE *argv, VALUE self) {
397
412
  i_flags = NUM2INT(flags);
398
413
  }
399
414
 
415
+ if (!NIL_P(comp_level)) {
416
+ i_comp_level = NUM2INT(comp_level);
417
+
418
+ if (i_comp_level != Z_DEFAULT_COMPRESSION && i_comp_level != Z_NO_COMPRESSION && (i_comp_level < Z_BEST_SPEED || Z_BEST_COMPRESSION < i_comp_level)) {
419
+ rb_raise(rb_eArgError, "Wrong compression level %d", i_comp_level);
420
+ }
421
+ }
422
+
400
423
  if (i_flags & ZIP_CREATE) {
401
424
  if (!NIL_P(buffer)) {
402
425
  Check_Type(buffer, T_STRING);
426
+ } else {
427
+ buffer = rb_str_new("", 0);
428
+ buffer_is_temporary = 1;
403
429
  }
404
430
 
405
431
  i_flags = (i_flags | ZIP_TRUNC);
@@ -426,6 +452,7 @@ static VALUE zipruby_archive_s_open_buffer(int argc, VALUE *argv, VALUE self) {
426
452
  rb_raise(Error, "Open archive failed: %s", errstr);
427
453
  }
428
454
 
455
+ p_archive->archive->comp_level = i_comp_level;
429
456
  p_archive->path = rb_str_new2(p_archive->tmpfilnam);
430
457
  p_archive->flags = i_flags;
431
458
  p_archive->buffer = buffer;
@@ -442,7 +469,7 @@ static VALUE zipruby_archive_s_open_buffer(int argc, VALUE *argv, VALUE self) {
442
469
  rb_jump_tag(status);
443
470
  }
444
471
 
445
- return retval;
472
+ return buffer_is_temporary ? buffer : retval;
446
473
  } else {
447
474
  return archive;
448
475
  }
@@ -2262,6 +2289,8 @@ VALUE zipruby_stat_is_directory(VALUE self) {
2262
2289
  return Qfalse;
2263
2290
  }
2264
2291
  }
2292
+ #include <zlib.h>
2293
+
2265
2294
  #include "ruby.h"
2266
2295
  #include "zip.h"
2267
2296
  #include "zipruby.h"
@@ -2299,6 +2328,11 @@ void Init_zipruby_zip() {
2299
2328
  rb_define_const(Zip, "EM_NONE", INT2NUM(ZIP_EM_NONE));
2300
2329
  rb_define_const(Zip, "EM_TRAD_PKWARE", INT2NUM(ZIP_EM_TRAD_PKWARE));
2301
2330
  // XXX: Strong Encryption Header not parsed yet
2331
+
2332
+ rb_define_const(Zip, "NO_COMPRESSION", INT2NUM(Z_NO_COMPRESSION));
2333
+ rb_define_const(Zip, "BEST_SPEED", INT2NUM(Z_BEST_SPEED));
2334
+ rb_define_const(Zip, "BEST_COMPRESSION", INT2NUM(Z_BEST_COMPRESSION));
2335
+ rb_define_const(Zip, "DEFAULT_COMPRESSION", INT2NUM(Z_DEFAULT_COMPRESSION));
2302
2336
  }
2303
2337
  #include <string.h>
2304
2338
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zipruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: mswin32
6
6
  authors:
7
7
  - winebarrel
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-23 00:00:00 +09:00
12
+ date: 2010-01-24 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15