gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [libextractor-perl] 06/08: address@hidden: rafl | 2005-11-1


From: gnunet
Subject: [GNUnet-SVN] [libextractor-perl] 06/08: address@hidden: rafl | 2005-11-13 21:43:23 +0100 * Fixed some leaks, cleaned up a bit. * Functions that modify an extractor list don't have a return value anymore because they do this by reference, not by value.
Date: Sat, 13 Apr 2019 13:48:36 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository libextractor-perl.

commit 4278e41e7b6a44e17cf8e66067ac7bee5c38bfbb
Author: Florian Ragwitz <address@hidden>
AuthorDate: Sun Nov 13 21:32:21 2005 +0000

     address@hidden:  rafl | 2005-11-13 21:43:23 +0100
     * Fixed some leaks, cleaned up a bit.
     * Functions that modify an extractor list don't have a return value anymore
       because they do this by reference, not by value.
---
 pextract.c    | 20 +++++++++++++++++
 pextract.h    |  5 +++++
 xs/Extract.xs | 71 ++++++++++++++++++++++++++++++++---------------------------
 3 files changed, 63 insertions(+), 33 deletions(-)

diff --git a/pextract.c b/pextract.c
index a3e1cfc..aa2bdd1 100644
--- a/pextract.c
+++ b/pextract.c
@@ -56,3 +56,23 @@ pextract_get_extractor_list(SV* extractor) {
        return *hv_fetch(hv, "extractor_list", 14, 0);
 }
 
+void
+pextract_hv_store_extractor_list_noinc(SV* extractor, SV* list) {
+       HV* hv = pextract_get_hv_from_file_extract_obj(extractor);
+       if (hv) {
+               hv_store(hv, "extractor_list", 14, list, 0);
+       } else {
+               croak("bar");
+       }
+}
+
+void
+pextract_hv_store_extractor_list_inc(SV* extractor, SV* list) {
+       HV* hv = pextract_get_hv_from_file_extract_obj(extractor);
+       if (hv) {
+               SvREFCNT_inc(list);
+               hv_store(hv, "extractor_list", 14, list, 0);
+       } else {
+               croak("bar");
+       }
+}
diff --git a/pextract.h b/pextract.h
index b6a5d04..d882a92 100644
--- a/pextract.h
+++ b/pextract.h
@@ -12,6 +12,11 @@ void* pextract_get_object(SV* sv, const char* package);
 HV* pextract_get_hv_from_file_extract_obj(SV* hvref);
 SV* pextract_get_extractor_list(SV* extractor);
 
+void pextract_hv_store_extractor_list_inc(SV* extractor, SV* list);
+void pextract_hv_store_extractor_list_noinc(SV* extractor, SV* list);
+
+#define pextract_hv_store_extractor_list pextract_hv_store_extractor_list_inc
+
 void _pextractor_call_XS(pTHX_ void (*subaddr) (pTHX_ CV*), CV* cv, SV** mark);
 
 #define PEXTRACTOR_CALL_BOOT(name) \
diff --git a/xs/Extract.xs b/xs/Extract.xs
index 99cd1d0..9298296 100644
--- a/xs/Extract.xs
+++ b/xs/Extract.xs
@@ -6,76 +6,80 @@ void
 init(extractor)
                SV* extractor
        PREINIT:
-               HV* hv;
                SV* list = NULL;
-       PPCODE:
-               list = newSvEXTRACTOR_ExtractorList_ornull(NULL);
-               hv = pextract_get_hv_from_file_extract_obj(extractor);
-               if (hv) {
-                       SvREFCNT_inc(list);
-                       hv_store(hv, "extractor_list", 14, list, 0);
-               } else {
-                       croak("foo");
-               }
+       CODE:
+               list = 
newSvEXTRACTOR_ExtractorList_ornull((EXTRACTOR_ExtractorList*)NULL);
+               pextract_hv_store_extractor_list(extractor, list);
 
-SV*
+void
 EXTRACTOR_loadDefaultLibraries(extractor)
                SV* extractor
        PREINIT:
-               EXTRACTOR_ExtractorList* list = NULL;
+               SV* list = NULL;
+               EXTRACTOR_ExtractorList* foo = NULL;
        CODE:
-               list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
-               RETVAL = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_loadDefaultLibraries());
-       OUTPUT:
-               RETVAL
+               foo = EXTRACTOR_loadDefaultLibraries();
+               list = newSvEXTRACTOR_ExtractorList_ornull(foo);
+               pextract_hv_store_extractor_list(extractor, list);
 
-SV*
+void
 EXTRACTOR_loadConfigLibraries(extractor, config)
                SV* extractor
                const char* config
        PREINIT:
                EXTRACTOR_ExtractorList* list = NULL;
+               SV* result = NULL;
        CODE:
                list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
-               RETVAL = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_loadConfigLibraries(list, 
config));
-       OUTPUT:
-               RETVAL
+               result = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_loadConfigLibraries(list, 
config));
+               pextract_hv_store_extractor_list(extractor, result);
 
-SV*
+void
 EXTRACTOR_addLibrary(extractor, library)
                SV* extractor
                const char* library
        PREINIT:
                EXTRACTOR_ExtractorList* list = NULL;
+               SV* result = NULL;
        CODE:
                list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
-               RETVAL = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibrary(list, library));
-       OUTPUT:
-               RETVAL
+               result = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibrary(list, library));
+               pextract_hv_store_extractor_list(extractor, result);
 
-SV*
+void
 EXTRACTOR_addLibraryLast(extractor, library)
                SV* extractor
                const char* library
        PREINIT:
                EXTRACTOR_ExtractorList* list = NULL;
+               SV* result = NULL;
        CODE:
                list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
-               RETVAL = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibraryLast(list, library));
-       OUTPUT:
-               RETVAL
+               result = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibraryLast(list, library));
+               pextract_hv_store_extractor_list(extractor, result);
+
+# TODO: debug!
+# 
+#  perl -MExtUtils::testlib -MData::Dumper -MFile::Extract -e'$e = 
File::Extract->new(); $e->loadConfigLibraries("libextractor_mime"); 
$e->loadConfigLibraries("libextractor_png"); print 
Dumper({$e->getKeywords("/home/rafl/map_50.823448_12.930446_10000_4000_3000.png")});
 $e->removeLibrary("libextractor_png"); print Dumper({$e->getLibraries()})'
+# 
+# segfaults
+#
+# perl -MExtUtils::testlib -MData::Dumper -MFile::Extract -e'$e = 
File::Extract->new(); $e->loadDefaultLibraries(); 
$e->loadConfigLibraries("libextractor_mime"); 
$e->loadConfigLibraries("libextractor_png"); print 
Dumper({$e->getKeywords("/home/rafl/map_50.823448_12.930446_10000_4000_3000.png")});
 $e->removeLibrary("libextractor_png"); print Dumper({$e->getLibraries()})'
+#
+# shows unwanted results. Looks like a memory corruption. Most probably caused 
by libextractor itself.
+#
 
-SV*
+void
 EXTRACTOR_removeLibrary(extractor, library)
                SV* extractor
                const char* library
        PREINIT:
                EXTRACTOR_ExtractorList* list = NULL;
+               SV* result = NULL;
        CODE:
                list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
-               RETVAL = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_removeLibrary(list, library));
-       OUTPUT:
-               RETVAL
+               result = 
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_removeLibrary(list, library));
+               pextract_hv_store_extractor_list(extractor, result);
 
 void
 EXTRACTOR_removeAll(extractor)
@@ -85,6 +89,7 @@ EXTRACTOR_removeAll(extractor)
        CODE:
                list = 
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
                EXTRACTOR_removeAll(list);
+               pextract_hv_store_extractor_list(extractor, &PL_sv_undef);
 
 void
 EXTRACTOR_getKeywords(extractor, filename)
@@ -137,7 +142,7 @@ getLibraries(extractor)
                list = 
SvEXTRACTOR_ExtractorList(pextract_get_extractor_list(extractor));
                for (i = list; i != NULL; i = i->next) {
                        XPUSHs(sv_2mortal(newSVpv(i->libname, 
strlen(i->libname))));
-                       XPUSHs(sv_2mortal(newSVpv(i->options, 
strlen(i->libname))));
+                       XPUSHs(sv_2mortal(newSVpv(i->options, 
strlen(i->options))));
                }
 
 #BOOT:

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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