netsurf: fixes for GCC-4.4, from netsurf svn.
authorGraham Gower <graham.gower@gmail.com>
Tue, 25 Aug 2009 21:29:35 +0000 (21:29 +0000)
committerKhem Raj <raj.khem@gmail.com>
Mon, 31 Aug 2009 22:51:52 +0000 (15:51 -0700)
Netsurf appears to be statically linked with these libraries, so I
bumped its PR too.

Signed-off-by: Graham Gower <graham.gower@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
recipes/netsurf/files/hubbub-uninitialised.patch [new file with mode: 0644]
recipes/netsurf/files/libnsgif-strict-aliasing.patch [new file with mode: 0644]
recipes/netsurf/hubbub_0.0.1.bb
recipes/netsurf/libnsgif_0.0.1.bb
recipes/netsurf/netsurf_2.1.bb

diff --git a/recipes/netsurf/files/hubbub-uninitialised.patch b/recipes/netsurf/files/hubbub-uninitialised.patch
new file mode 100644 (file)
index 0000000..4f87120
--- /dev/null
@@ -0,0 +1,35 @@
+http://source.netsurf-browser.org/?view=rev&revision=7398
+Initialise variables to stop GCC 4.4 complaining (credit: Jeroen Habraken)
+
+--- hubbub/src/tokeniser/tokeniser.c   2009/04/06 15:22:16     7052
++++ hubbub/src/tokeniser/tokeniser.c   2009/05/05 17:18:41     7398
+@@ -787,7 +787,7 @@
+                                                       + 1);
+               } else {
+                       parserutils_error error;
+-                      const uint8_t *cptr;
++                      const uint8_t *cptr = NULL;
+                       error = parserutils_inputstream_peek(
+                                       tokeniser->input,
+                                       tokeniser->context.pending,
+@@ -1590,8 +1590,8 @@
+                                       tokeniser->context.match_entity.length
+                                       + 1;
+               } else {
+-                      size_t len;
+-                      const uint8_t *cptr;
++                      size_t len = 0;
++                      const uint8_t *cptr = NULL;
+                       parserutils_error error;
+                       error = parserutils_inputstream_peek(
+@@ -3137,7 +3137,7 @@
+ {
+       hubbub_token token;
+       size_t len;
+-      const uint8_t *cptr;
++      const uint8_t *cptr = NULL;
+       parserutils_error error;
+       /* Calling this with nothing to output is a probable bug */
+
diff --git a/recipes/netsurf/files/libnsgif-strict-aliasing.patch b/recipes/netsurf/files/libnsgif-strict-aliasing.patch
new file mode 100644 (file)
index 0000000..4fe913c
--- /dev/null
@@ -0,0 +1,82 @@
+http://source.netsurf-browser.org/?view=rev&revision=9027
+Stop utterly insane palette entry population.
+Palette entries are always ABGR, regardless of platform endianness.
+This change probably breaks big-endian platforms which, under the old approach,
+had palette entries of the form RGBA (assuming I understood the code correctly).
+
+http://source.netsurf-browser.org/?view=rev&revision=9138
+Fix palette entry population some more. Hopefully, it's completely endian
+agnostic now and still builds with GCC 4.4
+
+--- libnsgif/src/libnsgif.c    2009/03/29 01:43:27     6984
++++ libnsgif/src/libnsgif.c    2009/08/09 22:24:14     9138
+@@ -319,19 +319,34 @@
+                               return GIF_INSUFFICIENT_DATA;
+                       }
+                       for (index = 0; index < gif->colour_table_size; index++) {
+-                              char colour[] = {0, 0, 0, (char)0xff};
+-                              colour[0] = gif_data[0];
+-                              colour[1] = gif_data[1];
+-                              colour[2] = gif_data[2];
+-                              gif->global_colour_table[index] = *((int *) (void *) colour);
++                              /* Gif colour map contents are r,g,b.
++                               *
++                               * We want to pack them bytewise into the 
++                               * colour table, such that the red component
++                               * is in byte 0 and the alpha component is in
++                               * byte 3.
++                               */
++                              unsigned char *entry = (unsigned char *) &gif->
++                                              global_colour_table[index];
++
++                              entry[0] = gif_data[0]; /* r */
++                              entry[1] = gif_data[1]; /* g */
++                              entry[2] = gif_data[2]; /* b */
++                              entry[3] = 0xff;        /* a */
++
+                               gif_data += 3;
+                       }
+                       gif->buffer_position = (gif_data - gif->gif_data);
+               } else {
+                       /*      Create a default colour table with the first two colours as black and white
+                       */
+-                      gif->global_colour_table[0] = 0xff000000;
+-                      gif->global_colour_table[1] = 0xffffffff;
++                      unsigned int *entry = gif->global_colour_table;
++
++                      entry[0] = 0x00000000;
++                      /* Force Alpha channel to opaque */
++                      ((unsigned char *) entry)[3] = 0xff;
++
++                      entry[1] = 0xffffffff;
+               }
+       }
+@@ -844,11 +859,21 @@
+               colour_table = gif->local_colour_table;
+               if (!clear_image) {
+                       for (index = 0; index < colour_table_size; index++) {
+-                              char colour[] = {0, 0, 0, (char)0xff};
+-                              colour[0] = gif_data[0];
+-                              colour[1] = gif_data[1];
+-                              colour[2] = gif_data[2];
+-                              colour_table[index] = *((int *) (void *) colour);
++                              /* Gif colour map contents are r,g,b.
++                               *
++                               * We want to pack them bytewise into the 
++                               * colour table, such that the red component
++                               * is in byte 0 and the alpha component is in
++                               * byte 3.
++                               */
++                              unsigned char *entry = 
++                                      (unsigned char *) &colour_table[index];
++
++                              entry[0] = gif_data[0]; /* r */
++                              entry[1] = gif_data[1]; /* g */
++                              entry[2] = gif_data[2]; /* b */
++                              entry[3] = 0xff;        /* a */
++
+                               gif_data += 3;
+                       }
+               } else {
+
index 0d70b41..bfbe71f 100644 (file)
@@ -5,7 +5,10 @@ PRIORITY = "optional"
 LICENSE = "MIT"
 DEPENDS = "libparserutils"
 
-SRC_URI = "http://www.netsurf-browser.org/projects/releases/hubbub-${PV}-src.tar.gz"
+SRC_URI = "http://www.netsurf-browser.org/projects/releases/hubbub-${PV}-src.tar.gz \
+           file://hubbub-uninitialised.patch;patch=1"
+
+PR = "r1"
 
 inherit pkgconfig
 
index 3b9cfc2..f2b1138 100644 (file)
@@ -4,7 +4,10 @@ SECTION = "libs"
 PRIORITY = "optional"
 LICENSE = "MIT"
 
-SRC_URI = "http://www.netsurf-browser.org/projects/releases/libnsgif-${PV}-src.tar.gz"
+SRC_URI = "http://www.netsurf-browser.org/projects/releases/libnsgif-${PV}-src.tar.gz \
+           file://libnsgif-strict-aliasing.patch;patch=1"
+
+PR = "r1"
 
 inherit pkgconfig
 
index 073f17f..849a8e5 100644 (file)
@@ -11,6 +11,8 @@ SRC_URI = "http://www.netsurf-browser.org/downloads/releases/netsurf-${PV}-src.t
           file://netsurf.desktop \
           file://Makefile.config"
 
+PR = "r1"
+
 # Workaround for 2.1 tarball (unpacks into netsurf/, not netsurf-2.1/ )
 S = "${WORKDIR}/netsurf"