Hello Daniel et al.
It has been a while since I've tried compiling libxml2 with the "Borland" (the
compilers are now in the hands of Embarcadero) C compiler, but I've recently
had reason to do so, and have a few very minor patches that I'd like to apply.
I've been using the compiler and toolset distributed with Rad Studio 2007 and
later patches: CodeGear C/C++ compiler 5.93, incremental linker 5.81, library
manager 5.1.
The first problem is nearly identical with one I reported on this forum just
over 3 years ago. It's not a problem with libxml2, but rather with one of the
CodeGear header files: WSPiApi.h (in fairness to Embarcadero, the header file
comes from Microsoft, so it's really a Microsoft bug). The "inlining" directive
in the declaration of the function WspiapiStrdup is incorrect: it is given as
"_inline", but ought to be "__inline". My suggested patch is a minor change in
wsockcompat.h
******************************************************************
Index: wsockcompat.h
===================================================================
--- wsockcompat.h (revision 3815)
+++ wsockcompat.h (working copy)
@@ -15,6 +15,7 @@
header when compiled with Borland C++ 6 */
#if defined(__BORLANDC__) && !defined(__cplusplus)
#define inline __inline
+#define _inline __inline
#endif
#include <ws2tcpip.h>
******************************************************************
A second problem are 2 minor changes needed in the template Makefile for BCB.
The first adds a directory to the LIB search path; the second adds a library.
******************************************************************
Index: Makefile.bcb
===================================================================
--- Makefile.bcb (revision 3815)
+++ Makefile.bcb (working copy)
@@ -72,7 +72,7 @@
# The linker and its options.
LD = ilink32.exe
LDFLAGS = -q -U$(LIBXML_MAJOR_VERSION).$(LIBXML_MINOR_VERSION)
-LDFLAGS = $(LDFLAGS) -L"$(BINDIR);$(LIBPREFIX);$(LIB);$(BCB)\lib\PSdk"
+LDFLAGS = $(LDFLAGS)
-L"$(BINDIR);$(LIBPREFIX);$(LIB);$(BCB)\lib;$(BCB)\lib\PSdk"
LIBS = import32.lib
!if "$(WITH_THREADS)" != "no" && "$(DYNRUNTIME)" == "1"
LIBS = $(LIBS) cw32mti.lib
@@ -84,7 +84,7 @@
LIBS = $(LIBS) cw32.lib
!endif
!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
-LIBS = $(LIBS) wsock32.lib
+LIBS = $(LIBS) wsock32.lib ws2_32.lib
!endif
!if "$(WITH_ICONV)" == "1"
LIBS = $(LIBS) iconvomf.lib
******************************************************************
Finally, running the test suite revealed a problem in xpath.c. Within the
function xmlXPathSubstringFunction, there is a test for whether both arguments
are infinity, which (as indicated by the comments near the test) relies on Inf
+ -Inf yielding NaN. However, by default the CodeGear run-time initializes the
floating-point control word to enable "floating point invalid" exceptions, so
attempting the Inf + -Inf operation raises an exception, rather than quietly
generating NaN as a result. This problem can be eliminated by reversing the
order of evaluation, as in the patch below.
******************************************************************
Index: xpath.c
===================================================================
--- xpath.c (revision 3815)
+++ xpath.c (working copy)
@@ -9020,7 +9020,7 @@
* the index is NaN, the length is NaN, or both
* arguments are infinity (relying on Inf + -Inf = NaN)
*/
- if (!xmlXPathIsNaN(in + le) && !xmlXPathIsInf(in)) {
+ if (!xmlXPathIsInf(in) && !xmlXPathIsNaN(in + le)) {
/*
* To meet the requirements of the spec, the arguments
* must be converted to integer format before
******************************************************************
Can these patches be applied?
Thanks,
Eric Zurcher
CSIRO Plant Industry
Canberra, Australia
[email protected]
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml