# HG changeset patch # User unc0rr # Date 1412196494 -14400 # Node ID 50ed968e4feef8246668132a306b453cc0498ca5 # Parent 084e046f6bd5853ed13dd6b9f14247d4e0b24f87 Filter out garbage from themes list diff -r 084e046f6bd5 -r 50ed968e4fee hedgewars/uFLData.pas --- a/hedgewars/uFLData.pas Wed Oct 01 01:20:05 2014 +0400 +++ b/hedgewars/uFLData.pas Thu Oct 02 00:48:14 2014 +0400 @@ -9,13 +9,49 @@ uses uPhysFSLayer; function getThemesList: PPChar; cdecl; +var list, res, tmp: PPChar; + i, size: Longword; begin - getThemesList:= pfsEnumerateFiles('Themes') + list:= pfsEnumerateFiles('Themes'); + size:= 0; + tmp:= list; + while tmp^ <> nil do + begin + inc(size); + inc(tmp) + end; + + res:= GetMem((3 + size) * sizeof(PChar)); + res^:= PChar(list); + inc(res); + res^:= PChar(res + size + 2); + inc(res); + + getThemesList:= res; + + for i:= 1 to size do + begin + if pfsExists('/Themes/' + shortstring(list^) + '/icon.png') then + begin + res^:= list^; + inc(res) + end; + + inc(list) + end; + + res^:= nil end; procedure freeThemesList(list: PPChar); cdecl; +var listEnd: PPChar; begin - pfsFreeList(list) + dec(list); + listEnd:= PPChar(list^); + dec(list); + + pfsFreeList(PPChar(list^)); + freeMem(list, (listEnd - list) * sizeof(PChar)) end; function getThemeIcon(themeName: PChar; buffer: PChar; buflen: Longword): Longword; cdecl;