From 5b778a7ca4b09f7e50f00ab2624035bb9e4d3528 Mon Sep 17 00:00:00 2001
From: Yang Tse <yangsita@gmail.com>
Date: Mon, 22 Feb 2010 23:28:56 +0000
Subject: [PATCH] fix socket data type and logging format in debug tracking
 socket functions

---
 lib/memdebug.c | 47 +++++++++++++++++++++++++++++++----------------
 lib/memdebug.h | 13 ++++++++-----
 2 files changed, 39 insertions(+), 21 deletions(-)

diff --git a/lib/memdebug.c b/lib/memdebug.c
index b259ed3e5a..934d9720df 100644
--- a/lib/memdebug.c
+++ b/lib/memdebug.c
@@ -275,38 +275,53 @@ void curl_dofree(void *ptr, int line, const char *source)
     curl_memlog("MEM %s:%d free(%p)\n", source, line, ptr);
 }
 
-int curl_socket(int domain, int type, int protocol, int line,
-                const char *source)
+curl_socket_t curl_socket(int domain, int type, int protocol,
+                          int line, const char *source)
 {
-  int sockfd=socket(domain, type, protocol);
-  if(source && (sockfd!=-1))
-    curl_memlog("FD %s:%d socket() = %d\n",
-                source, line, sockfd);
+  const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
+                    "FD %s:%d socket() = %d\n" :
+                    (sizeof(curl_socket_t) == sizeof(long)) ?
+                    "FD %s:%d socket() = %ld\n" :
+                    "FD %s:%d socket() = %zd\n" ;
+
+  curl_socket_t sockfd = socket(domain, type, protocol);
+  if(source && (sockfd != CURL_SOCKET_BAD))
+    curl_memlog(fmt, source, line, sockfd);
   return sockfd;
 }
 
-int curl_accept(int s, void *saddr, void *saddrlen,
-                int line, const char *source)
+curl_socket_t curl_accept(curl_socket_t s, void *saddr, void *saddrlen,
+                          int line, const char *source)
 {
+  const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
+                    "FD %s:%d accept() = %d\n" :
+                    (sizeof(curl_socket_t) == sizeof(long)) ?
+                    "FD %s:%d accept() = %ld\n" :
+                    "FD %s:%d accept() = %zd\n" ;
+
   struct sockaddr *addr = (struct sockaddr *)saddr;
   curl_socklen_t *addrlen = (curl_socklen_t *)saddrlen;
-  int sockfd=accept(s, addr, addrlen);
-  if(source)
-    curl_memlog("FD %s:%d accept() = %d\n",
-                source, line, sockfd);
+  curl_socket_t sockfd = accept(s, addr, addrlen);
+  if(source && (sockfd != CURL_SOCKET_BAD))
+    curl_memlog(fmt, source, line, sockfd);
   return sockfd;
 }
 
 /* separate function to allow libcurl to mark a "faked" close */
-void curl_mark_sclose(int sockfd, int line, const char *source)
+void curl_mark_sclose(curl_socket_t sockfd, int line, const char *source)
 {
+  const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
+                    "FD %s:%d sclose(%d)\n" :
+                    (sizeof(curl_socket_t) == sizeof(long)) ?
+                    "FD %s:%d sclose(%ld)\n" :
+                    "FD %s:%d sclose(%zd)\n" ;
+
   if(source)
-    curl_memlog("FD %s:%d sclose(%d)\n",
-                source, line, sockfd);
+    curl_memlog(fmt, source, line, sockfd);
 }
 
 /* this is our own defined way to close sockets on *ALL* platforms */
-int curl_sclose(int sockfd, int line, const char *source)
+int curl_sclose(curl_socket_t sockfd, int line, const char *source)
 {
   int res=sclose(sockfd);
   curl_mark_sclose(sockfd, line, source);
diff --git a/lib/memdebug.h b/lib/memdebug.h
index c676483917..27351b5d8f 100644
--- a/lib/memdebug.h
+++ b/lib/memdebug.h
@@ -57,11 +57,14 @@ CURL_EXTERN void curl_memlimit(long limit);
 CURL_EXTERN void curl_memlog(const char *format, ...);
 
 /* file descriptor manipulators */
-CURL_EXTERN int curl_socket(int domain, int type, int protocol, int line , const char *);
-CURL_EXTERN void curl_mark_sclose(int sockfd, int, const char *source);
-CURL_EXTERN int curl_sclose(int sockfd, int, const char *source);
-CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen,
-                            int line, const char *source);
+CURL_EXTERN curl_socket_t curl_socket(int domain, int type, int protocol,
+                                      int line , const char *source);
+CURL_EXTERN void curl_mark_sclose(curl_socket_t sockfd,
+                                  int line , const char *source);
+CURL_EXTERN int curl_sclose(curl_socket_t sockfd,
+                            int line , const char *source);
+CURL_EXTERN curl_socket_t curl_accept(curl_socket_t s, void *a, void *alen,
+                                      int line, const char *source);
 
 /* FILE functions */
 CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line,
-- 
GitLab