*** empty log message ***
This commit is contained in:
parent
5298b39326
commit
582ffc9875
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: awk_i.h,v 1.79 2006-11-15 15:04:41 bacon Exp $
|
||||
* $Id: awk_i.h,v 1.80 2006-11-16 15:16:24 bacon Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_AWKI_H_
|
||||
@ -275,13 +275,6 @@ struct ase_awk_run_t
|
||||
ase_char_t tmp[4096];
|
||||
} sprintf;
|
||||
|
||||
struct
|
||||
{
|
||||
ase_awk_str_t fmt;
|
||||
ase_awk_str_t out;
|
||||
ase_char_t tmp[4096];
|
||||
} sconvf;
|
||||
|
||||
int errnum;
|
||||
|
||||
ase_awk_t* awk;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: func.c,v 1.75 2006-11-16 11:53:16 bacon Exp $
|
||||
* $Id: func.c,v 1.76 2006-11-16 15:16:25 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
@ -1248,10 +1248,23 @@ static int __bfn_sprintf (ase_awk_run_t* run)
|
||||
ase_awk_val_t* a0;
|
||||
ase_char_t* str0, * ptr;
|
||||
ase_size_t len0, len;
|
||||
ase_awk_str_t out, fbu;
|
||||
|
||||
nargs = ase_awk_getnargs (run);
|
||||
ASE_AWK_ASSERT (run->awk, nargs > 0);
|
||||
|
||||
if (ase_awk_str_open (&out, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
if (ase_awk_str_open (&fbu, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&out);
|
||||
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
a0 = ase_awk_getarg (run, 0);
|
||||
if (a0->type == ASE_AWK_VAL_STR)
|
||||
{
|
||||
@ -1262,20 +1275,35 @@ static int __bfn_sprintf (ase_awk_run_t* run)
|
||||
{
|
||||
str0 = ase_awk_valtostr (
|
||||
run, a0, ASE_AWK_VALTOSTR_CLEAR, ASE_NULL, &len0);
|
||||
if (str0 == ASE_NULL) return -1;
|
||||
if (str0 == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = ase_awk_sprintf (run, str0, len0, nargs, ASE_NULL, &len);
|
||||
ptr = ase_awk_sprintf (run,
|
||||
&out, &fbu, str0, len0, nargs, ASE_NULL, &len);
|
||||
if (a0->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, str0);
|
||||
if (ptr == ASE_NULL) return -1;
|
||||
if (ptr == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
return -1;
|
||||
}
|
||||
|
||||
a0 = ase_awk_makestrval (run, ptr, len);
|
||||
a0 = ase_awk_makestrval_nodup (run, ptr, len);
|
||||
if (a0 == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
ase_awk_setrunerrnum (run, ASE_AWK_ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_forfeit (&out);
|
||||
ase_awk_setretval (run, a0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.c,v 1.262 2006-11-16 11:53:16 bacon Exp $
|
||||
* $Id: run.c,v 1.263 2006-11-16 15:16:25 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
@ -676,30 +676,9 @@ static int __init_run (ase_awk_run_t* run, ase_awk_runios_t* runios, int* errnum
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ase_awk_str_open (&run->sconvf.out, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&run->sprintf.fmt);
|
||||
ase_awk_str_close (&run->sprintf.out);
|
||||
ase_awk_str_close (&run->inrec.line);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ase_awk_str_open (&run->sconvf.fmt, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&run->sconvf.out);
|
||||
ase_awk_str_close (&run->sprintf.fmt);
|
||||
ase_awk_str_close (&run->sprintf.out);
|
||||
ase_awk_str_close (&run->inrec.line);
|
||||
*errnum = ASE_AWK_ENOMEM;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ase_awk_map_open (&run->named,
|
||||
run, DEF_BUF_CAPA, __free_namedval, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&run->sconvf.fmt);
|
||||
ase_awk_str_close (&run->sconvf.out);
|
||||
ase_awk_str_close (&run->sprintf.fmt);
|
||||
ase_awk_str_close (&run->sprintf.out);
|
||||
ase_awk_str_close (&run->inrec.line);
|
||||
@ -714,8 +693,6 @@ static int __init_run (ase_awk_run_t* run, ase_awk_runios_t* runios, int* errnum
|
||||
if (run->pattern_range_state == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (&run->named);
|
||||
ase_awk_str_close (&run->sconvf.fmt);
|
||||
ase_awk_str_close (&run->sconvf.out);
|
||||
ase_awk_str_close (&run->sprintf.fmt);
|
||||
ase_awk_str_close (&run->sprintf.out);
|
||||
ase_awk_str_close (&run->inrec.line);
|
||||
@ -804,8 +781,6 @@ static void __deinit_run (ase_awk_run_t* run)
|
||||
run->global.subsep.len = 0;
|
||||
}
|
||||
|
||||
ase_awk_str_close (&run->sconvf.fmt);
|
||||
ase_awk_str_close (&run->sconvf.out);
|
||||
ase_awk_str_close (&run->sprintf.fmt);
|
||||
ase_awk_str_close (&run->sprintf.out);
|
||||
|
||||
@ -2466,7 +2441,8 @@ static int __formatted_output (
|
||||
ase_size_t len;
|
||||
int n;
|
||||
|
||||
ptr = ase_awk_sprintf (run, fmt, fmt_len, 0, args, &len);
|
||||
ptr = ase_awk_sprintf (run,
|
||||
ASE_NULL, ASE_NULL, fmt, fmt_len, 0, args, &len);
|
||||
if (ptr == ASE_NULL) return -1;
|
||||
|
||||
n = ase_awk_writeextio_str (run, out_type, dst, ptr, len);
|
||||
@ -5527,12 +5503,12 @@ static ase_char_t* __idxnde_to_str (
|
||||
}
|
||||
|
||||
ase_char_t* ase_awk_sprintf (
|
||||
ase_awk_run_t* run, const ase_char_t* fmt, ase_size_t fmt_len,
|
||||
ase_awk_run_t* run, ase_awk_str_t* out, ase_awk_str_t* fbu,
|
||||
const ase_char_t* fmt, ase_size_t fmt_len,
|
||||
ase_size_t nargs_on_stack, ase_awk_nde_t* args, ase_size_t* len)
|
||||
{
|
||||
ase_size_t i, j;
|
||||
ase_size_t stack_arg_idx = 1;
|
||||
ase_awk_str_t* out, * fbu;
|
||||
ase_awk_val_t* val;
|
||||
|
||||
#define OUT_CHAR(c) \
|
||||
@ -5555,18 +5531,17 @@ ase_char_t* ase_awk_sprintf (
|
||||
|
||||
if (nargs_on_stack == (ase_size_t)-1)
|
||||
{
|
||||
out = &run->sconvf.out;
|
||||
fbu = &run->sconvf.fmt;
|
||||
val = (ase_awk_val_t*)args;
|
||||
nargs_on_stack = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
out = &run->sprintf.out;
|
||||
fbu = &run->sprintf.fmt;
|
||||
val = ASE_NULL;
|
||||
}
|
||||
|
||||
if (out == ASE_NULL) out = &run->sprintf.out;
|
||||
if (fbu == ASE_NULL) fbu = &run->sprintf.fmt;
|
||||
|
||||
ase_awk_str_clear (out);
|
||||
ase_awk_str_clear (fbu);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: run.h,v 1.23 2006-11-14 14:54:18 bacon Exp $
|
||||
* $Id: run.h,v 1.24 2006-11-16 15:16:25 bacon Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_RUN_H_
|
||||
@ -105,7 +105,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
ase_char_t* ase_awk_sprintf (
|
||||
ase_awk_run_t* run, const ase_char_t* fmt, ase_size_t fmt_len,
|
||||
ase_awk_run_t* run, ase_awk_str_t* out, ase_awk_str_t* fbu,
|
||||
const ase_char_t* fmt, ase_size_t fmt_len,
|
||||
ase_size_t nargs_on_stack, ase_awk_nde_t* args, ase_size_t* len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: val.c,v 1.86 2006-11-16 11:53:16 bacon Exp $
|
||||
* $Id: val.c,v 1.87 2006-11-16 15:16:25 bacon Exp $
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
@ -120,6 +120,22 @@ ase_awk_val_t* ase_awk_makestrval (
|
||||
return (ase_awk_val_t*)val;
|
||||
}
|
||||
|
||||
ase_awk_val_t* ase_awk_makestrval_nodup (
|
||||
ase_awk_run_t* run, ase_char_t* str, ase_size_t len)
|
||||
{
|
||||
ase_awk_val_str_t* val;
|
||||
|
||||
val = (ase_awk_val_str_t*) ASE_AWK_MALLOC (
|
||||
run->awk, ase_sizeof(ase_awk_val_str_t));
|
||||
if (val == ASE_NULL) return ASE_NULL;
|
||||
|
||||
val->type = ASE_AWK_VAL_STR;
|
||||
val->ref = 0;
|
||||
val->len = len;
|
||||
val->buf = str;
|
||||
return (ase_awk_val_t*)val;
|
||||
}
|
||||
|
||||
ase_awk_val_t* ase_awk_makestrval2 (
|
||||
ase_awk_run_t* run,
|
||||
const ase_char_t* str1, ase_size_t len1,
|
||||
@ -572,9 +588,9 @@ static ase_char_t* __val_real_to_str (
|
||||
ase_awk_run_t* run, ase_awk_val_real_t* v,
|
||||
int opt, ase_awk_str_t* buf, ase_size_t* len)
|
||||
{
|
||||
/* TODO: change the code */
|
||||
ase_char_t* tmp;
|
||||
ase_size_t tmp_len;
|
||||
ase_awk_str_t out, fbu;
|
||||
|
||||
if (opt & ASE_AWK_VALTOSTR_PRINT)
|
||||
{
|
||||
@ -587,40 +603,52 @@ static ase_char_t* __val_real_to_str (
|
||||
tmp_len = run->global.convfmt.len;
|
||||
}
|
||||
|
||||
/* TODO: need to use awk's own version of sprintf so that it would have
|
||||
* problems with handling long double or double... */
|
||||
if (ase_awk_str_open (&out, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
run->errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
if (ase_awk_str_open (&fbu, 256, run->awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&out);
|
||||
run->errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
/* TODO: does it need to check if a null character is included in convfmt??? */
|
||||
/* TODO: check if convfmt contains more that one format specifier */
|
||||
//run->awk->syscas.sprintf (tbuf, ase_countof(tbuf), tmp, (double)v->val);
|
||||
tmp = ase_awk_sprintf (run, tmp, tmp_len,
|
||||
tmp = ase_awk_sprintf (run, &out, &fbu, tmp, tmp_len,
|
||||
(ase_size_t)-1, (ase_awk_nde_t*)v, &tmp_len);
|
||||
if (tmp == ASE_NULL) return ASE_NULL;
|
||||
if (tmp == ASE_NULL)
|
||||
{
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
if (buf == ASE_NULL)
|
||||
{
|
||||
//tmp = ase_awk_strdup (run->awk, tbuf);
|
||||
tmp = ase_awk_strxdup (run->awk, tmp, tmp_len);
|
||||
if (tmp == ASE_NULL)
|
||||
{
|
||||
run->errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
if (len != ASE_NULL) *len = ase_awk_strlen(tmp);
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_forfeit (&out);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (opt & ASE_AWK_VALTOSTR_CLEAR) ase_awk_str_clear (buf);
|
||||
|
||||
//if (ase_awk_str_cat (buf, tbuf) == (ase_size_t)-1)
|
||||
if (ase_awk_str_ncat (buf, tmp, tmp_len) == (ase_size_t)-1)
|
||||
{
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
run->errnum = ASE_AWK_ENOMEM;
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
tmp = ASE_AWK_STR_BUF(buf);
|
||||
if (len != ASE_NULL) *len = ASE_AWK_STR_LEN(buf);
|
||||
|
||||
ase_awk_str_close (&fbu);
|
||||
ase_awk_str_close (&out);
|
||||
}
|
||||
|
||||
return tmp;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: val.h,v 1.50 2006-11-16 11:53:16 bacon Exp $
|
||||
* $Id: val.h,v 1.51 2006-11-16 15:16:25 bacon Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_VAL_H_
|
||||
@ -143,9 +143,12 @@ extern ase_awk_val_t* ase_awk_val_one;
|
||||
ase_awk_val_t* ase_awk_makeintval (ase_awk_run_t* run, ase_long_t v);
|
||||
ase_awk_val_t* ase_awk_makerealval (ase_awk_run_t* run, ase_real_t v);
|
||||
|
||||
ase_awk_val_t* ase_awk_makestrval0 (ase_awk_run_t* run, const ase_char_t* str);
|
||||
ase_awk_val_t* ase_awk_makestrval0 (
|
||||
ase_awk_run_t* run, const ase_char_t* str);
|
||||
ase_awk_val_t* ase_awk_makestrval (
|
||||
ase_awk_run_t* run, const ase_char_t* str, ase_size_t len);
|
||||
ase_awk_val_t* ase_awk_makestrval_nodup (
|
||||
ase_awk_run_t* run, ase_char_t* str, ase_size_t len);
|
||||
ase_awk_val_t* ase_awk_makestrval2 (
|
||||
ase_awk_run_t* run,
|
||||
const ase_char_t* str1, ase_size_t len1,
|
||||
|
Loading…
x
Reference in New Issue
Block a user