refactored fmt code

This commit is contained in:
2019-05-31 10:54:13 +00:00
parent 4ce47cb435
commit a161944682
15 changed files with 364 additions and 2801 deletions

126
lib/err.c
View File

@ -191,6 +191,132 @@ void hcl_seterrnum (hcl_t* hcl, hcl_errnum_t errnum)
hcl->errmsg.len = 0;
}
static int err_bcs (hcl_fmtout_t* fmtout, const hcl_bch_t* ptr, hcl_oow_t len)
{
hcl_t* hcl = (hcl_t*)fmtout->ctx;
hcl_oow_t max;
max = HCL_COUNTOF(hcl->errmsg.buf) - hcl->errmsg.len - 1;
#if defined(HCL_OOCH_IS_UCH)
if (max <= 0) return 1;
hcl_conv_bchars_to_uchars_with_cmgr (ptr, &len, &hcl->errmsg.buf[hcl->errmsg.len], &max, hcl->cmgr, 1);
hcl->errmsg.len += max;
#else
if (len > max) len = max;
if (len <= 0) return 1;
HCL_MEMCPY (&hcl->errmsg.buf[hcl->errmsg.len], ptr, len * HCL_SIZEOF(*ptr));
hcl->errmsg.len += len;
#endif
hcl->errmsg.buf[hcl->errmsg.len] = '\0';
return 1; /* success */
}
static int err_ucs (hcl_fmtout_t* fmtout, const hcl_uch_t* ptr, hcl_oow_t len)
{
hcl_t* hcl = (hcl_t*)fmtout->ctx;
hcl_oow_t max;
max = HCL_COUNTOF(hcl->errmsg.buf) - hcl->errmsg.len - 1;
#if defined(HCL_OOCH_IS_UCH)
if (len > max) len = max;
if (len <= 0) return 1;
HCL_MEMCPY (&hcl->errmsg.buf[hcl->errmsg.len], ptr, len * HCL_SIZEOF(*ptr));
hcl->errmsg.len += len;
#else
if (max <= 0) return 1;
hcl_conv_uchars_to_bchars_with_cmgr (ptr, &len, &hcl->errmsg.buf[hcl->errmsg.len], &max, hcl->cmgr);
hcl->errmsg.len += max;
#endif
hcl->errmsg.buf[hcl->errmsg.len] = '\0';
return 1; /* success */
}
void hcl_seterrbfmt (hcl_t* hcl, hcl_errnum_t errnum, const hcl_bch_t* fmt, ...)
{
va_list ap;
hcl_fmtout_t fo;
if (hcl->shuterr) return;
hcl->errmsg.len = 0;
HCL_MEMSET (&fo, 0, HCL_SIZEOF(fo));
fo.putbcs = err_bcs;
fo.putucs = err_ucs;
fo.putobj = hcl_fmt_object_;
fo.ctx = hcl;
va_start (ap, fmt);
hcl_bfmt_outv (&fo, fmt, ap);
va_end (ap);
hcl->errnum = errnum;
}
void hcl_seterrufmt (hcl_t* hcl, hcl_errnum_t errnum, const hcl_uch_t* fmt, ...)
{
va_list ap;
hcl_fmtout_t fo;
if (hcl->shuterr) return;
hcl->errmsg.len = 0;
HCL_MEMSET (&fo, 0, HCL_SIZEOF(fo));
fo.putbcs = err_bcs;
fo.putucs = err_ucs;
fo.putobj = hcl_fmt_object_;
fo.ctx = hcl;
va_start (ap, fmt);
hcl_ufmt_outv (&fo, fmt, ap);
va_end (ap);
hcl->errnum = errnum;
}
void hcl_seterrbfmtv (hcl_t* hcl, hcl_errnum_t errnum, const hcl_bch_t* fmt, va_list ap)
{
hcl_fmtout_t fo;
if (hcl->shuterr) return;
hcl->errmsg.len = 0;
HCL_MEMSET (&fo, 0, HCL_SIZEOF(fo));
fo.putbcs = err_bcs;
fo.putucs = err_ucs;
fo.putobj = hcl_fmt_object_;
fo.ctx = hcl;
hcl_bfmt_outv (&fo, fmt, ap);
hcl->errnum = errnum;
}
void hcl_seterrufmtv (hcl_t* hcl, hcl_errnum_t errnum, const hcl_uch_t* fmt, va_list ap)
{
hcl_fmtout_t fo;
if (hcl->shuterr) return;
hcl->errmsg.len = 0;
HCL_MEMSET (&fo, 0, HCL_SIZEOF(fo));
fo.putbcs = err_bcs;
fo.putucs = err_ucs;
fo.putobj = hcl_fmt_object_;
fo.ctx = hcl;
hcl_ufmt_outv (&fo, fmt, ap);
hcl->errnum = errnum;
}
void hcl_seterrwithsyserr (hcl_t* hcl, int syserr_type, int syserr_code)
{
hcl_errnum_t errnum;