diff --git a/ase/awk/func.c b/ase/awk/func.c index 37693ef5..6de51ec5 100644 --- a/ase/awk/func.c +++ b/ase/awk/func.c @@ -1,5 +1,5 @@ /* - * $Id: func.c,v 1.89 2007-01-07 07:30:39 bacon Exp $ + * $Id: func.c,v 1.90 2007-01-17 03:45:59 bacon Exp $ */ #include @@ -51,7 +51,10 @@ void* ase_awk_addbfn ( if (ase_awk_getbfn (awk, name, name_len) != ASE_NULL) { - ase_awk_seterror (awk, ASE_AWK_EEXIST, 0, ASE_NULL); + awk->sysfns.sprintf ( + awk->errmsg, ASE_COUNTOF(awk->errmsg), + ASE_T("'%.*s' added already"), name_len, name); + ase_awk_seterror (awk, ASE_AWK_EEXIST, 0, awk->errmsg); return ASE_NULL; } diff --git a/ase/com/Awk.cpp b/ase/com/Awk.cpp index d72c7527..ff780139 100644 --- a/ase/com/Awk.cpp +++ b/ase/com/Awk.cpp @@ -1,5 +1,5 @@ /* - * $Id: Awk.cpp,v 1.19 2007-01-16 14:20:42 bacon Exp $ + * $Id: Awk.cpp,v 1.20 2007-01-17 03:45:59 bacon Exp $ */ #include "stdafx.h" @@ -473,6 +473,8 @@ HRESULT CAwk::Parse (int* ret) ASE_AWK_DEPTH_REX_MATCH, max_depth.rex.match); } + ase_awk_clrbfn (handle); + for (bfn_t* bfn = bfn_list; bfn != NULL; bfn = bfn->next) { if (ase_awk_addbfn ( @@ -724,7 +726,28 @@ HRESULT CAwk::Run (int* ret) STDMETHODIMP CAwk::AddBuiltinFunction ( BSTR name, int min_args, int max_args, int* ret) { - bfn_t* bfn = (bfn_t*)malloc (sizeof(bfn_t)); + bfn_t* bfn; + size_t name_len = SysStringLen(name); + + for (bfn = bfn_list; bfn != NULL; bfn = bfn->next) + { + if (ase_awk_strxncmp ( + bfn->name.ptr, bfn->name.len, + name, name_len) == 0) + { + errnum = ASE_AWK_EEXIST; + errlin = 0; + _sntprintf ( + errmsg, ASE_COUNTOF(errmsg), + _T("'%.*s' added already\n"), + bfn->name.len, bfn->name.ptr); + + *ret = -1; + return S_OK; + } + } + + bfn = (bfn_t*)malloc (sizeof(bfn_t)); if (bfn == NULL) { errnum = ASE_AWK_ENOMEM; @@ -737,7 +760,7 @@ STDMETHODIMP CAwk::AddBuiltinFunction ( return S_OK; } - bfn->name.len = SysStringLen(name); + bfn->name.len = name_len; bfn->name.ptr = (TCHAR*)malloc (bfn->name.len * sizeof(TCHAR)); if (bfn->name.ptr == NULL) { diff --git a/ase/test/com/AwkForm.frm b/ase/test/com/AwkForm.frm index d58ec2b8..ec5a3070 100644 --- a/ase/test/com/AwkForm.frm +++ b/ase/test/com/AwkForm.frm @@ -173,14 +173,16 @@ Private Sub Execute_Click() 'Awk.MaxDepthForRexMatch = 10 Awk.UseLongLong = False - Awk.Debug = True If Awk.AddBuiltinFunction("sin", 1, 1) = -1 Then MsgBox "Cannot add builtin function - " + Awk.ErrorMessage Exit Sub End If - Call Awk.AddBuiltinFunction("cos", 1, 1) + If Awk.AddBuiltinFunction("cos", 1, 1) = -1 Then + MsgBox "Cannot add builtin function - " + Awk.ErrorMessage + Exit Sub + End If Call Awk.AddBuiltinFunction("tan", 1, 1) Call Awk.AddBuiltinFunction("trim", 1, 1) @@ -266,7 +268,9 @@ Function Awk_OpenExtio(ByVal extio As ASELib.AwkExtio) As Long End If Case ASELib.AWK_EXTIO_PIPE + Awk_OpenExtio = -1 Case ASELib.AWK_EXTIO_COPROC + Awk_OpenExtio = -1 End Select Exit Function @@ -293,7 +297,9 @@ Function Awk_CloseExtio(ByVal extio As ASELib.AwkExtio) As Long Awk_CloseExtio = 0 End If Case ASELib.AWK_EXTIO_PIPE + Awk_CloseExtio = -1 Case ASELib.AWK_EXTIO_COPROC + Awk_CloseExtio = -1 End Select End Function @@ -313,7 +319,9 @@ Function Awk_ReadExtio(ByVal extio As ASELib.AwkExtio, ByVal buf As ASELib.Buffe End If Case ASELib.AWK_EXTIO_PIPE + Awk_ReadExtio = -1 Case ASELib.AWK_EXTIO_COPROC + Awk_ReadExtio = -1 End Select End Function @@ -332,7 +340,9 @@ Function Awk_WriteExtio(ByVal extio As ASELib.AwkExtio, ByVal buf As ASELib.Buff Awk_WriteExtio = WriteExtioFile(extio, buf) End If Case ASELib.AWK_EXTIO_PIPE + Awk_WriteExtio = -1 Case ASELib.AWK_EXTIO_COPROC + Awk_WriteExtio = -1 End Select End Function