mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 18:29:23 +02:00
throws CachedCharStorageException from native code
This commit is contained in:
parent
30f0a850e2
commit
5de272c9d4
5 changed files with 19 additions and 5 deletions
|
@ -250,7 +250,10 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl
|
||||||
if (!plugin->readModel(*model)) {
|
if (!plugin->readModel(*model)) {
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
model->flush();
|
if (!model->flush()) {
|
||||||
|
AndroidUtil::throwCachedCharStorageException("Cannot write file from native code");
|
||||||
|
return JNI_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!initInternalHyperlinks(env, javaModel, *model) || !initTOC(env, javaModel, *model)) {
|
if (!initInternalHyperlinks(env, javaModel, *model) || !initTOC(env, javaModel, *model)) {
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
|
|
|
@ -76,12 +76,19 @@ const shared_ptr<Book> BookModel::book() const {
|
||||||
return myBook;
|
return myBook;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BookModel::flush() {
|
bool BookModel::flush() {
|
||||||
myBookTextModel->flush();
|
myBookTextModel->flush();
|
||||||
|
if (myBookTextModel->allocator().failed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
myContentsModel->flush();
|
myContentsModel->flush();
|
||||||
|
|
||||||
std::map<std::string,shared_ptr<ZLTextModel> >::const_iterator it = myFootnotes.begin();
|
std::map<std::string,shared_ptr<ZLTextModel> >::const_iterator it = myFootnotes.begin();
|
||||||
for (; it != myFootnotes.end(); ++it) {
|
for (; it != myFootnotes.end(); ++it) {
|
||||||
it->second->flush();
|
it->second->flush();
|
||||||
|
if (it->second->allocator().failed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ public:
|
||||||
|
|
||||||
const shared_ptr<Book> book() const;
|
const shared_ptr<Book> book() const;
|
||||||
|
|
||||||
void flush();
|
bool flush();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const shared_ptr<Book> myBook;
|
const shared_ptr<Book> myBook;
|
||||||
|
|
|
@ -36,6 +36,7 @@ ZLCachedMemoryAllocator::ZLCachedMemoryAllocator(const size_t rowSize,
|
||||||
myCurrentRowSize(0),
|
myCurrentRowSize(0),
|
||||||
myOffset(0),
|
myOffset(0),
|
||||||
myHasChanges(false),
|
myHasChanges(false),
|
||||||
|
myFailed(false),
|
||||||
myDirectoryName(directoryName),
|
myDirectoryName(directoryName),
|
||||||
myFileExtension(fileExtension) {
|
myFileExtension(fileExtension) {
|
||||||
ZLFile(directoryName).directory(true);
|
ZLFile(directoryName).directory(true);
|
||||||
|
@ -67,7 +68,7 @@ std::string ZLCachedMemoryAllocator::makeFileName(size_t index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZLCachedMemoryAllocator::writeCache(size_t blockLength) {
|
void ZLCachedMemoryAllocator::writeCache(size_t blockLength) {
|
||||||
if (myPool.size() == 0) {
|
if (myFailed || myPool.size() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const size_t index = myPool.size() - 1;
|
const size_t index = myPool.size() - 1;
|
||||||
|
@ -75,7 +76,7 @@ void ZLCachedMemoryAllocator::writeCache(size_t blockLength) {
|
||||||
ZLFile file(fileName);
|
ZLFile file(fileName);
|
||||||
shared_ptr<ZLOutputStream> stream = file.outputStream();
|
shared_ptr<ZLOutputStream> stream = file.outputStream();
|
||||||
if (stream.isNull() || !stream->open()) {
|
if (stream.isNull() || !stream->open()) {
|
||||||
//AndroidUtil::throwCachedCharStorageException("Cannot create file " + fileName);
|
myFailed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stream->write(myPool[index], blockLength);
|
stream->write(myPool[index], blockLength);
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
const std::string &fileExtension() const;
|
const std::string &fileExtension() const;
|
||||||
size_t blocksNumber() const;
|
size_t blocksNumber() const;
|
||||||
size_t currentBytesOffset() const;
|
size_t currentBytesOffset() const;
|
||||||
|
bool failed() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string makeFileName(size_t index);
|
std::string makeFileName(size_t index);
|
||||||
|
@ -58,6 +59,7 @@ private:
|
||||||
size_t myOffset;
|
size_t myOffset;
|
||||||
|
|
||||||
bool myHasChanges;
|
bool myHasChanges;
|
||||||
|
bool myFailed;
|
||||||
|
|
||||||
const std::string myDirectoryName;
|
const std::string myDirectoryName;
|
||||||
const std::string myFileExtension;
|
const std::string myFileExtension;
|
||||||
|
@ -71,6 +73,7 @@ inline const std::string &ZLCachedMemoryAllocator::directoryName() const { retur
|
||||||
inline const std::string &ZLCachedMemoryAllocator::fileExtension() const { return myFileExtension; }
|
inline const std::string &ZLCachedMemoryAllocator::fileExtension() const { return myFileExtension; }
|
||||||
inline size_t ZLCachedMemoryAllocator::blocksNumber() const { return myPool.size(); }
|
inline size_t ZLCachedMemoryAllocator::blocksNumber() const { return myPool.size(); }
|
||||||
inline size_t ZLCachedMemoryAllocator::currentBytesOffset() const { return myOffset; }
|
inline size_t ZLCachedMemoryAllocator::currentBytesOffset() const { return myOffset; }
|
||||||
|
inline bool ZLCachedMemoryAllocator::failed() const { return myFailed; }
|
||||||
|
|
||||||
inline char *ZLCachedMemoryAllocator::writeUInt16(char *ptr, uint16_t value) {
|
inline char *ZLCachedMemoryAllocator::writeUInt16(char *ptr, uint16_t value) {
|
||||||
*ptr++ = value;
|
*ptr++ = value;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue