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)
|
||||
{
|
||||
qse_char_t* out = QSE_NULL;
|
||||
qse_awk_val_t* out_v = QSE_NULL;
|
||||
const qse_char_t* dst;
|
||||
qse_awk_val_t* v;
|
||||
int n, xret = 0;
|
||||
|
||||
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));
|
||||
|
||||
/* 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;
|
||||
|
||||
/* if so, resolve the destination name */
|
||||
v = eval_expression (rtx, nde->out);
|
||||
if (v == QSE_NULL) return -1;
|
||||
out_v = eval_expression (rtx, nde->out);
|
||||
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;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &vsout) <= -1)
|
||||
{
|
||||
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);
|
||||
out = qse_awk_rtx_getvalstr (rtx, out_v, &len);
|
||||
if (!out) goto oops;
|
||||
|
||||
if (len <= 0)
|
||||
{
|
||||
/* the destination name is empty */
|
||||
QSE_AWK_FREE (rtx->awk, out);
|
||||
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
||||
return -1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
/* if so, it skips writing */
|
||||
QSE_AWK_FREE (rtx->awk, out);
|
||||
return -1;
|
||||
goto oops_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;
|
||||
|
||||
/* 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
|
||||
* input record */
|
||||
@ -2922,9 +2910,7 @@ static int run_print (qse_awk_rtx_t* rtx, qse_awk_nde_print_t* nde)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
||||
ADJERR_LOC (rtx, &nde->loc);
|
||||
return -1;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
* the value OFS */
|
||||
qse_awk_nde_t* head, * np;
|
||||
qse_awk_val_t* v;
|
||||
|
||||
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
|
||||
{
|
||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
||||
ADJERR_LOC (rtx, &nde->loc);
|
||||
return -1;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
v = eval_expression (rtx, np);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
||||
return -1;
|
||||
}
|
||||
qse_awk_rtx_refupval (rtx, v);
|
||||
if (v == QSE_NULL) goto oops_1;
|
||||
|
||||
qse_awk_rtx_refupval (rtx, v);
|
||||
n = qse_awk_rtx_writeio_val (rtx, nde->out_type, dst, v);
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
n = qse_awk_rtx_writeio_val (
|
||||
rtx, nde->out_type, dst, v);
|
||||
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
||||
{
|
||||
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
|
||||
{
|
||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
ADJERR_LOC (rtx, &nde->loc);
|
||||
return -1;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
if (out) QSE_AWK_FREE (rtx->awk, out);
|
||||
ADJERR_LOC (rtx, &nde->loc);
|
||||
return -1;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
|
||||
/* unlike printf, flushio() is not needed here as print
|
||||
* 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;
|
||||
|
||||
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)
|
||||
{
|
||||
qse_char_t* out = QSE_NULL;
|
||||
const qse_char_t* dst;
|
||||
qse_awk_val_t* out_v = QSE_NULL;
|
||||
qse_awk_val_t* v;
|
||||
const qse_char_t* dst;
|
||||
qse_awk_nde_t* head;
|
||||
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_CONSOLE && nde->out == QSE_NULL));
|
||||
|
||||
if (nde->out != QSE_NULL)
|
||||
if (nde->out)
|
||||
{
|
||||
qse_size_t len;
|
||||
qse_awk_rtx_valtostr_out_t vsout;
|
||||
|
||||
v = eval_expression (rtx, nde->out);
|
||||
if (v == QSE_NULL) return -1;
|
||||
out_v = eval_expression (rtx, nde->out);
|
||||
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;
|
||||
if (qse_awk_rtx_valtostr (rtx, v, &vsout) <= -1)
|
||||
{
|
||||
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);
|
||||
out = qse_awk_rtx_getvalstr (rtx, out_v, &len);
|
||||
if (!out) goto oops;
|
||||
|
||||
if (len <= 0)
|
||||
{
|
||||
/* the output destination name is empty. */
|
||||
QSE_AWK_FREE (rtx->awk, out);
|
||||
SETERR_LOC (rtx, QSE_AWK_EIONMEM, &nde->loc);
|
||||
return -1;
|
||||
goto oops_1;
|
||||
}
|
||||
|
||||
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
|
||||
* character. */
|
||||
QSE_AWK_FREE (rtx->awk, out);
|
||||
return -1;
|
||||
goto oops_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.");
|
||||
|
||||
v = eval_expression (rtx, head);
|
||||
if (v == QSE_NULL)
|
||||
{
|
||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
||||
return -1;
|
||||
}
|
||||
if (v == QSE_NULL) goto oops_1;
|
||||
|
||||
qse_awk_rtx_refupval (rtx, v);
|
||||
if (QSE_AWK_RTX_GETVALTYPE (rtx, v) != QSE_AWK_VAL_STR)
|
||||
{
|
||||
/* 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);
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
if (n <= -1 /*&& rtx->errinf.num != QSE_AWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
||||
{
|
||||
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;
|
||||
}
|
||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT) xret = PRINT_IOERR;
|
||||
else goto oops;
|
||||
}
|
||||
}
|
||||
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.len,
|
||||
head->next);
|
||||
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
if (n <= -1)
|
||||
{
|
||||
if (n == PRINT_IOERR) xret = n;
|
||||
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 goto oops;
|
||||
}
|
||||
}
|
||||
qse_awk_rtx_refdownval (rtx, v);
|
||||
|
||||
|
||||
/*skip_write:*/
|
||||
if (qse_awk_rtx_flushio (rtx, nde->out_type, dst) <= -1)
|
||||
{
|
||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT)
|
||||
{
|
||||
xret = PRINT_IOERR;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
||||
return -1;
|
||||
}
|
||||
if (rtx->awk->opt.trait & QSE_AWK_TOLERANT) xret = PRINT_IOERR;
|
||||
else goto oops_1;
|
||||
}
|
||||
|
||||
if (out_v)
|
||||
{
|
||||
if (out) qse_awk_rtx_freevalstr (rtx, out_v, out);
|
||||
qse_awk_rtx_refdownval (rtx, out_v);
|
||||
}
|
||||
|
||||
if (out != QSE_NULL) QSE_AWK_FREE (rtx->awk, out);
|
||||
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 (
|
||||
|
@ -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_BIRTHTIM_TV_NSEC)
|
||||
fs->ent.time.create.secs = st.st_birthtim.tv_sec;
|
||||
fs->ent.time.create.nsecs = st.st_birthtim.tv_nsec;
|
||||
fs->ent.time.create.sec = st.st_birthtim.tv_sec;
|
||||
fs->ent.time.create.nsec = st.st_birthtim.tv_nsec;
|
||||
#endif
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user