- strio.h trio.c: Dan McNichol suggested a couple of small
  fixes for AIX 4.3.3 using Visual Age 5.0.2 compiler
Daniel
diff --git a/xpath.c b/xpath.c
index 5b6e84c..d65f251 100644
--- a/xpath.c
+++ b/xpath.c
@@ -39,9 +39,8 @@
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
 #endif
-#if defined(__osf__) && defined(__GNUC__)
+#ifdef HAVE_SIGNAL_H
 #include <signal.h>
-#define FPE_WORKAROUND
 #endif
 
 #include <libxml/xmlmemory.h>
@@ -65,6 +64,7 @@
 
 void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
 double xmlXPathStringEvalNumber(const xmlChar *str);
+double xmlXPathDivideBy(double f, double fzero);
 
 /************************************************************************
  * 									*
@@ -150,6 +150,37 @@
 #endif /* ! HAVE_iSNAN */
 #endif /* ! defined(isnan) */
 
+
+/**
+ * xmlXPathDivideBy:
+ *
+ * The best way found so far to generate the NAN, +-INF
+ * without hitting a compiler bug or optimization :-\
+ *
+ * Returns the double resulting from the division
+ */
+double
+xmlXPathDivideBy(double f, double fzero) {
+    float ret;
+#ifdef HAVE_SIGNAL
+#ifdef SIGFPE
+#ifdef SIG_IGN
+    void (*sighandler)(int);
+    sighandler = signal(SIGFPE, SIG_IGN);
+#endif
+#endif
+#endif
+    ret = f / fzero;
+#ifdef HAVE_SIGNAL
+#ifdef SIGFPE
+#ifdef SIG_IGN
+    signal(SIGFPE, sighandler);
+#endif
+#endif
+#endif
+    return(ret);
+}
+
 /**
  * xmlXPathInit:
  *
@@ -161,22 +192,9 @@
 
     if (initialized) return;
 
-#ifdef FPE_WORKAROUND
-    signal(SIGFPE, SIG_IGN);
-#endif
-
-#ifdef XPATH_USE_DIVISION_SHORTCUTS
-    xmlXPathNAN = 0;
-    xmlXPathNAN /= 0.0;
-    xmlXPathPINF = 1;
-    xmlXPathPINF /= 0.0;
-    xmlXPathNINF = -1;
-    xmlXPathNINF /= 0.0;
-#else
-    xmlXPathNAN = 0.0 / 0.0;
-    xmlXPathPINF = 1 / 0.0;
-    xmlXPathNINF = -1 / 0.0;
-#endif
+    xmlXPathNAN = xmlXPathDivideBy(0.0, 0.0);
+    xmlXPathPINF = xmlXPathDivideBy(1.0, 0.0);
+    xmlXPathPINF = xmlXPathDivideBy(-1.0, 0.0);
 
     initialized = 1;
 }