svn commit: trunk/uClibc: libc/inet libcrypt
vda at uclibc.org
vda at uclibc.org
Mon Jul 30 09:53:45 PDT 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