diff options
author | Jean Boussier <[email protected]> | 2024-11-05 16:35:58 +0100 |
---|---|---|
committer | Jean Boussier <[email protected]> | 2024-11-05 18:00:36 +0100 |
commit | ca8f21ace86e9c7ab184b3f0087ff458c06b178c () | |
tree | e5a4c05ba4bff8d9dc19963936d2c81248200881 /ext/json/fbuffer | |
parent | e8522f06b51f86214d28259118c736ac8951d8cd (diff) |
[ruby/json] Resync
Notes: Merged: https://.com/ruby/ruby/pull/12003
-rw-r--r-- | ext/json/fbuffer/fbuffer.h | 51 |
1 files changed, 37 insertions, 14 deletions
@@ -4,9 +4,40 @@ #include "ruby.h" #include "ruby/encoding.h" enum fbuffer_type { - HEAP = 0, - STACK = 1, }; typedef struct FBufferStruct { @@ -38,19 +69,11 @@ static inline void fbuffer_append_char(FBuffer *fb, char newchr); static VALUE fbuffer_to_s(FBuffer *fb); #endif -#ifndef RB_UNLIKELY -#define RB_UNLIKELY(expr) expr -#endif - -#ifndef RB_LIKELY -#define RB_LIKELY(expr) expr -#endif - static void fbuffer_stack_init(FBuffer *fb, unsigned long initial_length, char *stack_buffer, long stack_buffer_size) { fb->initial_length = (initial_length > 0) ? initial_length : FBUFFER_INITIAL_LENGTH_DEFAULT; if (stack_buffer) { - fb->type = STACK; fb->ptr = stack_buffer; fb->capa = stack_buffer_size; } @@ -58,7 +81,7 @@ static void fbuffer_stack_init(FBuffer *fb, unsigned long initial_length, char * static void fbuffer_free(FBuffer *fb) { - if (fb->ptr && fb->type == HEAP) { ruby_xfree(fb->ptr); } } @@ -82,10 +105,10 @@ static void fbuffer_do_inc_capa(FBuffer *fb, unsigned long requested) for (required = fb->capa; requested > required - fb->len; required <<= 1); if (required > fb->capa) { - if (fb->type == STACK) { const char *old_buffer = fb->ptr; fb->ptr = ALLOC_N(char, required); - fb->type = HEAP; MEMCPY(fb->ptr, old_buffer, char, fb->len); } else { REALLOC_N(fb->ptr, char, required); |