Hello community,
here is the log from the commit of package strigi for openSUSE:Factory checked in at 2012-04-17 22:02:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/strigi (Old)
and /work/SRC/openSUSE:Factory/.strigi.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "strigi", Maintainer is "kde-maintainers@suse.de"
Changes:
--------
--- /work/SRC/openSUSE:Factory/strigi/strigi.changes 2012-01-27 15:24:32.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.strigi.new/strigi.changes 2012-04-17 22:02:44.000000000 +0200
@@ -1,0 +2,19 @@
+Thu Mar 15 08:35:36 UTC 2012 - aj@suse.de
+
+- Fix build: Always include unistd.h for sleep declaration.
+
+-------------------------------------------------------------------
+Tue Mar 6 03:14:23 UTC 2012 - stefan.bruens@rwth-aachen.de
+
+- update to 0.7.7:
+ - Many nepomuk field name fixes
+ - More accurate file format check for tar files
+ - Better checking of bounds in OLE files.
+ - Increase performance of default file input stream.
+ - Check for surrogate pairs in UTF-8 strings.
+ - Improve ID3 analyzer: skip zero padding before mp3 stream to
+ handle typical LAME output, implement unsynchronization flag
+ handling
+ - Properly finish child indexing in all analyzers.
+
+-------------------------------------------------------------------
Old:
----
bko_251701.v3.patch
strigi-0.7.6.tar.bz2
New:
----
strigi-0.7.7.tar.bz2
strigi-missing-decl.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ strigi.spec ++++++
--- /var/tmp/diff_new_pack.ZpwPI7/_old 2012-04-17 22:02:46.000000000 +0200
+++ /var/tmp/diff_new_pack.ZpwPI7/_new 2012-04-17 22:02:46.000000000 +0200
@@ -19,19 +19,16 @@
%bcond_with ffmpeg
Name: strigi
-Version: 0.7.6
-Release: 2
+Version: 0.7.7
+Release: 0
License: GPL-2.0+ ; LGPL-2.1+
Summary: Lightweight and fast desktop search engine
Url: http://www.vandenoever.info/software/strigi/
Group: Productivity/Other
Source0: %{name}-%{version}.tar.bz2
Source100: baselibs.conf
-# PATCH-FIX-OPENSUSE bko_251701.v3.patch bko#251701 remur@gmx.net -- Check file size of ole compound documents (fix dolphin crash when hovering a MSI file)
-Patch0: bko_251701.v3.patch
-%if 0%{?suse_version} > 1210
Patch1: add_missing_lib.diff
-%endif
+Patch2: strigi-missing-decl.patch
BuildRequires: bison
BuildRequires: boost-devel
BuildRequires: c++_compiler
@@ -85,10 +82,10 @@
%prep
%setup -q
-%patch0 -p1
%if 0%{?suse_version} > 1210
%patch1 -p0
%endif
+%patch2 -p1
%build
%cmake_kde4 -d build
++++++ strigi-0.7.6.tar.bz2 -> strigi-0.7.7.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/ChangeLog new/strigi-0.7.7/ChangeLog
--- old/strigi-0.7.6/ChangeLog 2011-07-26 19:18:23.000000000 +0200
+++ new/strigi-0.7.7/ChangeLog 2011-12-07 21:41:27.000000000 +0100
@@ -1,3 +1,12 @@
+0.7.7 (2011-12-07)
+ - Many nepomuk field name fixes (Sebastian Trueg, Vishesh Handa)
+ - More accurate file format check for tar files (Evgeny Egorochkin, Jos van
+ den Oever)
+ - Better checking of bounds in OLE files. (Jos van den Oever)
+ - Increase performance of default file input stream. (Jos van den Oever)
+ - Check for surrogate pairs in UTF-8 strings. (Jos van den Oever)
+ - Improve ID3 analyzer: skip zero padding before mp3 stream to handle typical LAME output, implement unsynchronization flag handling (Evgeny Egorochkin)
+ - Properly finish child indexing in all analyzers. (Sebastian Trueg)
0.7.6 (2011-07-26)
- Fix build with clucene 2.3 (Alex Merry)
- Use the deprecated function av_metadata_get for libffmpeg (Tirtha Chatterjee)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/CMakeLists.txt new/strigi-0.7.7/libstreamanalyzer/CMakeLists.txt
--- old/strigi-0.7.6/libstreamanalyzer/CMakeLists.txt 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/CMakeLists.txt 2011-12-07 21:28:33.000000000 +0100
@@ -21,7 +21,7 @@
set(LIBSTREAMANALYZER_VERSION_MAJOR 0)
set(LIBSTREAMANALYZER_VERSION_MINOR 7)
-set(LIBSTREAMANALYZER_VERSION_PATCH 6)
+set(LIBSTREAMANALYZER_VERSION_PATCH 7)
set(LIBSTREAMANALYZER_VERSION ${LIBSTREAMANALYZER_VERSION_MAJOR}.${LIBSTREAMANALYZER_VERSION_MINOR}.${LIBSTREAMANALYZER_VERSION_PATCH})
set(LIBSTREAMANALYZER_SOVERSION ${LIBSTREAMANALYZER_VERSION_MAJOR})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/include/strigi/analysisresult.h new/strigi-0.7.7/libstreamanalyzer/include/strigi/analysisresult.h
--- old/strigi-0.7.6/libstreamanalyzer/include/strigi/analysisresult.h 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/include/strigi/analysisresult.h 2011-12-07 21:28:33.000000000 +0100
@@ -138,6 +138,7 @@
AnalysisResult* child();
/**
* Associate a fragment of text with the file.
+ * Subsequent calls to addText are indexed as separate fragments.
*
* @param text a pointer to a fragment of utf8 encoded text
* @param length the length of the fragment
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/arendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/arendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/arendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/arendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -55,10 +55,12 @@
InputStream *s = ar.nextEntry();
if (s && ar.entryInfo().filename.compare("debian-binary") == 0) {
idx.indexChild(ar.entryInfo().filename, ar.entryInfo().mtime, s);
+ idx.finishIndexChild();
s = ar.nextEntry();
}
if (s && ar.entryInfo().filename.compare("control.tar.gz") == 0) {
idx.indexChild(ar.entryInfo().filename, ar.entryInfo().mtime, s);
+ idx.finishIndexChild();
s = ar.nextEntry();
}
if (idx.config().indexArchiveContents()) {
@@ -73,6 +75,7 @@
return 0;
}
idx.indexChild(ar.entryInfo().filename, ar.entryInfo().mtime, s);
+ idx.finishIndexChild();
s = ar.nextEntry();
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/bz2endanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/bz2endanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/bz2endanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/bz2endanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -67,6 +67,8 @@
if (len > 4 && name.substr(len-4)==".bz2") {
name = name.substr(0, len-4);
}
- return idx.indexChild(name, idx.mTime(), &stream);
+ signed char r = idx.indexChild(name, idx.mTime(), &stream);
+ idx.finishIndexChild();
+ return r;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/cpioendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/cpioendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/cpioendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/cpioendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -46,6 +46,7 @@
while (s) {
idx.indexChild(cpio.entryInfo().filename, cpio.entryInfo().mtime,
s);
+ idx.finishIndexChild();
s = cpio.nextEntry();
}
if (cpio.status() == Error) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/flacendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/flacendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/flacendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/flacendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -83,7 +83,6 @@
fields["title"] = r.registerField(titlePropertyName);
albumField = r.registerField(NMM_DRAFT "musicAlbum");
- artistField = r.registerField("http://www.semanticdesktop.org/ontologies/2007/03/22/nco#creator");
fields["genre"] = r.registerField(NMM_DRAFT "genre");
codecField = r.registerField("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#codec");
composerField = r.registerField(NMM_DRAFT "composer");
@@ -104,6 +103,8 @@
fields["copyright"] = r.registerField("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#copyright");
fields["license"] = r.registerField("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#license");
+ fields["discnumber"] = r.registerField(discNumberPropertyName);
+
typeField = r.typeField;
}
@@ -196,6 +197,11 @@
uint32_t nfields = readLittleEndianUInt32(p2);
string albumUri;
+ // in Vorbis comments the "artist" field is used for the performer in modern music
+ // but for the composer in calssical music. Thus, we cache both and make the decision
+ // at the end
+ string artist, performer;
+
// read all the comments
p2 += 4;
for (uint32_t i = 0; p2 < end && i < nfields; ++i) {
@@ -222,11 +228,7 @@
if (iter != factory->fields.end()) {
indexable.addValue(iter->second, value);
} else if(name=="artist") {
- const string artistUri( indexable.newAnonymousUri() );
-
- indexable.addValue(factory->artistField, artistUri);
- indexable.addTriplet(artistUri, typePropertyName, contactClassName);
- indexable.addTriplet(artistUri, fullnamePropertyName, value);
+ artist = value;
} else if(name=="lyrics") {
indexable.addText(value.c_str(),
(int32_t)value.length());
@@ -245,8 +247,6 @@
addStatement(indexable, albumUri, albumGainPropertyName, value);
} else if(name=="replaygain_album_peak") {
addStatement(indexable, albumUri, albumPeakGainPropertyName, value);
- } else if(name=="discno") {
- addStatement(indexable, albumUri, discNumberPropertyName, value);
} else if(name=="composer") {
const string composerUri( indexable.newAnonymousUri() );
@@ -260,11 +260,7 @@
indexable.addTriplet(publisherUri, typePropertyName, contactClassName);
indexable.addTriplet(publisherUri, fullnamePropertyName, value);
} else if(name=="performer") {
- const string performerUri( indexable.newAnonymousUri() );
-
- indexable.addValue(factory->performerField, performerUri);
- indexable.addTriplet(performerUri, typePropertyName, contactClassName);
- indexable.addTriplet(performerUri, fullnamePropertyName, value);
+ performer = value;
}
}
} else {
@@ -273,7 +269,37 @@
}
p2 += size;
}
-
+
+ // we now decide how to store the artist and performer as suggested by the Vorbis comments spec
+ const Strigi::RegisteredField* artistField = 0;
+ const Strigi::RegisteredField* performerField = 0;
+ if (!artist.empty()) {
+ if (!performer.empty()) {
+ artistField = factory->composerField;
+ performerField = factory->performerField;
+ }
+ else {
+ artistField = factory->performerField;
+ }
+ }
+ else if (!performer.empty()) {
+ performerField = factory->performerField;
+ }
+ if (artistField) {
+ const string artistUri( indexable.newAnonymousUri() );
+
+ indexable.addValue(artistField, artistUri);
+ indexable.addTriplet(artistUri, typePropertyName, contactClassName);
+ indexable.addTriplet(artistUri, fullnamePropertyName, artist);
+ }
+ if (performerField) {
+ const string performerUri( indexable.newAnonymousUri() );
+
+ indexable.addValue(performerField, performerUri);
+ indexable.addTriplet(performerUri, typePropertyName, contactClassName);
+ indexable.addTriplet(performerUri, fullnamePropertyName, performer);
+ }
+
if(!albumUri.empty()) {
indexable.addValue(factory->albumField, albumUri);
indexable.addTriplet(albumUri, typePropertyName, albumClassName);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/gzipendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/gzipendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/gzipendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/gzipendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -64,6 +64,8 @@
if (len > 3 && file.substr(len-3) == ".gz") {
file = file.substr(0, len-3);
}
- return idx.indexChild(file, idx.mTime(), &stream);
+ signed char r = idx.indexChild(file, idx.mTime(), &stream);
+ idx.finishIndexChild();
+ return r;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -56,7 +56,7 @@
discNumberPropertyName(
NMM_DRAFT "setNumber"),
discCountPropertyName(
- NMM_DRAFT "setCount"),
+ NMM_DRAFT "setSize"),
musicClassName(
NMM_DRAFT "MusicPiece"),
@@ -290,7 +290,6 @@
titleField = r.registerField(titlePropertyName);
descriptionField = r.registerField(NIE "description");
commentField = r.registerField(NIE "comment");
- artistField = r.registerField(NCO "creator");
albumField = r.registerField(NMM_DRAFT "musicAlbum");
genreField = r.registerField(NMM_DRAFT "genre");
composerField = r.registerField(NMM_DRAFT "composer");
@@ -300,6 +299,7 @@
languageField = r.registerField(NIE "language");
copyrightField = r.registerField(NIE "copyright");
trackNumberField = r.registerField(NMM_DRAFT "trackNumber");
+ discNumberField = r.registerField(discNumberPropertyName);
durationField = r.registerField(NFO "duration");
typeField = r.typeField;
@@ -336,15 +336,18 @@
bool
ID3EndAnalyzer::checkHeader(const char* header, int32_t headersize) const {
const unsigned char* usbuf = (const unsigned char*)header;
- return (headersize>=6)
+ int32_t i;
+
+ for(i=0; (header[i] == '\0') && (i=6+i)
&& (
- (strncmp("ID3", header, 3) == 0 // check that it's ID3
- && usbuf[3] <= 4 // only handle version <= 4
- && header[5] == 0) // we're too dumb too handle flags
+ (strncmp("ID3", header+i, 3) == 0 // check that it's ID3
+ && usbuf[3+i] <= 4 // only handle version <= 4
+ && (usbuf[5+i]&~0x80) == 0) // we're too dumb too handle other flags
||
- ((unsigned char)header[0] == 0xff && ((unsigned char)header[1]&0xfe) == 0xfa
- && (unsigned char)header[2]>>4 != 0xf // MP3 frame header is ok too
- && (((unsigned char)header[2]>>2)&3) != 3)
+ ((unsigned char)header[0+i] == 0xff && ((unsigned char)header[1+i]&0xfe) == 0xfa
+ && (unsigned char)header[2+i]>>4 != 0xf // MP3 frame header is ok too
+ && (((unsigned char)header[2+i]>>2)&3) != 3)
);
}
@@ -371,6 +374,7 @@
signed char
ID3EndAnalyzer::analyze(Strigi::AnalysisResult& indexable, Strigi::InputStream* in) {
+ const int max_padding = 1000;
if(!in)
return -1;
@@ -383,19 +387,20 @@
// read 10 byte header
const char* buf;
- int32_t nread = in->read(buf, 10, 10);
+ int32_t nread = in->read(buf, 10+max_padding, 10+max_padding);
// parse ID3v2* tag
- if (nread == 10 && strncmp("ID3", buf, 3) == 0) { // check for ID3 header
+ if (nread == 10+max_padding && strncmp("ID3", buf, 3) == 0) { // check for ID3 header
bool async = buf[3] >= 4;
+ bool unsync = (buf[5] & 0x80)!=0;
// calculate size from 4 syncsafe bytes
int32_t size = readAsyncSize((unsigned char*)buf+6);
- if (size < 0 || size > 300000)
+ if (size < 0 || size > 5000000)
return -1;
- size += 10+4; // add the size of the ID3 header and MP3 frame header
+ size += 10+4+max_padding; // add the size of the ID3 header, MP3 frame header and possible padding generated by LAME(workaround)
// read the entire tag
in->reset(0);
@@ -406,7 +411,7 @@
found_tag = true;
const char* p = buf + 10;
- buf += size-4;
+ buf += size-4-max_padding;
while (p < buf && *p) {
size = readSize((unsigned char*)p+4, async);
if (size <= 0 || size > (buf-p)-10) {
@@ -418,18 +423,32 @@
uint8_t enc = p[10];
const char *encoding = enc>4 ? encodings[0] : encodings[enc] ;
UTF8Convertor conv(encoding);
+ const char *decoded_value;
+ int32_t decoded_value_size;
+ string deunsyncbuf;
+ if (unsync) {
+ deunsyncbuf.reserve(size-1);
+ for(int32_t i = 0; igenreField, value);
- found_genre = true;
+ // The Genre is stored as (number)
+ if( value[0] == '(' && value[value.length()-1] == ')' ) {
+ //vHanda: Maybe one should check if all the characters in between are digits
+ int genreIndex = atoi( value.substr( 1, value.length()-1 ).c_str() );
+ indexable.addValue(factory->genreField, genres[ genreIndex ]);
+ found_genre = true;
+ }
} else if (strncmp("TLEN", p, 4) == 0) {
indexable.addValue(factory->durationField, value);
} else if (strncmp("TEXT", p, 4) == 0) {
@@ -530,9 +554,7 @@
int dnum;
ins >> dnum;
if (!ins.fail()) {
- ostringstream out;
- out << dnum;
- addStatement(indexable, albumUri, discNumberPropertyName, out.str());
+ indexable.addValue(factory->discNumberField, dnum);
ins.ignore(10,'/');
int dcount;
ins >> dcount;
@@ -550,9 +572,11 @@
// parse MP3 frame header
int bitrateindex, samplerateindex;
- if (((unsigned char)buf[0] == 0xff) && (((unsigned char)buf[1]&0xfe) == 0xfa)
- && ((bitrateindex = ((unsigned char)buf[2]>>4)) != 0xf)
- && ((samplerateindex = (((unsigned char)buf[2]>>2)&3)) != 3 )) { // is this MP3?
+ int i;
+ for(i=0; (buf[i]=='\0') && (i>4)) != 0xf)
+ && ((samplerateindex = (((unsigned char)buf[2+i]>>2)&3)) != 3 )) { // is this MP3?
indexable.addValue(factory->typeField, audioClassName);
// FIXME: no support for VBR :(
@@ -562,7 +586,7 @@
indexable.addValue(factory->bitrateField, bitrate[bitrateindex]);
indexable.addValue(factory->samplerateField, samplerate[samplerateindex]);
indexable.addValue(factory->codecField, "MP3");
- indexable.addValue(factory->channelsField, ((buf[3]>>6) == 3 ? 1:2 ) );
+ indexable.addValue(factory->channelsField, ((buf[3+i]>>6) == 3 ? 1:2 ) );
}
// Parse ID3v1 tag
@@ -583,8 +607,12 @@
if (!found_title && extract_and_trim(buf, 3, 30, s)) {
indexable.addValue(factory->titleField, s);
}
- if (!found_artist && extract_and_trim(buf, 33, 30, s))
- indexable.addValue(factory->artistField, s);
+ if (!found_artist && extract_and_trim(buf, 33, 30, s)) {
+ const string performerUri = indexable.newAnonymousUri();
+ indexable.addValue(factory->performerField, performerUri);
+ indexable.addTriplet(performerUri, typePropertyName, contactClassName);
+ indexable.addTriplet(performerUri, fullnamePropertyName, s);
+ }
if (!found_album && extract_and_trim(buf, 63, 30, s))
addStatement(indexable, albumUri, titlePropertyName, s);
if (!found_year && extract_and_trim(buf, 93, 4, s))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.h new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.h
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.h 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/id3endanalyzer.h 2011-12-07 21:28:33.000000000 +0100
@@ -55,6 +55,7 @@
const Strigi::RegisteredField* genreField;
const Strigi::RegisteredField* copyrightField;
const Strigi::RegisteredField* trackNumberField;
+ const Strigi::RegisteredField* discNumberField;
const Strigi::RegisteredField* durationField;
const Strigi::RegisteredField* typeField;
const Strigi::RegisteredField* bitrateField;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/lzmaendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/lzmaendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/lzmaendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/lzmaendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -64,6 +64,8 @@
if (len > 5 && name.substr(len-5)==".lzma") {
name = name.substr(0, len-5);
}
- return idx.indexChild(name, idx.mTime(), &stream);
+ signed char r = idx.indexChild(name, idx.mTime(), &stream);
+ idx.finishIndexChild();
+ return r;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/odfendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/odfendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/odfendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/odfendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -97,6 +97,7 @@
contentHelper.analyze(idx,s);
} else if (zip.entryInfo().filename.substr(0,9) == "Pictures/") {
idx.indexChild(zip.entryInfo().filename, zip.entryInfo().mtime, s);
+ idx.finishIndexChild();
}
s = zip.nextEntry();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/oleendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/oleendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/oleendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/oleendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -247,6 +247,7 @@
}
SubInputStream thumb(in, in->size()-12);
ar.indexChild(name, 0, &thumb);
+ ar.finishIndexChild();
return true;
}
/**
@@ -264,6 +265,7 @@
SubInputStream sub(in, size);
s << "Pictures/" << pos++;
ar.indexChild(s.str(), 0, &sub);
+ ar.finishIndexChild();
const char* dummy;
while (sub.read(dummy, 1, 0) > 0) {
// skip to the end
@@ -398,6 +400,7 @@
// word1Table.assign(getStreamString(s));
} else {
ar.indexChild(name, ole.entryInfo().mtime, s);
+ ar.finishIndexChild();
}
}
s = ole.nextEntry();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/pdfendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/pdfendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/pdfendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/pdfendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -43,6 +43,7 @@
ostringstream str;
str << n++;
char r = analysisresult->indexChild(str.str(), analysisresult->mTime(), s);
+ analysisresult->finishIndexChild();
// how do we set the error message in this case?
return (r) ?Error :Ok;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/rpmendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/rpmendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/rpmendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/rpmendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -74,6 +74,7 @@
}
idx.indexChild(rpm.entryInfo().filename, rpm.entryInfo().mtime,
s);
+ idx.finishIndexChild();
s = rpm.nextEntry();
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/sdfendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/sdfendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/sdfendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/sdfendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -57,7 +57,8 @@
moleculeCount++;
std::string file = sdf.entryInfo().filename;
idx.indexChild(file, idx.mTime(), s);
-
+ idx.finishIndexChild();
+
s = sdf.nextEntry();
}
if (moleculeCount)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/tarendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/tarendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/tarendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/tarendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -61,6 +61,7 @@
return 0;
}
idx.indexChild(tar.entryInfo().filename, tar.entryInfo().mtime, s);
+ idx.finishIndexChild();
s = tar.nextEntry();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/zipendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/zipendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/endanalyzers/zipendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/endanalyzers/zipendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -60,6 +60,7 @@
return 0;
}
idx.indexChild(zip.entryInfo().filename, zip.entryInfo().mtime, s);
+ idx.finishIndexChild();
s = zip.nextEntry();
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/fieldpropertiesdb.cpp new/strigi-0.7.7/libstreamanalyzer/lib/fieldpropertiesdb.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/fieldpropertiesdb.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/fieldpropertiesdb.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -63,7 +63,7 @@
void loadProperties(const string& dir);
void parseProperties(FILE* f);
void storeProperties(FieldProperties::Private& props);
- void warnIfLocale(const char* name, const string& locale);
+ void warnIfLocale(const char* name, size_t len, const string& locale);
// SAX Callbacks and stuff
map pProperties;
@@ -492,31 +492,33 @@
size_t namelen, const char* value, size_t valuelen) {
bool boolValue;
//Trim leading and trailing whitespace
- size_t trimmedvallen = valuelen - strspn(value, " \t\n");
- string val(value + valuelen - trimmedvallen, trimmedvallen);
- val.erase(val.find_last_not_of(" \t\n") + 1);
-
+ size_t numspaces = strspn(value, " \t\n\r");
+ value += numspaces;
+ valuelen -= numspaces;
+ while (valuelen > 0 && strchr(" \t\n\r", value[valuelen-1])) {
+ valuelen--;
+ }
if (currentDefinition == defProperty) {
if (compare(name, namelen, "about")) {
- warnIfLocale(val.c_str(), currentElementLang);
+ warnIfLocale(value, valuelen, currentElementLang);
if (currentField.uri.size()) {
// FIXME: use logging framework
// cerr << "Uri is already defined for " << currentField.uri << "."
// << endl;
} else {
- currentField.uri.assign(val);
+ currentField.uri.assign(value, valuelen);
}
} else if (compare(name, namelen, "alias")) {
- warnIfLocale(val.c_str(), currentElementLang);
+ warnIfLocale(value, valuelen, currentElementLang);
if (currentField.alias.size()) {
// FIXME: use logging framework
// cerr << "alias is already defined for " << currentField.uri << "."
// << endl;
} else {
- currentField.alias.assign(val);
+ currentField.alias.assign(value, valuelen);
}
} else if (compare(name, namelen, "range")) {
- warnIfLocale(currentField.uri.c_str(), currentElementLang);
+ warnIfLocale(currentField.uri.c_str(), currentField.uri.size(), currentElementLang);
if (currentField.typeuri.size()) {
// FIXME: use logging framework
// cerr << "range is already defined for " << currentField.uri
@@ -534,7 +536,7 @@
// << "] is already defined for " << currentField.uri
// << "." << endl;
} else {
- l.name.assign(val);
+ l.name.assign(value, valuelen);
currentField.localized[currentElementLang] = l;
}
} else if (currentField.name.size()) {
@@ -542,7 +544,7 @@
// cerr << "label is already defined for " << currentField.uri
// << "." << endl;
} else {
- currentField.name.assign(val);
+ currentField.name.assign(value, valuelen);
}
} else if (compare(name, namelen, "comment")) {
if (currentElementLang.size()) {
@@ -554,7 +556,7 @@
// << "] is already defined for " << currentField.uri
// << "." << endl;
} else {
- l.description.assign(val);
+ l.description.assign(value, valuelen);
currentField.localized[currentElementLang] = l;
}
} else if (currentField.description.size()) {
@@ -562,7 +564,7 @@
// cerr << "comment is already defined for " << currentField.uri
// << "." << endl;
} else {
- currentField.description.assign(val);
+ currentField.description.assign(value, valuelen);
}
} else if (compare(name, namelen, "subPropertyOf")) {
currentField.parentUris.push_back(currentElementResource);
@@ -600,14 +602,14 @@
}
} else if (currentDefinition == defClass) {
if (compare(name, namelen, "about")) {
- warnIfLocale(val.c_str(), currentElementLang);
+ warnIfLocale(value, valuelen, currentElementLang);
if (currentClass.uri.size()) {
// FIXME: use logging framework
// cerr << "Uri is already defined for " << currentClass.uri
// << "." << endl;
}
} else {
- currentClass.uri.assign(val);
+ currentClass.uri.assign(value, valuelen);
}
} else if (compare(name, namelen, "label")) {
if (currentElementLang.size()) {
@@ -619,7 +621,7 @@
// << "] is already defined for " << currentClass.uri
// << "." << endl;
} else {
- l.name.assign(val);
+ l.name.assign(value, valuelen);
currentClass.localized[currentElementLang] = l;
}
} else if (currentClass.name.size()) {
@@ -627,7 +629,7 @@
// cerr << "label is already defined for " << currentClass.uri
// << "." << endl;
} else {
- currentClass.name.assign(val);
+ currentClass.name.assign(value, valuelen);
}
} else if (compare(name, namelen, "comment")) {
if (currentElementLang.size()) {
@@ -639,7 +641,7 @@
// << "] is already defined for " << currentClass.uri
// << "." << endl;
} else {
- l.description.assign(val);
+ l.description.assign(value, valuelen);
currentClass.localized[currentElementLang] = l;
}
} else if (currentField.description.size()) {
@@ -647,7 +649,7 @@
// cerr << "comment is already defined for " << currentClass.uri
// << "." << endl;
} else {
- currentClass.description.assign(val);
+ currentClass.description.assign(value, valuelen);
}
} else if(compare(name, namelen, "subClassOf")) {
currentClass.parentUris.push_back(currentElementResource);
@@ -755,7 +757,7 @@
}
void
-FieldPropertiesDb::Private::warnIfLocale(const char* name, const string& locale) {
+FieldPropertiesDb::Private::warnIfLocale(const char* name, size_t len, const string& locale) {
if (locale.size()) {
// FIXME: use logging framework
// cerr << "Warning: you cannot define a locale for the resource URI "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/pdf/pdfparser.cpp new/strigi-0.7.7/libstreamanalyzer/lib/pdf/pdfparser.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/pdf/pdfparser.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/pdf/pdfparser.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -18,7 +18,6 @@
* Boston, MA 02110-1301, USA.
*/
#include "pdfparser.h"
-#include
#include
#include
#include
@@ -35,12 +34,13 @@
PdfParser::read(int32_t min, int32_t max) {
int32_t off = (int32_t)(pos-start);
int32_t d = (int32_t)(stream->position() - bufferStart);
- bufferStart += off;
+ min += d;
+ if (max > 0) max += d;
stream->reset(bufferStart);
int32_t n = stream->read(start, min, max);
// printf("objstart %i %i\n", d, n);
if (n < min) return stream->status();
- pos = start;
+ pos = start + off;
end = start + n;
return Ok;
}
@@ -283,10 +283,9 @@
m_error.assign(stream->error());
return r;
}
-
- if (r == Eof)
- return r;
-
+ if (r == Eof) {
+ return r;
+ }
const char *s = start + p;
lastOperator.assign(s, pos-s);
if (lastOperator == "TJ" || lastOperator == "Tj") {
@@ -361,25 +360,20 @@
if (*pos == '\r') pos++;
if (*pos != '\n') return Error;
pos++;
-
+ if (length == -1) {
+ // the field Length is required
+ return Error;
+ }
// read stream until 'endstream'
int64_t p = bufferStart + pos-start;
if (p != stream->reset(p)) return Error;
// fprintf(stderr, "filter: %s\n", filter.c_str());
// fprintf(stderr, "type: %s %i\n", type.c_str(), streamcount);
// printf("position: %lli length %i\n", p, length);
- if (length == -1) {
- StringTerminatedSubStream sub(stream, "endstream");
- if (handleSubStream(&sub, type, offset, numberofobjects, hasfilter,
- filter) != Eof) {
- return Error;
- }
- } else {
- SubInputStream sub(stream, length);
- if (handleSubStream(&sub, type, offset, numberofobjects, hasfilter,
- filter) != Eof) {
- return Error;
- }
+ SubInputStream sub(stream, length);
+ if (handleSubStream(&sub, type, offset, numberofobjects, hasfilter,
+ filter) != Eof) {
+ return Error;
}
// After reading the substream the pointers to the buffer are invalid.
// Reset the buffer to the current stream position
@@ -390,7 +384,6 @@
if (skipWhitespaceOrComment() != Ok) return Error;
// printf("hi %i %.*s\n", pos-start, 10, pos);
if (skipKeyword("endstream", 9) != Ok) return Error;
-// printf("endstream\n");
streamcount++;
}
// printf("endDictionary %p\n", this);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/lib/throughanalyzers/oggthroughanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/lib/throughanalyzers/oggthroughanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/lib/throughanalyzers/oggthroughanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/lib/throughanalyzers/oggthroughanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -49,7 +49,6 @@
OggThroughAnalyzerFactory::registerFields(FieldRegister& r) {
fields["title"] = r.registerField(titlePropertyName);
albumField = r.registerField(NMM_DRAFT "musicAlbum");
- artistField = r.registerField("http://www.semanticdesktop.org/ontologies/2007/03/22/nco#creator");
fields["genre"] = r.registerField(NMM_DRAFT "genre");
fields["codec"] = r.registerField("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#codec");
composerField = r.registerField(NMM_DRAFT "composer");
@@ -125,6 +124,12 @@
return in;
}
uint32_t nfields = readLittleEndianUInt32(p2);
+
+ // in Vorbis comments the "artist" field is used for the performer in modern music
+ // but for the composer in calssical music. Thus, we cache both and make the decision
+ // at the end
+ string artist, performer;
+
// read all the comments
p2 += 4;
for (uint32_t i = 0; p2 < end && i < nfields; ++i) {
@@ -148,12 +153,8 @@
if (iter != factory->fields.end()) {
indexable->addValue(iter->second, value);
} else if(name=="artist") {
- string artistUri = indexable->newAnonymousUri();
-
- indexable->addValue(factory->artistField, artistUri);
- indexable->addTriplet(artistUri, typePropertyName, contactClassName);
- indexable->addTriplet(artistUri, fullnamePropertyName, value);
- } else if(name=="album") {
+ artist = value;
+ } else if(name=="album") {
string albumUri = indexable->newAnonymousUri();
indexable->addValue(factory->albumField, albumUri);
@@ -166,11 +167,7 @@
indexable->addTriplet(composerUri, typePropertyName, contactClassName);
indexable->addTriplet(composerUri, fullnamePropertyName, value);
} else if(name=="performer") {
- string performerUri = indexable->newAnonymousUri();
-
- indexable->addValue(factory->performerField, performerUri);
- indexable->addTriplet(performerUri, typePropertyName, contactClassName);
- indexable->addTriplet(performerUri, fullnamePropertyName, value);
+ performer = value;
}
}
} else {
@@ -179,6 +176,37 @@
}
p2 += size;
}
+
+ // we now decide how to store the artist and performer as suggested by the Vorbis comments spec
+ const Strigi::RegisteredField* artistField = 0;
+ const Strigi::RegisteredField* performerField = 0;
+ if (!artist.empty()) {
+ if (!performer.empty()) {
+ artistField = factory->composerField;
+ performerField = factory->performerField;
+ }
+ else {
+ artistField = factory->performerField;
+ }
+ }
+ else if (!performer.empty()) {
+ performerField = factory->performerField;
+ }
+ if (artistField) {
+ const string artistUri( indexable->newAnonymousUri() );
+
+ indexable->addValue(artistField, artistUri);
+ indexable->addTriplet(artistUri, typePropertyName, contactClassName);
+ indexable->addTriplet(artistUri, fullnamePropertyName, artist);
+ }
+ if (performerField) {
+ const string performerUri( indexable->newAnonymousUri() );
+
+ indexable->addValue(performerField, performerUri);
+ indexable->addTriplet(performerUri, typePropertyName, contactClassName);
+ indexable->addTriplet(performerUri, fullnamePropertyName, performer);
+ }
+
// set the "codec" value
indexable->addValue(factory->fields.find("codec")->second, "Ogg/Vorbis");
indexable->addValue(factory->fields.find("type")->second, musicClassName);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/endplugins/ffmpegendanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/endplugins/ffmpegendanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/endplugins/ffmpegendanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/endplugins/ffmpegendanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -156,7 +156,7 @@
copyrightPropertyName =
NIE "copyright",
albumPropertyName =
- NMM_DRAFT "MusicAlbum",
+ NMM_DRAFT "musicAlbum",
sampleratePropertyName =
NFO "sampleRate",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/eventplugins/riffeventanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/eventplugins/riffeventanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/eventplugins/riffeventanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/eventplugins/riffeventanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -25,6 +25,11 @@
#include
#include <stack>
#include <iostream>
+#include "rdfnamespaces.h"
+
+const std::string
+ videoClassName( NFO "Video"),
+ audioClassName( NFO "Audio");
namespace Strigi {
class RegisteredField;
@@ -83,6 +88,7 @@
const char* name() const {
return "RiffEventAnalyzer";
}
+ const Strigi::RegisteredField* typeField;
const Strigi::RegisteredField* lengthField;
const Strigi::RegisteredField* resolutionHeightField;
const Strigi::RegisteredField* resolutionWidthField;
@@ -154,6 +160,12 @@
inAudioStream = true;
}
+ // Add the correct type
+ if( inAudioStream )
+ analysisresult->addValue(factory->typeField, audioClassName);
+ else
+ analysisresult->addValue(factory->typeField, videoClassName);
+
return true;
}
const char*
@@ -211,7 +223,7 @@
a->addValue(f->sampleRateField, readLittleEndianUInt32(c+4));
bytes_per_second = readLittleEndianUInt32(c+8);
a->addValue(f->sampleSizeField, readLittleEndianUInt16(c+14));
-
+ a->addValue(factory->typeField, audioClassName);
return true;
}
void
@@ -374,24 +386,25 @@
}
void
RiffEventAnalyzerFactory::registerFields(Strigi::FieldRegister& reg) {
+ typeField = reg.typeField;
sampleSizeField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/nfo#bitsPerSample");
+ NFO"bitsPerSample");
sampleRateField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#sampleRate");
+ NFO"sampleRate");
channelsField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#channels");
+ NFO"channels");
lengthField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#duration");
+ NFO"duration");
resolutionHeightField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height");
+ NFO"height");
resolutionWidthField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width");
+ NFO"width");
frameRateField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#frameRate");
+ NFO"frameRate");
videoCodecField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#codec");
+ NFO"codec");
audioCodecField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#codec");
+ NFO"codec");
addField(sampleSizeField);
addField(sampleRateField);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/lineplugins/cpplineanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/lineplugins/cpplineanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/lineplugins/cpplineanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/lineplugins/cpplineanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -95,13 +95,17 @@
size_t pos2 = include1.find("<",0);
size_t pos3 = include1.find(">",0);
if((pos2 != string::npos) && (pos3 != string::npos)){
- analysisResult->addValue(factory->includeField, include1.substr(1+pos2,((pos3-1)-pos2)));
+ // We cannot use nie:depends here since it has a range of nie:DataObject and the includes cannot be represented as data objects
+ // includes will only be resolved at compile time.
+ //analysisResult->addValue(factory->includeField, include1.substr(1+pos2,((pos3-1)-pos2)));
includes++;
}
size_t pos4 = include1.find("\"",0);
size_t pos5 = include1.find("\"", pos4+1);
if((pos4 != string::npos) && (pos5 != string::npos)){
- analysisResult->addValue(factory->includeField, include1.substr(1+pos4,((pos5-1)-pos4)));
+ // FIXME: we need a useful new property or new DataObject type to describe a C header
+ // which does not have an absolute path.
+ //analysisResult->addValue(factory->includeField, include1.substr(1+pos4,((pos5-1)-pos4)));
includes++;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/authroughanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/authroughanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/authroughanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/authroughanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -23,7 +23,7 @@
#include
#include
#include
-#include "../../lib/rdfnamespaces.h"
+#include "rdfnamespaces.h"
using namespace std;
using namespace Strigi;
@@ -35,13 +35,13 @@
void
AuThroughAnalyzerFactory::registerFields(FieldRegister& reg) {
lengthField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#duration");
+ NFO"duration");
sampleRateField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#sampleRate");
+ NFO"sampleRate");
channelsField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#channels");
+ NFO"channels");
sampleBitDepthField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/nfo#bitsPerSample");
+ NFO"bitsPerSample");
sampleDataTypeField = reg.registerField(
"http://freedesktop.org/standards/xesam/1.0/core#audioSampleDataType");
typeField = reg.typeField;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -44,12 +44,14 @@
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#colorDepth");
colorCountField = reg.registerField(
"http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#colorCount");
+ typeField = reg.typeField;
addField(widthField);
addField(heightField);
addField(numberField);
addField(bitsPerPixelField);
addField(colorCountField);
+ addField(typeField);
}
// Analyzer
@@ -144,6 +146,8 @@
//FIXME: either get rid of this or replace with NIE equivalent
//analysisResult->addValue( factory->numberField, ico_count );
+ analysisResult->addValue( factory->typeField, "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#RasterImage" );
+
analysisResult->addValue( factory->widthField, icoe_width );
analysisResult->addValue( factory->heightField, icoe_height );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.h new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.h
--- old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.h 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/icothroughanalyzer.h 2011-12-07 21:28:33.000000000 +0100
@@ -53,6 +53,7 @@
const Strigi::RegisteredField* heightField;
const Strigi::RegisteredField* bitsPerPixelField;
const Strigi::RegisteredField* colorCountField;
+ const Strigi::RegisteredField* typeField;
const char* name() const {
return "IcoThroughAnalyzer";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/sidthroughanalyzer.cpp new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/sidthroughanalyzer.cpp
--- old/strigi-0.7.6/libstreamanalyzer/plugins/throughplugins/sidthroughanalyzer.cpp 2011-07-26 19:12:39.000000000 +0200
+++ new/strigi-0.7.7/libstreamanalyzer/plugins/throughplugins/sidthroughanalyzer.cpp 2011-12-07 21:28:33.000000000 +0100
@@ -24,6 +24,7 @@
#include
#include
#include
+#include "rdfnamespaces.h"
#include <cstring>
#include <iostream>
@@ -36,15 +37,15 @@
void
SidThroughAnalyzerFactory::registerFields(FieldRegister& reg) {
titleField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#title");
+ NIE"title");
artistField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nco#creator");
+ NMM_DRAFT"performer");
trackNumberField = reg.registerField(
- "http://freedesktop.org/standards/xesam/1.0/core#albumTrackCount");
+ NMM_DRAFT"albumTrackCount");
versionField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#version");
+ NIE"version");
copyrightField = reg.registerField(
- "http://www.semanticdesktop.org/ontologies/2007/01/19/nie#copyright");
+ NIE"copyright");
addField(titleField);
addField(artistField);
@@ -143,10 +144,10 @@
analysisResult->addValue(factory->artistField, artistUri);
analysisResult->addTriplet(artistUri,
- "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nco#Contact");
+ RDF"type",
+ NCO"Contact");
analysisResult->addTriplet(artistUri,
- "http://www.semanticdesktop.org/ontologies/2007/03/22/nco#fullname",
+ NCO"fullname",
artist);
analysisResult->addValue( factory->titleField, title );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/CMakeLists.txt new/strigi-0.7.7/libstreams/CMakeLists.txt
--- old/strigi-0.7.6/libstreams/CMakeLists.txt 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/CMakeLists.txt 2011-12-07 21:25:23.000000000 +0100
@@ -14,7 +14,7 @@
# libstreams defines the definitions shared by the Strigi projects
set(STRIGI_VERSION_MAJOR 0 CACHE INT "Major Strigi version number" FORCE)
set(STRIGI_VERSION_MINOR 7 CACHE INT "Minor Strigi version number" FORCE)
-set(STRIGI_VERSION_PATCH 6 CACHE INT "Release Strigi version number" FORCE)
+set(STRIGI_VERSION_PATCH 7 CACHE INT "Release Strigi version number" FORCE)
set(STRIGI_VERSION_STRING "${STRIGI_VERSION_MAJOR}.${STRIGI_VERSION_MINOR}.${STRIGI_VERSION_PATCH}" CACHE STRING "Strigi version string" FORCE)
set(LIBSTREAMS_VERSION ${STRIGI_VERSION_STRING})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/include/strigi/streambuffer.h new/strigi-0.7.7/libstreams/include/strigi/streambuffer.h
--- old/strigi-0.7.6/libstreams/include/strigi/streambuffer.h 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/include/strigi/streambuffer.h 2011-12-07 21:25:23.000000000 +0100
@@ -171,6 +171,13 @@
// still not enough space, we have to allocate more
// printf("resize %i %i %i %i %i\n", avail, needed, space, size + needed - space, size);
+ if (size > needed - space) {
+ // double the buffer size
+ space += size;
+ setSize(2 * size);
+ return space;
+ }
+ // just allocate what is needed
setSize(size + needed - space);
return needed;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/CMakeLists.txt new/strigi-0.7.7/libstreams/lib/CMakeLists.txt
--- old/strigi-0.7.6/libstreams/lib/CMakeLists.txt 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/CMakeLists.txt 2011-12-07 21:25:23.000000000 +0100
@@ -58,7 +58,7 @@
target_link_libraries(streams ${ZLIB_LIBRARIES} ${BZIP2_LIBRARIES} ${ICONV_LIBRARIES})
install(TARGETS streams EXPORT StreamsExport
LIBRARY DESTINATION ${LIB_DESTINATION}
- RUNTIME DESTINATION bin
+ RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
ARCHIVE DESTINATION ${LIB_DESTINATION}
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/dataeventinputstream.cpp new/strigi-0.7.7/libstreams/lib/dataeventinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/dataeventinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/dataeventinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -44,6 +44,11 @@
return -2;
}
if (nread > 0) {
+ // ignore bytes that might have been added since the file size was
+ // determined
+ if (m_size != -1 && m_position + nread > m_size) {
+ nread = m_size - m_position;
+ }
m_position += nread;
// value of -1 for totalread means data should not be reported anymore
if (totalread != -1 && totalread < m_position) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/gzipinputstream.cpp new/strigi-0.7.7/libstreams/lib/gzipinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/gzipinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/gzipinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -43,7 +43,7 @@
}
bool
GZipInputStream::checkHeader(const char* data, int32_t datasize) {
- return datasize>2 && data[0]==0x1f && data[1] == 0x8b;
+ return datasize>2 && (unsigned char)data[0]==0x1f && (unsigned char)data[1]==0x8b;
}
GZipInputStream::Private::Private(GZipInputStream* gi,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/mailinputstream.cpp new/strigi-0.7.7/libstreams/lib/mailinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/mailinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/mailinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -355,7 +355,7 @@
// parse the header and store the imporant header fields
p->readHeader();
if (m_status != Ok) {
- fprintf(stderr, "no valid header\n");
+// fprintf(stderr, "no valid header\n");
return;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/oleinputstream.cpp new/strigi-0.7.7/libstreams/lib/oleinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/oleinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/oleinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -53,6 +53,7 @@
int32_t nextSmallBlock(int32_t);
const char* getCurrentSmallBlock();
InputStream* nextEntry();
+ bool readInt32(int32_t pos, int32_t& val);
};
namespace {
@@ -150,6 +151,16 @@
OleInputStream::OleInputStream(InputStream* input) :SubStreamProvider(input),
p(new Private(this, input)) {
}
+bool
+OleInputStream::Private::readInt32(int32_t offset, int32_t& val) {
+ if (offset < 0 || offset + 4 >= size) {
+ stream->m_status = Error;
+ stream->m_error = string("pointer out of range.");
+ return false;
+ }
+ val = readLittleEndianInt32(data + offset);
+ return true;
+}
OleInputStream::Private::Private(OleInputStream* s, InputStream* input)
:entrystream(new OleEntryStream(this)), stream(s) {
currentTableBlock = -1;
@@ -177,7 +188,8 @@
batIndex.reserve(nBat);
data += 76;
for (int i = 0; i < ::min(109, nBat); ++i) {
- int32_t p = readLittleEndianInt32(data+4*i);
+ int32_t p;
+ if (!readInt32(4*i, p)) { return; }
batIndex.push_back(p);
if (p > max) max = p;
}
@@ -205,10 +217,12 @@
xBatOffset = 512 + 512 * xBatOffset;
for (int j = 0; j < nXBat; ++j) {
for (int i = 0; i<127 && (int)batIndex.size() < nBat; ++i) {
- int32_t p = readLittleEndianInt32(data + 4*i + xBatOffset);
+ int32_t p;
+ if (!readInt32(4*i + xBatOffset, p)) { return; }
batIndex.push_back(p);
}
- xBatOffset = 512+512*readLittleEndianInt32(data + 508 + xBatOffset);
+ if (!readInt32(508 + xBatOffset, xBatOffset)) { return; }
+ xBatOffset = 512 + 512 * xBatOffset;
}
// print all bat blocks
@@ -239,12 +253,7 @@
sbatbIndex.reserve(sbatIndex.size()*16);
// read the info for the root entry
currentDataBlock = (1+ptOffset)*512 + 0x74;
- if (currentDataBlock + 4 > size) {
- stream->m_status = Error;
- stream->m_error = "Invalid header.";
- return;
- }
- currentDataBlock = readLittleEndianInt32(data + currentDataBlock);
+ if (!readInt32(currentDataBlock, currentDataBlock)) { return; }
while (currentDataBlock >= 0 && sbatbIndex.size() < 16000) {
sbatbIndex.push_back(currentDataBlock);
currentDataBlock = nextBlock(currentDataBlock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/skippingfileinputstream.cpp new/strigi-0.7.7/libstreams/lib/skippingfileinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/skippingfileinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/skippingfileinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -90,9 +90,20 @@
m_status = Error;
return -2; // error
}
+ // take a decent buffersize that can hold the request
int32_t n = max(_min, _max);
+ if (_max <= 0) {
+ n = max(1024, max(buffersize, _min));
+ }
if (n > buffersize) {
+ if (_max <= 0) {
+ n = max(n, 2 * buffersize);
+ if (m_size != -1 && n > m_size - m_position) {
+ n = m_size - m_position + 1;
+ }
+ }
buffer = (char*)realloc(buffer, n);
+ buffersize = n;
}
int32_t nr = (int32_t)fread(buffer, 1, n, file);
m_position = ftell(file);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/tarinputstream.cpp new/strigi-0.7.7/libstreams/lib/tarinputstream.cpp
--- old/strigi-0.7.6/libstreams/lib/tarinputstream.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/tarinputstream.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -50,10 +50,12 @@
}
const char*
TarInputStream::readHeader() {
- // read the first 500 characters
+ // read the first 512 characters
const char *begin;
int32_t nread = m_input->read(begin, 512, 512);
- if (nread != 512) {
+ if (nread == 0 || m_input->status() == Eof) {
+ m_status = Eof;
+ } else if (nread != 512) {
m_status = Error;
}
return begin;
@@ -68,11 +70,19 @@
// is ended by a \0, after this \0 only \0 is allowed
int p = 0;
while (p < 100 && h[p] != '\0') ++p;
+
while (p < 100) {
if (h[p++] != '\0') {
return false;
}
}
+ bool justZeroes = true;
+ while (p < 256 && justZeroes) {
+ justZeroes = h[p++] == 0;
+ }
+ if (justZeroes) {
+ return false;
+ }
// check for field values that should be '\0' for the header to be a
// tar header. Two positions are also accepted if they are ' ' because they
@@ -82,8 +92,38 @@
void
TarInputStream::parseHeader() {
const char *hb;
+
hb = readHeader();
- if (m_status) return;
+ if (m_status) {
+ m_status = Error;
+ m_error = "Premature end of file.";
+ return;
+ }
+ // a tar file should end with at least 2 blocks of '\0' bytes
+ bool justZeroes = true;
+ int i, numZeroBlocks = 0;
+ for (i = 0; i < 512 && justZeroes; ++i) {
+ justZeroes = hb[i] == 0;
+ }
+ while (justZeroes) {
+ numZeroBlocks++;
+ hb = readHeader();
+ if (numZeroBlocks == 1 && m_status == Eof) {
+ m_status = Error;
+ m_error = "Premature end of file.";
+ return;
+ } else if (m_status == Error || m_status == Eof) {
+ return;
+ }
+ for (i = 0; i < 512 && justZeroes; ++i) {
+ justZeroes = hb[i] == 0;
+ }
+ if (!justZeroes) {
+ m_status = Error;
+ m_error = "Invalid tar file.";
+ return;
+ }
+ }
// check for terminators ('\0') on the first couple of fields
if (!checkHeader(hb, 257)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/libstreams/lib/textutils.cpp new/strigi-0.7.7/libstreams/lib/textutils.cpp
--- old/strigi-0.7.6/libstreams/lib/textutils.cpp 2011-07-26 19:12:35.000000000 +0200
+++ new/strigi-0.7.7/libstreams/lib/textutils.cpp 2011-12-07 21:25:23.000000000 +0100
@@ -43,7 +43,9 @@
val = (val << 6) + (c & 0x3F);
if (--nb == 0) {
// check the range of the utf 8 value
- if (val == 0xFFFE || val == 0xFFFF) { // Noncharacters
+ if (val == 0xFFFE || val == 0xFFFF // Noncharacters
+ // surrogate values not allowed in UTF-8
+ || (val >= 0xD800 && val <= 0xDFFF)) {
return false;
}
}
@@ -97,7 +99,9 @@
val = (val << 6) + (c & 0x3F);
if (--nb == 0) {
// check the range of the utf 8 value
- if (val == 0xFFFE || val == 0xFFFF) { // Noncharacters
+ if (val == 0xFFFE || val == 0xFFFF // Noncharacters
+ // surrogate values not allowed in UTF-8
+ || (val >= 0xD800 && val <= 0xDFFF)) {
// nb is 0 to signal an error
return p;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/strigiclient/lib/CMakeLists.txt new/strigi-0.7.7/strigiclient/lib/CMakeLists.txt
--- old/strigi-0.7.6/strigiclient/lib/CMakeLists.txt 2011-06-15 09:43:18.000000000 +0200
+++ new/strigi-0.7.7/strigiclient/lib/CMakeLists.txt 2011-10-01 09:58:17.000000000 +0200
@@ -1,4 +1,6 @@
if(NOT WIN32)
add_subdirectory(htmlgui)
endif(NOT WIN32)
-add_subdirectory(searchclient)
+if(QT4_FOUND)
+ add_subdirectory(searchclient)
+endif(QT4_FOUND)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/strigi-0.7.6/strigiutils/bin/xmlindexer/CMakeLists.txt new/strigi-0.7.7/strigiutils/bin/xmlindexer/CMakeLists.txt
--- old/strigi-0.7.6/strigiutils/bin/xmlindexer/CMakeLists.txt 2011-04-23 13:00:17.000000000 +0200
+++ new/strigi-0.7.7/strigiutils/bin/xmlindexer/CMakeLists.txt 2011-08-16 14:23:16.000000000 +0200
@@ -1,11 +1,11 @@
-add_library(librdfindexer
+add_library(librdfindexer STATIC
rdfindexer.cpp
tagmapping.cpp
rdfindexwriter.cpp
)
target_link_libraries(librdfindexer ${LIBSTREAMANALYZER_LIBRARIES} ${LIBSTREAMS_LIBRARIES})
-add_library(libxmlindexer
+add_library(libxmlindexer STATIC
xmlindexer.cpp
tagmapping.cpp
xmlindexwriter.cpp
++++++ strigi-missing-decl.patch ++++++
Index: strigi-0.7.7/strigidaemon/bin/daemon/eventlistener/eventlistenerqueue.cpp
===================================================================
--- strigi-0.7.7.orig/strigidaemon/bin/daemon/eventlistener/eventlistenerqueue.cpp
+++ strigi-0.7.7/strigidaemon/bin/daemon/eventlistener/eventlistenerqueue.cpp
@@ -27,9 +27,7 @@
#include <iostream>
#include
-#if defined(__SUNPRO_CC)
#include
-#endif
using namespace std;
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org