Need a suggest the best way to fix iconv..
Andrew Pantyukhin
infofarmer at FreeBSD.org
Thu Mar 29 09:23:28 UTC 2007
On 2/6/07, Alexander Nedotsukov <bland at freebsd.org> wrote:
> Jeremy Messenger wrote:
> > Hello folks,
> >
> > I am not sure what is the best way to fix iconv. I get following build
> > error:
> >
> > ===================================
> > client/Text.cpp: In static member function `static std::string&
> > Text::convert(const std::string&, std::string&, const std::string&,
> > const std::string&)':
> > client/Text.cpp:312: error: invalid conversion from `char**' to `const
> > char**'
> > client/Text.cpp:312: error: initializing argument 2 of `size_t
> > libiconv(void*, const char**, size_t*, char**, size_t*)'
> > ===================================
> >
> > The code looks like (last line is 312 line):
> >
> > ===================================
> > size_t rv;
> > size_t len = str.length() * 2; // optimization
> > size_t inleft = str.length();
> > size_t outleft = len;
> > tmp.resize(len);
> > const char *inbuf = str.data();
> > char *outbuf = (char *)tmp.data();
> >
> > while(inleft > 0) {
> > rv = iconv(cd, (char **)&inbuf, &inleft, &outbuf, &outleft);
> > ===================================
> >
> > Which should I change it to?
> >
> > rv = iconv(cd, (const char **)&inbuf, &inleft, &outbuf, &outleft);
> >
> > or
> >
> > rv = iconv(cd, &inbuf, &inleft, &outbuf, &outleft);
> This one. And if you have a plan to send your patch back to the authors
> it is better to declare inbuf as ICONV_CONST char* as well (though not
> sure if their configure smart enough to define that macro. check
> produced config.h to be sure).
This iconv issue appears every now and again. I'm sorry
to bother you guys, but any suggestions how to fix this
one are welcome:
==================================================
size_t inSize;
char *in;
if (myBuffer.empty()) {
inSize = srcEnd - srcStart;
in = (char*)srcStart;
} else {
myBuffer.append(srcStart, srcEnd - srcStart);
inSize = myBuffer.length();
in = (char*)myBuffer.data();
}
size_t outSize = 3 * inSize;
const size_t startOutSize = outSize;
size_t oldLength = dst.length();
dst.append(outSize, '\0');
char *out = (char*)dst.data() + oldLength;
iconvlabel:
iconv(myIConverter, &in, &inSize, &out, &outSize);
==================================================
Should I add another const and initialize with "in"?
Thanks!
More information about the freebsd-gnome
mailing list