- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
std::string sError = "";
try
{
fIn = fopen(cszFileName, "rb");
if (fIn == 0)
{
sError = "Can not open file: ";
sError += cszFileName;
throw std::string("");
}
if (!ParseFile(fIn, pLookup))
{
sError = "Bad file format. File: ";
sError += cszFileName;
throw std::string("");
}
sError = "";
throw std::string("");
}
catch (std::string& e)
{
if (fIn != 0)
{
fclose(fIn);
fIn = NULL;
}
if (sError.length() != 0)
{
throw std::exception(sError.c_str());
}
}
Там же нашел еще более шикарное продолжение гавнокода http://govnokod.ru/1459
1 - текст сообщения о ошибке передавался строковой переменной.
2 - Исключенпие бросалось совершенно левого формата.
3 - даже при нармальном завершении участка кода бросалось исключение, видимо, для "рационализации" закрытия файла.
4 - И наконец таки если ошибка все же происходила, то потом таки выбрасывалось исключени с "человеческим лицом"
И скомпилировалось же...
namespace std
{
class exception
{
public:
exception() throw() { }
virtual ~exception() throw();
virtual const char* what() const throw();
};