X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferList.cpp;h=341ddf455bdcbd5ba83a412aad846909ec82aa91;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=5143c1312666886941c88c782148ffde38847ce4;hpb=f25e7c340b7b82af161f9cf6adbb537ea260fc28;p=lyx.git diff --git a/src/BufferList.cpp b/src/BufferList.cpp index 5143c13126..341ddf455b 100644 --- a/src/BufferList.cpp +++ b/src/BufferList.cpp @@ -92,23 +92,47 @@ BufferList::const_iterator BufferList::end() const void BufferList::release(Buffer * buf) { - LASSERT(buf, /**/); + // We may leak here, but we probably do not need to + // shut down. + LASSERT(buf, return); BufferStorage::iterator const it = find(bstore.begin(), bstore.end(), buf); if (it != bstore.end()) { Buffer * tmp = (*it); - LASSERT(tmp, /**/); bstore.erase(it); + LASSERT(tmp, return); delete tmp; } } -Buffer * BufferList::newBuffer(string const & s, bool const ronly) +Buffer * BufferList::newInternalBuffer(string const & s) +{ + Buffer * const buf = createNewBuffer(s); + if (buf) { + buf->setInternal(true); + binternal.push_back(buf); + } + return buf; +} + + +Buffer * BufferList::newBuffer(string const & s) +{ + Buffer * const buf = createNewBuffer(s); + if (buf) { + LYXERR(Debug::INFO, "Assigning to buffer " << bstore.size()); + bstore.push_back(buf); + } + return buf; +} + + +Buffer * BufferList::createNewBuffer(string const & s) { auto_ptr tmpbuf; try { - tmpbuf.reset(new Buffer(s, ronly)); + tmpbuf.reset(new Buffer(s)); } catch (ExceptionMessage const & message) { if (message.type_ == ErrorException) { Alert::error(message.title_, message.details_); @@ -119,12 +143,6 @@ Buffer * BufferList::newBuffer(string const & s, bool const ronly) } } tmpbuf->params().useClassDefaults(); - if (tmpbuf->isInternal()) { - binternal.push_back(tmpbuf.get()); - } else { - LYXERR(Debug::INFO, "Assigning to buffer " << bstore.size()); - bstore.push_back(tmpbuf.get()); - } return tmpbuf.release(); } @@ -176,13 +194,14 @@ Buffer * BufferList::getBuffer(unsigned int choice) Buffer * BufferList::next(Buffer const * buf) const { - LASSERT(buf, /**/); + // Something is wrong, but we can probably survive it. + LASSERT(buf, return 0); if (bstore.empty()) return 0; - BufferStorage::const_iterator it = find(bstore.begin(), - bstore.end(), buf); - LASSERT(it != bstore.end(), /**/); + BufferStorage::const_iterator it = + find(bstore.begin(), bstore.end(), buf); + LASSERT(it != bstore.end(), return 0); ++it; Buffer * nextbuf = (it == bstore.end()) ? bstore.front() : *it; return nextbuf; @@ -191,13 +210,14 @@ Buffer * BufferList::next(Buffer const * buf) const Buffer * BufferList::previous(Buffer const * buf) const { - LASSERT(buf, /**/); + // Something is wrong, but we can probably survive it. + LASSERT(buf, return 0); if (bstore.empty()) return 0; - BufferStorage::const_iterator it = find(bstore.begin(), - bstore.end(), buf); - LASSERT(it != bstore.end(), /**/); + BufferStorage::const_iterator it = + find(bstore.begin(), bstore.end(), buf); + LASSERT(it != bstore.end(), return 0); Buffer * previousbuf = (it == bstore.begin()) ? bstore.back() : *(it - 1); return previousbuf; @@ -205,8 +225,10 @@ Buffer * BufferList::previous(Buffer const * buf) const void BufferList::updateIncludedTeXfiles(string const & masterTmpDir, - OutputParams const & runparams) + OutputParams const & runparams_in) { + OutputParams runparams = runparams_in; + runparams.is_child = true; BufferStorage::iterator it = bstore.begin(); BufferStorage::iterator end = bstore.end(); for (; it != end; ++it) { @@ -217,6 +239,7 @@ void BufferList::updateIncludedTeXfiles(string const & masterTmpDir, (*it)->markDepClean(masterTmpDir); } } + runparams.is_child = false; } @@ -246,11 +269,13 @@ bool BufferList::exists(FileName const & fname) const namespace { + struct equivalent_to : public binary_function { bool operator()(FileName const & x, FileName const & y) const { return equivalent(x, y); } }; + }