пятница, 12 февраля 2010 г.

libvmime under windows (часть 3) smartPtr.hpp

хочется написать, что 5ые сутки продолжается суровая половая ёбля с внеземным разумом написавшим чудо библиОтеку libvmime, но нет, всего лишь 2ой день. всё что нужно собрано - нестерпимо выёбывается сама библиотека, а точнее файлик smartPtr.hpp

void detach()
{
if (m_ptr)
{
m_ptr->getRefManager()->releaseStrong();
m_ptr = 0;
}
}

компилятор говорит мол "чё за хуита m_ptr, и вся та тряхомудь в виде getRefManager и releaseStrong мне непонятна" выглядит это вот так

1>------ Build started: Project: vmime, Configuration: Release Win32 ------
1>Compiling...
1>defaultSASLAuthenticator.cpp
1>m:\prg\gmail_checker\libvmime-0.8.1\vmime/utility/smartPtr.hpp(362) : error C2027: use of undefined type 'vmime::security::sasl::SASLContext'
1> m:\prg\gmail_checker\libvmime-0.8.1\vmime/security/sasl/SASLSession.hpp(40) : see declaration of 'vmime::security::sasl::SASLContext'
1> m:\prg\gmail_checker\libvmime-0.8.1\vmime/utility/smartPtr.hpp(358) : while compiling class template member function 'void vmime::utility::ref::detach(void)'
1> with
1> [
1> T=vmime::security::sasl::SASLContext
1> ]
1> m:\prg\gmail_checker\libvmime-0.8.1\vmime/security/sasl/SASLSession.hpp(129) : see reference to class template instantiation 'vmime::utility::ref' being compiled
1> with
1> [
1> T=vmime::security::sasl::SASLContext
1> ]
1>m:\prg\gmail_checker\libvmime-0.8.1\vmime/utility/smartPtr.hpp(362) : error C2227: left of '->getRefManager' must point to class/struct/union/generic type
1>m:\prg\gmail_checker\libvmime-0.8.1\vmime/utility/smartPtr.hpp(362) : error C2227: left of '->releaseStrong' must point to class/struct/union/generic type
1>Build log was saved at "file://m:\prg\gmail_checker\libvmime-0.8.1\Release\BuildLog.htm"
1>vmime - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

на всё что написано ниже строчки

1>m:\prg\gmail_checker\libvmime-0.8.1\vmime/utility/smartPtr.hpp(362) : error C2027: use of undefined type 'vmime::security::sasl::SASLContext'

можно класть хуй. На все попытки образумить функционал вызова detach() и заставить его нормально потрудится не увенчались успехом, даже блядь намёка на малюсенькую победу не было и это лишний раз подтвердило мудрость что мол
ковырять чужой код себе всегда дороже, и проще написать свой.
Поэтому делаем так
void detach()
{
//
// if (m_ptr)
// {
// m_ptr->getRefManager()->releaseStrong();
// m_ptr = 0;
// }
return;
}
функционал превращаем в затычку и везде где он встречается в этом (class auto_ptr) классе, заменяем вызов detach() на

// detach();
if (m_ptr)
{
m_ptr->getRefManager()->releaseStrong();
m_ptr = 0;
}
и это проделываем в плоть до

/** Weak reference.
* Avoid circular references.
*/
здесь следует остановится так как там (class weak_ref) с detach() всё в порядке.
Это грязный и низкий фикс, но он работает. Так делать вообще нельзя, но иногда если никто не видит и не пиздит, то МОЖНО. Ссылка на покорёженный таким образом smartPtr.hpp

Комментариев нет: