Merge pull request #4951 from nfedera/nf-fix-fnobjnew-fnstylecasts

fix issue with fnObjectFree and related casts
This commit is contained in:
akallabeth 2018-10-19 14:00:14 +02:00 committed by GitHub
commit b8ff18f37f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 20 deletions

View File

@ -864,6 +864,14 @@ static UINT drive_free(DEVICE* device)
return drive_free_int(drive);
}
/**
* Helper function used for freeing list dictionary value object
*/
static void drive_file_objfree(void* obj)
{
drive_file_free((DRIVE_FILE*) obj);
}
/**
* Function description
*
@ -925,7 +933,7 @@ static UINT drive_register_drive_path(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints,
goto out_error;
}
ListDictionary_ValueObject(drive->files)->fnObjectFree = (OBJECT_FREE_FN) drive_file_free;
ListDictionary_ValueObject(drive->files)->fnObjectFree = drive_file_objfree;
drive->IrpQueue = MessageQueue_New(NULL);
if (!drive->IrpQueue)

View File

@ -41,8 +41,10 @@
#include "devman.h"
void devman_device_free(DEVICE* device)
static void devman_device_free(void* obj)
{
DEVICE* device = (DEVICE*) obj;
if (!device)
return;
@ -75,8 +77,7 @@ DEVMAN* devman_new(rdpdrPlugin* rdpdr)
return NULL;
}
ListDictionary_ValueObject(devman->devices)->fnObjectFree =
(OBJECT_FREE_FN) devman_device_free;
ListDictionary_ValueObject(devman->devices)->fnObjectFree = devman_device_free;
return devman;
}

View File

@ -145,8 +145,9 @@ static void rfx_profiler_print(RFX_CONTEXT* context)
PROFILER_PRINT_FOOTER
}
static void rfx_tile_init(RFX_TILE* tile)
static void rfx_tile_init(void* obj)
{
RFX_TILE* tile = (RFX_TILE*)obj;
if (tile)
{
tile->x = 0;
@ -160,9 +161,10 @@ static void rfx_tile_init(RFX_TILE* tile)
}
}
static RFX_TILE* rfx_decoder_tile_new(void)
static void* rfx_decoder_tile_new(void* val)
{
RFX_TILE* tile = NULL;
WINPR_UNUSED(val);
if (!(tile = (RFX_TILE*) calloc(1, sizeof(RFX_TILE))))
return NULL;
@ -177,8 +179,10 @@ static RFX_TILE* rfx_decoder_tile_new(void)
return tile;
}
static void rfx_decoder_tile_free(RFX_TILE* tile)
static void rfx_decoder_tile_free(void* obj)
{
RFX_TILE* tile = (RFX_TILE*)obj;
if (tile)
{
if (tile->allocated)
@ -188,14 +192,15 @@ static void rfx_decoder_tile_free(RFX_TILE* tile)
}
}
static RFX_TILE* rfx_encoder_tile_new(void)
static void* rfx_encoder_tile_new(void* val)
{
return (RFX_TILE*)calloc(1, sizeof(RFX_TILE));
WINPR_UNUSED(val);
return calloc(1, sizeof(RFX_TILE));
}
static void rfx_encoder_tile_free(RFX_TILE* tile)
static void rfx_encoder_tile_free(void* obj)
{
free(tile);
free(obj);
}
RFX_CONTEXT* rfx_context_new(BOOL encoder)
@ -231,17 +236,17 @@ RFX_CONTEXT* rfx_context_new(BOOL encoder)
goto error_tilePool;
pool = ObjectPool_Object(priv->TilePool);
pool->fnObjectInit = (OBJECT_INIT_FN) rfx_tile_init;
pool->fnObjectInit = rfx_tile_init;
if (context->encoder)
{
pool->fnObjectNew = (OBJECT_NEW_FN) rfx_encoder_tile_new;
pool->fnObjectFree = (OBJECT_FREE_FN) rfx_encoder_tile_free;
pool->fnObjectNew = rfx_encoder_tile_new;
pool->fnObjectFree = rfx_encoder_tile_free;
}
else
{
pool->fnObjectNew = (OBJECT_NEW_FN) rfx_decoder_tile_new;
pool->fnObjectFree = (OBJECT_FREE_FN) rfx_decoder_tile_free;
pool->fnObjectNew = rfx_decoder_tile_new;
pool->fnObjectFree = rfx_decoder_tile_free;
}
/*

View File

@ -35,9 +35,7 @@
extern "C" {
#endif
/* We don't know if the new function will require an argument.
* Leave the braces empty, C defines that as variable arguments. */
typedef void* (*OBJECT_NEW_FN)();
typedef void* (*OBJECT_NEW_FN)(void* val);
typedef void (*OBJECT_INIT_FN)(void* obj);
typedef void (*OBJECT_UNINIT_FN)(void* obj);
typedef void (*OBJECT_FREE_FN)(void* obj);

View File

@ -51,7 +51,7 @@ void* ObjectPool_Take(wObjectPool* pool)
if (!obj)
{
if (pool->object.fnObjectNew)
obj = pool->object.fnObjectNew();
obj = pool->object.fnObjectNew(NULL);
}
if (pool->object.fnObjectInit)