diff --git a/src/network/slirp/ip.h b/src/network/slirp/ip.h index 39e3a40da..fba3defa1 100644 --- a/src/network/slirp/ip.h +++ b/src/network/slirp/ip.h @@ -71,6 +71,9 @@ typedef uint32_t n_long; /* long as received from the net */ /* * Structure of an internet header, naked of options. */ +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct ip { #if G_BYTE_ORDER == G_BIG_ENDIAN uint8_t ip_v : 4, /* version */ @@ -91,6 +94,9 @@ struct ip { uint16_t ip_sum; /* checksum */ struct in_addr ip_src, ip_dst; /* source and dest address */ } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif #define IP_MAXPACKET 65535 /* maximum packet size */ @@ -134,6 +140,9 @@ struct ip { /* * Time stamp option structure. */ +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct ip_timestamp { uint8_t ipt_code; /* IPOPT_TS */ uint8_t ipt_len; /* size of structure (variable) */ @@ -153,6 +162,9 @@ struct ip_timestamp { } ipt_ta[1]; } ipt_timestamp; } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif /* flag bits for ipt_flg */ #define IPOPT_TS_TSONLY 0 /* timestamps only */ @@ -178,6 +190,9 @@ struct ip_timestamp { #define IP_MSS 576 /* default maximum segment size */ +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif #if GLIB_SIZEOF_VOID_P == 4 struct mbuf_ptr { struct mbuf *mptr; @@ -188,6 +203,9 @@ struct mbuf_ptr { struct mbuf *mptr; } SLIRP_PACKED; #endif +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif struct qlink { void *next, *prev; }; @@ -195,6 +213,9 @@ struct qlink { /* * Overlay for ip header used by other protocols (tcp, udp). */ +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct ipovly { struct mbuf_ptr ih_mbuf; /* backpointer to mbuf */ uint8_t ih_x1; /* (unused) */ @@ -203,6 +224,9 @@ struct ipovly { struct in_addr ih_src; /* source internet address */ struct in_addr ih_dst; /* destination internet address */ } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif /* * Ip reassembly queue structure. Each fragment diff --git a/src/network/slirp/ip6_icmp.h b/src/network/slirp/ip6_icmp.h index c37e60f28..77772a76b 100644 --- a/src/network/slirp/ip6_icmp.h +++ b/src/network/slirp/ip6_icmp.h @@ -115,6 +115,9 @@ G_STATIC_ASSERT(sizeof(struct icmp6) == 40); /* * NDP Options */ +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct ndpopt { uint8_t ndpopt_type; /* Option type */ uint8_t ndpopt_len; /* /!\ In units of 8 octets */ @@ -142,6 +145,9 @@ struct ndpopt { #define ndpopt_rdnss ndpopt_body.rdnss } ndpopt_body; } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif /* NDP options type */ #define NDPOPT_LINKLAYER_SOURCE 1 /* Source Link-Layer Address */ diff --git a/src/network/slirp/slirp.h b/src/network/slirp/slirp.h index 4f8b13338..d996b53ed 100644 --- a/src/network/slirp/slirp.h +++ b/src/network/slirp/slirp.h @@ -75,6 +75,9 @@ struct ethhdr { unsigned short h_proto; /* packet type ID field */ }; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct slirp_arphdr { unsigned short ar_hrd; /* format of hardware address */ unsigned short ar_pro; /* format of protocol address */ @@ -90,6 +93,9 @@ struct slirp_arphdr { unsigned char ar_tha[ETH_ALEN]; /* target hardware address */ uint32_t ar_tip; /* target IP address */ } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif #define ARP_TABLE_SIZE 16 diff --git a/src/network/slirp/tftp.h b/src/network/slirp/tftp.h index 6d75478e8..663485328 100644 --- a/src/network/slirp/tftp.h +++ b/src/network/slirp/tftp.h @@ -20,6 +20,9 @@ #define TFTP_FILENAME_MAX 512 #define TFTP_BLOCKSIZE_MAX 1428 +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(push, 1) +#endif struct tftp_t { struct udphdr udp; uint16_t tp_op; @@ -35,6 +38,9 @@ struct tftp_t { char tp_buf[TFTP_BLOCKSIZE_MAX + 2]; } x; } SLIRP_PACKED; +#if defined(_MSC_VER) && !defined (__clang__) +#pragma pack(pop) +#endif struct tftp_session { Slirp *slirp; diff --git a/src/network/slirp/util.h b/src/network/slirp/util.h index d4d8d109d..317b7d849 100644 --- a/src/network/slirp/util.h +++ b/src/network/slirp/util.h @@ -46,8 +46,10 @@ #include #endif -#if defined(_WIN32) && (defined(__x86_64__) || defined(__i386__)) -#define SLIRP_PACKED __attribute__((gcc_struct, packed)) +#if defined(_MSC_VER) && !defined(__clang__) +#define SLIRP_PACKED +#elif defined(_WIN32) && (defined(__x86_64__) || defined(__i386__)) +#define SLIRP_PACKED __attribute__((gcc_struct, packed)) #else #define SLIRP_PACKED __attribute__((packed)) #endif