changed to prototype of qse_mmgr_t function to accept mmgr itself instead of mmgr->ctx and fixed a memory leak bug under a certain failure condition
This commit is contained in:
@ -262,6 +262,7 @@ int StdAwk::__build_environ (Run* run, void* envptr)
|
||||
if (kptr == QSE_NULL || vptr == QSE_NULL)
|
||||
{
|
||||
if (kptr) QSE_MMGR_FREE (mmgr, kptr);
|
||||
if (vptr) QSE_MMGR_FREE (mmgr, vptr);
|
||||
|
||||
/* mbstowcsdup() may fail for invalid encoding.
|
||||
* so setting the error code to ENOMEM may not
|
||||
@ -282,6 +283,7 @@ int StdAwk::__build_environ (Run* run, void* envptr)
|
||||
if (kptr == QSE_NULL || vptr == QSE_NULL)
|
||||
{
|
||||
if (kptr) QSE_MMGR_FREE (mmgr, kptr);
|
||||
if (vptr) QSE_MMGR_FREE (mmgr, vptr);
|
||||
|
||||
/* mbstowcsdup() may fail for invalid encoding.
|
||||
* so setting the error code to ENOMEM may not
|
||||
|
@ -1769,11 +1769,12 @@ static int __build_environ (
|
||||
if (kptr == QSE_NULL || vptr == QSE_NULL)
|
||||
{
|
||||
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
|
||||
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
|
||||
qse_awk_rtx_refdownval (rtx, v_env);
|
||||
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
*eq = QSE_MT('=');
|
||||
#else
|
||||
@ -1787,6 +1788,7 @@ static int __build_environ (
|
||||
if (kptr == QSE_NULL || vptr == QSE_NULL)
|
||||
{
|
||||
if (kptr) QSE_MMGR_FREE (rtx->awk->mmgr, kptr);
|
||||
if (vptr) QSE_MMGR_FREE (rtx->awk->mmgr, vptr);
|
||||
qse_awk_rtx_refdownval (rtx, v_env);
|
||||
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
|
@ -24,19 +24,19 @@
|
||||
QSE_BEGIN_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
||||
void* Mmgr::alloc_mem (void* ctx, size_t n)
|
||||
void* Mmgr::alloc_mem (mmgr_t* mmgr, size_t n)
|
||||
{
|
||||
return ((Mmgr*)ctx)->allocMem (n);
|
||||
return ((Mmgr*)mmgr->ctx)->allocMem (n);
|
||||
}
|
||||
|
||||
void* Mmgr::realloc_mem (void* ctx, void* ptr, size_t n)
|
||||
void* Mmgr::realloc_mem (mmgr_t* mmgr, void* ptr, size_t n)
|
||||
{
|
||||
return ((Mmgr*)ctx)->reallocMem (ptr, n);
|
||||
return ((Mmgr*)mmgr->ctx)->reallocMem (ptr, n);
|
||||
}
|
||||
|
||||
void Mmgr::free_mem (void* ctx, void* ptr)
|
||||
void Mmgr::free_mem (mmgr_t* mmgr, void* ptr)
|
||||
{
|
||||
((Mmgr*)ctx)->freeMem (ptr);
|
||||
((Mmgr*)mmgr->ctx)->freeMem (ptr);
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
|
@ -22,6 +22,12 @@
|
||||
|
||||
#if defined(_WIN32)
|
||||
# include <windows.h>
|
||||
/*
|
||||
#elif defined(__OS2__)
|
||||
# define INCL_DOSMEMMGR
|
||||
# include <os2.h>
|
||||
# include <bsememf.h>
|
||||
*/
|
||||
#else
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
@ -439,7 +445,7 @@ void* qse_memrmem (const void* hs, qse_size_t hl, const void* nd, qse_size_t nl)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
static void* mmgr_alloc (void* data, qse_size_t n)
|
||||
static void* mmgr_alloc (qse_mmgr_t* mmgr, qse_size_t n)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
HANDLE heap;
|
||||
@ -452,7 +458,7 @@ static void* mmgr_alloc (void* data, qse_size_t n)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void* mmgr_realloc (void* data, void* ptr, qse_size_t n)
|
||||
static void* mmgr_realloc (qse_mmgr_t* mmgr, void* ptr, qse_size_t n)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
HANDLE heap;
|
||||
@ -466,7 +472,7 @@ static void* mmgr_realloc (void* data, void* ptr, qse_size_t n)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void mmgr_free (void* data, void* ptr)
|
||||
static void mmgr_free (qse_mmgr_t* mmgr, void* ptr)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
HANDLE heap;
|
||||
|
Reference in New Issue
Block a user