HAVE_ICONV configure test
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@857 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
ec1aa1e6a7
commit
cd8b77f024
76
configure.ac
76
configure.ac
@ -265,6 +265,82 @@ AC_DEFUN([UTILS_FUNC_DIRFD],
|
||||
|
||||
UTILS_FUNC_DIRFD
|
||||
|
||||
#
|
||||
# iconv
|
||||
#
|
||||
|
||||
dnl This macros shamelessly stolen from
|
||||
dnl http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg01398.html.
|
||||
dnl Written by Bruno Haible.
|
||||
|
||||
AC_DEFUN([UTILS_FUNC_ICONV],
|
||||
[
|
||||
dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
|
||||
dnl those with the standalone portable GNU libiconv installed).
|
||||
|
||||
AC_ARG_WITH([libiconv-prefix],
|
||||
[ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [
|
||||
for dir in `echo "$withval" | tr : ' '`; do
|
||||
if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
|
||||
if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
|
||||
done
|
||||
])
|
||||
|
||||
AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
|
||||
am_cv_func_iconv="no, consider installing GNU libiconv"
|
||||
am_cv_lib_iconv=no
|
||||
AC_TRY_LINK([#include <stdlib.h>
|
||||
#include <iconv.h>],
|
||||
[iconv_t cd = iconv_open("","");
|
||||
iconv(cd,NULL,NULL,NULL,NULL);
|
||||
iconv_close(cd);],
|
||||
am_cv_func_iconv=yes)
|
||||
if test "$am_cv_func_iconv" != yes; then
|
||||
am_save_LIBS="$LIBS"
|
||||
LIBS="$LIBS -liconv"
|
||||
AC_TRY_LINK([#include <stdlib.h>
|
||||
#include <iconv.h>],
|
||||
[iconv_t cd = iconv_open("","");
|
||||
iconv(cd,NULL,NULL,NULL,NULL);
|
||||
iconv_close(cd);],
|
||||
am_cv_lib_iconv=yes
|
||||
am_cv_func_iconv=yes)
|
||||
LIBS="$am_save_LIBS"
|
||||
fi
|
||||
])
|
||||
if test "$am_cv_func_iconv" = yes; then
|
||||
AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
|
||||
AC_MSG_CHECKING([for iconv declaration])
|
||||
AC_CACHE_VAL(am_cv_proto_iconv, [
|
||||
AC_TRY_COMPILE([
|
||||
#include <stdlib.h>
|
||||
#include <iconv.h>
|
||||
extern
|
||||
#ifdef __cplusplus
|
||||
"C"
|
||||
#endif
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
|
||||
#else
|
||||
size_t iconv();
|
||||
#endif
|
||||
], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
|
||||
am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
|
||||
am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
|
||||
AC_MSG_RESULT([$]{ac_t:-
|
||||
}[$]am_cv_proto_iconv)
|
||||
AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
|
||||
[Define as const if the declaration of iconv() needs const.])
|
||||
fi
|
||||
LIBICONV=
|
||||
if test "$am_cv_lib_iconv" = yes; then
|
||||
LIBICONV="-liconv"
|
||||
fi
|
||||
AC_SUBST(LIBICONV)
|
||||
])
|
||||
|
||||
UTILS_FUNC_ICONV
|
||||
LIBS="$LIBS $LIBICONV"
|
||||
|
||||
#
|
||||
# IPv6
|
||||
|
10
rdp.c
10
rdp.c
@ -27,6 +27,10 @@
|
||||
#ifdef HAVE_ICONV_H
|
||||
#include <iconv.h>
|
||||
#endif
|
||||
|
||||
#ifndef ICONV_CONST
|
||||
#define ICONV_CONST ""
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern uint16 g_mcs_userid;
|
||||
@ -173,7 +177,7 @@ rdp_out_unistr(STREAM s, char *string, int len)
|
||||
g_codepage, WINDOWS_CODEPAGE, (int)iconv_h);
|
||||
return;
|
||||
}
|
||||
if (iconv(iconv_h, (const char**)&pin, &i, &pout, &o) == (size_t)-1)
|
||||
if (iconv(iconv_h, (ICONV_CONST char**)&pin, &i, &pout, &o) == (size_t)-1)
|
||||
{
|
||||
iconv_close(iconv_h);
|
||||
iconv_h = (iconv_t)-1;
|
||||
@ -183,7 +187,7 @@ rdp_out_unistr(STREAM s, char *string, int len)
|
||||
pin = string; pout = s->p;
|
||||
}
|
||||
|
||||
if (iconv(iconv_h, (const char**)&pin, &ibl, &pout, &obl) == (size_t)-1)
|
||||
if (iconv(iconv_h, (ICONV_CONST char**)&pin, &ibl, &pout, &obl) == (size_t)-1)
|
||||
{
|
||||
iconv_close(iconv_h);
|
||||
iconv_h = (iconv_t)-1;
|
||||
@ -242,7 +246,7 @@ rdp_in_unistr(STREAM s, char *string, int uni_len)
|
||||
}
|
||||
}
|
||||
|
||||
if (iconv(iconv_h, (const char**)&pin, &ibl, &pout, &obl) == (size_t)-1)
|
||||
if (iconv(iconv_h, (ICONV_CONST char**)&pin, &ibl, &pout, &obl) == (size_t)-1)
|
||||
{
|
||||
iconv_close(iconv_h);
|
||||
iconv_h = (iconv_t)-1;
|
||||
|
Loading…
Reference in New Issue
Block a user