gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r1946 - Extractor/src/plugins/exiv2


From: grothoff
Subject: [GNUnet-SVN] r1946 - Extractor/src/plugins/exiv2
Date: Fri, 26 Aug 2005 22:18:26 -0700 (PDT)

Author: grothoff
Date: 2005-08-26 22:18:25 -0700 (Fri, 26 Aug 2005)
New Revision: 1946

Modified:
   Extractor/src/plugins/exiv2/Makefile.am
   Extractor/src/plugins/exiv2/exiv2extractor.cc
Log:
workaround bug 907

Modified: Extractor/src/plugins/exiv2/Makefile.am
===================================================================
--- Extractor/src/plugins/exiv2/Makefile.am     2005-08-27 04:57:47 UTC (rev 
1945)
+++ Extractor/src/plugins/exiv2/Makefile.am     2005-08-27 05:18:25 UTC (rev 
1946)
@@ -16,9 +16,9 @@
 libextractor_exiv2_la_LINK = \
   /bin/sh ../../../libtool --mode=link $(CXXLD) -o libextractor_exiv2.la
 libextractor_exiv2_la_LDFLAGS = \
-  $(PLUGINFLAGS) $(XTRA_CPPLIBS)
+  $(PLUGINFLAGS) $(XTRA_CPPLIBS) -lpthread
 libextractor_exiv2_la_LIBADD = \
-  $(top_builddir)/src/main/libextractor.la
+  $(top_builddir)/src/main/libextractor.la -lpthread
 
 libextractor_exiv2_la_SOURCES = \
 exiv2extractor.cc exv_conf.h exv_msvc.h \

Modified: Extractor/src/plugins/exiv2/exiv2extractor.cc
===================================================================
--- Extractor/src/plugins/exiv2/exiv2extractor.cc       2005-08-27 04:57:47 UTC 
(rev 1945)
+++ Extractor/src/plugins/exiv2/exiv2extractor.cc       2005-08-27 05:18:25 UTC 
(rev 1946)
@@ -34,13 +34,14 @@
 #include <iomanip>
 #include <cassert>
 #include <cstring>
-#include <sys/types.h>                  // for stat()
-#include <sys/stat.h>                   // for stat()
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>                    // for stat()
-#endif
 #include <math.h>
 
+
+#define WORKAROUND_905 1
+#if WORKAROUND_905
+#include <pthread.h>
+#endif
+
 extern "C" {
 
     static struct EXTRACTOR_Keywords * addKeyword(EXTRACTOR_KeywordType type,
@@ -83,10 +84,17 @@
 
 extern "C" {
 
+#if WORKAROUND_905
+    static struct EXTRACTOR_Keywords * extract(const char * filename,
+                                              unsigned char * data,
+                                              size_t size,
+                                              struct EXTRACTOR_Keywords * 
prev) 
+#else
     struct EXTRACTOR_Keywords * libextractor_exiv2_extract(const char * 
filename,
                                                            unsigned char * 
data,
                                                            size_t size,
                                                            struct 
EXTRACTOR_Keywords * prev) 
+#endif
     {
         struct EXTRACTOR_Keywords * result = prev;
 
@@ -426,4 +434,38 @@
         return result;
     }
 
+
+
+#if WORKAROUND_905
+  
+  struct X {
+    unsigned char * data;
+    size_t size;
+    struct EXTRACTOR_Keywords * prev;
+  };
+  
+  
+  static void * run(void * arg) {
+    struct X * x = (struct X*) arg;
+    return extract(NULL, x->data, x->size, x->prev);
+  }
+
+    struct EXTRACTOR_Keywords * libextractor_exiv2_extract(const char * 
filename,
+                                                           unsigned char * 
data,
+                                                           size_t size,
+                                                           struct 
EXTRACTOR_Keywords * prev) {      
+      pthread_t pt;
+      struct X cls;
+      void * ret;
+      cls.data = data;
+      cls.size = size;
+      cls.prev = prev;
+      if (0 == pthread_create(&pt, NULL, &run, &cls))
+       if (0 == pthread_join(pt, &ret))
+       return (struct EXTRACTOR_Keywords*) ret;
+      return prev;
+    }
+
+#endif
+
 }





reply via email to

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