mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
wfreerdp: fix memory leaks
This commit is contained in:
@@ -85,21 +85,6 @@ wfBitmap* wf_image_new(wfInfo* wfi, int width, int height, int bpp, uint8* data)
|
||||
return image;
|
||||
}
|
||||
|
||||
wfBitmap* wf_bitmap_new(wfInfo* wfi, int width, int height, int bpp, uint8* data)
|
||||
{
|
||||
HDC hdc;
|
||||
wfBitmap* bitmap;
|
||||
|
||||
hdc = GetDC(NULL);
|
||||
bitmap = (wfBitmap*) xmalloc(sizeof(wfBitmap));
|
||||
bitmap->hdc = CreateCompatibleDC(hdc);
|
||||
bitmap->bitmap = wf_create_dib(wfi, width, height, bpp, data, &(bitmap->pdata));
|
||||
bitmap->org_bitmap = (HBITMAP) SelectObject(bitmap->hdc, bitmap->bitmap);
|
||||
ReleaseDC(NULL, hdc);
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
void wf_image_free(wfBitmap* image)
|
||||
{
|
||||
if (image != 0)
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
HBITMAP wf_create_dib(wfInfo* wfi, int width, int height, int bpp, uint8* data, uint8** pdata);
|
||||
wfBitmap* wf_image_new(wfInfo* wfi, int width, int height, int bpp, uint8* data);
|
||||
wfBitmap* wf_bitmap_new(wfInfo* wfi, int width, int height, int bpp, uint8* data);
|
||||
void wf_image_free(wfBitmap* image);
|
||||
|
||||
void wf_register_graphics(rdpGraphics* graphics);
|
||||
|
||||
@@ -153,30 +153,30 @@ boolean wf_pre_connect(freerdp* instance)
|
||||
|
||||
settings->os_major_type = OSMAJORTYPE_WINDOWS;
|
||||
settings->os_minor_type = OSMINORTYPE_WINDOWS_NT;
|
||||
settings->order_support[NEG_DSTBLT_INDEX] = true;
|
||||
settings->order_support[NEG_PATBLT_INDEX] = true;
|
||||
settings->order_support[NEG_SCRBLT_INDEX] = true;
|
||||
settings->order_support[NEG_OPAQUE_RECT_INDEX] = true;
|
||||
settings->order_support[NEG_DRAWNINEGRID_INDEX] = false;
|
||||
settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
|
||||
settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
|
||||
settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
|
||||
settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = true;
|
||||
settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false;
|
||||
settings->order_support[NEG_LINETO_INDEX] = true;
|
||||
settings->order_support[NEG_POLYLINE_INDEX] = true;
|
||||
settings->order_support[NEG_MEMBLT_INDEX] = true;
|
||||
settings->order_support[NEG_MEM3BLT_INDEX] = false;
|
||||
settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
|
||||
settings->order_support[NEG_GLYPH_INDEX_INDEX] = false;
|
||||
settings->order_support[NEG_FAST_INDEX_INDEX] = false;
|
||||
settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
|
||||
settings->order_support[NEG_POLYGON_SC_INDEX] = false;
|
||||
settings->order_support[NEG_POLYGON_CB_INDEX] = false;
|
||||
settings->order_support[NEG_ELLIPSE_SC_INDEX] = false;
|
||||
settings->order_support[NEG_ELLIPSE_CB_INDEX] = false;
|
||||
settings->order_support[NEG_DSTBLT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_PATBLT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_SCRBLT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_OPAQUE_RECT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_DRAWNINEGRID_INDEX] = FALSE;
|
||||
settings->order_support[NEG_MULTIDSTBLT_INDEX] = FALSE;
|
||||
settings->order_support[NEG_MULTIPATBLT_INDEX] = FALSE;
|
||||
settings->order_support[NEG_MULTISCRBLT_INDEX] = FALSE;
|
||||
settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = FALSE;
|
||||
settings->order_support[NEG_LINETO_INDEX] = TRUE;
|
||||
settings->order_support[NEG_POLYLINE_INDEX] = TRUE;
|
||||
settings->order_support[NEG_MEMBLT_INDEX] = TRUE;
|
||||
settings->order_support[NEG_MEM3BLT_INDEX] = FALSE;
|
||||
settings->order_support[NEG_SAVEBITMAP_INDEX] = FALSE;
|
||||
settings->order_support[NEG_GLYPH_INDEX_INDEX] = FALSE;
|
||||
settings->order_support[NEG_FAST_INDEX_INDEX] = FALSE;
|
||||
settings->order_support[NEG_FAST_GLYPH_INDEX] = FALSE;
|
||||
settings->order_support[NEG_POLYGON_SC_INDEX] = FALSE;
|
||||
settings->order_support[NEG_POLYGON_CB_INDEX] = FALSE;
|
||||
settings->order_support[NEG_ELLIPSE_SC_INDEX] = FALSE;
|
||||
settings->order_support[NEG_ELLIPSE_CB_INDEX] = FALSE;
|
||||
|
||||
settings->glyph_cache = false;
|
||||
settings->glyph_cache = FALSE;
|
||||
|
||||
wfi->cursor = g_default_cursor;
|
||||
|
||||
@@ -186,7 +186,7 @@ boolean wf_pre_connect(freerdp* instance)
|
||||
|
||||
wfi->clrconv = (HCLRCONV) xzalloc(sizeof(CLRCONV));
|
||||
wfi->clrconv->palette = NULL;
|
||||
wfi->clrconv->alpha = false;
|
||||
wfi->clrconv->alpha = FALSE;
|
||||
|
||||
instance->context->cache = cache_new(settings);
|
||||
|
||||
@@ -219,7 +219,7 @@ boolean wf_pre_connect(freerdp* instance)
|
||||
settings->kbd_layout = (int) GetKeyboardLayout(0) & 0x0000FFFF;
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void cpuid(unsigned info, unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
|
||||
@@ -309,12 +309,12 @@ boolean wf_post_connect(freerdp* instance)
|
||||
wfi->hdc->hwnd->cinvalid = (HGDI_RGN) xmalloc(sizeof(GDI_RGN) * wfi->hdc->hwnd->count);
|
||||
wfi->hdc->hwnd->ninvalid = 0;
|
||||
|
||||
wfi->image = wf_bitmap_new(wfi, 64, 64, 32, NULL);
|
||||
wfi->image = wf_image_new(wfi, 64, 64, 32, NULL);
|
||||
wfi->image->_bitmap.data = NULL;
|
||||
|
||||
if (settings->rfx_codec)
|
||||
{
|
||||
wfi->tile = wf_bitmap_new(wfi, 64, 64, 32, NULL);
|
||||
wfi->tile = wf_image_new(wfi, 64, 64, 32, NULL);
|
||||
wfi->rfx_context = rfx_context_new();
|
||||
rfx_context_set_cpu_opt(wfi->rfx_context, wfi_detect_cpu());
|
||||
}
|
||||
@@ -377,7 +377,7 @@ boolean wf_post_connect(freerdp* instance)
|
||||
|
||||
pointer_cache_register_callbacks(instance->update);
|
||||
|
||||
if (wfi->sw_gdi != true)
|
||||
if (wfi->sw_gdi != TRUE)
|
||||
{
|
||||
brush_cache_register_callbacks(instance->update);
|
||||
bitmap_cache_register_callbacks(instance->update);
|
||||
@@ -390,7 +390,7 @@ boolean wf_post_connect(freerdp* instance)
|
||||
|
||||
wf_cliprdr_init(wfi, instance->context->channels);
|
||||
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
boolean wf_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint)
|
||||
@@ -421,7 +421,7 @@ boolean wf_verify_certificate(freerdp* instance, char* subject, char* issuer, ch
|
||||
SetConsoleMode(input_handle, mode);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int wf_receive_channel_data(freerdp* instance, int channelId, uint8* data, int size, int flags, int total_size)
|
||||
@@ -441,12 +441,12 @@ void wf_process_channel_event(rdpChannels* channels, freerdp* instance)
|
||||
|
||||
boolean wf_get_fds(freerdp* instance, void** rfds, int* rcount, void** wfds, int* wcount)
|
||||
{
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
boolean wf_check_fds(freerdp* instance)
|
||||
{
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int wf_process_plugin_args(rdpSettings* settings, const char* name, RDP_PLUGIN_DATA* plugin_data, void* user_data)
|
||||
@@ -481,7 +481,7 @@ int wfreerdp_run(freerdp* instance)
|
||||
memset(rfds, 0, sizeof(rfds));
|
||||
memset(wfds, 0, sizeof(wfds));
|
||||
|
||||
if (freerdp_connect(instance) != true)
|
||||
if (freerdp_connect(instance) != TRUE)
|
||||
return 0;
|
||||
|
||||
channels = instance->context->channels;
|
||||
@@ -491,17 +491,17 @@ int wfreerdp_run(freerdp* instance)
|
||||
rcount = 0;
|
||||
wcount = 0;
|
||||
|
||||
if (freerdp_get_fds(instance, rfds, &rcount, wfds, &wcount) != true)
|
||||
if (freerdp_get_fds(instance, rfds, &rcount, wfds, &wcount) != TRUE)
|
||||
{
|
||||
printf("Failed to get FreeRDP file descriptor\n");
|
||||
break;
|
||||
}
|
||||
if (wf_get_fds(instance, rfds, &rcount, wfds, &wcount) != true)
|
||||
if (wf_get_fds(instance, rfds, &rcount, wfds, &wcount) != TRUE)
|
||||
{
|
||||
printf("Failed to get wfreerdp file descriptor\n");
|
||||
break;
|
||||
}
|
||||
if (freerdp_channels_get_fds(channels, instance, rfds, &rcount, wfds, &wcount) != true)
|
||||
if (freerdp_channels_get_fds(channels, instance, rfds, &rcount, wfds, &wcount) != TRUE)
|
||||
{
|
||||
printf("Failed to get channel manager file descriptor\n");
|
||||
break;
|
||||
@@ -532,17 +532,17 @@ int wfreerdp_run(freerdp* instance)
|
||||
break;
|
||||
}
|
||||
|
||||
if (freerdp_check_fds(instance) != true)
|
||||
if (freerdp_check_fds(instance) != TRUE)
|
||||
{
|
||||
printf("Failed to check FreeRDP file descriptor\n");
|
||||
break;
|
||||
}
|
||||
if (wf_check_fds(instance) != true)
|
||||
if (wf_check_fds(instance) != TRUE)
|
||||
{
|
||||
printf("Failed to check wfreerdp file descriptor\n");
|
||||
break;
|
||||
}
|
||||
if (freerdp_channels_check_fds(channels, instance) != true)
|
||||
if (freerdp_channels_check_fds(channels, instance) != TRUE)
|
||||
{
|
||||
printf("Failed to check channel manager file descriptor\n");
|
||||
break;
|
||||
@@ -569,8 +569,10 @@ int wfreerdp_run(freerdp* instance)
|
||||
}
|
||||
|
||||
/* cleanup */
|
||||
|
||||
freerdp_channels_close(channels, instance);
|
||||
freerdp_channels_free(channels);
|
||||
freerdp_free(instance);
|
||||
freerdp_disconnect(instance);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -721,6 +723,9 @@ INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||
L"Failed to start wfreerdp.\n\nPlease check the debug output.",
|
||||
L"FreeRDP Error", MB_ICONSTOP);
|
||||
|
||||
freerdp_context_free(instance);
|
||||
freerdp_free(instance);
|
||||
|
||||
WSACleanup();
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
||||
Reference in New Issue
Block a user