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 "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);
}