signed char LzmaEndAnalyzer::analyze(AnalysisResult& idx, InputStream* in) { if(!in) return -1; LZMAInputStream stream(in); // since this is lzma file, its likely that it contains a tar file const char* start = 0; int32_t nread = stream.read(start, 1024, 0); if (nread < -1) { fprintf(stderr, "Error reading lzma: %s\n", stream.error()); return -2; } idx.addValue(factory->typeField, "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Archive"); stream.reset(0); if (TarInputStream::checkHeader(start, nread)) { return TarEndAnalyzer::staticAnalyze(idx, &stream); } else { std::string name = idx.fileName(); string::size_type len = name.length(); if (len > 5 && name.substr(len-5)==".lzma") { name = name.substr(0, len-5); } return idx.indexChild(name, idx.mTime(), &stream); } }
signed char GZipEndAnalyzer::analyze(AnalysisResult& idx, InputStream* in) { if(!in) return -1; GZipInputStream stream(in); // since this is gzip file, its likely that it contains a tar file const char* start = 0; int32_t nread = stream.read(start, 1024, 0); if (nread < -1) { printf("Error reading gzip: %s\n", stream.error()); return -2; } idx.addValue(factory->typeField, "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#Archive"); stream.reset(0); if (TarInputStream::checkHeader(start, nread)) { return TarEndAnalyzer::staticAnalyze(idx, &stream); } else { std::string file = idx.fileName(); size_t len = file.length(); if (len > 3 && file.substr(len-3) == ".gz") { file = file.substr(0, len-3); } signed char r = idx.indexChild(file, idx.mTime(), &stream); idx.finishIndexChild(); return r; } }