hw/audio/fmopl.c | 41 +++++++++++------------------------------ 1 file changed, 11 insertions(+), 30 deletions(-)
In accordance with QEMU's coding style guidelines, replace raw memory
allocation functions (malloc/free) with their GLib equivalents
(g_new/g_malloc0/g_free).
Also removes the old generic error-handling code from
OPLOpenTable(), since the Glib functions abort the program automatically
if memory is exhausted.
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/1798
Signed-off-by: Lucas Cardoso <luc.fast2004@gmail.com>
---
hw/audio/fmopl.c | 41 +++++++++++------------------------------
1 file changed, 11 insertions(+), 30 deletions(-)
diff --git a/hw/audio/fmopl.c b/hw/audio/fmopl.c
index a63ad0f04d..aeefc4c9fe 100644
--- a/hw/audio/fmopl.c
+++ b/hw/audio/fmopl.c
@@ -607,26 +607,10 @@ static int OPLOpenTable( void )
double pom;
/* allocate dynamic tables */
- if( (TL_TABLE = malloc(TL_MAX*2*sizeof(int32_t))) == NULL)
- return 0;
- if( (SIN_TABLE = malloc(SIN_ENT*4 *sizeof(int32_t *))) == NULL)
- {
- free(TL_TABLE);
- return 0;
- }
- if( (AMS_TABLE = malloc(AMS_ENT*2 *sizeof(int32_t))) == NULL)
- {
- free(TL_TABLE);
- free(SIN_TABLE);
- return 0;
- }
- if( (VIB_TABLE = malloc(VIB_ENT*2 *sizeof(int32_t))) == NULL)
- {
- free(TL_TABLE);
- free(SIN_TABLE);
- free(AMS_TABLE);
- return 0;
- }
+ TL_TABLE = g_new(int32_t, TL_MAX * 2);
+ SIN_TABLE = g_new(int32_t *, SIN_ENT * 4);
+ AMS_TABLE = g_new(int32_t, AMS_ENT * 2);
+ VIB_TABLE = g_new(int32_t, VIB_ENT * 2);
ENV_CURVE = g_new(int32_t, 2 * EG_ENT + 1);
/* make total level table */
for (t = 0;t < EG_ENT-1 ;t++){
@@ -696,10 +680,10 @@ static int OPLOpenTable( void )
static void OPLCloseTable( void )
{
g_free(ENV_CURVE);
- free(TL_TABLE);
- free(SIN_TABLE);
- free(AMS_TABLE);
- free(VIB_TABLE);
+ g_free(TL_TABLE);
+ g_free(SIN_TABLE);
+ g_free(AMS_TABLE);
+ g_free(VIB_TABLE);
}
/* CSM Key Control */
@@ -1081,11 +1065,8 @@ FM_OPL *OPLCreate(int clock, int rate)
/* allocate OPL state space */
state_size = sizeof(FM_OPL);
state_size += sizeof(OPL_CH)*max_ch;
- /* allocate memory block */
- ptr = malloc(state_size);
- if(ptr==NULL) return NULL;
- /* clear */
- memset(ptr,0,state_size);
+ /* allocate memory block and zero-initialize */
+ ptr = g_malloc0(state_size);
OPL = (FM_OPL *)ptr; ptr+=sizeof(FM_OPL);
OPL->P_CH = (OPL_CH *)ptr; ptr+=sizeof(OPL_CH)*max_ch;
/* set channel state pointer */
@@ -1128,7 +1109,7 @@ void OPLDestroy(FM_OPL *OPL)
}
#endif
OPL_UnLockTable();
- free(OPL);
+ g_free(OPL);
}
/* ---------- Option handlers ---------- */
--
2.51.0
On Tue, Apr 28, 2026 at 3:48 AM Lucas Cardoso <luc.fast2004@gmail.com> wrote:
>
> In accordance with QEMU's coding style guidelines, replace raw memory
> allocation functions (malloc/free) with their GLib equivalents
> (g_new/g_malloc0/g_free).
>
> Also removes the old generic error-handling code from
> OPLOpenTable(), since the Glib functions abort the program automatically
> if memory is exhausted.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/1798
> Signed-off-by: Lucas Cardoso <luc.fast2004@gmail.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/audio/fmopl.c | 41 +++++++++++------------------------------
> 1 file changed, 11 insertions(+), 30 deletions(-)
>
> diff --git a/hw/audio/fmopl.c b/hw/audio/fmopl.c
> index a63ad0f04d..aeefc4c9fe 100644
> --- a/hw/audio/fmopl.c
> +++ b/hw/audio/fmopl.c
> @@ -607,26 +607,10 @@ static int OPLOpenTable( void )
> double pom;
>
> /* allocate dynamic tables */
> - if( (TL_TABLE = malloc(TL_MAX*2*sizeof(int32_t))) == NULL)
> - return 0;
> - if( (SIN_TABLE = malloc(SIN_ENT*4 *sizeof(int32_t *))) == NULL)
> - {
> - free(TL_TABLE);
> - return 0;
> - }
> - if( (AMS_TABLE = malloc(AMS_ENT*2 *sizeof(int32_t))) == NULL)
> - {
> - free(TL_TABLE);
> - free(SIN_TABLE);
> - return 0;
> - }
> - if( (VIB_TABLE = malloc(VIB_ENT*2 *sizeof(int32_t))) == NULL)
> - {
> - free(TL_TABLE);
> - free(SIN_TABLE);
> - free(AMS_TABLE);
> - return 0;
> - }
> + TL_TABLE = g_new(int32_t, TL_MAX * 2);
> + SIN_TABLE = g_new(int32_t *, SIN_ENT * 4);
> + AMS_TABLE = g_new(int32_t, AMS_ENT * 2);
> + VIB_TABLE = g_new(int32_t, VIB_ENT * 2);
> ENV_CURVE = g_new(int32_t, 2 * EG_ENT + 1);
> /* make total level table */
> for (t = 0;t < EG_ENT-1 ;t++){
> @@ -696,10 +680,10 @@ static int OPLOpenTable( void )
> static void OPLCloseTable( void )
> {
> g_free(ENV_CURVE);
> - free(TL_TABLE);
> - free(SIN_TABLE);
> - free(AMS_TABLE);
> - free(VIB_TABLE);
> + g_free(TL_TABLE);
> + g_free(SIN_TABLE);
> + g_free(AMS_TABLE);
> + g_free(VIB_TABLE);
To make this function idempotent, I would rather use
g_clear_pointer(), but that might not be necessary
> }
>
> /* CSM Key Control */
> @@ -1081,11 +1065,8 @@ FM_OPL *OPLCreate(int clock, int rate)
> /* allocate OPL state space */
> state_size = sizeof(FM_OPL);
> state_size += sizeof(OPL_CH)*max_ch;
> - /* allocate memory block */
> - ptr = malloc(state_size);
> - if(ptr==NULL) return NULL;
> - /* clear */
> - memset(ptr,0,state_size);
> + /* allocate memory block and zero-initialize */
> + ptr = g_malloc0(state_size);
> OPL = (FM_OPL *)ptr; ptr+=sizeof(FM_OPL);
> OPL->P_CH = (OPL_CH *)ptr; ptr+=sizeof(OPL_CH)*max_ch;
> /* set channel state pointer */
> @@ -1128,7 +1109,7 @@ void OPLDestroy(FM_OPL *OPL)
> }
> #endif
> OPL_UnLockTable();
> - free(OPL);
> + g_free(OPL);
> }
>
> /* ---------- Option handlers ---------- */
> --
> 2.51.0
>
>
--
Marc-André Lureau
© 2016 - 2026 Red Hat, Inc.