W dniu 11 października 2011 20:46 użytkownik Wojtek Kaniewski
<wojte...@toxygen.net> napisał:
> Podoba mi się idea wykrywania wersji vsnprintf() w trakcie działania,
> ale jeśli dobrze rozumiem zmianę C, na systemach z C99 będziemy alokować
> pamięć dwa razy. Wyłączając przypadek, gdy przypadkiem trafimy na ciąg
> mający 255 znaków. Mam rację?

No tak, w starej wersji zamiast pierwszego malloca był bufor "char
tmp[2]". Nie przyszło mi do głowy, że to może być szczególnie istotne
ze względu na wydajność.

> Może wykrywanie stosować jeśli GG_CONFIG_HAVE_C99_VSNPRINTF nie jest
> zdefiniowane, żeby uniknąć problemu, na który trafiłeś? Nie pozbędziemy
> się kodu, ale też nie będziemy niepotrzebnie męczyć alokatora.

Skoro na większości platform działa ta wersja C99 vsnprintf-a, to
rzeczywiście warto. Dużo tego kodu nie ma.

> Jeśli dobrze pamiętam, to na jakimś PowerPC można było użyć typu va_list
> tylko raz, dlatego jedna kopia była używana do określenia rozmiaru
> bufora, druga do właściwego vsnprintf(). Nie wiem, czy jest sens nadal
> utrzymywać taki kod.

Zgaduję, że kombinacja PowerPC + non-C99 jest mieszanką wybuchową? ;)

W każdym razie libgadu chyba już w ogóle nie działa pod PowerPC -
szczegóły w tickecie z Adium:
http://trac.adium.im/ticket/15153. Istotna informacja jest w wierszu
163 debug loga ("// gg_recv_packet() invalid packet length
(67108864)") - to nie wygląda na bug w libpurple, ani Adium. Inna
sprawa, że fajnie by było jednak z PowerPC nie rezygnować, ale
osobiście nie mam dostępu do odpowiedniej maszyny.
_______________________________________________
libgadu-devel mailing list
libgadu-devel@lists.ziew.org
http://lists.ziew.org/mailman/listinfo/libgadu-devel

Reply via email to