fix mem leak in win32 unicode openfile dialog

git-svn-id: trunk@12912 -
This commit is contained in:
paul 2007-11-18 10:26:19 +00:00
parent 48d0717fa1
commit bc6dd44a80

View File

@ -361,8 +361,9 @@ begin
FillChar(FileNameWideBuffer^, FileNameBufferLen * 2 + 2, #0); FillChar(FileNameWideBuffer^, FileNameBufferLen * 2 + 2, #0);
if Length(FileNameWide) > FileNameBufferLen then if Length(FileNameWide) > FileNameBufferLen then
FileNameBufferSize := FileNameBufferLen FileNameBufferSize := FileNameBufferLen
else FileNameBufferSize := Length(FileNameWide); else
FileNameBufferSize := Length(FileNameWide);
Move(FileNameWide[1], FileNameWideBuffer^, FileNameBufferSize * 2); Move(FileNameWide[1], FileNameWideBuffer^, FileNameBufferSize * 2);
end end
@ -409,7 +410,7 @@ begin
lpStrFilter := StrAlloc(Length(Filter)+1); lpStrFilter := StrAlloc(Length(Filter)+1);
StrPCopy(lpStrFilter, Utf8ToAnsi(Filter)); StrPCopy(lpStrFilter, Utf8ToAnsi(Filter));
lpStrTitle := StrAlloc(Length(AOpenDialog.Title)+1); lpStrTitle := GetMem(Length(AOpenDialog.Title)+1);
StrPCopy(lpStrTitle, Utf8ToAnsi(AOpenDialog.Title)); StrPCopy(lpStrTitle, Utf8ToAnsi(AOpenDialog.Title));
end; end;
{$else} {$else}
@ -418,7 +419,8 @@ begin
lpStrFilter := StrAlloc(Length(Filter)+1); lpStrFilter := StrAlloc(Length(Filter)+1);
StrPCopy(lpStrFilter, Filter); StrPCopy(lpStrFilter, Filter);
lpStrTitle := PChar(AOpenDialog.Title); lpStrTitle := GetMem(Length(AOpenDialog.Title)+1);
StrPCopy(lpStrTitle, AOpenDialog.Title);
{$endif} {$endif}
lpStrInitialDir := PChar(InitialDir); lpStrInitialDir := PChar(InitialDir);
@ -592,13 +594,12 @@ begin
FreeMem(OpenFile^.lpStrFilter) FreeMem(OpenFile^.lpStrFilter)
else else
StrDispose(OpenFile^.lpStrFilter); StrDispose(OpenFile^.lpStrFilter);
FreeMem(OpenFile^.lpStrTitle);
{$else} {$else}
StrDispose(OpenFile^.lpStrFilter); StrDispose(OpenFile^.lpStrFilter);
{$endif} {$endif}
FreeMem(OpenFile^.lpStrFile); FreeMem(OpenFile^.lpStrFile);
FreeMem(OpenFile^.lpStrTitle);
FreeMem(OpenFile); FreeMem(OpenFile);
end; end;
end; end;
@ -639,13 +640,16 @@ begin
Dispose(POpenFileDialogRec(OPENFILE^.lCustData)); Dispose(POpenFileDialogRec(OPENFILE^.lCustData));
{$ifdef WindowsUnicodeSupport} {$ifdef WindowsUnicodeSupport}
if UnicodeEnabledOS then FreeMem(OpenFile^.lpStrFilter) if UnicodeEnabledOS then
else StrDispose(OpenFile^.lpStrFilter); FreeMem(OpenFile^.lpStrFilter)
else
StrDispose(OpenFile^.lpStrFilter);
{$else} {$else}
StrDispose(OpenFile^.lpStrFilter); StrDispose(OpenFile^.lpStrFilter);
{$endif} {$endif}
FreeMem(OpenFile^.lpStrFile); FreeMem(OpenFile^.lpStrFile);
FreeMem(OpenFile^.lpStrTitle);
FreeMem(OpenFile); FreeMem(OpenFile);
end; end;
end; end;