ecore_txt is also a thin and picky wrapper around eina_str_convert()

this remove explicit dependency on iconv, so no checks are required
anymore.



SVN revision: 46546
This commit is contained in:
Gustavo Sverzut Barbieri 2010-02-27 01:10:26 +00:00
parent 064cea0516
commit b2816b08e9
4 changed files with 10 additions and 103 deletions

View File

@ -438,37 +438,6 @@ elif test "x$have_glib" = "xyes"; then
fi
# iconv library (ecore_txt)
iconv_cflags=""
iconv_libs=""
have_iconv="no"
AC_ARG_WITH([iconv-link],
AC_HELP_STRING([--with-iconv-link=ICONV_LINK], [explicitly specify an iconv link option]),
[
iconv_libs=$withval
have_iconv="yes"
])
AC_MSG_CHECKING(for explicit iconv link options)
if test "x${iconv_libs}" = "x" ; then
AC_MSG_RESULT([no explicit iconv link option])
else
AC_MSG_RESULT([$iconv_libs])
fi
AM_ICONV
if test "x${have_iconv}" = "xno" && test "x${am_cv_func_iconv}" = "xyes" ; then
iconv_cflags=${LIBICONV}
iconv_libs=${LTLIBICONV}
have_iconv="yes"
fi
AC_SUBST(iconv_cflags)
AC_SUBST(iconv_libs)
# SDL library (ecore_sdl)
have_sdl="no"
@ -1000,7 +969,7 @@ fi
ECORE_CHECK_MODULE([data], [${want_ecore_data}], [Data])
# ecore_txt
ECORE_CHECK_MODULE([txt], [${want_ecore_txt}], [Txt], [$have_iconv])
ECORE_CHECK_MODULE([txt], [${want_ecore_txt}], [Txt], [yes])
# ecore_con
ECORE_CHECK_MODULE([con], [${want_ecore_con}], [Con], [${have_addrinfo}])

View File

@ -5,6 +5,9 @@
#ifndef _ECORE_TXT_H
#define _ECORE_TXT_H
#include <Eina.h>
#warning "this file is deprecated. use Eina.h instead."
#ifdef EAPI
# undef EAPI
#endif
@ -40,7 +43,7 @@
extern "C" {
#endif
EAPI char *ecore_txt_convert(const char *enc_from, const char *enc_to, const char *text);
EAPI char *ecore_txt_convert(const char *enc_from, const char *enc_to, const char *text) EINA_DEPRECATED;
#ifdef __cplusplus
}

View File

@ -4,7 +4,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/src/lib/ecore \
-I$(top_builddir)/src/lib/ecore \
@EFL_ECORE_TXT_BUILD@ \
@iconv_cflags@
@EINA_CFLAGS@
if BUILD_ECORE_TXT
@ -16,7 +16,7 @@ Ecore_Txt.h
libecore_txt_la_SOURCES = \
ecore_txt.c
libecore_txt_la_LIBADD = @iconv_libs@
libecore_txt_la_LIBADD = @EINA_LIBS@
libecore_txt_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @ecore_txt_release_info@

View File

@ -6,80 +6,15 @@
# include <config.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <iconv.h>
#include "Ecore_Txt.h"
#include "ecore_txt_private.h"
/**
* To be documented.
*
* FIXME: Finish this.
* @deprecated use eina_str_convert() instead.
*/
EAPI char *
ecore_txt_convert(const char *enc_from, const char *enc_to, const char *text)
{
iconv_t ic;
char *new_txt, *inp, *outp;
size_t inb, outb, outlen, tob, outalloc;
if (!text) return NULL;
ic = iconv_open(enc_to, enc_from);
if (ic == (iconv_t)(-1)) return NULL;
new_txt = malloc(64);
inb = strlen(text);
outb = 64;
inp = (char*)text;
outp = new_txt;
outalloc = 64;
outlen = 0;
for (;;)
{
size_t count;
tob = outb;
count = iconv(ic, &inp, &inb, &outp, &outb);
outlen += tob - outb;
if (count == (size_t)(-1))
{
if (errno == E2BIG)
{
new_txt = realloc(new_txt, outalloc + 64);
outp = new_txt + outlen;
outalloc += 64;
outb += 64;
}
else if (errno == EILSEQ)
{
if (new_txt) free(new_txt);
new_txt = NULL;
break;
}
else if (errno == EINVAL)
{
if (new_txt) free(new_txt);
new_txt = NULL;
break;
}
else
{
if (new_txt) free(new_txt);
new_txt = NULL;
break;
}
}
if (inb == 0)
{
if (outalloc == outlen) new_txt = realloc(new_txt, outalloc + 1);
new_txt[outlen] = 0;
break;
}
}
iconv_close(ic);
return new_txt;
EINA_LOG_ERR("use eina_str_convert() instead.");
return eina_str_convert(enc_from, enc_to, text);
}