added HCL_LOG_TARGET_BCS and HCL_LOG_TARGET_UCS

This commit is contained in:
2021-07-19 18:59:17 +00:00
parent 08cf4548bb
commit 28bac46b39
4 changed files with 111 additions and 50 deletions

View File

@ -407,7 +407,7 @@ int hcl_setoption (hcl_t* hcl, hcl_option_t id, const void* value)
break;
case HCL_LOG_TARGET_B:
case HCL_LOG_TARGET_BCSTR:
{
hcl_bch_t* v1;
hcl_uch_t* v2;
@ -427,7 +427,7 @@ int hcl_setoption (hcl_t* hcl, hcl_option_t id, const void* value)
break;
}
case HCL_LOG_TARGET_U:
case HCL_LOG_TARGET_UCSTR:
{
hcl_uch_t* v1;
hcl_bch_t* v2;
@ -447,6 +447,48 @@ int hcl_setoption (hcl_t* hcl, hcl_option_t id, const void* value)
break;
}
case HCL_LOG_TARGET_BCS:
{
hcl_bch_t* v1;
hcl_uch_t* v2;
hcl_bcs_t* v = (hcl_bcs_t*)value;
v1 = hcl_dupbchars(hcl, v->ptr, v->len);
if (HCL_UNLIKELY(!v1)) return -1;
v2 = hcl_dupbtouchars(hcl, v->ptr, v->len, HCL_NULL);
if (HCL_UNLIKELY(!v2))
{
hcl_freemem (hcl, v1);
return -1;
}
hcl->option.log_target_u = v2;
hcl->option.log_target_b = v1;
break;
}
case HCL_LOG_TARGET_UCS:
{
hcl_uch_t* v1;
hcl_bch_t* v2;
hcl_ucs_t* v = (hcl_bcs_t*)value;
v1 = hcl_dupuchars(hcl, v->ptr, v->len);
if (HCL_UNLIKELY(!v1)) return -1;
v2 = hcl_duputobchars(hcl, v->ptr, v->len, HCL_NULL);
if (HCL_UNLIKELY(!v2))
{
hcl_freemem (hcl, v1);
return -1;
}
hcl->option.log_target_u = v1;
hcl->option.log_target_b = v2;
break;
}
case HCL_SYMTAB_SIZE:
{
hcl_oow_t w;
@ -517,14 +559,24 @@ int hcl_getoption (hcl_t* hcl, hcl_option_t id, void* value)
*(hcl_oow_t*)value = hcl->option.log_maxcapa;
return 0;
case HCL_LOG_TARGET_B:
case HCL_LOG_TARGET_BCSTR:
*(hcl_bch_t**)value = hcl->option.log_target_b;
return 0;
case HCL_LOG_TARGET_U:
case HCL_LOG_TARGET_UCSTR:
*(hcl_uch_t**)value = hcl->option.log_target_u;
return 0;
case HCL_LOG_TARGET_BCS:
((hcl_bcs_t*)value)->ptr = hcl->option.log_target_b;
((hcl_bcs_t*)value)->len = hcl_count_bcstr(hcl->option.log_target_b);
return 0;
case HCL_LOG_TARGET_UCS:
((hcl_ucs_t*)value)->ptr = hcl->option.log_target_u;
((hcl_ucs_t*)value)->len = hcl_count_ucstr(hcl->option.log_target_u);
return 0;
case HCL_SYMTAB_SIZE:
*(hcl_oow_t*)value = hcl->option.dfl_symtab_size;
return 0;

View File

@ -169,12 +169,19 @@ enum hcl_option_t
HCL_TRAIT,
HCL_LOG_MASK,
HCL_LOG_MAXCAPA,
HCL_LOG_TARGET_B,
HCL_LOG_TARGET_U,
HCL_LOG_TARGET_BCSTR,
HCL_LOG_TARGET_UCSTR,
HCL_LOG_TARGET_BCS,
HCL_LOG_TARGET_UCS,
#if defined(HCL_OOCH_IS_UCH)
# define HCL_LOG_TARGET HCL_LOG_TARGET_U
# define HCL_LOG_TARGET HCL_LOG_TARGET_UCSTR
# define HCL_LOG_TARGET_OOCSTR HCL_LOG_TARGET_UCSTR
# define HCL_LOG_TARGET_OOCS HCL_LOG_TARGET_UCS
#else
# define HCL_LOG_TARGET HCL_LOG_TARGET_B
# define HCL_LOG_TARGET HCL_LOG_TARGET_BCSTR
# define HCL_LOG_TARGET_OOCSTR HCL_LOG_TARGET_BCSTR
# define HCL_LOG_TARGET_OOCS HCL_LOG_TARGET_BCS
#endif
HCL_SYMTAB_SIZE, /* default system table size */

View File

@ -2741,7 +2741,8 @@ static void cb_opt_set (hcl_t* hcl, hcl_option_t id, const void* value)
xtn_t* xtn = GET_XTN(hcl);
int fd;
if (id != HCL_LOG_TARGET) return; /* return success. not interested */
if (id != HCL_LOG_TARGET_BCSTR && id != HCL_LOG_TARGET_UCSTR &&
id != HCL_LOG_TARGET_BCS && id != HCL_LOG_TARGET_UCS) return; /* return success. not interested */
#if defined(_WIN32)
#if defined(HCL_OOCH_IS_UCH)