From b116175d4a5f4e818643c0b66dc8c4943f71d8cc Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Wed, 6 Jan 2010 18:26:52 -0800 Subject: [PATCH] setupapi: Refactor freeing the INF file into free_inf_file. Use this new function to free any remnants of the parsing on error. --- dlls/setupapi/parser.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/dlls/setupapi/parser.c b/dlls/setupapi/parser.c index 37b900fc225..7f581bd1875 100644 --- a/dlls/setupapi/parser.c +++ b/dlls/setupapi/parser.c @@ -856,6 +856,19 @@ static const WCHAR *comment_state( struct parser *parser, const WCHAR *pos ) } +static void free_inf_file( struct inf_file *file ) +{ + unsigned int i; + + for (i = 0; i < file->nb_sections; i++) HeapFree( GetProcessHeap(), 0, file->sections[i] ); + HeapFree( GetProcessHeap(), 0, file->filename ); + HeapFree( GetProcessHeap(), 0, file->sections ); + HeapFree( GetProcessHeap(), 0, file->fields ); + HeapFree( GetProcessHeap(), 0, file->strings ); + HeapFree( GetProcessHeap(), 0, file ); +} + + /* parse a complete buffer */ static DWORD parse_buffer( struct inf_file *file, const WCHAR *buffer, const WCHAR *end, UINT *error_line ) @@ -1011,7 +1024,7 @@ static struct inf_file *parse_file( HANDLE handle, const WCHAR *class, DWORD sty UnmapViewOfFile( buffer ); if (err) { - HeapFree( GetProcessHeap(), 0, file ); + free_inf_file( file ); SetLastError( err ); file = NULL; } @@ -1231,16 +1244,10 @@ HINF WINAPI SetupOpenMasterInf( VOID ) void WINAPI SetupCloseInfFile( HINF hinf ) { struct inf_file *file = hinf; - unsigned int i; if (!hinf || (hinf == INVALID_HANDLE_VALUE)) return; - for (i = 0; i < file->nb_sections; i++) HeapFree( GetProcessHeap(), 0, file->sections[i] ); - HeapFree( GetProcessHeap(), 0, file->filename ); - HeapFree( GetProcessHeap(), 0, file->sections ); - HeapFree( GetProcessHeap(), 0, file->fields ); - HeapFree( GetProcessHeap(), 0, file->strings ); - HeapFree( GetProcessHeap(), 0, file ); + free_inf_file( file ); }