Cześć,

aktualizując wczoraj libgadu w libpurple przeanalizowałem różnice
między oboma wersjami. Niektóre z nich sprawiają wrażenie, jakby
powinny się znaleźć w pierwotnej wersji biblioteki. Opiszę w skrócie,
na co zwróciłem uwagę.

---

Plik dcc.c:421 - zmienna uint16_t port jest przyrównywana do -1 (sypie
warningiem w libpurple). Można by chociaż rzutować tą -1 na uint16_t.

Zamiast typu unsigned int można by było używać typów socklen_t i
size_t (szczegóły w załączniku). To dotyczy prawdopodobnie większej
ilości zmiennych.

Kompilacja pod Windows - libpurple wycina ifdefami część include-ów,
aby całość ładnie się kompilowała pod tym systemem. Wiem, że libgadu
nie ma oficjalnego wsparcia pod okienkami, ale parę ifdefów dużo nie
popsuje ;]. Szczegóły w linku do dużego diffa z różnicami.

Kompilacja pod SunOS i HPUX - jeden ifdef - szczegóły w załączniku.

---

Gcc i ostrzeżenia: aktualnie libgadu jest kompilowane z przełącznikiem
-Wall. Warto by było kompilować dodatkowo z -Wextra, to pozwala
uniknąć prostych bugów. Aktualnie po włączeniu tej opcji nie ma aż tak
dużo ostrzeżeń, mogę pomóc je usuwać.

---

W załączniku krótki diff z najważniejszymi różnicami, na które
zwróciłem tu uwagę, poniżej link do pełnej listy różnic:
http://developer.pidgin.im/attachment/ticket/14248/libgadu-purple-1.11.0.diff

Pozdrawiam,
Tomek
Index: include/libgadu.h.in
===================================================================
--- include/libgadu.h.in	(wersja 1118)
+++ include/libgadu.h.in	(kopia robocza)
@@ -123,7 +123,7 @@
 typedef unsigned short uint16_t;
 typedef unsigned int   uint32_t;
 
-#ifndef __CYGWIN__
+#if !defined(__CYGWIN__) && !defined(__SunOS) && !defined(_INCLUDE_HPUX_SOURCE)
 #define __int8_t_defined
 typedef   signed char    int8_t;
 typedef   signed short  int16_t;
Index: src/events.c
===================================================================
--- src/events.c	(wersja 1118)
+++ src/events.c	(kopia robocza)
@@ -350,7 +350,7 @@
 		{
 			char buf[1024], *client, *auth;
 			int res = 0;
-			unsigned int res_size = sizeof(res);
+			socklen_t res_size = sizeof(res);
 			const char *host;
 
 			gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() GG_STATE_CONNECTING_HUB\n");
@@ -626,7 +626,7 @@
 		case GG_STATE_CONNECTING_GG:
 		{
 			int res = 0;
-			unsigned int res_size = sizeof(res);
+			socklen_t res_size = sizeof(res);
 
 			gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() GG_STATE_CONNECTING_GG\n");
 
Index: src/http.c
===================================================================
--- src/http.c	(wersja 1118)
+++ src/http.c	(kopia robocza)
@@ -235,7 +235,7 @@
 
 	if (h->state == GG_STATE_CONNECTING) {
 		int res = 0;
-		unsigned int res_size = sizeof(res);
+		socklen_t res_size = sizeof(res);
 
 		if (h->async && (getsockopt(h->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res)) {
 			gg_debug(GG_DEBUG_MISC, "=> http, async connection failed (errno=%d, %s)\n", (res) ? res : errno , strerror((res) ? res : errno));
@@ -254,7 +254,7 @@
 	}
 
 	if (h->state == GG_STATE_SENDING_QUERY) {
-		int res;
+		size_t res; /* w tym pliku jest sporo takich */
 
 		if ((res = write(h->fd, h->query, strlen(h->query))) < 1) {
 			gg_debug(GG_DEBUG_MISC, "=> http, write() failed (len=%d, res=%d, errno=%d)\n", strlen(h->query), res, errno);
Index: src/dcc7.c
===================================================================
--- src/dcc7.c	(wersja 1118)
+++ src/dcc7.c	(kopia robocza)
@@ -226,7 +226,7 @@
 static int gg_dcc7_listen(struct gg_dcc7 *dcc, uint32_t addr, uint16_t port)
 {
 	struct sockaddr_in sin;
-	unsigned int sin_len = sizeof(sin);
+	socklen_t sin_len = sizeof(sin);
 	int errsv;
 	int fd;
 
@@ -1050,7 +1050,7 @@
 		{
 			struct sockaddr_in sin;
 			int fd, one = 1;
-			unsigned int sin_len = sizeof(sin);
+			socklen_t sin_len = sizeof(sin);
 
 			gg_debug_dcc(dcc, GG_DEBUG_MISC, "// gg_dcc7_watch_fd() GG_STATE_LISTENING\n");
 
Index: src/dcc.c
===================================================================
--- src/dcc.c	(wersja 1118)
+++ src/dcc.c	(kopia robocza)
@@ -418,7 +418,7 @@
 		return NULL;
 	}
 
-	if (port == 0 || port == -1)
+	if (port == 0 || port == (uint16_t)-1)
 		port = GG_DEFAULT_DCC_PORT;
 
 	while (!bound) {
_______________________________________________
libgadu-devel mailing list
[email protected]
http://lists.ziew.org/mailman/listinfo/libgadu-devel

Reply via email to