From 101c59356292c30ed5c8f7138c7680b4dc3d4811 Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 5 Jun 2005 17:11:42 +0000 Subject: [PATCH] 64 bit fixes (initial patch by Gwenole Beauchesne) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1458 c046a42c-6fe2-441c-8c8c-71466251a162 --- slirp/bootp.c | 2 +- slirp/bootp.h | 6 +++--- slirp/ip_icmp.h | 4 ++-- slirp/libslirp.h | 8 ++++++++ slirp/slirp_config.h | 3 +-- slirp/udp.c | 18 ++++++++++++------ slirp/udp.h | 1 + 7 files changed, 28 insertions(+), 14 deletions(-) diff --git a/slirp/bootp.c b/slirp/bootp.c index 56caf707eb..9f0652fd63 100644 --- a/slirp/bootp.c +++ b/slirp/bootp.c @@ -238,7 +238,7 @@ static void bootp_reply(struct bootp_t *bp) void bootp_input(struct mbuf *m) { - struct bootp_t *bp = (struct bootp_t *)m->m_data; + struct bootp_t *bp = mtod(m, struct bootp_t *); if (bp->bp_op == BOOTP_REQUEST) { bootp_reply(bp); diff --git a/slirp/bootp.h b/slirp/bootp.h index d3b2baa041..e48f53f37a 100644 --- a/slirp/bootp.h +++ b/slirp/bootp.h @@ -97,9 +97,9 @@ struct bootp_t { uint8_t bp_htype; uint8_t bp_hlen; uint8_t bp_hops; - unsigned long bp_xid; - unsigned short bp_secs; - unsigned short unused; + uint32_t bp_xid; + uint16_t bp_secs; + uint16_t unused; struct in_addr bp_ciaddr; struct in_addr bp_yiaddr; struct in_addr bp_siaddr; diff --git a/slirp/ip_icmp.h b/slirp/ip_icmp.h index 7ddaaf8f37..8c9b5a1ba5 100644 --- a/slirp/ip_icmp.h +++ b/slirp/ip_icmp.h @@ -83,8 +83,8 @@ struct icmp { struct ip idi_ip; /* options and then 64 bits of data */ } id_ip; - u_long id_mask; - char id_data[1]; + uint32_t id_mask; + char id_data[1]; } icmp_dun; #define icmp_otime icmp_dun.id_ts.its_otime #define icmp_rtime icmp_dun.id_ts.its_rtime diff --git a/slirp/libslirp.h b/slirp/libslirp.h index 6a54eb14f6..cff159e791 100644 --- a/slirp/libslirp.h +++ b/slirp/libslirp.h @@ -9,6 +9,10 @@ int inet_aton(const char *cp, struct in_addr *ia); #include #endif +#ifdef __cplusplus +extern "C" { +#endif + void slirp_init(void); void slirp_select_fill(int *pnfds, @@ -29,4 +33,8 @@ int slirp_add_exec(int do_pty, const char *args, int addr_low_byte, extern const char *tftp_prefix; +#ifdef __cplusplus +} +#endif + #endif diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h index 856c315675..a0795ef6b5 100644 --- a/slirp/slirp_config.h +++ b/slirp/slirp_config.h @@ -149,8 +149,7 @@ #define SIZEOF_INT 4 /* Define to sizeof(char *) */ -/* XXX: patch it */ -#define SIZEOF_CHAR_P 4 +#define SIZEOF_CHAR_P (HOST_LONG_BITS / 8) /* Define if you have random() */ #undef HAVE_RANDOM diff --git a/slirp/udp.c b/slirp/udp.c index aefa0b749b..079c543534 100644 --- a/slirp/udp.c +++ b/slirp/udp.c @@ -420,10 +420,16 @@ struct talk_request { #endif struct cu_header { - char dest[8]; - short family; - u_short port; - u_long addr; + uint16_t d_family; // destination family + uint16_t d_port; // destination port + uint32_t d_addr; // destination address + uint16_t s_family; // source family + uint16_t s_port; // source port + uint32_t s_addr; // source address + uint32_t seqn; // sequence number + uint16_t message; // message + uint16_t data_type; // data type + uint16_t pkt_len; // packet length } *cu_head; switch(so->so_emu) { @@ -610,8 +616,8 @@ struct cu_header { if (getsockname(so->s, (struct sockaddr *)&addr, &addrlen) < 0) return; cu_head = mtod(m, struct cu_header *); - cu_head->port = addr.sin_port; - cu_head->addr = (u_long) our_addr.s_addr; + cu_head->s_port = addr.sin_port; + cu_head->s_addr = our_addr.s_addr; } return; diff --git a/slirp/udp.h b/slirp/udp.h index 195b1bfff3..24c11bbf73 100644 --- a/slirp/udp.h +++ b/slirp/udp.h @@ -94,6 +94,7 @@ struct udpstat { extern struct udpstat udpstat; extern struct socket udb; +struct mbuf; void udp_init _P((void)); void udp_input _P((register struct mbuf *, int));