bson_ext 1.6.2 → 1.6.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -7,19 +7,32 @@ end
7
7
  require 'fileutils'
8
8
  require 'rake/testtask'
9
9
  require 'rake'
10
+ require 'rake/extensiontask'
11
+ require 'rake/javaextensiontask'
10
12
 
11
13
  begin
12
14
  require 'git'
13
- rescue LoadError
14
- end
15
-
16
- begin
15
+ require 'devkit'
17
16
  require 'ci/reporter/rake/test_unit'
18
17
  rescue LoadError
19
18
  end
20
19
 
21
20
  ENV['TEST_MODE'] = 'TRUE'
22
21
 
22
+ Rake::ExtensionTask.new('cbson') do |ext|
23
+ ext.lib_dir = "lib/bson_ext"
24
+ end
25
+
26
+ #Rake::JavaExtensionTask.new('jbson') do |ext| # not yet functional
27
+ # ext.ext_dir = 'ext/src/org/jbson'
28
+ #end
29
+
30
+ desc "Compiles and tests MongoDB Ruby driver w/ C extensions."
31
+ task :c do
32
+ Rake::Task['compile:cbson'].invoke
33
+ Rake::Task['test:c'].invoke
34
+ end
35
+
23
36
  task :java do
24
37
  Rake::Task['build:java'].invoke
25
38
  Rake::Task['test:ruby'].invoke
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.has_rdoc = false
20
20
  s.extensions << 'ext/cbson/extconf.rb'
21
21
 
22
- s.author = 'Mike Dirolf'
22
+ s.authors = ['Mike Dirolf', 'Kyle Banker', 'Tyler Brock', 'Gary Murakami']
23
23
  s.email = 'mongodb-dev@googlegroups.com'
24
24
  s.homepage = 'http://www.mongodb.org'
25
25
  s.add_dependency('bson', "~> #{BSON::VERSION}")
@@ -32,6 +32,7 @@ bson_buffer_t bson_buffer_new(void);
32
32
  /* Set the max size for this buffer.
33
33
  * Note: this is not a hard limit. */
34
34
  void bson_buffer_set_max_size(bson_buffer_t buffer, int max_size);
35
+ int bson_buffer_get_max_size(bson_buffer_t buffer);
35
36
 
36
37
  /* Free the memory allocated for `buffer`.
37
38
  * Return non-zero on failure. */
@@ -21,6 +21,7 @@
21
21
  */
22
22
 
23
23
  #include "ruby.h"
24
+ #include "version.h"
24
25
 
25
26
  /* Ensure compatibility with early releases of Ruby 1.8.5 */
26
27
  #ifndef RSTRING_PTR
@@ -108,10 +109,8 @@ static int max_bson_size;
108
109
  } \
109
110
  _str; \
110
111
  })
111
- #define TO_UTF8(string) rb_str_export_to_enc((string), rb_utf8_encoding())
112
112
  #else
113
113
  #define STR_NEW(p,n) rb_str_new((p), (n))
114
- #define TO_UTF8(string) (string)
115
114
  #endif
116
115
 
117
116
  static void write_utf8(bson_buffer_t buffer, VALUE string, char check_null) {
@@ -124,8 +123,7 @@ static void write_utf8(bson_buffer_t buffer, VALUE string, char check_null) {
124
123
  bson_buffer_free(buffer);
125
124
  rb_raise(InvalidStringEncoding, "String not valid UTF-8");
126
125
  }
127
- string = TO_UTF8(string);
128
- SAFE_WRITE(buffer, RSTRING_PTR(string), RSTRING_LEN(string));
126
+ SAFE_WRITE(buffer, RSTRING_PTR(string), (int)RSTRING_LEN(string));
129
127
  }
130
128
 
131
129
  // this sucks. but for some reason these moved around between 1.8 and 1.9
@@ -435,10 +433,14 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) {
435
433
  break;
436
434
  }
437
435
  if (strcmp(cls, "BSON::Timestamp") == 0) {
436
+ unsigned int seconds;
437
+ unsigned int increment;
438
+
438
439
  write_name_and_type(buffer, key, 0x11);
439
- unsigned int seconds = NUM2UINT(
440
+
441
+ seconds = NUM2UINT(
440
442
  rb_funcall(value, rb_intern("seconds"), 0));
441
- unsigned int increment = NUM2UINT(
443
+ increment = NUM2UINT(
442
444
  rb_funcall(value, rb_intern("increment"), 0));
443
445
 
444
446
  SAFE_WRITE(buffer, (const char*)&increment, 4);
@@ -742,10 +744,23 @@ static VALUE get_value(const char* buffer, int* position, int type) {
742
744
  }
743
745
  case 9:
744
746
  {
745
- long long millis;
747
+ int64_t millis;
746
748
  memcpy(&millis, buffer + *position, 8);
747
749
 
748
- value = rb_time_new(millis / 1000, (millis % 1000) * 1000);
750
+ // Support 64-bit time values in 32 bit environments in Ruby > 1.9
751
+ // Note: rb_time_num_new is not available pre Ruby 1.9
752
+ #if RUBY_API_VERSION_CODE >= 10900
753
+ #define add(x,y) (rb_funcall((x), '+', 1, (y)))
754
+ #define mul(x,y) (rb_funcall((x), '*', 1, (y)))
755
+ #define quo(x,y) (rb_funcall((x), rb_intern("quo"), 1, (y)))
756
+ VALUE d, timev;
757
+ d = LL2NUM(1000LL);
758
+ timev = add(LL2NUM(millis / 1000), quo(LL2NUM(millis % 1000), d));
759
+ value = rb_time_num_new(timev, Qnil);
760
+ #else
761
+ value = rb_time_new(millis / 1000, (millis % 1000) * 1000);
762
+ #endif
763
+
749
764
  value = rb_funcall(value, utc_method, 0);
750
765
  *position += 8;
751
766
  break;
@@ -87,7 +87,7 @@ static unsigned char isLegalUTF8(const unsigned char* source, int length) {
87
87
  return 1;
88
88
  }
89
89
 
90
- result_t check_string(const unsigned char* string, const int length,
90
+ result_t check_string(const unsigned char* string, const long length,
91
91
  const char check_utf8, const char check_null) {
92
92
  int position = 0;
93
93
  /* By default we go character by character. Will be different for checking
@@ -23,7 +23,7 @@ typedef enum {
23
23
  HAS_NULL
24
24
  } result_t;
25
25
 
26
- result_t check_string(const unsigned char* string, const int length,
26
+ result_t check_string(const unsigned char* string, const long length,
27
27
  const char check_utf8, const char check_null);
28
28
 
29
29
  #endif
@@ -14,4 +14,4 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- #define VERSION "1.6.2"
17
+ #define VERSION "1.6.4"
metadata CHANGED
@@ -1,15 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mike Dirolf
9
+ - Kyle Banker
10
+ - Tyler Brock
11
+ - Gary Murakami
9
12
  autorequire:
10
13
  bindir: bin
11
14
  cert_chain: []
12
- date: 2012-04-05 00:00:00.000000000 Z
15
+ date: 2012-06-06 00:00:00.000000000 Z
13
16
  dependencies:
14
17
  - !ruby/object:Gem::Dependency
15
18
  name: bson
@@ -18,7 +21,7 @@ dependencies:
18
21
  requirements:
19
22
  - - ~>
20
23
  - !ruby/object:Gem::Version
21
- version: 1.6.2
24
+ version: 1.6.4
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +29,7 @@ dependencies:
26
29
  requirements:
27
30
  - - ~>
28
31
  - !ruby/object:Gem::Version
29
- version: 1.6.2
32
+ version: 1.6.4
30
33
  description: C extensions to accelerate the Ruby BSON serialization. For more information
31
34
  about BSON, see http://bsonspec.org. For information about MongoDB, see http://www.mongodb.org.
32
35
  email: mongodb-dev@googlegroups.com
@@ -64,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
67
  version: '0'
65
68
  requirements: []
66
69
  rubyforge_project:
67
- rubygems_version: 1.8.21
70
+ rubygems_version: 1.8.24
68
71
  signing_key:
69
72
  specification_version: 3
70
73
  summary: C extensions for Ruby BSON.