On Sun, Sep 02, 2012 at 04:28:04PM +0200, Tomasz Wasilczyk wrote: > Napisałem prototyp wspomnianego bufora, do odczytywania pakietów > GG11 - nazwa robocza "safe const buffer". Działa to w ten sposób, że > sobie odczytujemy z takiego bufora po kolei co chcemy, a on sam > pamięta w którym miejscu jest oraz czy nie wychodzimy poza bufor. > Poprawność odczytu można sprawdzić jednorazowo, na samym końcu. W > rezultacie, zamiast kodu, możemy uzyskać kod. > > Co o tym myślicie? Mogę to spokojnie implementować i opierać obsługę > gg11 o to narzędzie? To mi bardzo ułatwi pracę i poprawi jakość kodu.
Ja raczej byłbym za stworzeniem funkcji podobnych do pack/unpack[1][2]. Przykładzik: #v+ struct { uint8_t magic1; /* 0x08 */ uint8_t magic2; /* 0x00 */ uint8_t magic3; /* 0x10 */ uint16_t seq; uint8_t magic4; /* 0x1a */ char *data; } pkt = { }; ptr = gg_unpack(ptr, &len, "CCCvCZ", &pkt.magic1, &pkt.magic2, &pkt.magic3, &pkt.seq, &pkt.magic4, &pkt.data); if (ptr == NULL || pkt.magic1 != 0x08 || pkt.magic2 != 0x0 || pkt.magic != 0x10 || pkt.magic3 != 0x1a) { free(pkt.data); return -1; } ge->event.xml_event.data = pkt.data; return gg_ack_gg11(gs, GG_ACK110_MPA, pkt.seq, ge); #v- (gg_unpack() zwraca wskaźnik na koniec przetworzonego bufora, aktualizując *len, lub zwraca NULL w przypadku błędu [np. wyjście za bufor]). Nie upieram się zarówno przy zwracanej wartości (endptr może być parametrem, a f. może zwracać 0/-1) ani przy formacie "CCCvCZ". Możemy stosować dowolnie inne literki, lub nawet cyferki ('1' [uint8], '2' [uint16], '4' [uint32]). Dla zainteresowanych formaty w d-bus[3] i pythonie[4], modułu icq w ekg2[5] Pozdr, Kuba. [1] http://perldoc.perl.org/functions/pack.html [2] http://www.perlmonks.org/?node_id=224666 [3] http://dbus.freedesktop.org/doc/dbus-specification.html#type-system [4] http://docs.python.org/library/struct.html#format-characters [5] https://github.com/leafnode/ekg2/blob/master/plugins/icq/misc.c (/icq_unpack_common) _______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel