libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

extractor_print.c (3331B)


      1 /*
      2      This file is part of libextractor.
      3      Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009 Vidyut Samanta and Christian Grothoff
      4 
      5      libextractor is free software; you can redistribute it and/or modify
      6      it under the terms of the GNU General Public License as published
      7      by the Free Software Foundation; either version 2, or (at your
      8      option) any later version.
      9 
     10      libextractor is distributed in the hope that it will be useful, but
     11      WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      General Public License for more details.
     14 
     15      You should have received a copy of the GNU General Public License
     16      along with libextractor; see the file COPYING.  If not, write to the
     17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18      Boston, MA 02110-1301, USA.
     19  */
     20 /**
     21  * @file main/extractor_print.c
     22  * @brief convenience functions for printing meta data
     23  * @author Christian Grothoff
     24  */
     25 #include "platform.h"
     26 #include "extractor.h"
     27 #include "extractor_logging.h"
     28 #if HAVE_ICONV
     29 #include "iconv.c"
     30 #endif
     31 
     32 /**
     33  * Simple EXTRACTOR_MetaDataProcessor implementation that simply
     34  * prints the extracted meta data to the given file.  Only prints
     35  * those keywords that are in UTF-8 format.
     36  *
     37  * @param handle the file to write to (stdout, stderr), must NOT be NULL,
     38  *               must be of type "FILE *".
     39  * @param plugin_name name of the plugin that produced this value
     40  * @param type libextractor-type describing the meta data
     41  * @param format basic format information about data
     42  * @param data_mime_type mime-type of data (not of the original file);
     43  *        can be NULL (if mime-type is not known)
     44  * @param data actual meta-data found
     45  * @param data_len number of bytes in data
     46  * @return non-zero if printing failed, otherwise 0.
     47  */
     48 int
     49 EXTRACTOR_meta_data_print (void *handle,
     50                            const char *plugin_name,
     51                            enum EXTRACTOR_MetaType type,
     52                            enum EXTRACTOR_MetaFormat format,
     53                            const char *data_mime_type,
     54                            const char *data,
     55                            size_t data_len)
     56 {
     57 #if HAVE_ICONV
     58   iconv_t cd;
     59 #endif
     60   char *buf;
     61   int ret;
     62   const char *mt;
     63 
     64   if (EXTRACTOR_METAFORMAT_UTF8 != format)
     65     return 0;
     66 #if HAVE_ICONV
     67   cd = iconv_open (nl_langinfo (CODESET),
     68                    "UTF-8");
     69   if (((iconv_t) -1) == cd)
     70   {
     71     LOG_STRERROR ("iconv_open");
     72     return 1;
     73   }
     74   buf = iconv_helper (cd, data, data_len);
     75   if (NULL == buf)
     76   {
     77     LOG_STRERROR ("iconv_helper");
     78     ret = -1;
     79   }
     80   else
     81   {
     82     mt = EXTRACTOR_metatype_to_string (type);
     83     ret = fprintf (handle,
     84                    "%s - %s\n",
     85                    (NULL == mt)
     86                    ? dgettext ("libextractor", gettext_noop ("unknown"))
     87                    : dgettext ("libextractor", mt),
     88                    buf);
     89     free (buf);
     90   }
     91   iconv_close (cd);
     92 #else
     93   ret = fprintf (handle,
     94                  "%s - %.*s\n",
     95                  (NULL == mt)
     96                  ? dgettext ("libextractor", gettext_noop ("unknown"))
     97                  : dgettext ("libextractor", mt),
     98                  (int) data_len,
     99                  data);
    100 #endif
    101   return (ret < 0) ? 1 : 0;
    102 }
    103 
    104 
    105 /* end of extractor_print.c */