gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r23204 - in Extractor: src/common src/plugins src/plugins/t


From: gnunet
Subject: [GNUnet-SVN] r23204 - in Extractor: src/common src/plugins src/plugins/testdata test
Date: Sun, 12 Aug 2012 14:50:46 +0200

Author: grothoff
Date: 2012-08-12 14:50:46 +0200 (Sun, 12 Aug 2012)
New Revision: 23204

Added:
   Extractor/src/plugins/test_png.c
   Extractor/src/plugins/testdata/png_image.png
Removed:
   Extractor/test/test.png
Modified:
   Extractor/src/common/pack.c
   Extractor/src/common/unzip.c
   Extractor/src/common/unzip.h
   Extractor/src/plugins/Makefile.am
   Extractor/src/plugins/odf_extractor.c
   Extractor/src/plugins/png_extractor.c
   Extractor/src/plugins/test_jpeg.c
Log:
porting PNG plugin

Modified: Extractor/src/common/pack.c
===================================================================
--- Extractor/src/common/pack.c 2012-08-11 15:13:06 UTC (rev 23203)
+++ Extractor/src/common/pack.c 2012-08-12 12:50:46 UTC (rev 23204)
@@ -39,7 +39,9 @@
 
 
 int
-EXTRACTOR_common_cat_unpack (const void *buf, const char *fmt, ...)
+EXTRACTOR_common_cat_unpack (const void *buf, 
+                            const char *fmt,
+                            ...)
 {
   va_list ap;
   word maxlen, len, *wordp;

Modified: Extractor/src/common/unzip.c
===================================================================
--- Extractor/src/common/unzip.c        2012-08-11 15:13:06 UTC (rev 23203)
+++ Extractor/src/common/unzip.c        2012-08-12 12:50:46 UTC (rev 23204)
@@ -4,7 +4,7 @@
 
      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
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      libextractor is distributed in the hope that it will be useful, but
@@ -695,7 +695,7 @@
         (!pfile_in_zip_read_info->raw))
     {
         if (pfile_in_zip_read_info->crc32 != 
pfile_in_zip_read_info->crc32_wait)
-            err=EXTRACTOR_UNZIP_CRCERROR;
+                     err=EXTRACTOR_UNZIP_CRCERROR;
     }
 
 

Modified: Extractor/src/common/unzip.h
===================================================================
--- Extractor/src/common/unzip.h        2012-08-11 15:13:06 UTC (rev 23203)
+++ Extractor/src/common/unzip.h        2012-08-12 12:50:46 UTC (rev 23204)
@@ -1,10 +1,10 @@
-/*
+]/*
      This file is part of libextractor.
      (C) 2008 Christian Grothoff (and other contributing authors)
 
      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
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      libextractor is distributed in the hope that it will be useful, but
@@ -34,18 +34,20 @@
 
 typedef voidp EXTRACTOR_unzip_file;
 
+
 typedef struct EXTRACTOR_unzip_filefunc_def_s
 {
-    voidpf ( *zopen_file) (voidpf opaque, const char* filename, int mode);
-    uLong  ( *zread_file) (voidpf opaque, voidpf stream, void* buf, uLong 
size);
-    uLong  ( *zwrite_file) (voidpf opaque, voidpf stream, const void* buf, 
uLong size);
-    long   ( *ztell_file) (voidpf opaque, voidpf stream);
-    long   ( *zseek_file) (voidpf opaque, voidpf stream, uLong offset, int 
origin);
-    int    ( *zclose_file) (voidpf opaque, voidpf stream);
-    int    ( *zerror_file) (voidpf opaque, voidpf stream);
+  voidpf ( *zopen_file)  (voidpf opaque, const char* filename, int mode);
+  uLong  ( *zread_file)  (voidpf opaque, voidpf stream, void* buf, uLong size);
+  uLong  ( *zwrite_file) (voidpf opaque, voidpf stream, const void* buf, uLong 
size);
+  long   ( *ztell_file)  (voidpf opaque, voidpf stream);
+  long   ( *zseek_file)  (voidpf opaque, voidpf stream, uLong offset, int 
origin);
+  int    ( *zclose_file) (voidpf opaque, voidpf stream);
+  int    ( *zerror_file) (voidpf opaque, voidpf stream);
     voidpf              opaque;
 } EXTRACTOR_unzip_filefunc_def;
 
+
 /* tm_unz contain date/time info */
 typedef struct EXTRACTOR_unzip_tm_unz_s
 {
@@ -57,6 +59,7 @@
     uInt tm_year;           /* years - [1980..2044] */
 } EXTRACTOR_unzip_tm_unz;
 
+
 /* unz_file_info contain information about a file in the zipfile */
 typedef struct EXTRACTOR_unzip_file_info_s
 {
@@ -79,48 +82,96 @@
     EXTRACTOR_unzip_tm_unz tmu_date;
 } EXTRACTOR_unzip_file_info;
 
-int EXTRACTOR_common_unzip_string_file_name_compare(const char* fileName1,
-    const char* fileName2, int iCaseSensitivity);
 
-int EXTRACTOR_common_unzip_go_to_first_file(EXTRACTOR_unzip_file file);
+int 
+EXTRACTOR_common_unzip_string_file_name_compare (const char* fileName1,
+                                                const char* fileName2, 
+                                                int iCaseSensitivity);
 
-EXTRACTOR_unzip_file EXTRACTOR_common_unzip_open2(const char *path,
-    EXTRACTOR_unzip_filefunc_def* pzlib_filefunc_def);
 
-int EXTRACTOR_common_unzip_close_current_file(EXTRACTOR_unzip_file file);
+int 
+EXTRACTOR_common_unzip_go_to_first_file (EXTRACTOR_unzip_file file);
 
-int EXTRACTOR_common_unzip_close(EXTRACTOR_unzip_file file);
 
-int EXTRACTOR_common_unzip_get_current_file_info(EXTRACTOR_unzip_file file,
-    EXTRACTOR_unzip_file_info *pfile_info, char *szFileName, uLong 
fileNameBufferSize,
-    void *extraField, uLong extraFieldBufferSize, char *szComment,
-    uLong commentBufferSize);
+EXTRACTOR_unzip_file 
+EXTRACTOR_common_unzip_open2 (const char *path,
+                             EXTRACTOR_unzip_filefunc_def* pzlib_filefunc_def);
 
-int EXTRACTOR_common_unzip_go_to_next_file(EXTRACTOR_unzip_file file);
 
-int EXTRACTOR_common_unzip_local_file(EXTRACTOR_unzip_file file, const char 
*szFileName,
-    int iCaseSensitivity);
+int 
+EXTRACTOR_common_unzip_close_current_file (EXTRACTOR_unzip_file file);
 
-int EXTRACTOR_common_unzip_read_current_file(EXTRACTOR_unzip_file file, voidp 
buf,
-    unsigned len);
 
-int EXTRACTOR_common_unzip_open_current_file3(EXTRACTOR_unzip_file file, int* 
method,
-    int* level, int raw);
+int
+EXTRACTOR_common_unzip_close (EXTRACTOR_unzip_file file);
 
-voidpf EXTRACTOR_common_unzip_zlib_open_file_func(voidpf opaque,
-    const char* filename, int mode);
 
-uLong EXTRACTOR_common_unzip_zlib_read_file_func(voidpf opaque, voidpf stream,
-    void* buf, uLong size);
+int 
+EXTRACTOR_common_unzip_get_current_file_info (EXTRACTOR_unzip_file file,
+                                             EXTRACTOR_unzip_file_info 
*pfile_info, 
+                                             char *szFileName,
+                                             uLong fileNameBufferSize,
+                                             void *extraField, 
+                                             uLong extraFieldBufferSize, 
+                                             char *szComment,
+                                             uLong commentBufferSize);
 
-long EXTRACTOR_common_unzip_zlib_tell_file_func(voidpf opaque, voidpf stream);
 
-long EXTRACTOR_common_unzip_zlib_seek_file_func(voidpf opaque, voidpf stream,
-    uLong offset, int origin);
+int
+EXTRACTOR_common_unzip_go_to_next_file (EXTRACTOR_unzip_file file);
 
-int EXTRACTOR_common_unzip_zlib_close_file_func(voidpf opaque, voidpf stream);
 
-int EXTRACTOR_common_unzip_zlib_testerror_file_func(voidpf opaque,
-    voidpf stream);
+int
+EXTRACTOR_common_unzip_local_file (EXTRACTOR_unzip_file file, 
+                                  const char *szFileName,
+                                  int iCaseSensitivity);
 
+
+int 
+EXTRACTOR_common_unzip_read_current_file (EXTRACTOR_unzip_file file,
+                                         voidp buf,
+                                         unsigned len);
+
+
+int
+EXTRACTOR_common_unzip_open_current_file3 (EXTRACTOR_unzip_file file, 
+                                          int* method,
+                                          int* level,
+                                          int raw);
+
+
+voidpf
+EXTRACTOR_common_unzip_zlib_open_file_func (voidpf opaque,
+                                           const char* filename, 
+                                           int mode);
+
+
+uLong 
+EXTRACTOR_common_unzip_zlib_read_file_func (voidpf opaque, 
+                                           voidpf stream,
+                                           void* buf, 
+                                           uLong size);
+
+
+long 
+EXTRACTOR_common_unzip_zlib_tell_file_func (voidpf opaque, 
+                                           voidpf stream);
+
+
+long 
+EXTRACTOR_common_unzip_zlib_seek_file_func (voidpf opaque,
+                                           voidpf stream,
+                                           uLong offset, 
+                                           int origin);
+
+
+int
+EXTRACTOR_common_unzip_zlib_close_file_func (voidpf opaque, 
+                                            voidpf stream);
+
+
+int
+EXTRACTOR_common_unzip_zlib_testerror_file_func (voidpf opaque,
+                                                voidpf stream);
+
 #endif /* UNZIP_H_ */

Modified: Extractor/src/plugins/Makefile.am
===================================================================
--- Extractor/src/plugins/Makefile.am   2012-08-11 15:13:06 UTC (rev 23203)
+++ Extractor/src/plugins/Makefile.am   2012-08-12 12:50:46 UTC (rev 23204)
@@ -29,7 +29,8 @@
   testdata/ole2_msword.doc \
   testdata/ole2_starwriter40.sdw \
   testdata/ole2_blair.doc \
-  testdata/ole2_excel.xls
+  testdata/ole2_excel.xls \
+  testdata/png_image.png
 
 if HAVE_VORBISFILE
 PLUGIN_OGG=libextractor_ogg.la
@@ -79,6 +80,7 @@
 
 plugin_LTLIBRARIES = \
   libextractor_it.la \
+  libextractor_png.la \
   libextractor_xm.la \
   libextractor_s3m.la \
   libextractor_wav.la \
@@ -100,6 +102,7 @@
   test_wav \
   test_it \
   test_s3m \
+  test_png \
   $(TEST_OGG) \
   $(TEST_MIME) \
   $(TEST_GIF) \
@@ -130,6 +133,19 @@
   $(PLUGINFLAGS)
 
 
+libextractor_png_la_SOURCES = \
+  png_extractor.c
+libextractor_png_la_LDFLAGS = \
+  $(PLUGINFLAGS)
+libextractor_png_la_LIBADD = \
+  $(top_builddir)/src/common/libextractor_common.la 
+
+test_png_SOURCES = \
+  test_png.c
+test_png_LDADD = \
+  $(top_builddir)/src/plugins/libtest.la
+
+
 libextractor_it_la_SOURCES = \
   it_extractor.c
 libextractor_it_la_LDFLAGS = \

Modified: Extractor/src/plugins/odf_extractor.c
===================================================================
--- Extractor/src/plugins/odf_extractor.c       2012-08-11 15:13:06 UTC (rev 
23203)
+++ Extractor/src/plugins/odf_extractor.c       2012-08-12 12:50:46 UTC (rev 
23204)
@@ -1,10 +1,10 @@
 /*
      This file is part of libextractor.
-     (C) 2004, 2009 Vidyut Samanta and Christian Grothoff
+     (C) 2004, 2009, 2012 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
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      libextractor is distributed in the hope that it will be useful, but
@@ -17,28 +17,53 @@
      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      Boston, MA 02111-1307, USA.
 */
-
+/**
+ * @file plugins/odf_extractor.c
+ * @brief plugin to support ODF files
+ * @author Christian Grothoff
+ */
 #include "platform.h"
 #include <ctype.h>
 #include "extractor.h"
-#include "zlib.h"
 #include "unzip.h"
 
-#define CASESENSITIVITY (0)
-#define MAXFILENAME (256)
+/**
+ * Should filenames be treated as case sensitive?
+ */
+#define CASESENSITIVITY 0
 
+/**
+ * Maximum length of a filename allowed inside the ZIP archive.
+ */
+#define MAXFILENAME 256
 
 /**
  * Name of the file with the meta-data in OO documents.
  */
 #define METAFILE "meta.xml"
 
-typedef struct {
+
+/**
+ * Mapping from ODF meta data strings to LE types.
+ */
+struct Matches 
+{
+  /**
+   * ODF description.
+   */
   const char * text;
+
+  /**
+   * Corresponding LE type.
+   */
   enum EXTRACTOR_MetaType type;
-} Matches;
+};
 
-static Matches tmap[] = {
+
+/**
+ * NULL-terminated map from ODF meta data strings to LE types.
+ */
+static struct Matches tmap[] = {
   { "meta:generator",     EXTRACTOR_METATYPE_CREATED_BY_SOFTWARE },
   { "meta:page-count",    EXTRACTOR_METATYPE_PAGE_COUNT },
   { "meta:creation-date", EXTRACTOR_METATYPE_CREATION_DATE },
@@ -53,101 +78,106 @@
   { "meta:user-defined meta:name=\"Info 2\"", EXTRACTOR_METATYPE_COMMENT },
   { "meta:user-defined meta:name=\"Info 3\"", EXTRACTOR_METATYPE_COMMENT },
   { "meta:user-defined meta:name=\"Info 4\"", EXTRACTOR_METATYPE_COMMENT },
-  { NULL, 0 },
+  { NULL, 0 }
 };
 
 
 /**
- * returns either zero when mimetype info is missing
- * or an already malloc'ed string containing the mimetype info.
+ * Obtain the mimetype of the archive by reading the 'mimetype'
+ * file of the ZIP.
+ *
+ * @param uf unzip context to extract the mimetype from
+ * @return NULL if no mimetype could be found, otherwise the mime type
  */
 static char *
-libextractor_oo_getmimetype(EXTRACTOR_unzip_file uf) {
+libextractor_oo_getmimetype (EXTRACTOR_unzip_file uf) 
+{
   char filename_inzip[MAXFILENAME];
   EXTRACTOR_unzip_file_info file_info;
-  char * buf = NULL;
-  size_t buf_size = 0;
+  char *buf;
+  size_t buf_size;
 
-  if (EXTRACTOR_UNZIP_OK != EXTRACTOR_common_unzip_local_file(uf,
-                                                             "mimetype",
-                                                             CASESENSITIVITY))
+  if (EXTRACTOR_UNZIP_OK !=
+      EXTRACTOR_common_unzip_local_file (uf,
+                                        "mimetype",
+                                        CASESENSITIVITY))
     return NULL;
-  if ( (EXTRACTOR_UNZIP_OK == EXTRACTOR_common_unzip_get_current_file_info(uf,
-                                                                          
&file_info,
-                                                                          
filename_inzip,
-                                                                          
sizeof(filename_inzip),
-                                                                          NULL,
-                                                                          0,
-                                                                          NULL,
-                                                                          0) &&
-       (EXTRACTOR_UNZIP_OK == EXTRACTOR_common_unzip_open_current_file3(uf, 
NULL, NULL, 0)) ) ) {
-    buf_size = file_info.uncompressed_size;
-    
-    if (buf_size > 1024) 
-      {
-       /* way too large! */
-      }
-    else if (NULL == (buf = malloc(1 + buf_size))) 
-      {
-       /* memory exhausted! */
-      } 
-    else if (buf_size != (size_t) 
EXTRACTOR_common_unzip_read_current_file(uf,buf,buf_size)) 
-      {
-       free(buf);
-       buf = NULL;
-      }
-    else 
-      {
-       /* found something */
-       buf[buf_size] = '\0';
-       while ( (0 < buf_size) &&
-               isspace( (unsigned char) buf[buf_size - 1]))
-         buf[--buf_size] = '\0';
-       if ('\0' == buf[0]) 
-         {
-           free(buf);
-           buf = NULL;
-         }
-      }
-  }
-  EXTRACTOR_common_unzip_close_current_file(uf);  
+  if (EXTRACTOR_UNZIP_OK != 
+      EXTRACTOR_common_unzip_get_current_file_info (uf,
+                                                   &file_info,
+                                                   filename_inzip,
+                                                   sizeof (filename_inzip),
+                                                   NULL,
+                                                   0,
+                                                   NULL,
+                                                   0))
+    return NULL;
+  if (EXTRACTOR_UNZIP_OK != 
+      EXTRACTOR_common_unzip_open_current_file3 (uf, NULL, NULL, 0))
+    {
+      EXTRACTOR_common_unzip_close_current_file (uf);  
+      return NULL;
+    }
+  buf_size = file_info.uncompressed_size;    
+  if (buf_size > 1024) 
+    {
+      /* way too large! */
+      EXTRACTOR_common_unzip_close_current_file (uf);  
+      return NULL;
+    }
+  if (NULL == (buf = malloc (1 + buf_size))) 
+    {
+      /* memory exhausted! */
+      EXTRACTOR_common_unzip_close_current_file (uf);  
+      return NULL;
+    } 
+  if (buf_size != 
+      (size_t) EXTRACTOR_common_unzip_read_current_file (uf, 
+                                                        buf, 
+                                                        buf_size)) 
+    {
+      free(buf);
+      EXTRACTOR_common_unzip_close_current_file(uf);  
+      return NULL;
+    }
+  /* found something */
+  buf[buf_size] = '\0';
+  while ( (0 < buf_size) &&
+         isspace( (unsigned char) buf[buf_size - 1]))
+    buf[--buf_size] = '\0';
+  if ('\0' == buf[0]) 
+    {
+      free (buf);
+      buf = NULL;
+    }
+  EXTRACTOR_common_unzip_close_current_file (uf);
   return buf;
 }
 
 
-typedef struct Ecls {
-  char * data;
-  size_t size;
-  size_t pos;
-} Ecls;
-
-
-int 
-EXTRACTOR_odf_extract (const char *data,
-                       size_t size,
-                       EXTRACTOR_MetaDataProcessor proc,
-                       void *proc_cls,
-                       const char *options)
+/**
+ * Main entry method for the ODF extraction plugin.  
+ *
+ * @param ec extraction context provided to the plugin
+ */
+void
+EXTRACTOR_odf_extract_method (struct EXTRACTOR_ExtractContext *ec)
 {
   char filename_inzip[MAXFILENAME];
   EXTRACTOR_unzip_file uf;
   EXTRACTOR_unzip_file_info file_info;
-  char * buf;
-  char * pbuf;
+  char *buf;
+  char *pbuf;
   size_t buf_size;
-  int i;
+  unsigned int i;
   EXTRACTOR_unzip_filefunc_def io;
-  Ecls cls;
-  char * mimetype;
+  char *mimetype;
 
   if (size < 100)
     return 0;
   if ( !( ('P'==data[0]) && ('K'==data[1]) && (0x03==data[2]) && 
(0x04==data[3])) )
     return 0;
 
-  cls.data = (void*) data;
-  cls.size = size;
-  cls.pos = 0;
   io.zopen_file = &EXTRACTOR_common_unzip_zlib_open_file_func;
   io.zread_file = &EXTRACTOR_common_unzip_zlib_read_file_func;
   io.zwrite_file = NULL;
@@ -155,151 +185,161 @@
   io.zseek_file = &EXTRACTOR_common_unzip_zlib_seek_file_func;
   io.zclose_file = &EXTRACTOR_common_unzip_zlib_close_file_func;
   io.zerror_file = &EXTRACTOR_common_unzip_zlib_testerror_file_func;
-  io.opaque = &cls;
-
-  uf = EXTRACTOR_common_unzip_open2("ERROR", &io);
-  if (uf == NULL)
-    return 0;
-  mimetype = libextractor_oo_getmimetype(uf);
-  if ( (NULL != mimetype) &&
-       (0 != proc (proc_cls, 
-                  "deb",
-                  EXTRACTOR_METATYPE_MIMETYPE,
-                  EXTRACTOR_METAFORMAT_UTF8,
-                  "text/plain",
-                  mimetype,
-                  strlen (mimetype)+1)) )
+  io.opaque = ec;
+  
+  if (NULL == (uf = EXTRACTOR_common_unzip_open2 ("ERROR", &io)))
+    return;
+  if (NULL != (mimetype = libextractor_oo_getmimetype (uf)))
     {
-      EXTRACTOR_common_unzip_close(uf);
+      if (0 != proc (proc_cls, 
+                    "deb",
+                    EXTRACTOR_METATYPE_MIMETYPE,
+                    EXTRACTOR_METAFORMAT_UTF8,
+                    "text/plain",
+                    mimetype,
+                    strlen (mimetype) + 1))
+       {
+         EXTRACTOR_common_unzip_close (uf);
+         free (mimetype);
+         return;
+       }
       free (mimetype);
-      return 1;
     }
-  free (mimetype);
-  if (EXTRACTOR_common_unzip_local_file(uf,
-                   METAFILE,
-                   CASESENSITIVITY) != EXTRACTOR_UNZIP_OK) {
-    EXTRACTOR_common_unzip_close(uf);
-    return 0; /* not found */
-  }
-
+  if (EXTRACTOR_UNZIP_OK !=
+      EXTRACTOR_common_unzip_local_file (uf,
+                                        METAFILE,
+                                        CASESENSITIVITY)) 
+    {
+      /* metafile not found */
+      EXTRACTOR_common_unzip_close (uf);
+      return; 
+    }
   if (EXTRACTOR_UNZIP_OK != 
-      EXTRACTOR_common_unzip_get_current_file_info(uf,
-                                                  &file_info,
-                                                  filename_inzip,
-                                                  sizeof(filename_inzip),
-                                                  NULL,0,NULL,0)) {
-    EXTRACTOR_common_unzip_close(uf);
-    return 0; /* problems... */
-  }
+      EXTRACTOR_common_unzip_get_current_file_info (uf,
+                                                   &file_info,
+                                                   filename_inzip,
+                                                   sizeof (filename_inzip),
+                                                   NULL,0,NULL,0)) 
+    {
+      /* problems accessing metafile */
+      EXTRACTOR_common_unzip_close (uf);
+      return;
+    }
+  if (EXTRACTOR_UNZIP_OK != 
+      EXTRACTOR_common_unzip_open_current_file3 (uf, NULL, NULL, 0)) 
+    {
+      /* problems with unzip */
+      EXTRACTOR_common_unzip_close (uf);
+      return; 
+    }
 
-  if (EXTRACTOR_UNZIP_OK != EXTRACTOR_common_unzip_open_current_file3(uf, 
NULL, NULL, 0)) {
-    EXTRACTOR_common_unzip_close(uf);
-    return 0; /* problems... */
-  }
-
   buf_size = file_info.uncompressed_size;
-  if (buf_size > 128 * 1024) {
-    EXTRACTOR_common_unzip_close_current_file(uf);
-    EXTRACTOR_common_unzip_close(uf);
-    return 0; /* hardly meta-data! */
-  }
-  buf = malloc(buf_size+1);
-  if (buf == NULL) 
+  if (buf_size > 128 * 1024) 
     {
-      EXTRACTOR_common_unzip_close_current_file(uf);
-      EXTRACTOR_common_unzip_close(uf);
-      return 0; /* out of memory */
+      /* too big to be meta-data! */
+      EXTRACTOR_common_unzip_close_current_file (uf);
+      EXTRACTOR_common_unzip_close (uf);
+      return; 
     }
-
-  if (buf_size != EXTRACTOR_common_unzip_read_current_file(uf,buf,buf_size)) 
+  if (NULL == (buf = malloc (buf_size+1)))
     {
-      free(buf);
-      EXTRACTOR_common_unzip_close_current_file(uf);
-      EXTRACTOR_common_unzip_close(uf);
-      return 0;
+      /* out of memory */
+      EXTRACTOR_common_unzip_close_current_file (uf);
+      EXTRACTOR_common_unzip_close (uf);
+      return;
     }
-  EXTRACTOR_common_unzip_close_current_file(uf);
+  if (buf_size != EXTRACTOR_common_unzip_read_current_file (uf, buf, 
buf_size)) 
+    {
+      EXTRACTOR_common_unzip_close_current_file (uf);
+      goto CLEANUP;
+    }
+  EXTRACTOR_common_unzip_close_current_file (uf);
   /* we don't do "proper" parsing of the meta-data but rather use some 
heuristics
      to get values out that we understand */
   buf[buf_size] = '\0';
   /* printf("%s\n", buf); */
   /* try to find some of the typical OO xml headers */
-  if ( (strstr(buf, "xmlns:meta=\"http://openoffice.org/2000/meta\"";) != NULL) 
||
-       (strstr(buf, "xmlns:dc=\"http://purl.org/dc/elements/1.1/\"";) != NULL) 
||
-       (strstr(buf, "xmlns:xlink=\"http://www.w3.org/1999/xlink\"";) != NULL) ) 
{
-    /* accept as meta-data */
-    i = -1;
-    while (tmap[++i].text != NULL) {
-      char * spos;
-      char * epos;
-      char needle[256];
-      int oc;
-
-      pbuf = buf;
-
-      while (1) {
-       strcpy(needle, "<");
-       strcat(needle, tmap[i].text);
-       strcat(needle, ">");
-       spos = strstr(pbuf, needle);
-       if (NULL == spos) {
-       strcpy(needle, tmap[i].text);
-       strcat(needle, "=\"");
-       spos = strstr(pbuf, needle);
-       if (spos == NULL)
-         break;
-       spos += strlen(needle);
-       epos = spos;
-       while ( (epos[0] != '\0') &&
-               (epos[0] != '"') )
-         epos++;
-       } else {
-         oc = 0;
-         spos += strlen(needle);
-         while ( (spos[0] != '\0') &&
-                 ( (spos[0] == '<') ||
-                   (oc > 0) ) ) {
-           if (spos[0] == '<')
-             oc++;
-           if (spos[0] == '>')
-             oc--;
-           spos++;
-         }
-         epos = spos;
-         while ( (epos[0] != '\0') &&
-                 (epos[0] != '<') &&
-                 (epos[0] != '>') ) {
-           epos++;
-         }
+  if ( (strstr (buf, "xmlns:meta=\"http://openoffice.org/2000/meta\"";) != 
NULL) ||
+       (strstr (buf, "xmlns:dc=\"http://purl.org/dc/elements/1.1/\"";) != NULL) 
||
+       (strstr (buf, "xmlns:xlink=\"http://www.w3.org/1999/xlink\"";) != NULL) 
) 
+    {
+      /* accept as meta-data */
+      for (i = 0; NULL  != tmap[i].text; i++)
+       {
+         char * spos;
+         char * epos;
+         char needle[256];
+         int oc;
+         
+         pbuf = buf;
+         
+         while (1) 
+           {
+             strcpy(needle, "<");
+             strcat(needle, tmap[i].text);
+             strcat(needle, ">");
+             spos = strstr(pbuf, needle);
+             if (NULL == spos) 
+               {
+                 strcpy(needle, tmap[i].text);
+                 strcat(needle, "=\"");
+                 spos = strstr(pbuf, needle);
+                 if (spos == NULL)
+                   break;
+                 spos += strlen(needle);
+                 epos = spos;
+                 while ( (epos[0] != '\0') &&
+                         (epos[0] != '"') )
+                   epos++;
+               } 
+             else
+               {
+                 oc = 0;
+                 spos += strlen(needle);
+                 while ( (spos[0] != '\0') &&
+                         ( (spos[0] == '<') ||
+                           (oc > 0) ) ) 
+                   {
+                     if (spos[0] == '<')
+                       oc++;
+                     if (spos[0] == '>')
+                       oc--;
+                     spos++;
+                   }
+                 epos = spos;
+                 while ( (epos[0] != '\0') &&
+                         (epos[0] != '<') &&
+                         (epos[0] != '>') ) 
+                   {
+                     epos++;
+                   }
+               }
+             if (spos != epos) 
+               {
+                 char key[epos - spos + 1];
+                 
+                 memcpy(key, spos, epos-spos);
+                 key[epos-spos] = '\0';
+                 if (0 != proc (proc_cls, 
+                                "odf",
+                                tmap[i].type,
+                                EXTRACTOR_METAFORMAT_UTF8,
+                                "text/plain",
+                                key,
+                                epos - spos + 1))
+                   {
+                     goto CLEANUP;
+                   }     
+                 pbuf = epos;
+               } 
+             else
+               break;
+           }
        }
-       if (spos != epos) 
-         {
-           char key[epos - spos + 1];
-
-           memcpy(key, spos, epos-spos);
-           key[epos-spos] = '\0';
-           if (0 != proc (proc_cls, 
-                          "odf",
-                          tmap[i].type,
-                          EXTRACTOR_METAFORMAT_UTF8,
-                          "text/plain",
-                          key,
-                          epos - spos + 1))
-             {
-               free(buf);
-               EXTRACTOR_common_unzip_close(uf);
-               return 1;             
-             }   
-           pbuf = epos;
-         } 
-       else
-         break;
-      }
     }
-  }
-  free(buf);
-  EXTRACTOR_common_unzip_close(uf);
-  return 0;
+ CLEANUP:
+  free (buf);
+  EXTRACTOR_common_unzip_close (uf);
 }
 
-
+/* end of odf_extractor.c */

Modified: Extractor/src/plugins/png_extractor.c
===================================================================
--- Extractor/src/plugins/png_extractor.c       2012-08-11 15:13:06 UTC (rev 
23203)
+++ Extractor/src/plugins/png_extractor.c       2012-08-12 12:50:46 UTC (rev 
23204)
@@ -1,10 +1,10 @@
 /*
      This file is part of libextractor.
-     (C) 2002, 2003, 2004, 2005, 2009 Vidyut Samanta and Christian Grothoff
+     (C) 2002, 2003, 2004, 2005, 2009, 2012 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
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      libextractor is distributed in the hope that it will be useful, but
@@ -17,127 +17,194 @@
      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      Boston, MA 02111-1307, USA.
  */
-
+/**
+ * @file plugins/png_extractor.c
+ * @brief plugin to support PNG files
+ * @author Christian Grothoff
+ */
 #include "platform.h"
+#include <zlib.h>
 #include "extractor.h"
-#include <zlib.h>
 #include "convert.h"
 
-#include "extractor_plugins.h"
+/**
+ * Header that every PNG file must start with.
+ */
+#define PNG_HEADER "\211PNG\r\n\032\n"
 
 
+/**
+ * Function to create 0-terminated string from the
+ * first n characters of the given input.
+ *
+ * @param str input string
+ * @param n length of the input
+ * @return n-bytes from str followed by 0-termination, NULL on error
+ */
 static char *
-stndup (const char *str, size_t n)
+stndup (const char *str, 
+       size_t n)
 {
   char *tmp;
-  tmp = malloc (n + 1);
-  if (tmp == NULL)
+
+  if (NULL == (tmp = malloc (n + 1)))
     return NULL;
   tmp[n] = '\0';
   memcpy (tmp, str, n);
   return tmp;
 }
 
+
 /**
  * strnlen is GNU specific, let's redo it here to be
  * POSIX compliant.
+ *
+ * @param str input string
+ * @param maxlen maximum length of str
+ * @return first position of 0-terminator in str, or maxlen
  */
 static size_t
-stnlen (const char *str, size_t maxlen)
+stnlen (const char *str, 
+       size_t maxlen)
 {
   size_t ret;
+
   ret = 0;
-  while ((ret < maxlen) && (str[ret] != '\0'))
+  while ( (ret < maxlen) &&
+         ('\0' != str[ret]) )
     ret++;
   return ret;
 }
 
 
-static int
-getIntAt (const void *pos)
+/**
+ * Interpret the 4 bytes in 'buf' as a big-endian
+ * encoded 32-bit integer, convert and return.
+ *
+ * @param pos (unaligned) pointer to 4 byte integer
+ * @return converted integer in host byte order
+ */
+static uint32_t
+get_int_at (const void *pos)
 {
-  char p[4];
+  uint32_t i;
 
-  memcpy (p, pos, 4);           /* ensure alignment! */
-  return *(int *) &p[0];
+  memcpy (&i, pos, sizeof (i));
+  return htonl (i);
 }
 
 
+/**
+ * Map from PNG meta data descriptor strings
+ * to LE types.
+ */
 static struct
 {
-  char *name;
+  /**
+   * PNG name.
+   */
+  const char *name;
+
+  /**
+   * Corresponding LE type.
+   */
   enum EXTRACTOR_MetaType type;
 } tagmap[] =
 {
-  { "Author", EXTRACTOR_METATYPE_AUTHOR_NAME},
-  { "Description", EXTRACTOR_METATYPE_DESCRIPTION},
-  { "Comment", EXTRACTOR_METATYPE_COMMENT},
-  { "Copyright", EXTRACTOR_METATYPE_COPYRIGHT},
+  { "Author", EXTRACTOR_METATYPE_AUTHOR_NAME },
+  { "Description", EXTRACTOR_METATYPE_DESCRIPTION },
+  { "Comment", EXTRACTOR_METATYPE_COMMENT },
+  { "Copyright", EXTRACTOR_METATYPE_COPYRIGHT },
   { "Source", EXTRACTOR_METATYPE_SOURCE_DEVICE },
-  { "Creation Time", EXTRACTOR_METATYPE_CREATION_DATE},
-  { "Title", EXTRACTOR_METATYPE_TITLE},
-  { "Software", EXTRACTOR_METATYPE_PRODUCED_BY_SOFTWARE},
-  { "Disclaimer", EXTRACTOR_METATYPE_DISCLAIMER},
-  { "Warning", EXTRACTOR_METATYPE_WARNING},
+  { "Creation Time", EXTRACTOR_METATYPE_CREATION_DATE },
+  { "Title", EXTRACTOR_METATYPE_TITLE },
+  { "Software", EXTRACTOR_METATYPE_PRODUCED_BY_SOFTWARE },
+  { "Disclaimer", EXTRACTOR_METATYPE_DISCLAIMER },
+  { "Warning", EXTRACTOR_METATYPE_WARNING },
+  { "Signature", EXTRACTOR_METATYPE_UNKNOWN },
   { NULL, EXTRACTOR_METATYPE_RESERVED }
 };
 
 
-#define ADD(t,s) do { if (0 != (ret = proc (proc_cls, "png", t, 
EXTRACTOR_METAFORMAT_UTF8, "text/plain", s, strlen(s)+1))) goto FINISH; } while 
(0)
-#define ADDF(t,s) do { if ( (s != NULL) && (0 != (ret = proc (proc_cls, "png", 
t, EXTRACTOR_METAFORMAT_UTF8, "text/plain", s, strlen(s)+1))) ) { free(s); goto 
FINISH; } if (s != NULL) free (s); } while (0)
+/**
+ * Give the given metadata to LE.  Set "ret" to 1 and
+ * goto 'FINISH' if LE says we are done.
+ *
+ * @param t type of the metadata
+ * @param s utf8 string with the metadata
+ */
+#define ADD(t,s) do { if (0 != (ret = ec->proc (ec->cls, "png", t, 
EXTRACTOR_METAFORMAT_UTF8, "text/plain", s, strlen (s) + 1))) goto FINISH; } 
while (0)
 
 
+/**
+ * Give the given metadata to LE and free the memory.  Set "ret" to 1 and
+ * goto 'FINISH' if LE says we are done.
+ *
+ * @param t type of the metadata
+ * @param s utf8 string with the metadata, to be freed afterwards
+ */
+#define ADDF(t,s) do { if ( (NULL != s) && (0 != (ret = ec->proc (ec->cls, 
"png", t, EXTRACTOR_METAFORMAT_UTF8, "text/plain", s, strlen (s) + 1))) ) { 
free (s); goto FINISH; } if (NULL != s) free (s); } while (0)
+
+
+/**
+ * Process EXt tag.
+ *
+ * @param ec extraction context
+ * @param length length of the tag
+ * @return 0 to continue extracting, 1 if we are done
+ */
 static int
-processtEXt (struct EXTRACTOR_PluginList *plugin,
-             unsigned int length,
-            EXTRACTOR_MetaDataProcessor proc,
-            void *proc_cls)
+processtEXt (struct EXTRACTOR_ExtractContext *ec,
+             uint32_t length)
 {
+  void *ptr;
   unsigned char *data;
   char *keyword;
-  unsigned int off;
-  int i;
+  size_t off;
+  unsigned int i;
   int ret;
 
-  if (length != pl_read (plugin, &data, length))
+  if (length != ec->read (ec->cls, &ptr, length))
     return 1;
-
-  //data += 4;
+  data = ptr;
   off = stnlen ((char*) data, length) + 1;
   if (off >= length)
     return 0;                /* failed to find '\0' */
-  keyword = EXTRACTOR_common_convert_to_utf8 ( (char*) &data[off], length - 
off, "ISO-8859-1");
-  if (keyword == NULL)
+  if (NULL == (keyword = EXTRACTOR_common_convert_to_utf8 ((char*) &data[off],
+                                                          length - off, 
+                                                          "ISO-8859-1")))
     return 0;
-  i = 0;
   ret = 0;
-  while (tagmap[i].name != NULL)
-    {
-      if (0 == strcmp (tagmap[i].name, (char*) data))
-       {
-         ADDF (tagmap[i].type, keyword);
-         return 0;
-       }
-
-      i++;
-    }
+  for (i = 0; NULL != tagmap[i].name; i++)
+    if (0 == strcmp (tagmap[i].name, (char*) data))
+      {
+       ADDF (tagmap[i].type, keyword);
+       return 0;
+      }
   ADDF (EXTRACTOR_METATYPE_KEYWORDS, keyword);
 FINISH:
   return ret;
 }
 
+
+/**
+ * Process iTXt tag.
+ *
+ * @param ec extraction context
+ * @param length length of the tag
+ * @return 0 to continue extracting, 1 if we are done
+ */
 static int
-processiTXt (struct EXTRACTOR_PluginList *plugin,
-             unsigned int length, 
-            EXTRACTOR_MetaDataProcessor proc,
-            void *proc_cls)
+processiTXt (struct EXTRACTOR_ExtractContext *ec,
+             uint32_t length)
 {
+  void *ptr;
   unsigned char *data;
-  unsigned int pos;
+  size_t pos;
   char *keyword;
   const char *language;
   const char *translated;
-  int i;
+  unsigned int i;
   int compressed;
   char *buf;
   char *lan;
@@ -145,31 +212,27 @@
   int ret;
   int zret;
 
-  if (length != pl_read (plugin, &data, length))
+  if (length != ec->read (ec->cls, &ptr, length))
     return 1;
-
-  pos = stnlen ( (char*) data, length) + 1;
+  data = ptr;
+  pos = stnlen ((char *) data, length) + 1;
   if (pos >= length)
     return 0;
   compressed = data[pos++];
-  if (compressed && (data[pos++] != 0))
+  if (compressed && (0 != data[pos++]))
     return 0;                /* bad compression method */
-  language = (char*) &data[pos];
+  language = (char *) &data[pos];
   ret = 0;
-  if (stnlen (language, length - pos) > 0)
-    {
-      lan = stndup (language, length - pos);
-      ADDF (EXTRACTOR_METATYPE_LANGUAGE, lan);
-    }
+  if ( (stnlen (language, length - pos) > 0) &&
+       (NULL != (lan = stndup (language, length - pos))) )
+    ADDF (EXTRACTOR_METATYPE_LANGUAGE, lan);
   pos += stnlen (language, length - pos) + 1;
   if (pos + 1 >= length)
     return 0;
   translated = (char*) &data[pos];      /* already in utf-8! */
-  if (stnlen (translated, length - pos) > 0)
-    {
-      lan = stndup (translated, length - pos);
-      ADDF (EXTRACTOR_METATYPE_KEYWORDS, lan);
-    }
+  if ( (stnlen (translated, length - pos) > 0) &&
+       (NULL != (lan = stndup (translated, length - pos))) )
+    ADDF (EXTRACTOR_METATYPE_KEYWORDS, lan);
   pos += stnlen (translated, length - pos) + 1;
   if (pos >= length)
     return 0;
@@ -187,22 +250,21 @@
               /* printf("zlib problem"); */
               return 0;
             }
-          buf = malloc (bufLen);
-          if (buf == NULL)
+          if (NULL == (buf = malloc (bufLen)))
             {
               /* printf("out of memory"); */
               return 0;      /* out of memory */
             }
-          zret = uncompress ((Bytef *) buf,
-                            &bufLen,
-                            (const Bytef *) &data[pos], length - pos);
-          if (zret == Z_OK)
+          if (Z_OK == 
+             (zret = uncompress ((Bytef *) buf,
+                                 &bufLen,
+                                 (const Bytef *) &data[pos], length - pos)))
             {
               /* printf("zlib ok"); */
               break;
             }
           free (buf);
-          if (zret != Z_BUF_ERROR)
+          if (Z_BUF_ERROR != zret)
             return 0;        /* unknown error, abort */
         }
       keyword = stndup (buf, bufLen);
@@ -210,73 +272,82 @@
     }
   else
     {
-      keyword = stndup ((char*) &data[pos], length - pos);
+      keyword = stndup ((char *) &data[pos], length - pos);
     }
-  i = 0;
-  while (tagmap[i].name != NULL)
-    {
-      if (0 == strcmp (tagmap[i].name, (char*) data))
-       {
-         ADDF (tagmap[i].type, keyword /* already in utf8 */);
-         return 0;
-       }
-      i++;
-    }
+  if (NULL == keyword)
+    return ret;
+  for (i = 0; NULL != tagmap[i].name; i++)
+    if (0 == strcmp (tagmap[i].name, (char*) data))
+      {
+       ADDF (tagmap[i].type, keyword /* already in utf8 */);
+       return 0;
+      }
   ADDF (EXTRACTOR_METATYPE_COMMENT, keyword);
 FINISH:
   return ret;
 }
 
 
+/**
+ * Process IHDR tag.
+ *
+ * @param ec extraction context
+ * @param length length of the tag
+ * @return 0 to continue extracting, 1 if we are done
+ */
 static int
-processIHDR (struct EXTRACTOR_PluginList *plugin,
-             unsigned int length, 
-            EXTRACTOR_MetaDataProcessor proc,
-            void *proc_cls)
+processIHDR (struct EXTRACTOR_ExtractContext *ec,
+             uint32_t length)
 {
+  void *ptr;
   unsigned char *data;
   char tmp[128];
   int ret;
 
   if (length < 12)
     return 0;
-
-  if (length != pl_read (plugin, &data, length))
+  if (length != ec->read (ec->cls, &ptr, length))
     return 1;
-
+  data = ptr;
   ret = 0;
   snprintf (tmp,
-            sizeof(tmp),
+            sizeof (tmp),
             "%ux%u",
-            htonl (getIntAt (data)), htonl (getIntAt (&data[4])));
+            get_int_at (data), get_int_at (&data[4]));
   ADD (EXTRACTOR_METATYPE_IMAGE_DIMENSIONS, tmp);
 FINISH:
   return ret;
 }
 
+
+/**
+ * Process zTXt tag.
+ *
+ * @param ec extraction context
+ * @param length length of the tag
+ * @return 0 to continue extracting, 1 if we are done
+ */
 static int
-processzTXt (struct EXTRACTOR_PluginList *plugin,
-             unsigned int length,
-            EXTRACTOR_MetaDataProcessor proc,
-            void *proc_cls)
+processzTXt (struct EXTRACTOR_ExtractContext *ec,
+             uint32_t length)
 {
+  void *ptr;
   unsigned char *data;
   char *keyword;
-  unsigned int off;
-  int i;
+  size_t off;
+  unsigned int i;
   char *buf;
   uLongf bufLen;
   int zret;
   int ret;
 
-  if (length != pl_read (plugin, &data, length))
+  if (length != ec->read (ec->cls, &ptr, length))
     return 1;
-
-  //data += 4;
-  off = stnlen ( (char*) data, length) + 1;
+  data = ptr;
+  off = stnlen ((char *) data, length) + 1;
   if (off >= length)
     return 0;                /* failed to find '\0' */
-  if (data[off] != 0)
+  if (0 != data[off])
     return 0;                /* compression method must be 0 */
   off++;
   ret = 0;
@@ -291,46 +362,52 @@
           /* printf("zlib problem"); */
           return 0;
         }
-      buf = malloc (bufLen);
-      if (buf == NULL)
+      if (NULL == (buf = malloc (bufLen)))
         {
           /* printf("out of memory"); */
           return 0;          /* out of memory */
         }
-      zret = uncompress ((Bytef *) buf,
-                        &bufLen, (const Bytef *) &data[off], length - off);
-      if (zret == Z_OK)
+      if (Z_OK == 
+         (zret = uncompress ((Bytef *) buf,
+                             &bufLen,
+                             (const Bytef *) &data[off], 
+                             length - off)))
         {
           /* printf("zlib ok"); */
           break;
         }
       free (buf);
-      if (zret != Z_BUF_ERROR)
+      if (Z_BUF_ERROR != zret)
         return 0;            /* unknown error, abort */
     }
-  keyword = EXTRACTOR_common_convert_to_utf8 (buf, bufLen, "ISO-8859-1");
+  keyword = EXTRACTOR_common_convert_to_utf8 (buf, 
+                                             bufLen, 
+                                             "ISO-8859-1");
   free (buf);
-  i = 0;
-  while (tagmap[i].name != NULL)
-    {
-      if (0 == strcmp (tagmap[i].name, (char*)  data))
-       {
-         ADDF (tagmap[i].type, keyword);
-         return 0;
-       }
-      i++;
-    }
+  for (i = 0; NULL != tagmap[i].name; i++)
+    if (0 == strcmp (tagmap[i].name, (char*)  data))
+      {
+       ADDF (tagmap[i].type, keyword);
+       return 0;
+      }
   ADDF (EXTRACTOR_METATYPE_COMMENT, keyword);
 FINISH:
   return ret;
 }
 
+
+/**
+ * Process IME tag.
+ *
+ * @param ec extraction context
+ * @param length length of the tag
+ * @return 0 to continue extracting, 1 if we are done
+ */
 static int
-processtIME (struct EXTRACTOR_PluginList *plugin,
-             unsigned int length,
-            EXTRACTOR_MetaDataProcessor proc,
-            void *proc_cls)
+processtIME (struct EXTRACTOR_ExtractContext *ec,
+             uint32_t length)
 {
+  void *ptr;
   unsigned char *data;
   unsigned short y;
   unsigned int year;
@@ -344,12 +421,11 @@
 
   if (length != 7)
     return 0;
-
-  if (length != pl_read (plugin, &data, length))
+  if (length != ec->read (ec->cls, &ptr, length))
     return 1;
-
+  data = ptr;
   ret = 0;
-  memcpy (&y, data, sizeof (unsigned short));
+  memcpy (&y, data, sizeof (uint16_t));
   year = ntohs (y);
   mo = (unsigned char) data[6];
   day = (unsigned char) data[7];
@@ -357,66 +433,63 @@
   m = (unsigned char) data[9];
   s = (unsigned char) data[10];
   snprintf (val, 
-           sizeof(val),
-           "%04u-%02u-%02u %02d:%02d:%02d", year, mo, day, h, m, s);
+           sizeof (val),
+           "%04u-%02u-%02u %02d:%02d:%02d", 
+           year, mo, day, h, m, s);
   ADD (EXTRACTOR_METATYPE_MODIFICATION_DATE, val);
 FINISH:
   return ret;
 }
 
-#define PNG_HEADER "\211PNG\r\n\032\n"
 
-
-
-int
-EXTRACTOR_png_extract_method (struct EXTRACTOR_PluginList *plugin,
-    EXTRACTOR_MetaDataProcessor proc, void *proc_cls)
+/**
+ * Main entry method for the 'image/png' extraction plugin.  
+ *
+ * @param ec extraction context provided to the plugin
+ */
+void
+EXTRACTOR_png_extract_method (struct EXTRACTOR_ExtractContext *ec)
 {
-  unsigned char *data;
-  unsigned int length;
+  void *data;
+  uint32_t length;
   int64_t pos;
   int ret;
+  ssize_t len;
 
-  if (plugin == NULL)
-    return 1;
-
-  ret = strlen (PNG_HEADER);
-
-  if (ret != pl_read (plugin, &data, ret))
-    return 1;
-  
-  if (0 != strncmp ((char*) data, PNG_HEADER, ret))
-    return 1;
-
+  len = strlen (PNG_HEADER);
+  if (len != ec->read (ec->cls, &data, len))
+    return;
+  if (0 != strncmp ((const char*) data, PNG_HEADER, len))
+    return;
   ADD (EXTRACTOR_METATYPE_MIMETYPE, "image/png");
   ret = 0;
-  while (ret == 0)
+  while (0 == ret)
     {
-      if (4 != pl_read (plugin, &data, 4))
+      if (sizeof (uint32_t) + 4 != ec->read (ec->cls, 
+                                            &data, 
+                                            sizeof (uint32_t) + 4))
         break;
-      length = htonl (getIntAt (data));
-      /* printf("Length: %u, pos %u\n", length, pos - data); */
-      if (4 != pl_read (plugin, &data, 4))
+      length = get_int_at (data);
+      if (0 > (pos = ec->seek (ec->cls, 0, SEEK_CUR)))
         break;
-      pos = pl_get_pos (plugin);
-      if (pos <= 0)
-        break;
       pos += length + 4; /* Chunk type, data, crc */
-      if (0 == strncmp ((char*) data, "IHDR", 4))
-        ret = processIHDR (plugin, length, proc, proc_cls);
-      if (0 == strncmp ((char*) data, "iTXt", 4))
-        ret = processiTXt (plugin, length, proc, proc_cls);
-      if (0 == strncmp ((char*)data, "tEXt", 4))
-        ret = processtEXt (plugin, length, proc, proc_cls);
-      if (0 == strncmp ((char*) data, "zTXt", 4))
-        ret = processzTXt (plugin, length, proc, proc_cls);
-      if (0 == strncmp ((char*) data, "tIME", 4))
-        ret = processtIME (plugin, length, proc, proc_cls);
+      if (0 == strncmp ((char*) data + sizeof (uint32_t), "IHDR", 4))
+        ret = processIHDR (ec, length);
+      if (0 == strncmp ((char*) data + sizeof (uint32_t), "iTXt", 4))
+        ret = processiTXt (ec, length);
+      if (0 == strncmp ((char*) data + sizeof (uint32_t), "tEXt", 4))
+        ret = processtEXt (ec, length);
+      if (0 == strncmp ((char*) data + sizeof (uint32_t), "zTXt", 4))
+        ret = processzTXt (ec, length);
+      if (0 == strncmp ((char*) data + sizeof (uint32_t), "tIME", 4))
+        ret = processtIME (ec, length);
       if (ret != 0)
         break;
-      if (pos != pl_seek (plugin, pos, SEEK_SET))
+      if (pos != ec->seek (ec->cls, pos, SEEK_SET))
         break;
     }
 FINISH:
-  return 1;
+  return;
 }
+
+/* end of png_extractor.c */

Modified: Extractor/src/plugins/test_jpeg.c
===================================================================
--- Extractor/src/plugins/test_jpeg.c   2012-08-11 15:13:06 UTC (rev 23203)
+++ Extractor/src/plugins/test_jpeg.c   2012-08-12 12:50:46 UTC (rev 23204)
@@ -19,7 +19,7 @@
 */
 /**
  * @file plugins/test_jpeg.c
- * @brief testcase for ogg plugin
+ * @brief testcase for jpeg plugin
  * @author Christian Grothoff
  */
 #include "platform.h"

Added: Extractor/src/plugins/test_png.c
===================================================================
--- Extractor/src/plugins/test_png.c                            (rev 0)
+++ Extractor/src/plugins/test_png.c    2012-08-12 12:50:46 UTC (rev 23204)
@@ -0,0 +1,84 @@
+/*
+     This file is part of libextractor.
+     (C) 2012 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 3, 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., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+/**
+ * @file plugins/test_png.c
+ * @brief testcase for png plugin
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "test_lib.h"
+
+
+/**
+ * Main function for the PNG testcase.
+ *
+ * @param argc number of arguments (ignored)
+ * @param argv arguments (ignored)
+ * @return 0 on success
+ */
+int
+main (int argc, char *argv[])
+{
+  struct SolutionData png_image_sol[] =
+    {
+      { 
+       EXTRACTOR_METATYPE_MIMETYPE,
+       EXTRACTOR_METAFORMAT_UTF8,
+       "text/plain",
+       "image/png",
+       strlen ("image/png") + 1,
+       0 
+      },
+      { 
+       EXTRACTOR_METATYPE_IMAGE_DIMENSIONS,
+       EXTRACTOR_METAFORMAT_UTF8,
+       "text/plain",
+       "4x4",
+       strlen ("4x4") + 1,
+       0 
+      },
+      { 
+       EXTRACTOR_METATYPE_COMMENT,
+       EXTRACTOR_METAFORMAT_UTF8,
+       "text/plain",
+       "Testing keyword extraction\n",
+       strlen ("Testing keyword extraction\n") + 1,
+       0 
+      },
+      { 
+       EXTRACTOR_METATYPE_UNKNOWN,
+       EXTRACTOR_METAFORMAT_UTF8,
+       "text/plain",
+       "dc6c58c971715e8043baef058b675eec",
+       strlen ("dc6c58c971715e8043baef058b675eec") + 1,
+       0 
+      },
+      { 0, 0, NULL, NULL, 0, -1 }
+    };
+  struct ProblemSet ps[] =
+    {
+      { "testdata/png_image.png",
+       png_image_sol },
+      { NULL, NULL }
+    };
+  return ET_main ("png", ps);
+}
+
+/* end of test_png.c */

Copied: Extractor/src/plugins/testdata/png_image.png (from rev 23203, 
Extractor/test/test.png)
===================================================================
(Binary files differ)

Deleted: Extractor/test/test.png
===================================================================
(Binary files differ)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]