Package: gtk-gnutella
Version: 0.96.1svn12109-1
Severity: serious
Tags: patch
Justification: no longer builds from source


Build fails on ARM with STATIC_ASSERT failures.  The ARM ABI padds
structudes to 4-byte boundaries by default.  The attached patch adds
__attribute__((packed)) to inhibit this on structures that need to be
a funny size.

Paul

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: arm (armv5tejl)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-rc7
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
diff -ur gtk-gnutella-clean/src/core/gnutella.h gtk-gnutella-0.96.1svn12109/src/core/gnutella.h
--- gtk-gnutella-clean/src/core/gnutella.h	2006-10-16 00:01:09.000000000 +0100
+++ gtk-gnutella-0.96.1svn12109/src/core/gnutella.h	2006-11-04 15:07:19.000000000 +0000
@@ -48,25 +48,25 @@
 struct gnutella_msg_init {
 	struct gnutella_header header;
 	/**< GGEP data may follow */
-};
+} __attribute__((packed));
 
 struct gnutella_init_response {
 	guchar host_port[2];
 	guchar host_ip[4];
 	guchar files_count[4];
 	guchar kbytes_count[4];
-};
+} __attribute__((packed));
 
 struct gnutella_msg_init_response {
 	struct gnutella_header header;
 	struct gnutella_init_response response;
 	/**< GGEP data may follow */
-};
+} __attribute__((packed));
 
 struct gnutella_search {
 	guchar speed[2];
 	/**< query string follows */
-};
+} __attribute__((packed));
 
 struct gnutella_search_results {
 	guchar num_recs;
@@ -76,41 +76,41 @@
 	/* record data follows */
 
 	/* Last 16 bytes = client_id */
-};
+} __attribute__((packed));
 
 struct gnutella_msg_search {
 	struct gnutella_header header;
 	struct gnutella_search search;
-};
+} __attribute__((packed));
 
 struct gnutella_push_request {
 	guchar guid[16];
 	guchar file_id[4];
 	guchar host_ip[4];
 	guchar host_port[2];
-};
+} __attribute__((packed));
 
 struct gnutella_msg_push_request {
 	struct gnutella_header header;
 	struct gnutella_push_request request;
 	/**< GGEP data may follow */
-};
+} __attribute__((packed));
 
 struct gnutella_bye {
 	guchar code[2];
 	/**< message string follows */
-};
+} __attribute__((packed));
 
 struct gnutella_qrp_reset {
 	guchar variant;			/**< 0x00 */
 	guchar table_length[4];	/**< little endian */
 	guchar infinity;
-};
+} __attribute__((packed));
 
 struct gnutella_msg_qrp_reset {
 	struct gnutella_header header;
 	struct gnutella_qrp_reset data;
-};
+} __attribute__((packed));
 
 struct gnutella_qrp_patch {
 	guchar variant;			/**< 0x01 */
@@ -118,29 +118,29 @@
 	guchar seq_size;
 	guchar compressor;
 	guchar entry_bits;
-};
+} __attribute__((packed));
 
 struct gnutella_msg_qrp_patch {
 	struct gnutella_header header;
 	struct gnutella_qrp_patch data;
-};
+} __attribute__((packed));
 
 struct gnutella_vendor {
 	guchar vendor[4];		/**< For example, "GTKG" */
 	guchar selector_id[2];	/**< Message selector ID, little endian */
 	guchar version[2];		/**< Message version number, little endian */
 	/* payload follows */
-};
+} __attribute__((packed));
 
 struct gnutella_msg_vendor {
 	struct gnutella_header header;
 	struct gnutella_vendor data;
-};
+} __attribute__((packed));
 
 struct gnutella_msg_hsep_data {
 	struct gnutella_header header;
 	guchar triple[3 * sizeof(guint64)];
-};
+} __attribute__((packed));
 
 #endif /* _core_gnutella_h_ */
 
diff -ur gtk-gnutella-clean/src/core/qhit.c gtk-gnutella-0.96.1svn12109/src/core/qhit.c
--- gtk-gnutella-clean/src/core/qhit.c	2006-10-16 00:01:09.000000000 +0100
+++ gtk-gnutella-0.96.1svn12109/src/core/qhit.c	2006-11-04 16:16:38.000000000 +0000
@@ -677,7 +677,7 @@
 				struct {
 					gchar ipv4[4];
 					gchar port[2];
-				} alt;
+				} __attribute__((packed)) alt;
 			
 				STATIC_ASSERT(sizeof alt == 6);
 				poke_be32(alt.ipv4, host_addr_ipv4(hvec[i].addr));
diff -ur gtk-gnutella-clean/src/if/core/gnutella.h gtk-gnutella-0.96.1svn12109/src/if/core/gnutella.h
--- gtk-gnutella-clean/src/if/core/gnutella.h	2006-10-16 00:01:09.000000000 +0100
+++ gtk-gnutella-0.96.1svn12109/src/if/core/gnutella.h	2006-11-04 15:03:09.000000000 +0000
@@ -62,7 +62,7 @@
 	guchar ttl;
 	guchar hops;
 	guchar size[4];
-};
+} __attribute__((packed));
 
 #define GTA_HEADER_SIZE		sizeof(struct gnutella_header)
 

Reply via email to