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:
parent
211ddec9d5
commit
8c724fb65f
|
@ -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,6 +31,7 @@ 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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue