Peter Kümmel wrote:
> Seems we have to use a ifdef.

Or we solve it with help of overloading the casting operator:

Index: src/support/unicode.C
===================================================================
--- src/support/unicode.C       (revision 14663)
+++ src/support/unicode.C       (working copy)
@@ -14,6 +14,8 @@

 #include "unicode.h"

+#include <iconv.h>
+
 #include "debug.h"

 #include <cerrno>
@@ -23,6 +25,18 @@
 using std::endl;
 using std::string;

+
+template<class T>
+struct optional_p2p_const_cast
+{
+    optional_p2p_const_cast(T const ** p2p) : t_p2p(p2p) {}
+       operator T const **() { return t_p2p; }
+       operator T       **() { return const_cast<T **>(t_p2p); }
+private:
+       T const ** t_p2p;
+};
+
+
 namespace {

 std::vector<char>
@@ -45,14 +59,19 @@
                }
        }

-       char * inbuf = const_cast<char *>(&buf[0]);
+       char const * inbuf = &buf[0];
        size_t inbytesleft = buf.size();
        char out[1000] = { 0 };
        char * outbuf = out;
        size_t outbytesleft = 1000;

-       size_t res = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+
+       // demonstration code only!
+       optional_p2p_const_cast<char> op2p(&inbuf);
+       char **       cp2p = op2p;
+       char const **  p2p = op2p;

+       size_t res = iconv(cd, optional_p2p_const_cast<char>(&inbuf), 
&inbytesleft, &outbuf, &outbytesleft);
+
        if (res == (size_t)(-1)) {
                lyxerr << "Error returned from iconv" << endl;
                switch (errno) {
@@ -108,6 +127,7 @@
 {
        //lyxerr << "Outbuf =" << std::hex;

+       using boost::uint32_t;
        std::vector<uint32_t> ucs4;
        for (size_t i = 0; i < bytes.size(); i += 4) {
                unsigned char const b1 = bytes[i    ];



Then we don't need any macros or change the configure process!

Peter

Reply via email to