rjb 1.3.2-x86-mswin32-60 → 1.3.4-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
data/ext/load.c CHANGED
@@ -12,7 +12,7 @@
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: load.c 148 2010-10-23 08:38:44Z arton $
15
+ * $Id: load.c 159 2010-11-16 16:35:49Z arton $
16
16
  */
17
17
 
18
18
  #include <stdlib.h>
@@ -131,10 +131,21 @@ static int open_jvm(char* libpath)
131
131
  #endif
132
132
  return 1;
133
133
  }
134
+
135
+ #if defined(__APPLE__) && defined(__MACH__)
136
+ static int file_exist(const char* dir, const char* file)
137
+ {
138
+ VALUE path = rb_funcall(rb_cFile, rb_intern("join"), 2,
139
+ rb_str_new2(dir), rb_str_new2(file));
140
+ VALUE ret = rb_funcall(rb_cFile, rb_intern("exist?"), 1, path);
141
+ return RTEST(ret);
142
+ }
143
+ #endif
144
+
134
145
  /*
135
146
  * not completed, only valid under some circumstances.
136
147
  */
137
- static int load_jvm(char* jvmtype)
148
+ static int load_jvm(const char* jvmtype)
138
149
  {
139
150
  char* libpath;
140
151
  char* java_home;
@@ -150,7 +161,7 @@ static int load_jvm(char* jvmtype)
150
161
  {
151
162
  if (strlen(jh) > HOME_NAME_LEN)
152
163
  {
153
- int len = strlen(jh);
164
+ size_t len = strlen(jh);
154
165
  char* p = ALLOCA_N(char, len + 8);
155
166
  jh = strcpy(p, jh);
156
167
  if (*(jh + len - 1) == '/')
@@ -163,6 +174,10 @@ static int load_jvm(char* jvmtype)
163
174
  strcpy(p + len, "/..");
164
175
  }
165
176
  }
177
+ if (!jvmtype && !file_exist(jh, "JavaVM"))
178
+ {
179
+ jh = DEFAULT_HOME;
180
+ }
166
181
  }
167
182
  #endif
168
183
  if (!jh)
@@ -208,7 +223,7 @@ static int load_bridge(JNIEnv* jenv)
208
223
  JNINativeMethod nmethod[1];
209
224
  jbyte buff[8192];
210
225
  char* bridge;
211
- int len;
226
+ size_t len;
212
227
  FILE* f;
213
228
  #if defined(RUBINIUS)
214
229
  VALUE v = rb_const_get(rb_cObject, rb_intern("RjbConf"));
@@ -268,12 +283,12 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
268
283
  { "DUMMY", NULL }, /* for classpath count */
269
284
  };
270
285
  char* newpath;
271
- int len;
286
+ size_t len;
272
287
  int result;
273
288
  GETDEFAULTJAVAVMINITARGS initargs;
274
289
  CREATEJAVAVM createjavavm;
275
290
  JavaVMOption* options;
276
- int optlen;
291
+ size_t optlen;
277
292
  int i;
278
293
  VALUE optval;
279
294
 
@@ -292,7 +307,7 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
292
307
  if (libjvm == NULL || !open_jvm(libjvm))
293
308
  {
294
309
  #if defined(__APPLE__) && defined(__MACH__)
295
- if (!(load_jvm(JVM_TYPE) || load_jvm(ALT_JVM_TYPE)))
310
+ if (!(load_jvm(NULL)))
296
311
  {
297
312
  JVMDLL = "%s/Libraries/libjvm.dylib";
298
313
  CREATEJVM = "JNI_CreateJavaVM_Impl";
@@ -359,7 +374,7 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
359
374
  (options + i)->optionString = StringValueCStr(optval);
360
375
  (options + i)->extraInfo = NULL;
361
376
  }
362
- vm_args->nOptions = optlen;
377
+ vm_args->nOptions = (int)optlen;
363
378
  vm_args->options = options;
364
379
  vm_args->ignoreUnrecognized = JNI_TRUE;
365
380
  if (NIL_P(createjavavmfunc))
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 156 2010-10-30 14:58:33Z arton $
15
+ * $Id: rjb.c 163 2010-11-22 07:31:27Z arton $
16
16
  */
17
17
 
18
- #define RJB_VERSION "1.3.2"
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);
Binary file
@@ -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
 
@@ -0,0 +1,23 @@
1
+ #!/usr/local/env ruby -Ku
2
+ # encoding: utf-8
3
+ # $Id:$
4
+
5
+ begin
6
+ require 'rjb'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'rjb'
10
+ end
11
+ require 'test/unit'
12
+
13
+ if RUBY_PLATFORM =~ /darwin/
14
+ class TestOsxJvm < Test::Unit::TestCase
15
+ def test_with_javahome
16
+ ENV['JAVA_HOME'] = `/usr/libexec/java_home`
17
+ assert_nothing_raised do
18
+ Rjb::load
19
+ end
20
+ end
21
+ end
22
+ end
23
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
- - 2
10
- version: 1.3.2
9
+ - 4
10
+ version: 1.3.4
11
11
  platform: x86-mswin32-60
12
12
  authors:
13
13
  - arton
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-31 00:00:00 +09:00
18
+ date: 2010-11-22 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -32,36 +32,28 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - ext/RBridge.java
34
34
  - ext/load.c
35
+ - ext/rjbexception.c
35
36
  - ext/riconv.c
36
37
  - ext/rjb.c
37
- - ext/rjbexception.c
38
- - ext/extconf.h
39
- - ext/jniwrap.h
40
38
  - ext/jp_co_infoseek_hp_arton_rjb_RBridge.h
41
39
  - ext/riconv.h
40
+ - ext/extconf.h
41
+ - ext/jniwrap.h
42
42
  - ext/rjb.h
43
43
  - ext/depend
44
44
  - data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
45
45
  - lib/rjb.rb
46
46
  - lib/rjbextension.rb
47
47
  - samples/filechooser.rb
48
+ - test/test.rb
48
49
  - test/exttest.rb
50
+ - test/test_osxjvm.rb
49
51
  - test/gctest.rb
50
- - test/m.rb
51
- - test/test.rb
52
- - test/tx.rb
53
- - test/Base.class
54
- - test/ExtBase.class
55
- - test/IBase.class
56
- - test/jar/jp/co/infoseek/hp/arton/rjb/JarTest.class
57
- - test/jp/co/infoseek/hp/arton/rjb/Base.class
58
- - test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
59
52
  - test/jp/co/infoseek/hp/arton/rjb/IBase.class
60
- - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
61
53
  - test/jp/co/infoseek/hp/arton/rjb/Test.class
62
- - test/JTest.class
63
- - test/jartest.jar
54
+ - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
64
55
  - test/rjbtest.jar
56
+ - test/jartest.jar
65
57
  - COPYING
66
58
  - ChangeLog
67
59
  - readme.sj
Binary file
Binary file
Binary file
Binary file
data/test/m.rb DELETED
@@ -1,20 +0,0 @@
1
- puts RUBY_VERSION
2
- class X
3
- module Y
4
- def hello
5
- puts 'hello'
6
- end
7
- end
8
- def make_proc(&block)
9
- block
10
- end
11
- def test
12
- Proc.new do
13
- extend Y
14
- end
15
- end
16
- end
17
- x = X.new
18
- a = Object.new
19
- a.instance_eval &x.test
20
- a.hello
data/test/tx.rb DELETED
@@ -1,52 +0,0 @@
1
- #!/usr/local/env ruby -Ku
2
- # encoding: utf-8
3
- # $Id: test.rb 87 2009-02-15 12:25:36Z arton $
4
-
5
- begin
6
- require 'rjb'
7
- rescue LoadError
8
- require 'rubygems'
9
- require 'rjb'
10
- end
11
- require 'test/unit'
12
-
13
- puts "start RJB(#{Rjb::VERSION}) test"
14
- class TestRjb < Test::Unit::TestCase
15
- include Rjb
16
- def setup
17
- Rjb::load('.')
18
- @jString = import('java.lang.String')
19
- @jInteger = Rjb::import('java.lang.Integer')
20
- @jShort = Rjb::import('java.lang.Short')
21
- @jDouble = Rjb::import('java.lang.Double')
22
- @jFloat = Rjb::import('java.lang.Float')
23
- @jBoolean = Rjb::import('java.lang.Boolean')
24
- @jByte = Rjb::import('java.lang.Byte')
25
- @jLong = Rjb::import('java.lang.Long')
26
- @jChar = Rjb::import('java.lang.Character')
27
- end
28
-
29
- def teardown
30
- end
31
-
32
- def test_scalar
33
- str = @jString.new_with_sig('Ljava.lang.String;', "abcde")
34
- p str
35
- p str.class
36
- # rjb object (String)
37
- str2 = @jString.new_with_sig('Ljava.lang.String;', 'fghijk')
38
- p str2
39
- p str2.class
40
- a = str.concat(str2)
41
- p a
42
- p a.class
43
- p str2
44
- p str2.class
45
- a = str.concat(str2)
46
- p a
47
- p a.class
48
- assert_equal('abcdefghijk', str.concat(str2))
49
- end
50
-
51
- end
52
-