Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37404970
en ru br
ALT Linux repos
S:0.99.5-alt6
5.0: 0.10.7-alt0.M50.1
4.1: 0.8.17-alt1
4.0: 0.8.12-alt1

Other repositories
Upstream:0.8.15

Group :: Text tools
RPM: fbreader

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: fbreader-0.99.5-alt-crash.patch
Download


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();
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin