mongodb-mongo_ext 0.13 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/cbson/cbson.c +15 -8
- data/ext/cbson/extconf.rb +1 -0
- data/mongo-extensions.gemspec +1 -2
- metadata +1 -1
data/ext/cbson/cbson.c
CHANGED
@@ -50,6 +50,13 @@ static VALUE RegexpOfHolding;
|
|
50
50
|
static VALUE OrderedHash;
|
51
51
|
static VALUE InvalidName;
|
52
52
|
|
53
|
+
#if HAVE_RUBY_ENCODING_H
|
54
|
+
#include "ruby/encoding.h"
|
55
|
+
#define STR_NEW(p,n) rb_enc_str_new((p), (n), rb_utf8_encoding())
|
56
|
+
#else
|
57
|
+
#define STR_NEW(p,n) rb_str_new((p), (n))
|
58
|
+
#endif
|
59
|
+
|
53
60
|
// this sucks. but for some reason these moved around between 1.8 and 1.9
|
54
61
|
#ifdef ONIGURUMA_H
|
55
62
|
#define IGNORECASE ONIG_OPTION_IGNORECASE
|
@@ -154,7 +161,7 @@ static void buffer_write_bytes(bson_buffer* buffer, const char* bytes, int size)
|
|
154
161
|
}
|
155
162
|
|
156
163
|
static VALUE pack_extra(bson_buffer* buffer, VALUE check_keys) {
|
157
|
-
return rb_ary_new3(2,
|
164
|
+
return rb_ary_new3(2, LL2NUM((long long)buffer), check_keys);
|
158
165
|
}
|
159
166
|
|
160
167
|
static void write_name_and_type(bson_buffer* buffer, VALUE name, char type) {
|
@@ -164,7 +171,7 @@ static void write_name_and_type(bson_buffer* buffer, VALUE name, char type) {
|
|
164
171
|
}
|
165
172
|
|
166
173
|
static int write_element_allow_id(VALUE key, VALUE value, VALUE extra, int allow_id) {
|
167
|
-
bson_buffer* buffer = (bson_buffer*)
|
174
|
+
bson_buffer* buffer = (bson_buffer*)NUM2LL(rb_ary_entry(extra, 0));
|
168
175
|
VALUE check_keys = rb_ary_entry(extra, 1);
|
169
176
|
|
170
177
|
if (TYPE(key) == T_SYMBOL) {
|
@@ -495,7 +502,7 @@ static VALUE get_value(const char* buffer, int* position, int type) {
|
|
495
502
|
int value_length;
|
496
503
|
*position += 4;
|
497
504
|
value_length = strlen(buffer + *position);
|
498
|
-
value =
|
505
|
+
value = STR_NEW(buffer + *position, value_length);
|
499
506
|
*position += value_length + 1;
|
500
507
|
break;
|
501
508
|
}
|
@@ -509,7 +516,7 @@ static VALUE get_value(const char* buffer, int* position, int type) {
|
|
509
516
|
int collection_length = strlen(buffer + offset);
|
510
517
|
char id_type;
|
511
518
|
|
512
|
-
argv[0] =
|
519
|
+
argv[0] = STR_NEW(buffer + offset, collection_length);
|
513
520
|
offset += collection_length + 1;
|
514
521
|
id_type = buffer[offset];
|
515
522
|
offset += 5;
|
@@ -599,7 +606,7 @@ static VALUE get_value(const char* buffer, int* position, int type) {
|
|
599
606
|
case 11:
|
600
607
|
{
|
601
608
|
int pattern_length = strlen(buffer + *position);
|
602
|
-
VALUE pattern =
|
609
|
+
VALUE pattern = STR_NEW(buffer + *position, pattern_length);
|
603
610
|
int flags_length, flags = 0, i = 0;
|
604
611
|
char extra[10];
|
605
612
|
VALUE argv[3];
|
@@ -635,7 +642,7 @@ static VALUE get_value(const char* buffer, int* position, int type) {
|
|
635
642
|
VALUE collection, str, oid, id, argv[2];
|
636
643
|
*position += 4;
|
637
644
|
collection_length = strlen(buffer + *position);
|
638
|
-
collection =
|
645
|
+
collection = STR_NEW(buffer + *position, collection_length);
|
639
646
|
*position += collection_length + 1;
|
640
647
|
|
641
648
|
str = rb_str_new(buffer + *position, 12);
|
@@ -662,7 +669,7 @@ static VALUE get_value(const char* buffer, int* position, int type) {
|
|
662
669
|
VALUE code, scope, argv[2];
|
663
670
|
*position += 8;
|
664
671
|
code_length = strlen(buffer + *position);
|
665
|
-
code =
|
672
|
+
code = STR_NEW(buffer + *position, code_length);
|
666
673
|
*position += code_length + 1;
|
667
674
|
|
668
675
|
memcpy(&scope_size, buffer + *position, 4);
|
@@ -715,7 +722,7 @@ static VALUE elements_to_hash(const char* buffer, int max) {
|
|
715
722
|
while (position < max) {
|
716
723
|
int type = (int)buffer[position++];
|
717
724
|
int name_length = strlen(buffer + position);
|
718
|
-
VALUE name =
|
725
|
+
VALUE name = STR_NEW(buffer + position, name_length);
|
719
726
|
VALUE value;
|
720
727
|
position += name_length + 1;
|
721
728
|
value = get_value(buffer, &position, type);
|
data/ext/cbson/extconf.rb
CHANGED
data/mongo-extensions.gemspec
CHANGED
@@ -8,13 +8,12 @@ TEST_FILES = []
|
|
8
8
|
Gem::Specification.new do |s|
|
9
9
|
s.name = 'mongo_ext'
|
10
10
|
|
11
|
-
s.version = '0.
|
11
|
+
s.version = '0.14.1'
|
12
12
|
s.platform = Gem::Platform::RUBY
|
13
13
|
s.summary = 'C extensions for the MongoDB Ruby driver'
|
14
14
|
s.description = 'C extensions to accelerate the MondoDB Ruby driver. For more information about Mongo, see http://www.mongodb.org.'
|
15
15
|
|
16
16
|
s.require_paths = ['ext']
|
17
|
-
|
18
17
|
s.files = PACKAGE_FILES
|
19
18
|
s.test_files = TEST_FILES
|
20
19
|
|