svn commit: trunk/uClibc: libc/inet libcrypt

vda at uclibc.org vda at uclibc.org
Mon Jul 30 16:53:45 UTC 2007


Author: vda
Date: 2007-07-30 09:53:44 -0700 (Mon, 30 Jul 2007)
New Revision: 19343

Log:
patch #3: make resolv.c use __uc_malloc



Modified:
   trunk/uClibc/libc/inet/resolv.c
   trunk/uClibc/libcrypt/des.c


Changeset:
Modified: trunk/uClibc/libc/inet/resolv.c
===================================================================
--- trunk/uClibc/libc/inet/resolv.c	2007-07-30 16:52:23 UTC (rev 19342)
+++ trunk/uClibc/libc/inet/resolv.c	2007-07-30 16:53:44 UTC (rev 19343)
@@ -146,6 +146,7 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <stdlib.h>
+#include <malloc.h>
 #include <unistd.h>
 #include <resolv.h>
 #include <netdb.h>
@@ -1122,13 +1123,17 @@
 
 struct hostent *gethostbyname(const char *name)
 {
-	static struct hostent h;
-	static char buf[sizeof(struct in_addr) +
+	static struct {
+		struct hostent h;
+		char buf[sizeof(struct in_addr) +
 					sizeof(struct in_addr *)*2 +
 					sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */];
+	} *sp;
 	struct hostent *hp;
 
-	gethostbyname_r(name, &h, buf, sizeof(buf), &hp, &h_errno);
+	free(sp);
+	sp = __uc_malloc(sizeof(*sp));
+	gethostbyname_r(name, &sp->h, sp->buf, sizeof(sp->buf), &hp, &h_errno);
 
 	return hp;
 }
@@ -1142,13 +1147,17 @@
 #ifndef __UCLIBC_HAS_IPV6__
 	return family == AF_INET ? gethostbyname(name) : (struct hostent*)0;
 #else /* __UCLIBC_HAS_IPV6__ */
-	static struct hostent h;
-	static char buf[sizeof(struct in6_addr) +
+	static struct {
+		struct hostent h;
+		char buf[sizeof(struct in6_addr) +
 					sizeof(struct in6_addr *)*2 +
 					sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */];
+	} *sp;
 	struct hostent *hp;
 
-	gethostbyname2_r(name, family, &h, buf, sizeof(buf), &hp, &h_errno);
+	free(sp);
+	sp = __uc_malloc(sizeof(*sp));
+	gethostbyname2_r(name, family, &sp->h, sp->buf, sizeof(sp->buf), &hp, &h_errno);
 
 	return hp;
 #endif /* __UCLIBC_HAS_IPV6__ */
@@ -1496,17 +1505,21 @@
 #ifdef L_gethostbyaddr
 struct hostent *gethostbyaddr (const void *addr, socklen_t len, int type)
 {
-	static struct hostent h;
-	static char buf[
+	static struct {
+		struct hostent h;
+		char buf[
 #ifndef __UCLIBC_HAS_IPV6__
 					sizeof(struct in_addr) + sizeof(struct in_addr *)*2 +
 #else
 					sizeof(struct in6_addr) + sizeof(struct in6_addr *)*2 +
 #endif /* __UCLIBC_HAS_IPV6__ */
 					sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */];
+	} *sp;
 	struct hostent *hp;
 
-	gethostbyaddr_r(addr, len, type, &h, buf, sizeof(buf), &hp, &h_errno);
+	free(sp);
+	sp = __uc_malloc(sizeof(*sp));
+	gethostbyaddr_r(addr, len, type, &sp->h, sp->buf, sizeof(sp->buf), &hp, &h_errno);
 
 	return hp;
 }
@@ -1725,8 +1738,9 @@
 
 struct hostent *gethostent (void)
 {
-    static struct hostent h;
-    static char buf[
+    static struct {
+	struct hostent h;
+	char buf[
 #ifndef __UCLIBC_HAS_IPV6__
 					sizeof(struct in_addr) + sizeof(struct in_addr *)*2 +
 #else
@@ -1734,10 +1748,13 @@
 #endif /* __UCLIBC_HAS_IPV6__ */
 					sizeof(char *)*(ALIAS_DIM) +
 					80/*namebuffer*/ + 2/* margin */];
+    } *sp;
     struct hostent *host;
 
+    free(sp);
+    sp = __uc_malloc(sizeof(*sp));
     __UCLIBC_MUTEX_LOCK(mylock);
-    gethostent_r(&h, buf, sizeof(buf), &host, &h_errno);
+    gethostent_r(&sp->h, sp->buf, sizeof(sp->buf), &host, &h_errno);
     __UCLIBC_MUTEX_UNLOCK(mylock);
     return(host);
 }

Modified: trunk/uClibc/libcrypt/des.c
===================================================================
--- trunk/uClibc/libcrypt/des.c	2007-07-30 16:52:23 UTC (rev 19342)
+++ trunk/uClibc/libcrypt/des.c	2007-07-30 16:53:44 UTC (rev 19343)
@@ -697,6 +697,7 @@
 #define output __des_crypt_out
 
 	if (!__uc_des_data) {
+		/* If malloc returns NULL, we just segfault. Other ideas? */
 		__uc_des_data = memset(__uc_malloc(sizeof(D)), 0, sizeof(D));
 	}
 




More information about the uClibc-cvs mailing list