]> granicus.if.org Git - transmission/commitdiff
#4260 "µTP not working on embedded device" -- apply the changes from https://github...
authorJordan Lee <jordan@transmissionbt.com>
Wed, 10 Aug 2011 14:51:59 +0000 (14:51 +0000)
committerJordan Lee <jordan@transmissionbt.com>
Wed, 10 Aug 2011 14:51:59 +0000 (14:51 +0000)
third-party/libutp/templates.h
third-party/libutp/utp.cpp
third-party/libutp/utypes.h

index 9e98fb3d7234a9e921bf2d37c6591a00a10b501a..ca89ae46296d44e4aeb52a95a4c648c5eef4c638 100644 (file)
 #endif
 #endif
 
+#ifdef __GNUC__
+// Used for gcc tool chains accepting but not supporting pragma pack
+// See http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html
+#define PACKED_ATTRIBUTE __attribute__((__packed__))
+#else
+#define PACKED_ATTRIBUTE
+#endif
+
 // Utility templates
 #undef min
 #undef max
@@ -48,7 +56,7 @@ namespace aux
 }
 
 template <class T>
-struct big_endian
+struct PACKED_ATTRIBUTE big_endian
 {
        T operator=(T i) { m_integer = aux::host_to_network(i); return i; }
        operator T() const { return aux::network_to_host(m_integer); }
index c5f431ee5bfde0e6edbc5275caf83df983750873..99ad98fa760fa3f1ecbae35521e75b22b7fcbee4 100644 (file)
@@ -94,7 +94,7 @@ char addrbuf2[65];
 
 #pragma pack(push,1)
 
-struct PackedSockAddr {
+struct PACKED_ATTRIBUTE PackedSockAddr {
 
        // The values are always stored here in network byte order
        union {
@@ -192,7 +192,7 @@ struct PackedSockAddr {
        }
 };
 
-struct RST_Info {
+struct PACKED_ATTRIBUTE RST_Info {
        PackedSockAddr addr;
        uint32 connid;
        uint32 timestamp;
@@ -211,7 +211,7 @@ struct RST_Info {
 #define PACKET_SIZE_BIG 1400
 #define PACKET_SIZE_HUGE_BUCKET 4
 
-struct PacketFormat {
+struct PACKED_ATTRIBUTE PacketFormat {
        // connection ID
        uint32_big connid;
        uint32_big tv_sec;
@@ -229,21 +229,21 @@ struct PacketFormat {
        uint16_big ack_nr;
 };
 
-struct PacketFormatAck {
+struct PACKED_ATTRIBUTE PacketFormatAck {
        PacketFormat pf;
        byte ext_next;
        byte ext_len;
        byte acks[4];
 };
 
-struct PacketFormatExtensions {
+struct PACKED_ATTRIBUTE PacketFormatExtensions {
        PacketFormat pf;
        byte ext_next;
        byte ext_len;
        byte extensions[8];
 };
 
-struct PacketFormatV1 {
+struct PACKED_ATTRIBUTE PacketFormatV1 {
        // packet_type (4 high bits)
        // protocol version (4 low bits)
        byte ver_type;
@@ -266,14 +266,14 @@ struct PacketFormatV1 {
        uint16_big ack_nr;
 };
 
-struct PacketFormatAckV1 {
+struct PACKED_ATTRIBUTE PacketFormatAckV1 {
        PacketFormatV1 pf;
        byte ext_next;
        byte ext_len;
        byte acks[4];
 };
 
-struct PacketFormatExtensionsV1 {
+struct PACKED_ATTRIBUTE PacketFormatExtensionsV1 {
        PacketFormatV1 pf;
        byte ext_next;
        byte ext_len;
index d4f4b17ec67b9b0ec789f19a740cfe89b523b641..673554e240ed109a20ed5407dae3e07b1bcfe8e6 100644 (file)
@@ -36,7 +36,7 @@ typedef const char * cstr;
 typedef char * str;
 
 #ifndef __cplusplus
-#include <stdbool.h>
+typedef uint8 bool;
 #endif
 
 #endif //__UTYPES_H__