Files
buildroot/package/libxml2/0001-Fix-compilation-with-uclibc.patch
Dario Binacchi e2260f309f package/libxml2: fix compilation with GCC 14.x and uClibc
The patch fixes the following errors and warnings raised by the
compilation of libxml2 with the combination of GCC 14.x and uClibc.

encoding.c: In function ‘xmlEncInputChunk’:
encoding.c:2209:32: warning: comparison between pointer and integer
 2209 |     else if (handler->iconv_in != NULL) {
      |                                ^~
encoding.c: In function ‘xmlEncOutputChunk’:
encoding.c:2269:33: warning: comparison between pointer and integer
 2269 |     else if (handler->iconv_out != NULL) {
      |                                 ^~
encoding.c: In function ‘xmlCharEncCloseFunc’:
encoding.c:2681:29: warning: comparison between pointer and integer
 2681 |     if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
      |                             ^~
encoding.c:2681:60: warning: comparison between pointer and integer
 2681 |     if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
      |                                                            ^~
encoding.c:2683:32: warning: comparison between pointer and integer
 2683 |         if (handler->iconv_out != NULL) {
      |                                ^~
encoding.c:2686:32: error: assignment to ‘iconv_t’ {aka ‘long int’} from ‘void *’ makes integer from pointer without a cast [-Wint-conversion]
 2686 |             handler->iconv_out = NULL;
      |                                ^
encoding.c:2688:31: warning: comparison between pointer and integer
 2688 |         if (handler->iconv_in != NULL) {
      |                               ^~
encoding.c:2691:31: error: assignment to ‘iconv_t’ {aka ‘long int’} from ‘void *’ makes integer from pointer without a cast [-Wint-conversion]
 2691 |             handler->iconv_in = NULL;
      |                               ^
make[4]: *** [Makefile:1147: libxml2_la-encoding.lo] Error 1

This code has been in libxml2 pretty much forever: it was partially
introduced in version 2.1.0: 496a1cf59284 ("496a1cf59284 revamped the
encoding support, added iconv support, so now libxml if") and
partially in version 2.2.3: 87b953957305 ("Large sync between my W3C
base and Gnome's one:"). And the first time Buildroot packaged
libxml2, it was version 2.6.29.

However, both glibc and musl define iconv_t as "void *", which meant
the libxml2 code was not problematic. uClibc defines iconv_t as
"long", which generated only a warning... until GCC got updated to GCC
14.x, which turned this warning into an error, causing the build
failure.

Fixes:

  http://autobuild.buildroot.net/results/fd4f8d2e8d8ee68d9e18f761ceff350188e55a87/

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
(cherry picked from commit ca63c4409b)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2025-01-08 21:43:46 +01:00

115 lines
4.6 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From fc72e0833a4e5724aef604e2fd9adb1014cb4844 Mon Sep 17 00:00:00 2001
From: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Date: Mon, 16 Dec 2024 17:23:23 +0100
Subject: [PATCH] Fix compilation with uclibc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The patch fixes the following errors and warnings raised by the
compilation of the library with uClibc:
encoding.c: In function xmlEncInputChunk:
encoding.c:2209:32: warning: comparison between pointer and integer
2209 | else if (handler->iconv_in != NULL) {
| ^~
encoding.c: In function xmlEncOutputChunk:
encoding.c:2269:33: warning: comparison between pointer and integer
2269 | else if (handler->iconv_out != NULL) {
| ^~
encoding.c: In function xmlCharEncCloseFunc:
encoding.c:2681:29: warning: comparison between pointer and integer
2681 | if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
| ^~
encoding.c:2681:60: warning: comparison between pointer and integer
2681 | if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
| ^~
encoding.c:2683:32: warning: comparison between pointer and integer
2683 | if (handler->iconv_out != NULL) {
| ^~
encoding.c:2686:32: error: assignment to iconv_t {aka long int} from void * makes integer from pointer without a cast [-Wint-conversion]
2686 | handler->iconv_out = NULL;
| ^
encoding.c:2688:31: warning: comparison between pointer and integer
2688 | if (handler->iconv_in != NULL) {
| ^~
encoding.c:2691:31: error: assignment to iconv_t {aka long int} from void * makes integer from pointer without a cast [-Wint-conversion]
2691 | handler->iconv_in = NULL;
| ^
make[4]: *** [Makefile:1147: libxml2_la-encoding.lo] Error 1
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Upstream: https://gitlab.gnome.org/GNOME/libxml2/-/commit/fc72e0833a4e5724aef604e2fd9adb1014cb4844
---
encoding.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/encoding.c b/encoding.c
index 14ffafddbc02..41ecde1885e4 100644
--- a/encoding.c
+++ b/encoding.c
@@ -1264,7 +1264,7 @@ DECLARE_ISO_FUNCS(16)
#endif /* LIBXML_ISO8859X_ENABLED */
#ifdef LIBXML_ICONV_ENABLED
- #define EMPTY_ICONV , (iconv_t) 0, (iconv_t) 0
+ #define EMPTY_ICONV , (iconv_t) -1, (iconv_t) -1
#else
#define EMPTY_ICONV
#endif
@@ -1389,8 +1389,8 @@ xmlNewCharEncodingHandler(const char *name,
handler->name = up;
#ifdef LIBXML_ICONV_ENABLED
- handler->iconv_in = NULL;
- handler->iconv_out = NULL;
+ handler->iconv_in = (iconv_t) -1;
+ handler->iconv_out = (iconv_t) -1;
#endif
#ifdef LIBXML_ICU_ENABLED
handler->uconv_in = NULL;
@@ -2200,7 +2200,7 @@ xmlEncInputChunk(xmlCharEncodingHandler *handler, unsigned char *out,
}
}
#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_in != NULL) {
+ else if (handler->iconv_in != (iconv_t) -1) {
ret = xmlIconvWrapper(handler->iconv_in, out, outlen, in, inlen);
}
#endif /* LIBXML_ICONV_ENABLED */
@@ -2260,7 +2260,7 @@ xmlEncOutputChunk(xmlCharEncodingHandler *handler, unsigned char *out,
}
}
#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_out != NULL) {
+ else if (handler->iconv_out != (iconv_t) -1) {
ret = xmlIconvWrapper(handler->iconv_out, out, outlen, in, inlen);
}
#endif /* LIBXML_ICONV_ENABLED */
@@ -2672,17 +2672,17 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
* Iconv handlers can be used only once, free the whole block.
* and the associated icon resources.
*/
- if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
+ if ((handler->iconv_out != (iconv_t) -1) || (handler->iconv_in != (iconv_t) -1)) {
tofree = 1;
- if (handler->iconv_out != NULL) {
+ if (handler->iconv_out != (iconv_t) -1) {
if (iconv_close(handler->iconv_out))
ret = -1;
- handler->iconv_out = NULL;
+ handler->iconv_out = (iconv_t) -1;
}
- if (handler->iconv_in != NULL) {
+ if (handler->iconv_in != (iconv_t) -1) {
if (iconv_close(handler->iconv_in))
ret = -1;
- handler->iconv_in = NULL;
+ handler->iconv_in = (iconv_t) -1;
}
}
#endif /* LIBXML_ICONV_ENABLED */
--
2.43.0