oj 3.10.13 → 3.10.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/ext/oj/buf.h +2 -30
  3. data/ext/oj/cache8.h +1 -29
  4. data/ext/oj/circarray.c +4 -8
  5. data/ext/oj/circarray.h +1 -4
  6. data/ext/oj/code.c +3 -6
  7. data/ext/oj/code.h +1 -4
  8. data/ext/oj/compat.c +1 -4
  9. data/ext/oj/custom.c +1 -4
  10. data/ext/oj/dump.c +23 -13
  11. data/ext/oj/dump.h +1 -4
  12. data/ext/oj/dump_compat.c +1 -4
  13. data/ext/oj/dump_leaf.c +2 -5
  14. data/ext/oj/dump_object.c +1 -4
  15. data/ext/oj/dump_strict.c +1 -4
  16. data/ext/oj/encode.h +1 -29
  17. data/ext/oj/err.c +1 -4
  18. data/ext/oj/err.h +1 -29
  19. data/ext/oj/fast.c +14 -42
  20. data/ext/oj/hash.c +4 -32
  21. data/ext/oj/hash.h +1 -29
  22. data/ext/oj/hash_test.c +1 -29
  23. data/ext/oj/mimic_json.c +11 -6
  24. data/ext/oj/object.c +1 -4
  25. data/ext/oj/odd.c +1 -4
  26. data/ext/oj/odd.h +1 -4
  27. data/ext/oj/oj.c +16 -4
  28. data/ext/oj/oj.h +2 -4
  29. data/ext/oj/parse.c +7 -16
  30. data/ext/oj/parse.h +1 -4
  31. data/ext/oj/rails.c +1 -4
  32. data/ext/oj/rails.h +1 -4
  33. data/ext/oj/reader.c +5 -8
  34. data/ext/oj/reader.h +2 -5
  35. data/ext/oj/resolve.c +1 -4
  36. data/ext/oj/resolve.h +1 -4
  37. data/ext/oj/rxclass.c +3 -6
  38. data/ext/oj/rxclass.h +1 -4
  39. data/ext/oj/saj.c +6 -9
  40. data/ext/oj/scp.c +1 -4
  41. data/ext/oj/sparse.c +7 -15
  42. data/ext/oj/stream_writer.c +4 -9
  43. data/ext/oj/strict.c +3 -6
  44. data/ext/oj/string_writer.c +1 -4
  45. data/ext/oj/trace.c +5 -8
  46. data/ext/oj/trace.h +1 -4
  47. data/ext/oj/util.c +1 -1
  48. data/ext/oj/util.h +1 -1
  49. data/ext/oj/val_stack.c +1 -29
  50. data/ext/oj/val_stack.h +1 -29
  51. data/ext/oj/wab.c +1 -4
  52. data/lib/oj/mimic.rb +45 -1
  53. data/lib/oj/version.rb +1 -1
  54. data/pages/Modes.md +1 -1
  55. data/pages/Options.md +4 -0
  56. data/test/test_compat.rb +14 -1
  57. data/test/test_custom.rb +1 -1
  58. data/test/test_rails.rb +9 -0
  59. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf3316732ef2268d94b685ac9089e06d743328cdb1adb57785b67728e7b7791c
4
- data.tar.gz: 99a5e1c91f281b56b94e2beb55aa21cb570064882c152044c72e898a3a2ccd27
3
+ metadata.gz: 764f297554e1e876cb8961737a5670c943cc344651ac950128568fbeb61609ba
4
+ data.tar.gz: 318dad71cb0e6ccb7f6f86d6e5e6f76dc1a86bf4aa82f07501c772ac60f73882
5
5
  SHA512:
6
- metadata.gz: 1800e79a4573873480e5b3dc88f10bbcee084a8bf3896a7f70e4fa1c4af13e34cfc7b54436fddd2528fbc41b37bc331e04aac6301c22c779bd07198ff2caa1d7
7
- data.tar.gz: 53e06ab7ffce50a870908b1df73f7e0517be25f1dfaf8c4cf16d0740f488609386ec135e9eef08f01a215513fbf9ea9bdab1bf3649e1e6582a5db9306d1f7164
6
+ metadata.gz: 1c6ad5cd4811b13fef7b5f2890e9335b5078cbee85ba4d8fcad6b91487c782949361b62fc8673f8b9d4bd602d738eb04e1414021f10e9c1247be347cdb4f4e50
7
+ data.tar.gz: a99166c591a9e9805fd516c4bc55a5dfc6512161560965fc44caa02a85375d3d771a0ab10ffc153ee789373e708aae207f1ee15ec3fd54a11a06c104d5b21346
@@ -1,32 +1,4 @@
1
- /* buf.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- *
8
- * - Redistributions of source code must retain the above copyright notice, this
9
- * list of conditions and the following disclaimer.
10
- *
11
- * - Redistributions in binary form must reproduce the above copyright notice,
12
- * this list of conditions and the following disclaimer in the documentation
13
- * and/or other materials provided with the distribution.
14
- *
15
- * - Neither the name of Peter Ohler nor the names of its contributors may be
16
- * used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
30
2
 
31
3
  #ifndef OJ_BUF_H
32
4
  #define OJ_BUF_H
@@ -78,7 +50,7 @@ buf_append_string(Buf buf, const char *s, size_t slen) {
78
50
  memcpy(buf->tail, s, slen);
79
51
  buf->tail += slen;
80
52
  }
81
-
53
+
82
54
  inline static void
83
55
  buf_append(Buf buf, char c) {
84
56
  if (buf->end <= buf->tail) {
@@ -1,32 +1,4 @@
1
- /* cache8.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- *
8
- * - Redistributions of source code must retain the above copyright notice, this
9
- * list of conditions and the following disclaimer.
10
- *
11
- * - Redistributions in binary form must reproduce the above copyright notice,
12
- * this list of conditions and the following disclaimer in the documentation
13
- * and/or other materials provided with the distribution.
14
- *
15
- * - Neither the name of Peter Ohler nor the names of its contributors may be
16
- * used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
30
2
 
31
3
  #ifndef OJ_CACHE8_H
32
4
  #define OJ_CACHE8_H
@@ -1,21 +1,18 @@
1
- /* circarray.c
2
- * Copyright (c) 2012, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include "circarray.h"
7
4
 
8
5
  CircArray
9
6
  oj_circ_array_new() {
10
7
  CircArray ca;
11
-
8
+
12
9
  if (0 == (ca = ALLOC(struct _circArray))) {
13
10
  rb_raise(rb_eNoMemError, "not enough memory\n");
14
11
  }
15
12
  ca->objs = ca->obj_array;
16
13
  ca->size = sizeof(ca->obj_array) / sizeof(VALUE);
17
14
  ca->cnt = 0;
18
-
15
+
19
16
  return ca;
20
17
  }
21
18
 
@@ -40,7 +37,7 @@ oj_circ_array_set(CircArray ca, VALUE obj, unsigned long id) {
40
37
  rb_raise(rb_eNoMemError, "not enough memory\n");
41
38
  }
42
39
  memcpy(ca->objs, ca->obj_array, sizeof(VALUE) * ca->cnt);
43
- } else {
40
+ } else {
44
41
  REALLOC_N(ca->objs, VALUE, cnt);
45
42
  }
46
43
  ca->size = cnt;
@@ -65,4 +62,3 @@ oj_circ_array_get(CircArray ca, unsigned long id) {
65
62
  }
66
63
  return obj;
67
64
  }
68
-
@@ -1,7 +1,4 @@
1
- /* circarray.h
2
- * Copyright (c) 2012, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012 Peter Ohler. All rights reserved.
5
2
 
6
3
  #ifndef OJ_CIRCARRAY_H
7
4
  #define OJ_CIRCARRAY_H
@@ -1,7 +1,4 @@
1
- /* code.c
2
- * Copyright (c) 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include "code.h"
7
4
  #include "dump.h"
@@ -140,7 +137,7 @@ oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class) {
140
137
  size_t len = strlen(classname);
141
138
  size_t size = d2 * out->indent + 10 + len + out->opts->create_id_len + sep_len;
142
139
  bool no_comma = true;
143
-
140
+
144
141
  assure_size(out, size);
145
142
  *out->cur++ = '{';
146
143
 
@@ -201,7 +198,7 @@ oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class) {
201
198
  char *b = buf + sizeof(buf) - 1;
202
199
  int neg = 0;
203
200
  long num = attrs->num;
204
-
201
+
205
202
  if (0 > num) {
206
203
  neg = 1;
207
204
  num = -num;
@@ -1,7 +1,4 @@
1
- /* code.h
2
- * Copyright (c) 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #ifndef OJ_CODE_H
7
4
  #define OJ_CODE_H
@@ -1,7 +1,4 @@
1
- /* compat.c
2
- * Copyright (c) 2012, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <stdio.h>
7
4
 
@@ -1,7 +1,4 @@
1
- /* custom.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <stdint.h>
7
4
  #include <stdio.h>
@@ -1,7 +1,4 @@
1
- /* dump.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <errno.h>
7
4
  #include <math.h>
@@ -177,15 +174,20 @@ hixss_friendly_size(const uint8_t *str, size_t len) {
177
174
  return size - len * (size_t)'0' + check;
178
175
  }
179
176
 
180
- inline static size_t
177
+ inline static long
181
178
  rails_xss_friendly_size(const uint8_t *str, size_t len) {
182
- size_t size = 0;
179
+ long size = 0;
183
180
  size_t i = len;
181
+ uint8_t hi = 0;
184
182
 
185
183
  for (; 0 < i; str++, i--) {
186
184
  size += rails_xss_friendly_chars[*str];
185
+ hi |= *str & 0x80;
187
186
  }
188
- return size - len * (size_t)'0';
187
+ if (0 == hi) {
188
+ return size - len * (size_t)'0';
189
+ }
190
+ return -(size - len * (size_t)'0');
189
191
  }
190
192
 
191
193
  inline static size_t
@@ -252,7 +254,6 @@ dump_hex(uint8_t c, Out out) {
252
254
 
253
255
  static void
254
256
  raise_invalid_unicode(const char *str, int len, int pos) {
255
- char buf[len + 1];
256
257
  char c;
257
258
  char code[32];
258
259
  char *cp = code;
@@ -271,8 +272,7 @@ raise_invalid_unicode(const char *str, int len, int pos) {
271
272
  cp--;
272
273
  *cp++ = ']';
273
274
  *cp = '\0';
274
- strncpy(buf, str, len);
275
- rb_raise(oj_json_generator_error_class, "Invalid Unicode %s at %d in '%s'", code, pos, buf);
275
+ rb_raise(oj_json_generator_error_class, "Invalid Unicode %s at %d", code, pos);
276
276
  }
277
277
 
278
278
  static const char*
@@ -770,6 +770,7 @@ oj_dump_cstr(const char *str, size_t cnt, bool is_sym, bool escape1, Out out) {
770
770
  size_t size;
771
771
  char *cmap;
772
772
  const char *orig = str;
773
+ bool has_hi = false;
773
774
 
774
775
  switch (out->opts->escape_mode) {
775
776
  case NLEsc:
@@ -788,10 +789,19 @@ oj_dump_cstr(const char *str, size_t cnt, bool is_sym, bool escape1, Out out) {
788
789
  cmap = hixss_friendly_chars;
789
790
  size = hixss_friendly_size((uint8_t*)str, cnt);
790
791
  break;
791
- case RailsXEsc:
792
+ case RailsXEsc: {
793
+ long sz;
794
+
792
795
  cmap = rails_xss_friendly_chars;
793
- size = rails_xss_friendly_size((uint8_t*)str, cnt);
796
+ sz = rails_xss_friendly_size((uint8_t*)str, cnt);
797
+ if (sz < 0) {
798
+ has_hi = true;
799
+ size = (size_t)-sz;
800
+ } else {
801
+ size = (size_t)sz;
802
+ }
794
803
  break;
804
+ }
795
805
  case RailsEsc:
796
806
  cmap = rails_friendly_chars;
797
807
  size = rails_friendly_size((uint8_t*)str, cnt);
@@ -815,7 +825,7 @@ oj_dump_cstr(const char *str, size_t cnt, bool is_sym, bool escape1, Out out) {
815
825
  str++;
816
826
  is_sym = 0; // just to make sure
817
827
  }
818
- if (cnt == size) {
828
+ if (cnt == size && !has_hi) {
819
829
  if (is_sym) {
820
830
  *out->cur++ = ':';
821
831
  }
@@ -1,7 +1,4 @@
1
- /* dump.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
5
2
 
6
3
  #ifndef OJ_DUMP_H
7
4
  #define OJ_DUMP_H
@@ -1,7 +1,4 @@
1
- /* dump_object.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include "code.h"
7
4
  #include "dump.h"
@@ -1,7 +1,4 @@
1
- /* dump_leaf.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <errno.h>
7
4
 
@@ -15,7 +12,7 @@ grow(Out out, size_t len) {
15
12
  size_t size = out->end - out->buf;
16
13
  long pos = out->cur - out->buf;
17
14
  char *buf;
18
-
15
+
19
16
  size *= 2;
20
17
  if (size <= len * 2 + pos) {
21
18
  size += len;
@@ -1,7 +1,4 @@
1
- /* dump_object.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include "dump.h"
7
4
  #include "odd.h"
@@ -1,7 +1,4 @@
1
- /* dump_strict.c
2
- * Copyright (c) 2012, 2017, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2012, 2017 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <stdlib.h>
7
4
  #include <time.h>
@@ -1,32 +1,4 @@
1
- /* encode.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- *
8
- * - Redistributions of source code must retain the above copyright notice, this
9
- * list of conditions and the following disclaimer.
10
- *
11
- * - Redistributions in binary form must reproduce the above copyright notice,
12
- * this list of conditions and the following disclaimer in the documentation
13
- * and/or other materials provided with the distribution.
14
- *
15
- * - Neither the name of Peter Ohler nor the names of its contributors may be
16
- * used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
30
2
 
31
3
  #ifndef OJ_ENCODE_H
32
4
  #define OJ_ENCODE_H
@@ -1,7 +1,4 @@
1
- /* err.c
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
5
2
 
6
3
  #include <stdarg.h>
7
4
 
@@ -1,32 +1,4 @@
1
- /* err.h
2
- * Copyright (c) 2011, Peter Ohler
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- *
8
- * - Redistributions of source code must retain the above copyright notice, this
9
- * list of conditions and the following disclaimer.
10
- *
11
- * - Redistributions in binary form must reproduce the above copyright notice,
12
- * this list of conditions and the following disclaimer in the documentation
13
- * and/or other materials provided with the distribution.
14
- *
15
- * - Neither the name of Peter Ohler nor the names of its contributors may be
16
- * used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */
1
+ // Copyright (c) 2011 Peter Ohler. All rights reserved.
30
2
 
31
3
  #ifndef OJ_ERR_H
32
4
  #define OJ_ERR_H
@@ -1,32 +1,4 @@
1
- /* fast.c
2
- * Copyright (c) 2012, Peter Ohler
3
- * All rights reserved.
4
- *
5
- * Redistribution and use in source and binary forms, with or without
6
- * modification, are permitted provided that the following conditions are met:
7
- *
8
- * - Redistributions of source code must retain the above copyright notice, this
9
- * list of conditions and the following disclaimer.
10
- *
11
- * - Redistributions in binary form must reproduce the above copyright notice,
12
- * this list of conditions and the following disclaimer in the documentation
13
- * and/or other materials provided with the distribution.
14
- *
15
- * - Neither the name of Peter Ohler nor the names of its contributors may be
16
- * used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */
1
+ // Copyright (c) 2012 Peter Ohler. All rights reserved.
30
2
 
31
3
  #if !IS_WINDOWS
32
4
  #include <sys/resource.h> // for getrlimit() on linux
@@ -121,7 +93,7 @@ VALUE oj_doc_class = Qundef;
121
93
  #ifndef HAVE_STPCPY
122
94
  char *stpcpy(char *dest, const char *src) {
123
95
  size_t cnt = strlen(src);
124
-
96
+
125
97
  strcpy(dest, src);
126
98
 
127
99
  return dest + cnt;
@@ -322,7 +294,7 @@ leaf_fixnum_value(Leaf leaf) {
322
294
  int64_t n = 0;
323
295
  int neg = 0;
324
296
  int big = 0;
325
-
297
+
326
298
  if ('-' == *s) {
327
299
  s++;
328
300
  neg = 1;
@@ -337,7 +309,7 @@ leaf_fixnum_value(Leaf leaf) {
337
309
  }
338
310
  if (big) {
339
311
  char c = *s;
340
-
312
+
341
313
  *s = '\0';
342
314
  leaf->value = rb_cstr_to_inum(leaf->str, 10, 0);
343
315
  *s = c;
@@ -672,7 +644,7 @@ read_quoted_value(ParseInfo pi) {
672
644
  char *value = 0;
673
645
  char *h = pi->s; // head
674
646
  char *t = h; // tail
675
-
647
+
676
648
  h++; // skip quote character
677
649
  t++;
678
650
  value = h;
@@ -805,7 +777,7 @@ static void
805
777
  mark_doc(void *ptr) {
806
778
  if (NULL != ptr) {
807
779
  Doc doc = (Doc)ptr;
808
-
780
+
809
781
  rb_gc_mark(doc->self);
810
782
  mark_leaf(doc->data);
811
783
  }
@@ -820,7 +792,7 @@ parse_json(VALUE clas, char *json, bool given, bool allocated) {
820
792
  volatile VALUE self;
821
793
 
822
794
  // TBD are both needed? is stack allocation ever needed?
823
-
795
+
824
796
  if (given) {
825
797
  doc = ALLOCA_N(struct _doc, 1);
826
798
  } else {
@@ -1226,7 +1198,7 @@ doc_open_file(VALUE clas, VALUE filename) {
1226
1198
  fseek(f, 0, SEEK_SET);
1227
1199
  if (len != fread(json, 1, len, f)) {
1228
1200
  fclose(f);
1229
- rb_raise(rb_const_get_at(Oj, rb_intern("LoadError")),
1201
+ rb_raise(rb_const_get_at(Oj, rb_intern("LoadError")),
1230
1202
  "Failed to read %lu bytes from %s.", (unsigned long)len, path);
1231
1203
  }
1232
1204
  fclose(f);
@@ -1575,7 +1547,7 @@ doc_each_child(int argc, VALUE *argv, VALUE self) {
1575
1547
  * result
1576
1548
  * }
1577
1549
  * #=> [3, 2, 1]
1578
- *
1550
+ *
1579
1551
  * Oj::Doc.open('[3,[2,1]]') { |doc|
1580
1552
  * result = []
1581
1553
  * doc.each_value('/2') { |v| result << v }
@@ -1708,21 +1680,21 @@ doc_not_implemented(VALUE self) {
1708
1680
  * extracted. Once the document is closed the document can not longer be
1709
1681
  * accessed. This allows the parsing and data extraction to be extremely fast
1710
1682
  * compared to other JSON parses.
1711
- *
1683
+ *
1712
1684
  * An Oj::Doc class is not created directly but the _open()_ class method is
1713
1685
  * used to open a document and the yield parameter to the block of the #open()
1714
1686
  * call is the Doc instance. The Doc instance can be moved across, up, and
1715
1687
  * down the JSON document. At each element the data associated with the
1716
1688
  * element can be extracted. It is also possible to just provide a path to the
1717
1689
  * data to be extracted and retrieve the data in that manner.
1718
- *
1690
+ *
1719
1691
  * For many of the methods a path is used to describe the location of an
1720
1692
  * element. Paths follow a subset of the XPath syntax. The slash ('/')
1721
1693
  * character is the separator. Each step in the path identifies the next
1722
1694
  * branch to take through the document. A JSON object will expect a key string
1723
1695
  * while an array will expect a positive index. A .. step indicates a move up
1724
1696
  * the JSON document.
1725
- *
1697
+ *
1726
1698
  * @example
1727
1699
  * json = %{[
1728
1700
  * {
@@ -1736,12 +1708,12 @@ doc_not_implemented(VALUE self) {
1736
1708
  * ]}
1737
1709
  * # move and get value
1738
1710
  * Oj::Doc.open(json) do |doc|
1739
- * doc.move('/1/two')
1711
+ * doc.move('/1/two')
1740
1712
  * # doc location is now at the 'two' element of the hash that is the first element of the array.
1741
1713
  * doc.fetch()
1742
1714
  * end
1743
1715
  * #=> 2
1744
- *
1716
+ *
1745
1717
  * # Now try again using a path to Oj::Doc.fetch() directly and not using a block.
1746
1718
  * doc = Oj::Doc.open(json)
1747
1719
  * doc.fetch('/2/three') #=> 3