From 8c724fb65fb766307baa510e7dff660c69fabdbe Mon Sep 17 00:00:00 2001 From: mainzelm Date: Wed, 20 Jun 2001 16:01:20 +0000 Subject: [PATCH] Fixed #408425 by zeroing sockaddr_in before usage. Minor clean-up for new FFI. Maybe useless cast to unsigned in host_ent2host_info . --- scsh/network1.c | 51 ++++++------------------------------------------- 1 file changed, 6 insertions(+), 45 deletions(-) diff --git a/scsh/network1.c b/scsh/network1.c index 7d5aa16..4089faf 100644 --- a/scsh/network1.c +++ b/scsh/network1.c @@ -21,12 +21,6 @@ #include "network1.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) { @@ -37,7 +31,8 @@ s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name) { struct sockaddr_un name; int scheme_length=S48_STRING_LENGTH(scheme_name); - + memset(&name, 0, sizeof(name)); + name.sun_family=AF_UNIX; if (scheme_length>=(108-1)) /* save space for \0 */ return(-1); // TODO: check this in scheme ! @@ -52,9 +47,9 @@ s48_value scheme_bind(s48_value sock, s48_value family, s48_value scheme_name) case AF_INET: { struct sockaddr_in name; - - u_long addr = htonl(s48_extract_unsigned_integer (S48_CAR (scheme_name))); - u_short port = htons(s48_extract_fixnum (S48_CDR (scheme_name))); + unsigned long addr = htonl(s48_extract_unsigned_integer (S48_CAR (scheme_name))); + unsigned short port = htons(s48_extract_fixnum (S48_CDR (scheme_name))); + memset(&name, 0, sizeof(name)); name.sin_family=AF_INET; name.sin_addr.s_addr=addr; @@ -522,7 +517,7 @@ s48_value host_ent2host_info (struct hostent * host) while (*ptr) { 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); ptr++; 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); -} - -