X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsession.C;h=8ecbb5255dae7cfd18195a89f38556040971d619;hb=9667cb383640866f47aea57f059a9d2a5caefc3d;hp=81ac3afcf5437df794d967ea11cf61391b375b96;hpb=70cf0c49abc6bfaeed540f4d07ded548f45a67ac;p=lyx.git diff --git a/src/session.C b/src/session.C index 81ac3afcf5..8ecbb5255d 100644 --- a/src/session.C +++ b/src/session.C @@ -23,7 +23,9 @@ #include #include +using lyx::support::absolutePath; using lyx::support::addName; +using lyx::support::FileName; using lyx::support::package; namespace fs = boost::filesystem; @@ -71,14 +73,17 @@ void LastFilesSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; // read lastfiles - if (fs::exists(tmp) && !fs::is_directory(tmp) && lastfiles.size() < num_lastfiles) - lastfiles.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfiles.size() < num_lastfiles) + lastfiles.push_back(file); else - lyxerr << "LyX: Warning: Ignore last file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore last file: " << tmp << endl; } while (is.good()); } @@ -87,11 +92,11 @@ void LastFilesSection::write(ostream & os) const { os << '\n' << sec_lastfiles << '\n'; copy(lastfiles.begin(), lastfiles.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastFilesSection::add(string const & file) +void LastFilesSection::add(FileName const & file) { // If file already exist, delete it and reinsert at front. LastFiles::iterator it = find(lastfiles.begin(), lastfiles.end(), file); @@ -108,7 +113,7 @@ void LastFilesSection::setNumberOfLastFiles(unsigned int no) if (0 < no && no <= absolute_max_last_files) num_lastfiles = no; else { - lyxerr << "LyX: session: too many last files\n" + lyxerr[Debug::INIT] << "LyX: session: too many last files\n" << "\tdefault (=" << default_num_last_files << ") used." << endl; num_lastfiles = default_num_last_files; @@ -124,13 +129,15 @@ void LastOpenedSection::read(istream & is) if (c == '[') break; getline(is, tmp); - if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ') + if (tmp == "" || tmp[0] == '#' || tmp[0] == ' ' || !absolutePath(tmp)) continue; - if (fs::exists(tmp) && !fs::is_directory(tmp)) - lastopened.push_back(tmp); + FileName const file(tmp); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding())) + lastopened.push_back(file); else - lyxerr << "LyX: Warning: Ignore last opened file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore last opened file: " << tmp << endl; } while (is.good()); } @@ -139,11 +146,11 @@ void LastOpenedSection::write(ostream & os) const { os << '\n' << sec_lastopened << '\n'; copy(lastopened.begin(), lastopened.end(), - ostream_iterator(os, "\n")); + ostream_iterator(os, "\n")); } -void LastOpenedSection::add(string const & file) +void LastOpenedSection::add(FileName const & file) { lastopened.push_back(file); } @@ -178,12 +185,17 @@ void LastFilePosSection::read(istream & is) itmp >> pos; itmp.ignore(2); // ignore ", " itmp >> fname; - if (fs::exists(fname) && !fs::is_directory(fname) && lastfilepos.size() < num_lastfilepos) - lastfilepos[fname] = boost::tie(pit, pos); + if (!absolutePath(fname)) + continue; + FileName const file(fname); + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + lastfilepos.size() < num_lastfilepos) + lastfilepos[file] = boost::tie(pit, pos); else - lyxerr << "LyX: Warning: Ignore pos of last file: " << fname << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore pos of last file: " << fname << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown pos of last file: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown pos of last file: " << tmp << endl; } } while (is.good()); } @@ -201,13 +213,13 @@ void LastFilePosSection::write(ostream & os) const } -void LastFilePosSection::save(string const & fname, FilePos pos) +void LastFilePosSection::save(FileName const & fname, FilePos pos) { lastfilepos[fname] = pos; } -LastFilePosSection::FilePos LastFilePosSection::load(string const & fname) const +LastFilePosSection::FilePos LastFilePosSection::load(FileName const & fname) const { FilePosMap::const_iterator entry = lastfilepos.find(fname); // Has position information, return it. @@ -242,13 +254,18 @@ void BookmarksSection::read(istream & is) itmp >> pos; itmp.ignore(2); // ignore ", " itmp >> fname; + if (!absolutePath(fname)) + continue; + FileName const file(fname); // only load valid bookmarks - if (fs::exists(fname) && !fs::is_directory(fname) && bookmarks.size() < max_bookmarks) - bookmarks.push_back(Bookmark(fname, id, pos)); - else - lyxerr << "LyX: Warning: Ignore bookmark of file: " << fname << endl; + if (fs::exists(file.toFilesystemEncoding()) && + !fs::is_directory(file.toFilesystemEncoding()) && + bookmarks.size() < max_bookmarks) + bookmarks.push_back(Bookmark(file, id, pos)); + else + lyxerr[Debug::INIT] << "LyX: Warning: Ignore bookmark of file: " << fname << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Bookmark info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Bookmark info: " << tmp << endl; } } while (is.good()); } @@ -265,7 +282,7 @@ void BookmarksSection::write(ostream & os) const } -void BookmarksSection::save(std::string const & fname, int par_id, pos_type par_pos, bool persistent) +void BookmarksSection::save(FileName const & fname, int par_id, pos_type par_pos, bool persistent) { if (persistent) { bookmarks.push_front(Bookmark(fname, par_id, par_pos)); @@ -319,9 +336,9 @@ void ToolbarSection::read(istream & is) value >> location; toolbars[key] = ToolbarInfo(state, location); } else - lyxerr << "LyX: Warning: Ignore toolbar info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore toolbar info: " << tmp << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Toolbar info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Toolbar info: " << tmp << endl; } } while (is.good()); } @@ -366,9 +383,9 @@ void SessionInfoSection::read(istream & is) string value = tmp.substr(pos + 3); sessioninfo[key] = value; } else - lyxerr << "LyX: Warning: Ignore session info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: Ignore session info: " << tmp << endl; } catch (...) { - lyxerr << "LyX: Warning: unknown Session info: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Session info: " << tmp << endl; } } while (is.good()); } @@ -407,7 +424,7 @@ Session::Session(unsigned int num) : { // locate the session file // note that the session file name 'session' is hard-coded - session_file = addName(package().user_support(), "session"); + session_file = FileName(addName(package().user_support(), "session")); // readFile(); } @@ -417,7 +434,7 @@ void Session::readFile() { // we will not complain if we can't find session_file nor will // we issue a warning. (Lgb) - ifstream is(session_file.c_str()); + ifstream is(session_file.toFilesystemEncoding().c_str()); string tmp; while (getline(is, tmp)) { @@ -439,14 +456,14 @@ void Session::readFile() else if (tmp == sec_session) sessionInfo().read(is); else - lyxerr << "LyX: Warning: unknown Session section: " << tmp << endl; + lyxerr[Debug::INIT] << "LyX: Warning: unknown Session section: " << tmp << endl; } } void Session::writeFile() const { - ofstream os(session_file.c_str()); + ofstream os(session_file.toFilesystemEncoding().c_str()); if (os) { os << "## Automatically generated lyx session file \n" << "## Editing this file manually may cause lyx to crash.\n"; @@ -458,7 +475,7 @@ void Session::writeFile() const toolbars().write(os); sessionInfo().write(os); } else - lyxerr << "LyX: Warning: unable to save Session: " + lyxerr[Debug::INIT] << "LyX: Warning: unable to save Session: " << session_file << endl; }