From 5e52e72cf7ae3d3571f755a5e7729a36b225f7f6 Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Sun, 5 Nov 2017 14:17:21 +0800 Subject: [PATCH] *refactored the tag of memory allocation. --- core/my_basic.c | 5 +++-- core/my_basic.h | 14 ++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/core/my_basic.c b/core/my_basic.c index f4f9345..18dfcdb 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -1314,7 +1314,7 @@ static void _resize_dynamic_buffer(_dynamic_buffer_t* buf, size_t es, size_t c); #define _WCHAR_BUF_PTR(b) ((b).pointer.wcharp) #endif /* MB_CP_VC && MB_ENABLE_UNICODE */ -#define _MB_CHECK_MEM_TAG_SIZE(y, s) ((mb_mem_tag_t)(s) == (s)) +#define _MB_CHECK_MEM_TAG_SIZE(y, s) ((y)(mb_mem_tag_t)(s) == (s)) #define _MB_WRITE_MEM_TAG_SIZE(t, s) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE)) = (mb_mem_tag_t)(s)) #define _MB_READ_MEM_TAG_SIZE(t) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE))) @@ -14352,7 +14352,8 @@ char* mb_memdup(const char* val, unsigned size) { if(val != 0) { result = (char*)mb_malloc(size); - memcpy(result, val, size); + if(result) + memcpy(result, val, size); } return result; diff --git a/core/my_basic.h b/core/my_basic.h index 90a1692..a2402bc 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -300,6 +300,14 @@ extern "C" { # define mb_unrefvar(__v) ((void)(__v)) #endif /* mb_unrefvar */ +#ifndef mb_mem_tag_t + typedef unsigned short mb_mem_tag_t; +#endif /* mb_mem_tag_t */ + +#ifndef mb_bytes_size +# define mb_bytes_size (mb_max(mb_max(mb_max(sizeof(void*), sizeof(unsigned long)), sizeof(int_t)), sizeof(real_t))) +#endif /* mb_bytes_size */ + #ifndef mb_make_nil # define mb_make_nil(__v) do { memset(&(__v).value.bytes, 0, sizeof(mb_val_bytes_t)); (__v).type = MB_DT_NIL; } while(0) #endif /* mb_make_nil */ @@ -340,10 +348,6 @@ extern "C" { # define mb_int_val(__v, __d) do { if((__v).type == MB_DT_INT) (__d) = (__v).value.integer; else if((__v).type == MB_DT_REAL) (__d) = (int_t)((__v).value.float_point); else (__d) = ~((int_t)0); } while(0) #endif /* mb_int_val */ -#ifndef mb_bytes_size -# define mb_bytes_size (mb_max(mb_max(mb_max(sizeof(void*), sizeof(unsigned long)), sizeof(int_t)), sizeof(real_t))) -#endif /* mb_bytes_size */ - #ifndef MB_CODES # define MB_CODES # define MB_FUNC_OK 0 @@ -569,8 +573,6 @@ typedef struct mb_value_t { mb_value_u value; } mb_value_t; -typedef unsigned short mb_mem_tag_t; - typedef int (* mb_func_t)(struct mb_interpreter_t*, void**); typedef int (* mb_has_routine_arg_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, unsigned*, void*); typedef int (* mb_pop_routine_arg_func_t)(struct mb_interpreter_t*, void**, mb_value_t*, unsigned, unsigned*, void*, mb_value_t*);