Fixed #408425 by zeroing sockaddr_in before usage.

Minor clean-up for new FFI.
Maybe useless cast to unsigned in host_ent2host_info .
This commit is contained in:
mainzelm 2001-06-20 16:01:20 +00:00
parent 211ddec9d5
commit 8c724fb65f
1 changed files with 6 additions and 45 deletions

View File

@ -21,12 +21,6 @@
#include "network1.h" #include "network1.h"
#include "scheme48.h" #include "scheme48.h"
/* to extract a 4 byte long value from a scheme string */
#define GET_LONG(x,n) (*((u_long *)(S48_ADDRESS_AFTER_HEADER((x),unsigned char)+(n*4))))
#define SET_LONG(x,n,v) GET_LONG((x),(n))=(u_long)(v);
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name) s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name)
{ {
@ -37,6 +31,7 @@ s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name)
{ {
struct sockaddr_un name; struct sockaddr_un name;
int scheme_length=S48_STRING_LENGTH(scheme_name); int scheme_length=S48_STRING_LENGTH(scheme_name);
memset(&name, 0, sizeof(name));
name.sun_family=AF_UNIX; name.sun_family=AF_UNIX;
if (scheme_length>=(108-1)) /* save space for \0 */ if (scheme_length>=(108-1)) /* save space for \0 */
@ -52,9 +47,9 @@ s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name)
case AF_INET: case AF_INET:
{ {
struct sockaddr_in name; struct sockaddr_in name;
unsigned long addr = htonl(s48_extract_unsigned_integer (S48_CAR (scheme_name)));
u_long addr = htonl(s48_extract_unsigned_integer (S48_CAR (scheme_name))); unsigned short port = htons(s48_extract_fixnum (S48_CDR (scheme_name)));
u_short port = htons(s48_extract_fixnum (S48_CDR (scheme_name))); memset(&name, 0, sizeof(name));
name.sin_family=AF_INET; name.sin_family=AF_INET;
name.sin_addr.s_addr=addr; name.sin_addr.s_addr=addr;
@ -522,7 +517,7 @@ s48_value host_ent2host_info (struct hostent * host)
while (*ptr) while (*ptr)
{ {
list = list =
s48_cons (s48_enter_unsigned_integer (ntohl (*(long *)(host->h_addr_list[i]))), s48_cons (s48_enter_unsigned_integer (ntohl ((unsigned long) *(long *)(host->h_addr_list[i]))),
list); list);
ptr++; ptr++;
i++; i++;
@ -760,38 +755,4 @@ s48_value scheme_proto_name2proto_info(s48_value in_name)
} }
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
/* Low Level Junk */
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
/* svec is a Scheme vector of C carriers. Scan over the C longs
** in cvec, and initialise the corresponding carriers in svec.
*/
void set_longvec_carriers(s48_value svec, long const * const * cvec)
{
int svec_len = S48_VECTOR_LENGTH(svec);
long const * const *cv = cvec;
s48_value s = S48_VECTOR_REF(svec,0); //JMG hack
s48_value *sv = &s;
for(; svec_len > 0; cv++, sv++, svec_len-- ) {
/* *sv is a (make-string 4) */
s48_value carrier = *sv;
(*((u_long *)(S48_ADDRESS_AFTER_HEADER(carrier,unsigned char))))
=(long)**cv;
}
}
/* One arg, a zero-terminated C word vec. Returns length.
** The terminating null is not counted. Returns #f on NULL.
*/
s48_value veclen(const long *vec)
{
const long *vptr = vec;
if( !vptr ) return S48_FALSE;
while( *vptr ) vptr++;
return s48_enter_fixnum(vptr - vec);
}