/*
     This file is part of libextractor.
     (C) 2004 Vidyut Samanta and Christian Grothoff

     libextractor is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libextractor is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libextractor; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     Boston, MA 02110-1301, USA.
 */

#include "config.h"
#include "convert.h"
#include <string.h>
#include <iconv.h>
#include <stdlib.h>

/**
 * Convert the len characters long character sequence
 * given in input that is in the given charset
 * to UTF-8.
 * @return the converted string (0-terminated),
 *  if conversion fails, a copy of the orignal
 *  string is returned.
 */
char * convertToUtf8(const char * input,
		     size_t len,
		     const char * charset) {
  size_t tmpSize;
  size_t finSize;
  char * tmp;
  char * ret;
  char * itmp;
  iconv_t cd;

  cd = iconv_open("UTF-8", charset);
  if (cd == (iconv_t) -1)
    return strdup(input);
  tmpSize = 3 * len + 4;
  tmp = malloc(tmpSize);
  itmp = tmp;
  finSize = tmpSize;
  if (iconv(cd,
	    (char**) &input,
	    &len,
	    &itmp,
	    &finSize) == (size_t)-1) {
    iconv_close(cd);
    free(tmp);
    return strdup(input);
  }
  ret = malloc(tmpSize - finSize + 1);
  memcpy(ret,
	 tmp,
	 tmpSize - finSize);
  ret[tmpSize - finSize] = '\0';
  free(tmp);
  iconv_close(cd);
  return ret;
}

/* end of convert.c */
