[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
- [GNUnet-SVN] [libextractor-perl] branch master created (now 18437ed), gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 01/08: i, gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 04/08: address@hidden: rafl | 2005-11-13 13:15:52 +0100 * Move typemap to xs/., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 05/08: address@hidden: rafl | 2005-11-13 13:30:32 +0100 * Added an init method which is called after object construction to initialize the extractor_list value in the object hash. * Adjusted loadDefaultLibraries() to reflect the changes above., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 07/08: address@hidden: rafl | 2005-11-13 22:51:22 +0100 * Fixed a segfault, gnunet, 2019/04/13
- [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.,
gnunet <=
- [GNUnet-SVN] [libextractor-perl] 02/08: sync, gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 03/08: address@hidden: rafl | 2005-11-13 12:46:00 +0100 * Moved everything in the right directory again. * Removed copying. I'm not sure about the license yet. I think I'll chose Artistic + GPL., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 08/08: update readmes, gnunet, 2019/04/13