Für die untersten Fälle könntest du dir eine Menge von Endungen bereitstellen [c,cpp,h,hpp]. Dann schneidst du aus deinem Filename die letzten Buchstaben nach dem letzten '.' raus und fragst nur noch, ob diese Endung in der Menge vorkommt. Die Mengen kannst du anfänglich als Konstanten anlegen und dann nur noch pro Menge eine Abfrage starten und nicht für jede einzelne Endung.
Ein Problem bei deinem Programm gäbe es beim Namen 'blasm.foo.hpp'
Erwarte das Beste und bereite dich auf das Schlimmste vor.