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:
2014-07-09 15:01:16 +00:00
parent 36b20b4169
commit 82a639045f
10 changed files with 100 additions and 41 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);
}
/////////////////////////////////

View File

@ -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;