Репозитории ALT
S: | 0.99.5-alt6 |
5.1: | 0.10.7-alt1 |
4.1: | 0.8.17-alt1 |
4.0: | 0.8.12-alt1 |
Другие репозитории
Upstream: | 0.8.15 |
Группа :: Работа с текстами
Пакет: fbreader
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: fbreader-0.99.5-alt-crash.patch
Скачать
Скачать
diff --git a/FBReader/fbreader/src/fbreader/FBReader.cpp b/FBReader/fbreader/src/fbreader/FBReader.cpp
index 40ea5e2..275966b 100644
--- a/FBReader/fbreader/src/fbreader/FBReader.cpp
+++ b/FBReader/fbreader/src/fbreader/FBReader.cpp
@@ -19,6 +19,9 @@
#include <queue>
+#include <cstdlib>
+#include <memory>
+
#include <ZLibrary.h>
#include <ZLFile.h>
#include <ZLDialogManager.h>
@@ -64,6 +67,26 @@ static const std::string OPTIONS = "Options";
const std::string FBReader::PageIndexParameter = "pageIndex";
+static std::string getAbsolutePath(std::string filename)
+{
+ std::string archive_path;
+
+ std::string::size_type archive_delim = filename.find(BooksDBQuery::ArchiveEntryDelimiter);
+ if (archive_delim != std::string::npos)
+ {
+ archive_path = filename.substr(archive_delim);
+ filename = filename.substr(0, archive_delim);
+ }
+
+ std::unique_ptr<char, decltype(std::free)*> resolved_path(realpath(filename.c_str(), NULL), std::free);
+ if (!resolved_path)
+ {
+ return filename + archive_path;
+ }
+
+ return std::string(resolved_path.get()) + archive_path;
+}
+
class OpenFileHandler : public ZLMessageHandler {
public:
@@ -180,7 +203,7 @@ void FBReader::initWindow() {
if (!myBookAlreadyOpen) {
shared_ptr<Book> book;
if (!myBookToOpen.empty()) {
- createBook(ZLFile(myBookToOpen), book);
+ createBook(ZLFile(getAbsolutePath(myBookToOpen)), book);
}
if (book.isNull()) {
const BookList &books = Library::Instance().recentBooks();