fixed wrong field names in cmn/fs.c
fixed a memory leak bug in run_printf of awk/run.c
This commit is contained in:
parent
fb638de6d6
commit
17b55e20ed
@ -2839,8 +2839,8 @@ static int run_reset (qse_awk_rtx_t* rtx, qse_awk_nde_reset_t* nde)
|
|||||||
static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
||||||
{
|
{
|
||||||
qse_char_t* out = QSE_NULL;
|
qse_char_t* out = QSE_NULL;
|
||||||
|
qse_awk_val_t* out_v = QSE_NULL;
|
||||||
const qse_char_t* dst;
|
const qse_char_t* dst;
|
||||||
qse_awk_val_t* v;
|
|
||||||
int n, xret = 0;
|
int n, xret = 0;
|
||||||
|
|
||||||
QSE_ASSERT (
|
QSE_ASSERT (
|
||||||
@ -2851,35 +2851,24 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
(nde->out_type == QSE_AWK_OUT_CONSOLE && nde->out == QSE_NULL));
|
(nde->out_type == QSE_AWK_OUT_CONSOLE && nde->out == QSE_NULL));
|
||||||
|
|
||||||
/* check if destination has been specified. */
|
/* check if destination has been specified. */
|
||||||
if (nde->out != QSE_NULL)
|
if (nde->out)
|
||||||
{
|
{
|
||||||
qse_awk_rtx_valtostr_out_t vsout;
|
|
||||||
qse_size_t len;
|
qse_size_t len;
|
||||||
|
|
||||||
/* if so, resolve the destination name */
|
/* if so, resolve the destination name */
|
||||||
v = eval_expression (rtx, nde->out);
|
out_v = eval_expression (rtx, nde->out);
|
||||||
if (v == QSE_NULL) return -1;
|
if (!out_v) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (rtx, v);
|
qse_awk_rtx_refupval (rtx, out_v);
|
||||||
|
|
||||||
vsout.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
out = qse_awk_rtx_getvalstr (rtx, out_v, &len);
|
||||||
if (qse_awk_rtx_valtostr (rtx, v, &vsout) <= -1)
|
if (!out) goto oops;
|
||||||
{
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
out = vsout.u.cpldup.ptr;
|
|
||||||
len = vsout.u.cpldup.len;
|
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
|
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
/* the destination name is empty */
|
/* the destination name is empty */
|
||||||
QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* it needs to check if the destination name contains
|
/* it needs to check if the destination name contains
|
||||||
@ -2896,8 +2885,7 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
out, qse_strlen(out), &nde->loc);
|
out, qse_strlen(out), &nde->loc);
|
||||||
|
|
||||||
/* if so, it skips writing */
|
/* if so, it skips writing */
|
||||||
QSE_AWK_FREE (rtx->awk, out);
|
goto oops_1;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2906,7 +2894,7 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
dst = (out == QSE_NULL)? QSE_T(""): out;
|
dst = (out == QSE_NULL)? QSE_T(""): out;
|
||||||
|
|
||||||
/* check if print is followed by any arguments */
|
/* check if print is followed by any arguments */
|
||||||
if (nde->args == QSE_NULL)
|
if (!nde->args)
|
||||||
{
|
{
|
||||||
/* if it doesn't have any arguments, print the entire
|
/* if it doesn't have any arguments, print the entire
|
||||||
* input record */
|
* input record */
|
||||||
@ -2922,9 +2910,7 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
goto oops;
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2933,6 +2919,7 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
/* if it has any arguments, print the arguments separated by
|
/* if it has any arguments, print the arguments separated by
|
||||||
* the value OFS */
|
* the value OFS */
|
||||||
qse_awk_nde_t* head, * np;
|
qse_awk_nde_t* head, * np;
|
||||||
|
qse_awk_val_t* v;
|
||||||
|
|
||||||
if (nde->args->type == QSE_AWK_NDE_GRP)
|
if (nde->args->type == QSE_AWK_NDE_GRP)
|
||||||
{
|
{
|
||||||
@ -2958,23 +2945,18 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
goto oops;
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
v = eval_expression (rtx, np);
|
v = eval_expression (rtx, np);
|
||||||
if (v == QSE_NULL)
|
if (v == QSE_NULL) goto oops_1;
|
||||||
{
|
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
qse_awk_rtx_refupval (rtx, v);
|
||||||
return -1;
|
n = qse_awk_rtx_writeio_val (rtx, nde->out_type, dst, v);
|
||||||
}
|
qse_awk_rtx_refdownval (rtx, v);
|
||||||
qse_awk_rtx_refupval (rtx, v);
|
|
||||||
|
|
||||||
n = qse_awk_rtx_writeio_val (
|
|
||||||
rtx, nde->out_type, dst, v);
|
|
||||||
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
||||||
{
|
{
|
||||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
||||||
@ -2983,14 +2965,9 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
goto oops;
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3006,26 +2983,39 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
goto oops;
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unlike printf, flushio() is not needed here as print
|
/* unlike printf, flushio() is not needed here as print
|
||||||
* inserts <NL> that triggers auto-flush */
|
* inserts <NL> that triggers auto-flush */
|
||||||
|
if (out_v)
|
||||||
|
{
|
||||||
|
if (out) qse_awk_rtx_freevalstr (rtx, out_v, out);
|
||||||
|
qse_awk_rtx_refdownval (rtx, out_v);
|
||||||
|
}
|
||||||
|
|
||||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
|
|
||||||
/*skip_write:*/
|
|
||||||
return xret;
|
return xret;
|
||||||
|
|
||||||
|
oops:
|
||||||
|
ADJERR_LOC (rtx, &nde->loc);
|
||||||
|
|
||||||
|
oops_1:
|
||||||
|
if (out_v)
|
||||||
|
{
|
||||||
|
if (out) qse_awk_rtx_freevalstr (rtx, out_v, out);
|
||||||
|
qse_awk_rtx_refdownval (rtx, out_v);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
||||||
{
|
{
|
||||||
qse_char_t* out = QSE_NULL;
|
qse_char_t* out = QSE_NULL;
|
||||||
const qse_char_t* dst;
|
qse_awk_val_t* out_v = QSE_NULL;
|
||||||
qse_awk_val_t* v;
|
qse_awk_val_t* v;
|
||||||
|
const qse_char_t* dst;
|
||||||
qse_awk_nde_t* head;
|
qse_awk_nde_t* head;
|
||||||
int n, xret = 0;
|
int n, xret = 0;
|
||||||
|
|
||||||
@ -3036,34 +3026,23 @@ static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
(nde->out_type == QSE_AWK_OUT_APFILE && nde->out != QSE_NULL) ||
|
(nde->out_type == QSE_AWK_OUT_APFILE && nde->out != QSE_NULL) ||
|
||||||
(nde->out_type == QSE_AWK_OUT_CONSOLE && nde->out == QSE_NULL));
|
(nde->out_type == QSE_AWK_OUT_CONSOLE && nde->out == QSE_NULL));
|
||||||
|
|
||||||
if (nde->out != QSE_NULL)
|
if (nde->out)
|
||||||
{
|
{
|
||||||
qse_size_t len;
|
qse_size_t len;
|
||||||
qse_awk_rtx_valtostr_out_t vsout;
|
|
||||||
|
|
||||||
v = eval_expression (rtx, nde->out);
|
out_v = eval_expression (rtx, nde->out);
|
||||||
if (v == QSE_NULL) return -1;
|
if (!out_v) return -1;
|
||||||
|
|
||||||
qse_awk_rtx_refupval (rtx, v);
|
qse_awk_rtx_refupval (rtx, out_v);
|
||||||
|
|
||||||
vsout.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;
|
out = qse_awk_rtx_getvalstr (rtx, out_v, &len);
|
||||||
if (qse_awk_rtx_valtostr (rtx, v, &vsout) <= -1)
|
if (!out) goto oops;
|
||||||
{
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
out = vsout.u.cpldup.ptr;
|
|
||||||
len = vsout.u.cpldup.len;
|
|
||||||
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
|
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
/* the output destination name is empty. */
|
/* the output destination name is empty. */
|
||||||
QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
||||||
return -1;
|
goto oops_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
@ -3079,8 +3058,7 @@ static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
|
|
||||||
/* the output destination name contains a null
|
/* the output destination name contains a null
|
||||||
* character. */
|
* character. */
|
||||||
QSE_AWK_FREE (rtx->awk, out);
|
goto oops_1;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3102,31 +3080,20 @@ static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
"valid printf statement should have at least one argument. the parser must ensure this.");
|
"valid printf statement should have at least one argument. the parser must ensure this.");
|
||||||
|
|
||||||
v = eval_expression (rtx, head);
|
v = eval_expression (rtx, head);
|
||||||
if (v == QSE_NULL)
|
if (v == QSE_NULL) goto oops_1;
|
||||||
{
|
|
||||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qse_awk_rtx_refupval (rtx, v);
|
qse_awk_rtx_refupval (rtx, v);
|
||||||
if (QSE_AWK_RTX_GETVALTYPE (rtx, v) != QSE_AWK_VAL_STR)
|
if (QSE_AWK_RTX_GETVALTYPE (rtx, v) != QSE_AWK_VAL_STR)
|
||||||
{
|
{
|
||||||
/* the remaining arguments are ignored as the format cannot
|
/* the remaining arguments are ignored as the format cannot
|
||||||
* contain any % characters */
|
* contain any % characters. e.g. printf (1, "xxxx") */
|
||||||
n = qse_awk_rtx_writeio_val (rtx, nde->out_type, dst, v);
|
n = qse_awk_rtx_writeio_val (rtx, nde->out_type, dst, v);
|
||||||
|
qse_awk_rtx_refdownval (rtx, v);
|
||||||
|
|
||||||
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
||||||
{
|
{
|
||||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT) xret = PRINT_IOERR;
|
||||||
{
|
else goto oops;
|
||||||
xret = PRINT_IOERR;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3137,37 +3104,41 @@ static int run_printf (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
|||||||
((qse_awk_val_str_t*)v)->val.ptr,
|
((qse_awk_val_str_t*)v)->val.ptr,
|
||||||
((qse_awk_val_str_t*)v)->val.len,
|
((qse_awk_val_str_t*)v)->val.len,
|
||||||
head->next);
|
head->next);
|
||||||
|
|
||||||
|
qse_awk_rtx_refdownval (rtx, v);
|
||||||
|
|
||||||
if (n <= -1)
|
if (n <= -1)
|
||||||
{
|
{
|
||||||
if (n == PRINT_IOERR) xret = n;
|
if (n == PRINT_IOERR) xret = n;
|
||||||
else
|
else goto oops;
|
||||||
{
|
|
||||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
ADJERR_LOC (rtx, &nde->loc);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qse_awk_rtx_refdownval (rtx, v);
|
|
||||||
|
|
||||||
|
|
||||||
/*skip_write:*/
|
|
||||||
if (qse_awk_rtx_flushio (rtx, nde->out_type, dst) <= -1)
|
if (qse_awk_rtx_flushio (rtx, nde->out_type, dst) <= -1)
|
||||||
{
|
{
|
||||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT) xret = PRINT_IOERR;
|
||||||
{
|
else goto oops_1;
|
||||||
xret = PRINT_IOERR;
|
}
|
||||||
}
|
|
||||||
else
|
if (out_v)
|
||||||
{
|
{
|
||||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
if (out) qse_awk_rtx_freevalstr (rtx, out_v, out);
|
||||||
return -1;
|
qse_awk_rtx_refdownval (rtx, out_v);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
|
||||||
return xret;
|
return xret;
|
||||||
|
|
||||||
|
oops:
|
||||||
|
ADJERR_LOC (rtx, &nde->loc);
|
||||||
|
|
||||||
|
oops_1:
|
||||||
|
if (out_v)
|
||||||
|
{
|
||||||
|
if (out) qse_awk_rtx_freevalstr (rtx, out_v, out);
|
||||||
|
qse_awk_rtx_refdownval (rtx, out_v);
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int output_formatted (
|
static int output_formatted (
|
||||||
|
@ -658,8 +658,8 @@ qse_fs_ent_t* qse_fs_read (qse_fs_t* fs, int flags)
|
|||||||
{
|
{
|
||||||
#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
|
#if defined(HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
|
||||||
#if defined(HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
|
#if defined(HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
|
||||||
fs->ent.time.create.secs = st.st_birthtim.tv_sec;
|
fs->ent.time.create.sec = st.st_birthtim.tv_sec;
|
||||||
fs->ent.time.create.nsecs = st.st_birthtim.tv_nsec;
|
fs->ent.time.create.nsec = st.st_birthtim.tv_nsec;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fs->ent.time.access.sec = st.st_atim.tv_sec;
|
fs->ent.time.access.sec = st.st_atim.tv_sec;
|
||||||
|
@ -1963,7 +1963,18 @@ int qse_httpd_resolvename (qse_httpd_t* httpd, const qse_mchar_t* name, qse_http
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTPD_DBGOUT1 ("Sending DNS request [%hs]\n", name);
|
#if defined(QSE_HTTPD_DEBUG)
|
||||||
|
{
|
||||||
|
qse_mchar_t tmp[128];
|
||||||
|
if (dns_server)
|
||||||
|
qse_nwadtombs (&dns_server->nwad, tmp, QSE_COUNTOF(tmp), QSE_NWADTOMBS_ALL);
|
||||||
|
else
|
||||||
|
qse_mbscpy (tmp, QSE_MT("default server"));
|
||||||
|
|
||||||
|
HTTPD_DBGOUT2 ("Sending DNS request [%hs] to [%hs]\n", name, tmp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return httpd->opt.scb.dns.send (httpd, &httpd->dns, name, resol, dns_server, ctx);
|
return httpd->opt.scb.dns.send (httpd, &httpd->dns, name, resol, dns_server, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user