diff --git a/src/zimlib/src/dirent.cpp b/src/zimlib/src/dirent.cpp index 0da44d8..df1c9db 100644 --- a/src/zimlib/src/dirent.cpp +++ b/src/zimlib/src/dirent.cpp @@ -18,10 +18,10 @@ */ #include +#include +#include #include "log.h" #include -#include -#include log_define("zim.dirent") diff --git a/src/zimlib/src/file.cpp b/src/zimlib/src/file.cpp index 497887d..2edbd0c 100644 --- a/src/zimlib/src/file.cpp +++ b/src/zimlib/src/file.cpp @@ -38,6 +38,13 @@ namespace zim return r.first ? *r.second : Article(); } + Article File::getArticleByUrl(const std::string& url) + { + log_trace("File::getArticle(\"" << url << ')'); + std::pair r = findx(url); + return r.first ? *r.second : Article(); + } + Article File::getArticleByTitle(size_type idx) { return Article(*this, impl->getIndexByTitle(idx)); @@ -113,6 +120,13 @@ namespace zim return std::pair(false, const_iterator(this, c < 0 ? l : u)); } + std::pair File::findx(const std::string& url) + { + if (url.size() < 2 || url[1] != '/') + return std::pair(false, const_iterator()); + return findx(url[0], url.substr(2)); + } + std::pair File::findxByTitle(char ns, const std::string& title) { log_debug("find article by title " << ns << " \"" << title << "\", in file \"" << getFilename() << '"'); @@ -164,6 +178,9 @@ namespace zim File::const_iterator File::find(char ns, const std::string& url) { return findx(ns, url).second; } + File::const_iterator File::find(const std::string& url) + { return findx(url).second; } + File::const_iterator File::findByTitle(char ns, const std::string& title) { return findxByTitle(ns, title).second; } diff --git a/src/zimlib/src/fstream.cpp b/src/zimlib/src/fstream.cpp index 3236d3c..9be58cc 100644 --- a/src/zimlib/src/fstream.cpp +++ b/src/zimlib/src/fstream.cpp @@ -25,6 +25,9 @@ #include #include #include +#include +#include +#include log_define("zim.fstream") @@ -61,7 +64,11 @@ int streambuf::sync() streambuf::streambuf(const char* fname, unsigned bufsize) : buffer(bufsize), +#ifdef HAVE_OPEN64 fd(::open64(fname, 0)) +#else + fd(::open(fname, 0)) +#endif { log_debug("streambuf for " << fname << " with " << bufsize << " bytes"); diff --git a/src/zimlib/src/lzmastream.cpp b/src/zimlib/src/lzmastream.cpp index f1e7689..9e76e25 100644 --- a/src/zimlib/src/lzmastream.cpp +++ b/src/zimlib/src/lzmastream.cpp @@ -18,6 +18,7 @@ */ #include +#include #include "log.h" #include #include diff --git a/src/zimlib/src/unlzmastream.cpp b/src/zimlib/src/unlzmastream.cpp index 4f5555e..6b7aea2 100644 --- a/src/zimlib/src/unlzmastream.cpp +++ b/src/zimlib/src/unlzmastream.cpp @@ -18,7 +18,8 @@ */ -#include "zim/unlzmastream.h" +#include +#include #include "log.h" #include "config.h" #include