some code cleanup

This commit is contained in:
hyung-hwan 2022-08-03 13:56:20 +00:00
parent 118356650a
commit 4020a2401b
2 changed files with 54 additions and 109 deletions

View File

@ -315,29 +315,6 @@ static const hcl_bch_t* get_base_name (const hcl_bch_t* path)
return (last == HCL_NULL)? path: (last + 1);
}
static bb_t* bb_open (hcl_t* hcl, int fd, const char* fn)
{
hcl_oow_t fnlen;
bb_t* bb;
fnlen = hcl_count_bcstr(fn);
bb = (bb_t*)hcl_callocmem(hcl, HCL_SIZEOF(*bb) + (HCL_SIZEOF(hcl_bch_t) * (fnlen + 1)));
if (!bb) return HCL_NULL;
/* copy ane empty string as a main stream's name */
bb->fn = (hcl_bch_t*)(bb + 1);
hcl_copy_bcstr (bb->fn, fnlen + 1, fn);
bb->fd = fd;
return bb;
/*
if (bb->fd <= -1)
{
hcl_seterrnum (hcl, HCL_EIOERR);
goto oops;
}
*/
}
static HCL_INLINE int open_input (hcl_t* hcl, hcl_ioinarg_t* arg)
{
@ -350,7 +327,6 @@ static HCL_INLINE int open_input (hcl_t* hcl, hcl_ioinarg_t* arg)
if (arg->includer)
{
/* includee */
#if 1
/* TOOD: Do i need to skip prepending the include path if the included path is an absolute path?
* it may be good for security if i don't skip it. we can lock the included files in a given directory */
hcl_oow_t ucslen, bcslen, parlen;
@ -407,22 +383,10 @@ static HCL_INLINE int open_input (hcl_t* hcl, hcl_ioinarg_t* arg)
hcl_seterrnum (hcl, HCL_EIOERR);
goto oops;
}
#else
bb = bb_open(hcl, -1, "");
if (!bb) goto oops;
bb->fd = open(bb->fn, O_RDONLY, 0);
if (bb->fd <= -1)
{
hcl_seterrnum (hcl, HCL_EIOERR);
goto oops;
}
#endif
}
else
{
/* main stream */
#if 1
hcl_oow_t pathlen = 0;
bb = (bb_t*)hcl_callocmem(hcl, HCL_SIZEOF(*bb) + (HCL_SIZEOF(hcl_bch_t) * (pathlen + 1)));
if (!bb) goto oops;
@ -432,10 +396,6 @@ static HCL_INLINE int open_input (hcl_t* hcl, hcl_ioinarg_t* arg)
hcl_copy_bcstr (bb->fn, pathlen + 1, "");
bb->fd = xtn->proto->worker->sck;
#else
bb = bb_open(hcl, xtn->proto->worker->sck, "");
if (!bb) goto oops;
#endif
}
HCL_ASSERT (hcl, bb->fd >= 0);
@ -482,11 +442,31 @@ static HCL_INLINE int read_input (hcl_t* hcl, hcl_ioinarg_t* arg)
worker = xtn->proto->worker;
start_over:
if (bb->fd == worker->sck)
if (arg->includer)
{
/* includee */
if (HCL_UNLIKELY(worker->server->stopreq))
{
hcl_seterrbfmt (hcl, HCL_EGENERIC, "stop requested");
return -1;
}
x = read(bb->fd, &bb->buf[bb->len], HCL_COUNTOF(bb->buf) - bb->len);
if (x <= -1)
{
if (errno == EINTR) goto start_over;
hcl_seterrwithsyserr (hcl, 0, errno);
return -1;
}
bb->len += x;
}
else
{
/* main stream */
hcl_server_t* server;
HCL_ASSERT (hcl, arg->includer == HCL_NULL);
HCL_ASSERT (hcl, bb->fd == worker->sck);
server = worker->server;
while (1)
@ -518,7 +498,7 @@ start_over:
/* timed out - no activity on the pfd */
if (tmout > 0)
{
hcl_seterrbfmt (hcl, HCL_EGENERIC, "no activity on the worker socket %d", worker->sck);
hcl_seterrbfmt (hcl, HCL_EGENERIC, "no activity on the worker socket %d", bb->fd);
return -1;
}
}
@ -533,26 +513,6 @@ start_over:
bb->len += x;
}
else
{
HCL_ASSERT (hcl, arg->includer != HCL_NULL);
if (HCL_UNLIKELY(worker->server->stopreq))
{
hcl_seterrbfmt (hcl, HCL_EGENERIC, "stop requested");
return -1;
}
x = read(bb->fd, &bb->buf[bb->len], HCL_COUNTOF(bb->buf) - bb->len);
if (x <= -1)
{
if (errno == EINTR) goto start_over;
hcl_seterrwithsyserr (hcl, 0, errno);
return -1;
}
bb->len += x;
}
#if defined(HCL_OOCH_IS_UCH)
bcslen = bb->len;
@ -1273,27 +1233,30 @@ static void send_error_message (hcl_server_proto_t* proto, const hcl_ooch_t* err
}
}
static void reformat_synerr (hcl_t* hcl)
{
hcl_synerr_t synerr;
const hcl_ooch_t* orgmsg;
static hcl_ooch_t nullstr[] = { '\0' };
hcl_getsynerr (hcl, &synerr);
orgmsg = hcl_backuperrmsg(hcl);
hcl_seterrbfmt (
hcl, HCL_ESYNERR,
"%js%hs%.*js at %js%hsline %zu column %zu",
orgmsg,
(synerr.tgt.len > 0? " near ": ""),
synerr.tgt.len, synerr.tgt.val,
(synerr.loc.file? synerr.loc.file: nullstr),
(synerr.loc.file? " ": ""),
synerr.loc.line, synerr.loc.colm
);
}
static void send_proto_hcl_error (hcl_server_proto_t* proto)
{
hcl_errnum_t err;
err = hcl_geterrnum(proto->hcl);
if (err == HCL_ESYNERR)
{
const hcl_ooch_t* bem;
hcl_synerr_t synerr;
static hcl_ooch_t nullstr[] = { '\0' };
/* concatenate the error message with the error location */
hcl_getsynerr (proto->hcl, &synerr);
bem = hcl_backuperrmsg(proto->hcl);
hcl_seterrbfmt (proto->hcl, HCL_ESYNERR, "%js (%js%hs%zu,%zu)",
bem,
(synerr.loc.file? synerr.loc.file: nullstr),
(synerr.loc.file? ":": ""),
synerr.loc.line, synerr.loc.colm);
}
if (hcl_geterrnum(proto->hcl) == HCL_ESYNERR) reformat_synerr (proto->hcl);
send_error_message (proto, hcl_geterrmsg(proto->hcl));
}
@ -1352,24 +1315,6 @@ static int kill_server_worker (hcl_server_proto_t* proto, hcl_oow_t wid)
return xret;
}
static void reformat_synerr (hcl_t* hcl)
{
hcl_synerr_t synerr;
const hcl_ooch_t* orgmsg;
hcl_getsynerr (hcl, &synerr);
orgmsg = hcl_backuperrmsg(hcl);
hcl_seterrbfmt (
hcl, HCL_ESYNERR,
"%js%s%.*js at line %zu column %zu",
orgmsg,
(synerr.tgt.len > 0? " near ": ""),
synerr.tgt.len, synerr.tgt.val,
synerr.loc.line, synerr.loc.colm
);
}
int hcl_server_proto_handle_request (hcl_server_proto_t* proto)
{
if (get_token(proto) <= -1) goto fail_with_errmsg;
@ -1583,7 +1528,7 @@ int hcl_server_proto_handle_request (hcl_server_proto_t* proto)
}
default:
hcl_seterrbfmt (proto->hcl, HCL_EINVAL, "Unknown token %.*js of type %d", proto->tok.len, proto->tok.ptr, (int)proto->tok.type);
hcl_seterrbfmt (proto->hcl, HCL_EINVAL, "Unknown token %.*js", proto->tok.len, proto->tok.ptr);
goto fail_with_errmsg;
}

View File

@ -957,16 +957,16 @@ static pf_t builtin_prims[] =
{ 1, 1, pf_object_new, 10, { 'o','b','j','e','c','t','-','n','e','w' } },
{ 0, 0, hcl_pf_process_current, 15, { 'c','u','r','r','e','n','t','-','p','r','o','c','e','s','s'} },
{ 1, HCL_TYPE_MAX(hcl_oow_t), hcl_pf_process_fork, 4, { 'f','o','r','k'} },
{ 1, 1, hcl_pf_process_resume, 6, { 'r','e','s','u','m','e' } },
{ 0, 1, hcl_pf_process_suspend, 7, { 's','u','s','p','e','n','d' } },
{ 0, 1, hcl_pf_process_terminate, 9, { 't','e','r','m','i','n','a','t','e' } },
{ 0, 0, hcl_pf_process_terminate_all, 13, { 't','e','r','m','i','n','a','t','e','-','a','l','l' } },
{ 0, 0, hcl_pf_process_yield, 5, { 'y','i','e','l','d'} },
{ 1, HCL_TYPE_MAX(hcl_oow_t), hcl_pf_process_fork, 4, { 'f','o','r','k'} },
{ 1, 1, hcl_pf_process_resume, 6, { 'r','e','s','u','m','e' } },
{ 0, 1, hcl_pf_process_suspend, 7, { 's','u','s','p','e','n','d' } },
{ 0, 1, hcl_pf_process_terminate, 9, { 't','e','r','m','i','n','a','t','e' } },
{ 0, 0, hcl_pf_process_terminate_all, 13, { 't','e','r','m','i','n','a','t','e','-','a','l','l' } },
{ 0, 0, hcl_pf_process_yield, 5, { 'y','i','e','l','d'} },
{ 0, 0, hcl_pf_semaphore_new, 7, { 's','e','m','-','n','e','w'} },
{ 1, 1, hcl_pf_semaphore_wait, 8, { 's','e','m','-','w','a','i','t'} },
{ 0, 0, hcl_pf_semaphore_new, 7, { 's','e','m','-','n','e','w'} },
{ 1, 1, hcl_pf_semaphore_wait, 8, { 's','e','m','-','w','a','i','t'} },
{ 1, 3, hcl_pf_semaphore_signal, 10, { 's','e','m','-','s','i','g','n','a','l'} },
{ 2, 2, hcl_pf_semaphore_signal_on_input, 19, { 's','e','m','-','s','i','g','n','a','l','-','o','n','-','i','n','p','u','t'} },
{ 2, 2, hcl_pf_semaphore_signal_on_output, 20, { 's','e','m','-','s','i','g','n','a','l','-','o','n','-','o','u','t','p','u','t'} },