To ja może podsumuję tutaj znane mi problemy pod MSVC i Win32 ogólnie: - Na Win32 obecnie nie można polegać na errno, bo funkcje Windows Sockets go nie ustawiają. Mam na to prawie gotową łatę w duchu sugestii Wojtka z tego wątku.
- Na Win32 gniazda trzeba zamykać za pomocą closesocket(), ale pliki nadal za pomocą close() (właściwie _close(), ale close() też działa). Ja mam na to łatę w postaci funkcji gg_closesocket() opakowującej odpowiednią funkcję systemową. Jedyne, co mi tu się troszkę nie podoba, to ta nazwa wskazująca na gniazdo, a muszę jej używać również w przypadku deskryptorów resolvera. Technicznie oczywiście nie ma tu problemu, bo na Win32 one muszą być gniazdami, a gdzie indziej i tak to się sprowadza do zwykłego close(). - Na Win32 deskryptory gniazd to liczby bez znaku (w 32-bitowej bibliotece rozmiaru inta, w 64-bitowej niestety większe, czym zacznę się martwić po rozwiązaniu tutaj opisanych problemów) i zgodnie z MSDN nic nie stoi na przeszkodzie, aby wartością tej liczby było np. UINT_MAX-1 (UINT_MAX to INVALID_SOCKET, co na szczęście odpowiada -1). A widziałem w jednym miejscu kod typu if ((fd = sockfunc(...)) < 1), który na taką wartość nie jest "odporny". Myślę, że trzeba by zlokalizować takie miejsca i warunek zamienić na przykład na (fd == 0 || fd == -1). - MSVC odmawia kompilacji pustej struktury gg_dcc7_dunno1. Jak dla mnie można by ją spokojnie usunąć lub zakomentować. - MSVC nie posiada nagłówków unistd.h i inttypes.h. Ten drugi jest używany w message.h nie patrząc się na config.h, co chyba można by jakoś zmienić. - Pliki dcc.c, dcc7.c i sha1.c w katalogu src pod MSVC potrzebują nagłówka io.h, który definiuje część rzeczy znanych z unistd.h w GCC. - MSVC nie definiuje S_IWUSR, natomiast definiuje jego przedposixowy synonim S_IWRITE. - MSVC nie posiada funkcji snprintf, posiada natomiast _snprintf, która jest co prawda niezgodna z C99, ale na potrzebny libgadu powinna wystarczyć. - MSVC nie posiada funkcji strcasecmp ani strncasecmp, ale posiada ich dokładne odpowiedniki stricmp i strnicmp. - MSVC nie akceptuje "arg..." jako argument makra. Wydaje mi się, że mam na to proste rozwiązanie, ale muszę je przetestować. Powrzucałbym skończone łatki, jakie mam, do repozytorium libgadu, ale nie mam do końca wyczucia, które z kilku możliwych rozwiązań każdego problemu jest najbardziej pożądane. Chyba wrzucę to wszystko do jakiegoś zewnętrznego repozytorium, tak jak zresztą już wcześniej planowałem. Pozdrawiam, Bartosz _______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel