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