64 bit fixes (initial patch by Gwenole Beauchesne)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1458 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/slirp/bootp.c b/slirp/bootp.c
index 56caf70..9f0652f 100644
--- a/slirp/bootp.c
+++ b/slirp/bootp.c
@@ -238,7 +238,7 @@
 
 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 d3b2baa..e48f53f 100644
--- a/slirp/bootp.h
+++ b/slirp/bootp.h
@@ -97,9 +97,9 @@
     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 7ddaaf8..8c9b5a1 100644
--- a/slirp/ip_icmp.h
+++ b/slirp/ip_icmp.h
@@ -83,8 +83,8 @@
 			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 6a54eb1..cff159e 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -9,6 +9,10 @@
 #include <arpa/inet.h>
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void slirp_init(void);
 
 void slirp_select_fill(int *pnfds, 
@@ -29,4 +33,8 @@
 
 extern const char *tftp_prefix;
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 856c315..a0795ef 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 aefa0b7..079c543 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -420,10 +420,16 @@
 #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 @@
 			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 195b1bf..24c11bb 100644
--- a/slirp/udp.h
+++ b/slirp/udp.h
@@ -94,6 +94,7 @@
 
 extern struct udpstat udpstat;
 extern struct socket udb;
+struct mbuf;
 
 void udp_init _P((void));
 void udp_input _P((register struct mbuf *, int));