Не, ну к CharLower() никаких претензий нет: она то работает так как написано в документации.
Galkov писал(а):
нормально работает CharLower(pointer(String)), а не PChar
В данном случае не поможет, так как все равно не приводит к копированию строки (по-моему). Упадёт, например, на константе, как и PChar(). А вот CharLower(@S[1]) может и проканает: доступ по индексу, вроде, копирует строку. В Delphi, но не в FPC, или не во всех случаях. UniqueString() - наше всё.(
Galkov имел в виду пустую строку и CharLower(), а не её уникальность)
К последнему выложенному варианту не имею вопросов (кроме как к форматированию кода, ну, и названия функций, обычно, должны отражать действие, то-есть, SetMask(), а не просто Mask()).