rjb 1.3.3-universal-darwin-10 → 1.3.4-universal-darwin-10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/ChangeLog +528 -520
  2. data/ext/rjb.c +31 -8
  3. data/lib/rjbcore.bundle +0 -0
  4. data/samples/unzip.rb +66 -0
  5. data/test/test.rb +11 -1
  6. metadata +3 -2
data/ext/rjb.c CHANGED
@@ -12,10 +12,10 @@
12
12
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
13
  * Lesser General Public License for more details.
14
14
  *
15
- * $Id: rjb.c 159 2010-11-16 16:35:49Z arton $
15
+ * $Id: rjb.c 163 2010-11-22 07:31:27Z arton $
16
16
  */
17
17
 
18
- #define RJB_VERSION "1.3.3"
18
+ #define RJB_VERSION "1.3.4"
19
19
 
20
20
  #include "ruby.h"
21
21
  #include "extconf.h"
@@ -75,6 +75,7 @@ static VALUE jarray2rv(JNIEnv* jenv, jvalue val);
75
75
  static jarray r2objarray(JNIEnv* jenv, VALUE v, const char* cls);
76
76
  static VALUE jv2rv_withprim(JNIEnv* jenv, jobject o);
77
77
  static J2R get_arrayconv(const char* cname, char* depth);
78
+ static jarray r2barray(JNIEnv* jenv, VALUE v, const char* cls);
78
79
 
79
80
  static VALUE rjb;
80
81
  static VALUE jklass;
@@ -748,7 +749,7 @@ static void rv2jstring(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, in
748
749
  return; /* never delete at this time */
749
750
  }
750
751
  }
751
- }
752
+ }
752
753
  (*jenv)->DeleteLocalRef(jenv, jv->l);
753
754
  }
754
755
  }
@@ -814,7 +815,11 @@ static void rv2jobject(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, in
814
815
  }
815
816
  break;
816
817
  case T_STRING:
817
- rv2jstring(jenv, val, jv, NULL, 0);
818
+ if (psig && *psig == '[' && *(psig + 1) == 'B') {
819
+ jv->l = r2barray(jenv, val, NULL);
820
+ } else {
821
+ rv2jstring(jenv, val, jv, NULL, 0);
822
+ }
818
823
  break;
819
824
  case T_FLOAT:
820
825
  arg.d = NUM2DBL(val);
@@ -1115,6 +1120,22 @@ static void rv2jarray(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int
1115
1120
  }
1116
1121
  if (release)
1117
1122
  {
1123
+ if (TYPE(val) == T_STRING && *(psig + 1) == 'B')
1124
+ {
1125
+ // copy array's contents into arg string
1126
+ jsize len = (*jenv)->GetArrayLength(jenv, jv->l);
1127
+ jbyte* p = (*jenv)->GetByteArrayElements(jenv, jv->l, NULL);
1128
+ if (len <= RSTRING_LEN(val))
1129
+ {
1130
+ memcpy(StringValuePtr(val), p, len);
1131
+ }
1132
+ else
1133
+ {
1134
+ VALUE src = rb_str_new(p, len);
1135
+ rb_str_set_len(val, 0);
1136
+ rb_str_append(val, src);
1137
+ }
1138
+ }
1118
1139
  (*jenv)->DeleteLocalRef(jenv, jv->l);
1119
1140
  }
1120
1141
  else
@@ -2099,7 +2120,7 @@ static int check_rtype(JNIEnv* jenv, VALUE v, char* p)
2099
2120
  case T_FLOAT:
2100
2121
  return strchr("DF", *p) != NULL;
2101
2122
  case T_STRING:
2102
- return pcls && !strcmp("java.lang.String", pcls);
2123
+ return pcls && !strcmp("java.lang.String", pcls) || *p == '[' && *(p + 1) == 'B';
2103
2124
  case T_TRUE:
2104
2125
  case T_FALSE:
2105
2126
  return *p == 'Z';
@@ -3057,11 +3078,13 @@ static VALUE rjb_class_forname(int argc, VALUE* argv, VALUE self)
3057
3078
  */
3058
3079
  void Init_rjbcore()
3059
3080
  {
3060
- #if defined(RUBINIUS)
3081
+ #if RJB_RUBY_VERSION_CODE < 190
3082
+ #if defined(RUBINIUS)
3061
3083
  rb_require("iconv");
3062
- #else
3084
+ #else
3063
3085
  rb_protect((VALUE(*)(VALUE))rb_require, (VALUE)"iconv", NULL);
3064
- #endif
3086
+ #endif
3087
+ #endif
3065
3088
  rjb_loaded_classes = rb_hash_new();
3066
3089
  #ifndef RUBINIUS
3067
3090
  OBJ_FREEZE(rjb_loaded_classes);
data/lib/rjbcore.bundle CHANGED
Binary file
data/samples/unzip.rb ADDED
@@ -0,0 +1,66 @@
1
+ require 'rjb'
2
+
3
+ if Rjb::VERSION < '1.3.4'
4
+ $stderr.puts "require rjb-1.3.4 or later, bye."
5
+ exit 1
6
+ end
7
+
8
+ class ZipFile
9
+ include Enumerable
10
+ Zip = Rjb::import('java.util.zip.ZipFile')
11
+ def initialize(file, &block)
12
+ @zipfile = Zip.new(file)
13
+ if block
14
+ yield self
15
+ @zipfile.close
16
+ end
17
+ end
18
+ def close
19
+ @zipfile.close
20
+ end
21
+ def each(&block)
22
+ unless block
23
+ Enumerator.new(self)
24
+ else
25
+ e = @zipfile.entries
26
+ while e.has_more_elements
27
+ yield e.next_element
28
+ end
29
+ end
30
+ end
31
+ def size
32
+ @zipfile.size
33
+ end
34
+ def unzip(ent)
35
+ if String === ent
36
+ ent = @zipfile.entry(ent)
37
+ end
38
+ is = @zipfile.input_stream(ent)
39
+ buff = "\0" * 4096
40
+ File.open(ent.name, 'wb') do |fout|
41
+ loop do
42
+ len = is.read(buff, 0, buff.size)
43
+ break if len < 0
44
+ fout.write(buff[0, len])
45
+ end
46
+ is.close
47
+ end
48
+ end
49
+ end
50
+
51
+ if __FILE__ == $0
52
+ if ARGV.size == 0
53
+ puts 'usage: ruby unzip.rb filename'
54
+ else
55
+ ARGV.each do |file|
56
+ ZipFile.new(file) do |zip|
57
+ zip.each do |f|
58
+ puts "#{f.name}, #{f.size}"
59
+ unless f.directory?
60
+ zip.unzip(f)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
data/test/test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/local/env ruby -Ku
2
2
  # encoding: utf-8
3
- # $Id: test.rb 147 2010-10-23 05:10:33Z arton $
3
+ # $Id: test.rb 161 2010-11-22 07:18:00Z arton $
4
4
 
5
5
  begin
6
6
  require 'rjb'
@@ -750,5 +750,15 @@ class TestRjb < Test::Unit::TestCase
750
750
  jt = import('jp.co.infoseek.hp.arton.rjb.JarTest')
751
751
  assert_equal 'abcd', jt.new.add('ab', 'cd')
752
752
  end
753
+ def test_bothdirection_buffer
754
+ org = "abcdefghijklmn"
755
+ baip = import('java.io.ByteArrayInputStream')
756
+ ba = baip.new(org)
757
+ buff = "\0" * org.size
758
+ assert_equal org.size, ba.read(buff)
759
+ assert_equal -1, ba.read(buff)
760
+ ba.close
761
+ assert_equal org, buff
762
+ end
753
763
  end
754
764
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  platform: universal-darwin-10
6
6
  authors:
7
7
  - arton
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-11-17 00:00:00 +09:00
12
+ date: 2010-11-23 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -39,6 +39,7 @@ files:
39
39
  - lib/rjb.rb
40
40
  - lib/rjbextension.rb
41
41
  - samples/filechooser.rb
42
+ - samples/unzip.rb
42
43
  - test/exttest.rb
43
44
  - test/gctest.rb
44
45
  - test/test.rb