Am Dienstag, 17. Februar 2004 22:05 schrieb Georg Baum:
> Am Dienstag, 17. Februar 2004 18:09 schrieb Jean-Marc Lasgouttes:
> > Do you want me to apply your patch now?
Please apply the attached second version.
> Not yet, I first want to check wether the html stuff works as expected.
I'll
> send an updated version then, including the warning message that Angus
> suggested.
I have played with the html export, and it works without tmpdir if the
"originaldir" flag is interpreted as "Do a 'nice' export and run everything
in the original dir". This simulates the "use no temp dir" case just for
this conversion.
Changes to the first version of the patch:
- doxygen fix in support/filename.h
- Warn when reading the now obsolete use_tempdir flag
- Exit lyx from the buffer constructor if the temp dir is invalid. I tested
it (using a static counter that triggered the test in the third buffer),
and unsaved changes got written to .emergency files.
I guess that doing this "controlled crash" is safe: The new buffer is
completely constructed, but empty, so the emergency write will not harm.
Georg
Index: src/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/ChangeLog,v
retrieving revision 1.1813
diff -u -p -r1.1813 ChangeLog
--- src/ChangeLog 2004/02/20 17:19:48 1.1813
+++ src/ChangeLog 2004/02/21 17:13:38
@@ -1,3 +1,15 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * lyxrc.C, buffer.C, exporter.C: use always a temp dir, ignore
+ use_tempdir in preferences
+ * buffer.C (readFile), lyxvc.C (getLogFile): check success of
+ tempfile creation
+ * lyx_main.C: ensure that tempdir is valid
+ * lyxlex.h: correct typo
+ * buffer.[Ch] (isMultiLingual), (isUnnamed): make const
+ * paragraph.[Ch] (isMultiLingual): make const
+ * cursor.[Ch] (openable): make const
+
2004-02-20 J�rgen Spitzm�ller <[EMAIL PROTECTED]>
* text3.C: fixed LFUN_QUOTE and add lfun arguments single/double.
Index: src/buffer.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/buffer.C,v
retrieving revision 1.554
diff -u -p -r1.554 buffer.C
--- src/buffer.C 2004/02/11 14:45:38 1.554
+++ src/buffer.C 2004/02/21 17:15:38
@@ -34,6 +34,7 @@
#include "lyxtext.h"
#include "lyxrc.h"
#include "lyxvc.h"
+#include "lyx_main.h"
#include "messages.h"
#include "output.h"
#include "output_docbook.h"
@@ -85,7 +86,7 @@ using lyx::support::atoi;
using lyx::support::bformat;
using lyx::support::ChangeExtension;
using lyx::support::cmd_ret;
-using lyx::support::CreateBufferTmpDir;
+using lyx::support::createBufferTmpDir;
using lyx::support::destroyDir;
using lyx::support::FileInfo;
using lyx::support::FileInfo;
@@ -190,8 +191,7 @@ Buffer::Impl::Impl(Buffer & parent, stri
text(0, 0)
{
lyxvc.buffer(&parent);
- if (readonly_ || lyxrc.use_tempdir)
- temppath = CreateBufferTmpDir();
+ temppath = createBufferTmpDir();
}
@@ -199,6 +199,18 @@ Buffer::Buffer(string const & file, bool
: pimpl_(new Impl(*this, file, ronly))
{
lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl;
+ // Exit if we have no temp dir.
+ // Since the buffer temp dir is created in the global lyx temp dir,
+ // and that was valid at lyx startup, chances that this happens are
+ // minimal, and trying to work around is not worth the effort.
+ if (temppath().empty()) {
+ Alert::error(_("Could not create temporary directory"),
+ _("Could not create a temporary directory."
+ " LyX will exit now."));
+ // Try to save changed files
+ LyX::cref().emergencyCleanup();
+ exit(EXIT_FAILURE);
+ }
}
@@ -317,11 +329,8 @@ pair<Buffer::LogType, string> const Buff
if (filename.empty())
return make_pair(Buffer::latexlog, string());
-
- string path = OnlyPath(filename);
- if (lyxrc.use_tempdir || !IsDirWriteable(path))
- path = temppath();
+ string const path = temppath();
string const fname = AddName(path,
OnlyFilename(ChangeExtension(filename,
@@ -596,6 +625,15 @@ bool Buffer::readFile(LyXLex & lex, stri
filename));
} else if (file_format < LYX_FORMAT) {
string const tmpfile = tempName();
+ if (tmpfile.empty()) {
+ Alert::error(_("Conversion failed"),
+ bformat(_("%1$s is from an earlier"
+ " version of LyX, but a temporary"
+ " file for converting it could"
+ " not be created."),
+ filename));
+ return false;
+ }
string command = LibFileSearch("lyx2lyx", "lyx2lyx");
if (command.empty()) {
Alert::error(_("Conversion script not found"),
@@ -953,7 +996,7 @@ bool Buffer::isSGML() const
void Buffer::makeLinuxDocFile(string const & fname,
OutputParams const & runparams,
- bool body_only )
+ bool body_only)
{
ofstream ofs;
if (!openFileWrite(ofs, fname))
@@ -1074,12 +1123,8 @@ int Buffer::runChktex()
// get LaTeX-Filename
string const name = getLatexName();
- string path = filePath();
-
- string const org_path = path;
- if (lyxrc.use_tempdir || !IsDirWriteable(path)) {
- path = temppath();
- }
+ string const path = temppath();
+ string const org_path = filePath();
Path p(path); // path to LaTeX file
message(_("Running chktex..."));
@@ -1272,10 +1311,10 @@ void Buffer::updateDocLang(Language cons
}
-bool Buffer::isMultiLingual()
+bool Buffer::isMultiLingual() const
{
- ParIterator end = par_iterator_end();
- for (ParIterator it = par_iterator_begin(); it != end; ++it)
+ ParConstIterator end = par_iterator_end();
+ for (ParConstIterator it = par_iterator_begin(); it != end; ++it)
if (it->isMultiLingual(params()))
return true;
@@ -1424,7 +1463,7 @@ void Buffer::setUnnamed(bool flag)
}
-bool Buffer::isUnnamed()
+bool Buffer::isUnnamed() const
{
return pimpl_->unnamed;
}
Index: src/buffer.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/buffer.h,v
retrieving revision 1.177
diff -u -p -r1.177 buffer.h
--- src/buffer.h 2004/01/26 10:13:08 1.177
+++ src/buffer.h 2004/02/21 17:16:08
@@ -181,7 +181,7 @@ public:
void setUnnamed(bool flag = true);
///
- bool isUnnamed();
+ bool isUnnamed() const;
/// Mark this buffer as dirty.
void markDirty();
@@ -248,7 +253,7 @@ public:
void updateDocLang(Language const * nlang);
///
- bool isMultiLingual();
+ bool isMultiLingual() const;
/// Does this mean that this is buffer local?
limited_stack<Undo> & undostack();
Index: src/cursor.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/cursor.C,v
retrieving revision 1.64
diff -u -p -r1.64 cursor.C
--- src/cursor.C 2004/02/20 17:19:49 1.64
+++ src/cursor.C 2004/02/21 17:16:20
@@ -894,7 +894,7 @@ bool LCursor::isInside(InsetBase const *
}
-bool LCursor::openable(MathAtom const & t)
+bool LCursor::openable(MathAtom const & t) const
{
if (!t->isActive())
return false;
Index: src/cursor.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/cursor.h,v
retrieving revision 1.39
diff -u -p -r1.39 cursor.h
--- src/cursor.h 2004/02/20 17:19:49 1.39
+++ src/cursor.h 2004/02/21 17:16:32
@@ -471,7 +471,7 @@ private:
/// where in the curent cell does the macro name start?
int macroNamePos();
/// can we enter the inset?
- bool openable(MathAtom const &);
+ bool openable(MathAtom const &) const;
};
#endif // LYXCURSOR_H
Index: src/exporter.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/exporter.C,v
retrieving revision 1.50
diff -u -p -r1.50 exporter.C
--- src/exporter.C 2003/11/27 16:38:47 1.50
+++ src/exporter.C 2004/02/21 17:16:32
@@ -85,8 +127,7 @@ bool Exporter::Export(Buffer * buffer, s
backend_format = format;
string filename = buffer->getLatexName(false);
- if (!buffer->temppath().empty())
- filename = AddName(buffer->temppath(), filename);
+ filename = AddName(buffer->temppath(), filename);
filename = ChangeExtension(filename,
formats.extension(backend_format));
Index: src/lyx_main.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyx_main.C,v
retrieving revision 1.182
diff -u -p -r1.182 lyx_main.C
--- src/lyx_main.C 2003/12/12 13:57:19 1.182
+++ src/lyx_main.C 2004/02/21 17:16:50
@@ -58,7 +58,7 @@ using lyx::support::AddName;
using lyx::support::AddPath;
using lyx::support::bformat;
using lyx::support::createDirectory;
-using lyx::support::CreateLyXTmpDir;
+using lyx::support::createLyXTmpDir;
using lyx::support::FileInfo;
using lyx::support::FileSearch;
using lyx::support::GetEnv;
@@ -390,7 +390,21 @@ void LyX::init(bool gui)
if (lyxerr.debugging(Debug::LYXRC))
lyxrc.print();
- os::setTmpDir(CreateLyXTmpDir(lyxrc.tempdir_path));
+ os::setTmpDir(createLyXTmpDir(lyxrc.tempdir_path));
+ if (os::getTmpDir().empty()) {
+ Alert::error(_("Could not create temporary directory"),
+ bformat(_("Could not create a temporary directory in\n"
+ "%1$s. Make sure that this\n"
+ "path exists and is writable and try again."),
+ lyxrc.tempdir_path));
+ // createLyXTmpDir() tries sufficiently hard to create a
+ // usable temp dir, so the probability to come here is
+ // close to zero. We therefore don't try to overcome this
+ // problem with e.g. asking the user for a new path and
+ // trying again but simply exit.
+ exit(EXIT_FAILURE);
+ }
+
if (lyxerr.debugging(Debug::INIT)) {
lyxerr << "LyX tmp dir: `" << os::getTmpDir() << '\'' << endl;
}
Index: src/lyxlex.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxlex.h,v
retrieving revision 1.38
diff -u -p -r1.38 lyxlex.h
--- src/lyxlex.h 2003/12/02 12:27:07 1.38
+++ src/lyxlex.h 2004/02/21 17:17:29
@@ -155,7 +155,7 @@ private:
This is needed to ensure that the pop is done upon exit from methods
with more than one exit point or that can return as a response to
exceptions.
- @autor Lgb
+ @author Lgb
*/
struct pushpophelper {
///
Index: src/lyxrc.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxrc.C,v
retrieving revision 1.162
diff -u -p -r1.162 lyxrc.C
--- src/lyxrc.C 2003/12/14 16:33:53 1.162
+++ src/lyxrc.C 2004/02/21 17:17:41
@@ -156,6 +157,7 @@ keyword_item lyxrcTags[] = {
// compatibility with versions older than 1.4.0 only
{ "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
{ "\\use_spell_lib", LyXRC::RC_USE_SPELL_LIB },
+ // compatibility with versions older than 1.4.0 only
{ "\\use_tempdir", LyXRC::RC_USETEMPDIR },
{ "\\user_email", LyXRC::RC_USER_EMAIL },
{ "\\user_name", LyXRC::RC_USER_NAME },
@@ -197,7 +199,6 @@ void LyXRC::setDefaults() {
print_paper_dimension_flag = "-T";
document_path.erase();
tempdir_path = "/tmp";
- use_tempdir = true;
ps_command = "gs";
view_dvi_paper_option.erase();
default_papersize = PAPER_USLETTER;
@@ -657,7 +658,8 @@ int LyXRC::read(string const & filename)
case RC_USETEMPDIR:
if (lexrc.next()) {
- use_tempdir = lexrc.getBool();
+ lyxerr << "Ignoring obsolete use_tempdir flag." << endl;
+ lexrc.getBool();
}
break;
@@ -1524,9 +1540,7 @@ void LyXRC::output(ostream & os) const
os << "\\tempdir_path \"" << tempdir_path << "\"\n";
}
case RC_USETEMPDIR:
- if (use_tempdir != system_lyxrc.use_tempdir) {
- os << "\\use_tempdir " << tostr(use_tempdir) << '\n';
- }
+ // Ignore it
case RC_ASCII_LINELEN:
if (ascii_linelen != system_lyxrc.ascii_linelen) {
os << "\\ascii_linelen " << ascii_linelen << '\n';
@@ -1904,10 +1929,6 @@ string const LyXRC::getDescription(LyXRC
str = _("LyX will place its temporary directories in this path. They will be deleted when you quit LyX.");
break;
- case RC_USETEMPDIR:
- str = _("Select if you wish to use a temporary directory structure to store temporary TeX output.");
- break;
-
case RC_LASTFILES:
str = _("The file where the last-files information should be stored.");
break;
Index: src/lyxrc.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxrc.h,v
retrieving revision 1.80
diff -u -p -r1.80 lyxrc.h
--- src/lyxrc.h 2003/10/06 15:42:27 1.80
+++ src/lyxrc.h 2004/02/21 17:17:44
@@ -205,8 +206,6 @@ enum LyXRCTags {
std::string template_path;
///
std::string tempdir_path;
- ///
- bool use_tempdir;
///
bool auto_region_delete;
/// flag telling whether lastfiles should be checked for existance
Index: src/lyxvc.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/lyxvc.C,v
retrieving revision 1.54
diff -u -p -r1.54 lyxvc.C
--- src/lyxvc.C 2003/11/03 17:47:22 1.54
+++ src/lyxvc.C 2004/02/21 17:17:52
@@ -223,6 +223,11 @@ string const LyXVC::getLogFile() const
return string();
string tmpf = tempName(string(), "lyxvclog");
+ if (tmpf.empty()) {
+ lyxerr[Debug::LYXVC] << "Could not generate logfile "
+ << tmpf << endl;
+ return string();
+ }
lyxerr[Debug::LYXVC] << "Generating logfile " << tmpf << endl;
vcs->getLog(tmpf);
return tmpf;
Index: src/paragraph.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/paragraph.C,v
retrieving revision 1.354
diff -u -p -r1.354 paragraph.C
--- src/paragraph.C 2004/02/20 11:00:40 1.354
+++ src/paragraph.C 2004/02/21 17:18:10
@@ -1556,7 +1556,7 @@ void Paragraph::changeLanguage(BufferPar
}
-bool Paragraph::isMultiLingual(BufferParams const & bparams)
+bool Paragraph::isMultiLingual(BufferParams const & bparams) const
{
Language const * doc_language = bparams.language;
Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
Index: src/paragraph.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/paragraph.h,v
retrieving revision 1.125
diff -u -p -r1.125 paragraph.h
--- src/paragraph.h 2004/02/12 16:35:59 1.125
+++ src/paragraph.h 2004/02/21 17:18:20
@@ -80,7 +80,7 @@ public:
void changeLanguage(BufferParams const & bparams,
Language const * from, Language const * to);
///
- bool isMultiLingual(BufferParams const &);
+ bool isMultiLingual(BufferParams const &) const;
///
std::string const asString(Buffer const &,
Index: src/frontends/controllers/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/controllers/ChangeLog,v
retrieving revision 1.414
diff -u -p -r1.414 ChangeLog
--- src/frontends/controllers/ChangeLog 2004/02/01 12:46:11 1.414
+++ src/frontends/controllers/ChangeLog 2004/02/21 17:19:18
@@ -1,3 +1,8 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * ControlPrint.C, ControlSendto.C: use always a temp dir
+ * ControlSendto.C: check return value of buffer()->writeFile()
+
2004-02-01 Lars Gullik Bjonnes <[EMAIL PROTECTED]>
* biblio.C (parseBibTeX): "=" -> '='
Index: src/frontends/controllers/ControlPrint.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/controllers/ControlPrint.C,v
retrieving revision 1.45
diff -u -p -r1.45 ControlPrint.C
--- src/frontends/controllers/ControlPrint.C 2004/01/08 10:59:49 1.45
+++ src/frontends/controllers/ControlPrint.C 2004/02/21 17:19:31
@@ -170,10 +170,7 @@ void ControlPrint::apply()
}
// Push directory path.
- string path = buffer()->filePath();
- if (lyxrc.use_tempdir || !IsDirWriteable(path)) {
- path = buffer()->temppath();
- }
+ string const path = buffer()->temppath();
Path p(path);
// there are three cases here:
Index: src/frontends/controllers/ControlSendto.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/controllers/ControlSendto.C,v
retrieving revision 1.23
diff -u -p -r1.23 ControlSendto.C
--- src/frontends/controllers/ControlSendto.C 2004/01/07 17:57:46 1.23
+++ src/frontends/controllers/ControlSendto.C 2004/02/21 17:19:31
@@ -120,10 +120,10 @@ void ControlSendto::apply()
if (format_->name() == "lyx") {
filename = ChangeExtension(buffer()->getLatexName(false),
format_->extension());
- if (!buffer()->temppath().empty())
- filename = AddName(buffer()->temppath(), filename);
+ filename = AddName(buffer()->temppath(), filename);
- buffer()->writeFile(filename);
+ if (!buffer()->writeFile(filename))
+ return;
} else {
Exporter::Export(buffer(), format_->name(), true, filename);
Index: src/frontends/qt2/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ChangeLog,v
retrieving revision 1.644
diff -u -p -r1.644 ChangeLog
--- src/frontends/qt2/ChangeLog 2004/02/20 10:32:43 1.644
+++ src/frontends/qt2/ChangeLog 2004/02/21 17:20:09
@@ -1,3 +1,8 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * QPrefs.C, QPrefsDialog.C, ui/QPrefPathsModule.ui: remove
+ use_tempdir
+
2004-02-20 J�rgen Spitzm�ller <[EMAIL PROTECTED]>
* QDocument.C:
Index: src/frontends/qt2/QPrefs.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QPrefs.C,v
retrieving revision 1.50
diff -u -p -r1.50 QPrefs.C
--- src/frontends/qt2/QPrefs.C 2004/01/28 16:21:27 1.50
+++ src/frontends/qt2/QPrefs.C 2004/02/21 17:21:28
@@ -195,7 +195,6 @@ void QPrefs::apply()
rc.document_path = fromqstr(pathsmod->workingDirED->text());
rc.template_path = fromqstr(pathsmod->templateDirED->text());
rc.backupdir_path = fromqstr(pathsmod->backupDirED->text());
- rc.use_tempdir = pathsmod->tempDirCB->isChecked();
rc.tempdir_path = fromqstr(pathsmod->tempDirED->text());
// FIXME: should be a checkbox only
rc.lyxpipes = fromqstr(pathsmod->lyxserverDirED->text());
@@ -499,7 +498,6 @@ void QPrefs::update_contents()
pathsmod->workingDirED->setText(toqstr(rc.document_path));
pathsmod->templateDirED->setText(toqstr(rc.template_path));
pathsmod->backupDirED->setText(toqstr(rc.backupdir_path));
- pathsmod->tempDirCB->setChecked(rc.use_tempdir);
pathsmod->tempDirED->setText(toqstr(rc.tempdir_path));
// FIXME: should be a checkbox only
pathsmod->lyxserverDirED->setText(toqstr(rc.lyxpipes));
Index: src/frontends/qt2/QPrefsDialog.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QPrefsDialog.C,v
retrieving revision 1.29
diff -u -p -r1.29 QPrefsDialog.C
--- src/frontends/qt2/QPrefsDialog.C 2003/10/06 15:42:51 1.29
+++ src/frontends/qt2/QPrefsDialog.C 2004/02/21 17:21:28
@@ -210,7 +210,6 @@ QPrefsDialog::QPrefsDialog(QPrefs * form
connect(pathsModule->workingDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
connect(pathsModule->templateDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
connect(pathsModule->backupDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
- connect(pathsModule->tempDirCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
connect(pathsModule->tempDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
connect(pathsModule->lyxserverDirED, SIGNAL(textChanged(const QString&)), this, SLOT(change_adaptor()));
connect(spellcheckerModule->spellCommandCO, SIGNAL(activated(int)), this, SLOT(change_adaptor()));
Index: src/frontends/qt2/ui/QPrefPathsModule.ui
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ui/QPrefPathsModule.ui,v
retrieving revision 1.6
diff -u -p -r1.6 QPrefPathsModule.ui
--- src/frontends/qt2/ui/QPrefPathsModule.ui 2003/01/23 16:23:40 1.6
+++ src/frontends/qt2/ui/QPrefPathsModule.ui 2004/02/21 17:21:35
@@ -142,14 +142,18 @@
</property>
</widget>
<widget row="4" column="0" >
- <class>QCheckBox</class>
+ <class>QLabel</class>
<property stdset="1">
<name>name</name>
- <cstring>tempDirCB</cstring>
+ <cstring>tempDirLA</cstring>
</property>
<property stdset="1">
<name>text</name>
- <string>&Use temporary directory</string>
+ <string>&Temporary directory:</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>tempDirED</cstring>
</property>
</widget>
<widget row="3" column="2" >
@@ -251,20 +255,6 @@
</spacer>
</vbox>
</widget>
-<connections>
- <connection>
- <sender>tempDirCB</sender>
- <signal>toggled(bool)</signal>
- <receiver>tempDirED</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
- <connection>
- <sender>tempDirCB</sender>
- <signal>toggled(bool)</signal>
- <receiver>tempDirPB</receiver>
- <slot>setEnabled(bool)</slot>
- </connection>
-</connections>
<tabstops>
<tabstop>workingDirED</tabstop>
<tabstop>workingDirPB</tabstop>
@@ -274,7 +264,6 @@
<tabstop>backupDirPB</tabstop>
<tabstop>lyxserverDirED</tabstop>
<tabstop>lyxserverDirPB</tabstop>
- <tabstop>tempDirCB</tabstop>
<tabstop>tempDirED</tabstop>
<tabstop>tempDirPB</tabstop>
</tabstops>
Index: src/frontends/xforms/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/xforms/ChangeLog,v
retrieving revision 1.878
diff -u -p -r1.878 ChangeLog
--- src/frontends/xforms/ChangeLog 2004/02/20 10:32:44 1.878
+++ src/frontends/xforms/ChangeLog 2004/02/21 17:27:53
@@ -1,3 +1,7 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * FormPreferences.C, forms/form_preferences.fd: remove use_tempdir
+
2004-02-20 J�rgen Spitzm�ller <[EMAIL PROTECTED]>
* FormDocument.C:
Index: src/frontends/xforms/FormPreferences.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/xforms/FormPreferences.C,v
retrieving revision 1.181
diff -u -p -r1.181 FormPreferences.C
--- src/frontends/xforms/FormPreferences.C 2003/12/15 09:17:04 1.181
+++ src/frontends/xforms/FormPreferences.C 2004/02/21 17:28:16
@@ -1825,17 +1834,10 @@ void FormPreferences::Paths::apply(LyXRC
{
rc.document_path = fl_get_input(dialog_->input_default_path);
rc.template_path = fl_get_input(dialog_->input_template_path);
-
- int button = fl_get_button(dialog_->check_use_temp_dir);
- string str = fl_get_input(dialog_->input_temp_dir);
- if (!button)
- str.erase();
+ rc.tempdir_path = fl_get_input(dialog_->input_temp_dir);
- rc.use_tempdir = button;
- rc.tempdir_path = str;
-
- button = fl_get_button(dialog_->check_last_files);
- str = fl_get_input(dialog_->input_lastfiles);
+ int button = fl_get_button(dialog_->check_last_files);
+ string str = fl_get_input(dialog_->input_lastfiles);
if (!button) str.erase();
rc.check_lastfiles = button;
@@ -1880,7 +1882,6 @@ void FormPreferences::Paths::build()
setPrehandler(dialog_->input_backup_path);
setPrehandler(dialog_->input_serverpipe);
setPrehandler(dialog_->input_temp_dir);
- setPrehandler(dialog_->check_use_temp_dir);
}
@@ -1891,8 +1892,6 @@ FormPreferences::Paths::feedback(FL_OBJE
return LyXRC::getDescription(LyXRC::RC_DOCUMENTPATH);
if (ob == dialog_->input_template_path)
return LyXRC::getDescription(LyXRC::RC_TEMPLATEPATH);
- if (ob == dialog_->check_use_temp_dir)
- return LyXRC::getDescription(LyXRC::RC_USETEMPDIR);
if (ob == dialog_->input_temp_dir)
return LyXRC::getDescription(LyXRC::RC_TEMPDIRPATH);
if (ob == dialog_->check_last_files)
@@ -1918,11 +1917,6 @@ bool FormPreferences::Paths::input(FL_OB
// !ob if function is called from Paths::update() to de/activate
// objects,
// otherwise the function is called by an xforms CB via input().
- if (!ob || ob == dialog_->check_use_temp_dir) {
- bool const enable = fl_get_button(dialog_->check_use_temp_dir);
- setEnabled(dialog_->input_temp_dir, enable);
- }
-
if (!ob || ob == dialog_->check_last_files) {
bool const enable = fl_get_button(dialog_->check_last_files);
setEnabled(dialog_->input_lastfiles, enable);
@@ -2046,13 +2040,7 @@ void FormPreferences::Paths::update(LyXR
rc.make_backup);
fl_set_input(dialog_->input_backup_path, str.c_str());
- str.erase();
- if (rc.use_tempdir)
- str = rc.tempdir_path;
-
- fl_set_button(dialog_->check_use_temp_dir,
- rc.use_tempdir);
- fl_set_input(dialog_->input_temp_dir, str.c_str());
+ fl_set_input(dialog_->input_temp_dir, rc.tempdir_path.c_str());
str.erase();
if (rc.check_lastfiles)
Index: src/frontends/xforms/forms/form_preferences.fd
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/xforms/forms/form_preferences.fd,v
retrieving revision 1.62
diff -u -p -r1.62 form_preferences.fd
--- src/frontends/xforms/forms/form_preferences.fd 2003/07/23 15:36:40 1.62
+++ src/frontends/xforms/forms/form_preferences.fd 2004/02/21 17:28:35
@@ -2024,7 +2042,7 @@ argument: 0
Name: form_preferences_paths
Width: 450
Height: 350
-Number of Objects: 17
+Number of Objects: 16
--------------------
class: FL_BOX
@@ -2117,25 +2135,6 @@ callback: C_FormBaseInputCB
argument: 0
--------------------
-class: FL_CHECKBUTTON
-type: PUSH_BUTTON
-box: 140 80 30 30
-boxtype: FL_NO_BOX
-colors: FL_COL1 FL_YELLOW
-alignment: FL_ALIGN_LEFT
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: Temp dir:|#d
-shortcut:
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: check_use_temp_dir
-callback: C_FormBaseInputCB
-argument: 0
- value: 1
-
---------------------
class: FL_INPUT
type: NORMAL_INPUT
box: 170 80 170 30
@@ -2145,7 +2144,7 @@ alignment: FL_ALIGN_LEFT
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
-label:
+label: Temp dir:|#d
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
Index: src/graphics/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/graphics/ChangeLog,v
retrieving revision 1.199
diff -u -p -r1.199 ChangeLog
--- src/graphics/ChangeLog 2004/01/31 15:30:23 1.199
+++ src/graphics/ChangeLog 2004/02/21 17:28:55
@@ -1,3 +1,10 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * GraphicsCacheItem.C (convertToDisplayFormat): unzip zipped files
+ to a temporary file
+ * PreviewLoader.C: use always a temp dir
+ * PreviewLoader.C: check successfull creation of LaTeX file
+
2004-01-31 Lars Gullik Bjonnes <[EMAIL PROTECTED]>
* PreviewLoader.C (FindFirst): inherit from std::unary_function
Index: src/graphics/GraphicsCacheItem.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/graphics/GraphicsCacheItem.C,v
retrieving revision 1.60
diff -u -p -r1.60 GraphicsCacheItem.C
--- src/graphics/GraphicsCacheItem.C 2003/10/06 15:42:58 1.60
+++ src/graphics/GraphicsCacheItem.C 2004/02/21 17:28:58
@@ -36,6 +36,7 @@ using support::OnlyFilename;
using support::tempName;
using support::unlink;
using support::unzipFile;
+using support::unzippedFileName;
using support::zippedFile;
using std::endl;
@@ -381,8 +382,19 @@ void CacheItem::Impl::convertToDisplayFo
}
// Make a local copy in case we unzip it
- string const filename = zippedFile(filename_) ?
- unzipFile(filename_) : filename_;
+ string filename;
+ if ((zipped_ = zippedFile(filename_))) {
+ unzipped_filename_ = tempName(string(), filename_);
+ if (unzipped_filename_.empty()) {
+ setStatus(ErrorConverting);
+ lyxerr[Debug::GRAPHICS]
+ << "\tCould not create temporary file." << endl;
+ return;
+ }
+ filename = unzipFile(filename_, unzipped_filename_);
+ } else
+ filename = filename_;
+
string const displayed_filename = MakeDisplayPath(filename_);
lyxerr[Debug::GRAPHICS] << "[GrahicsCacheItem::convertToDisplayFormat]\n"
<< "\tAttempting to convert image file: " << filename
@@ -412,6 +424,7 @@ void CacheItem::Impl::convertToDisplayFo
remove_loaded_file_ = true;
// Remove the temp file, we only want the name...
+ // FIXME: This is unsafe!
unlink(to_file_base);
// Connect a signal to this->imageConverted and pass this signal to
Index: src/graphics/PreviewLoader.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/graphics/PreviewLoader.C,v
retrieving revision 1.73
diff -u -p -r1.73 PreviewLoader.C
--- src/graphics/PreviewLoader.C 2004/01/31 15:30:23 1.73
+++ src/graphics/PreviewLoader.C 2004/02/21 17:29:08
@@ -461,8 +461,7 @@ void PreviewLoader::Impl::startLoading()
lyxerr[Debug::GRAPHICS] << "PreviewLoader::startLoading()" << endl;
// As used by the LaTeX file and by the resulting image files
- string const directory = buffer_.temppath().empty() ?
- buffer_.filePath() : buffer_.temppath();
+ string const directory = buffer_.temppath();
string const filename_base(unique_filename(directory));
@@ -477,6 +476,12 @@ void PreviewLoader::Impl::startLoading()
string const latexfile = filename_base + ".tex";
ofstream of(latexfile.c_str());
+ if (!of) {
+ lyxerr[Debug::GRAPHICS] << "PreviewLoader::startLoading()\n"
+ << "Unable to create LaTeX file\n"
+ << latexfile << endl;
+ return;
+ }
of << "\\batchmode\n";
dumpPreamble(of);
of << "\n\\begin{document}\n";
Index: src/insets/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/insets/ChangeLog,v
retrieving revision 1.969
diff -u -p -r1.969 ChangeLog
--- src/insets/ChangeLog 2004/02/20 10:32:44 1.969
+++ src/insets/ChangeLog 2004/02/21 17:30:12
@@ -1,3 +1,13 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * insetexternal.C, insetgraphics.C, insetinclude.C: use always a
+ temp dir
+ * insetinclude.C (latex): show a GUI warning if textclasses don't
+ match
+ * insetinclude.C: use mangledFilename() for temp files
+ * insetgraphics.C (readInsetGraphics): remove version check, since
+ the graphics inset has no own fileformat number anymore
+
2004-02-20 J�rgen Spitzm�ller <[EMAIL PROTECTED]>
* insetquotes.[Ch]: added new member that allows direct access
Index: src/insets/insetexternal.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/insets/insetexternal.C,v
retrieving revision 1.142
diff -u -p -r1.142 insetexternal.C
--- src/insets/insetexternal.C 2004/02/16 11:58:47 1.142
+++ src/insets/insetexternal.C 2004/02/21 17:30:21
@@ -77,6 +77,7 @@ namespace external {
TempName::TempName()
{
tempname_ = support::tempName(string(), "lyxext");
+ // FIXME: This is unsafe
support::unlink(tempname_);
// must have an extension for the converter code to work correctly.
tempname_ += ".tmp";
@@ -685,8 +686,7 @@ int InsetExternal::latex(Buffer const &
// run through the LaTeX compiler.
// If we're running through the LaTeX compiler, we should write the
// generated files in the bufer's temporary directory.
- bool const external_in_tmpdir =
- lyxrc.use_tempdir && !buf.temppath().empty() && !runparams.nice;
+ bool const external_in_tmpdir = !runparams.nice;
// If the template has specified a PDFLaTeX output, then we try and
// use that.
Index: src/insets/insetgraphics.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/insets/insetgraphics.C,v
retrieving revision 1.236
diff -u -p -r1.236 insetgraphics.C
--- src/insets/insetgraphics.C 2004/02/16 11:58:47 1.236
+++ src/insets/insetgraphics.C 2004/02/21 17:30:23
@@ -29,9 +29,6 @@ TODO
/* NOTES:
* Fileformat:
- * Current version is 1 (inset file format version), when changing it
- * it should be changed in the Write() function when writing in one place
- * and when reading one should change the version check and the error message.
* The filename is kept in the lyx file in a relative way, so as to allow
* moving the document file and its images with no problem.
*
@@ -281,18 +278,7 @@ void InsetGraphics::readInsetGraphics(Ly
continue;
} else if (token == "\\end_inset") {
finished = true;
- } else if (token == "FormatVersion") {
- lex.next();
- int version = lex.getInteger();
- if (version > VersionNumber)
- lyxerr
- << "This document was created with a newer Graphics widget"
- ", You should use a newer version of LyX to read this"
- " file."
- << endl;
- // TODO: Possibly open up a dialog?
- }
- else {
+ } else {
if (!params_.Read(lex, token, bufpath))
lyxerr << "Unknown token, " << token << ", skipping."
<< std::endl;
@@ -469,9 +455,6 @@ string const InsetGraphics::prepareFile(
lyxerr[Debug::GRAPHICS]
<< "\t we have: from " << from << " to " << to << '\n';
- if (from == to && !lyxrc.use_tempdir)
- return stripExtensionIfPossible(orig_file, to);
-
// We're going to be running the exported buffer through the LaTeX
// compiler, so must ensure that LaTeX can cope with the graphics
// file format.
@@ -480,16 +463,14 @@ string const InsetGraphics::prepareFile(
<< "\tthe orig file is: " << orig_file << endl;
bool conversion_needed = true;
- if (lyxrc.use_tempdir) {
- CopyStatus status;
- boost::tie(status, temp_file) =
+ CopyStatus status;
+ boost::tie(status, temp_file) =
copyToDirIfNeeded(orig_file, buf.temppath());
- if (status == FAILURE)
- return orig_file;
- else if (status == IDENTICAL_CONTENTS)
- conversion_needed = false;
- }
+ if (status == FAILURE)
+ return orig_file;
+ else if (status == IDENTICAL_CONTENTS)
+ conversion_needed = false;
if (from == to)
return stripExtensionIfPossible(temp_file, to);
@@ -515,7 +496,7 @@ string const InsetGraphics::prepareFile(
<< "\tto_file_base = " << to_file_base << '\n'
<< "\t from " << from << " to " << to << '\n';
- // if no special converter defined, than we take the default one
+ // if no special converter defined, then we take the default one
// from ImageMagic: convert from:inname.from to:outname.to
if (!converters.convert(&buf, temp_file, to_file_base, from, to)) {
string const command =
Index: src/insets/insetinclude.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/insets/insetinclude.C,v
retrieving revision 1.183
diff -u -p -r1.183 insetinclude.C
--- src/insets/insetinclude.C 2004/02/16 11:58:47 1.183
+++ src/insets/insetinclude.C 2004/02/21 17:30:38
@@ -28,6 +28,7 @@
#include "metricsinfo.h"
#include "outputparams.h"
+#include "frontends/Alert.h"
#include "frontends/LyXView.h"
#include "frontends/Painter.h"
@@ -36,6 +37,7 @@
#include "insets/render_preview.h"
#include "support/FileInfo.h"
+#include "support/filename.h"
#include "support/filetools.h"
#include "support/lstrings.h" // contains
#include "support/tostr.h"
@@ -46,9 +48,11 @@
#include "support/std_sstream.h"
using lyx::support::AddName;
+using lyx::support::bformat;
using lyx::support::ChangeExtension;
using lyx::support::contains;
using lyx::support::FileInfo;
+using lyx::support::FileName;
using lyx::support::GetFileContents;
using lyx::support::IsFileReadable;
using lyx::support::IsLyXFilename;
@@ -307,30 +311,25 @@ int InsetInclude::latex(Buffer const & b
if (loadIfNeeded(buffer, params_)) {
Buffer * tmp = bufferlist.getBuffer(included_file);
- // FIXME: this should be a GUI warning
if (tmp->params().textclass != buffer.params().textclass) {
- lyxerr << "WARNING: Included file `"
- << MakeDisplayPath(included_file)
- << "' has textclass `"
- << tmp->params().getLyXTextClass().name()
- << "' while parent file has textclass `"
- << buffer.params().getLyXTextClass().name()
- << "'." << endl;
+ string text = bformat(_("Included file `%1$s'\n"
+ "has textclass `%2$s'\n"
+ "while parent file has textclass `%3$s'."),
+ MakeDisplayPath(included_file),
+ tmp->params().getLyXTextClass().name(),
+ buffer.params().getLyXTextClass().name());
+ Alert::warning(_("Different textclasses"), text);
//return 0;
}
// write it to a file (so far the complete file)
string writefile = ChangeExtension(included_file, ".tex");
- if (!buffer.temppath().empty() && !runparams.nice) {
- incfile = subst(incfile, '/','@');
-#ifdef __EMX__
- incfile = subst(incfile, ':', '$');
-#endif
- writefile = AddName(buffer.temppath(), incfile);
- } else
- writefile = included_file;
- writefile = ChangeExtension(writefile, ".tex");
+ if (!runparams.nice) {
+ incfile = FileName(writefile).mangledFilename();
+ writefile = MakeAbsPath(incfile, buffer.temppath());
+ }
+
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
@@ -388,15 +387,16 @@ int InsetInclude::linuxdoc(Buffer const
Buffer * tmp = bufferlist.getBuffer(included_file);
// write it to a file (so far the complete file)
- string writefile = ChangeExtension(included_file, ".sgml");
- if (!buffer.temppath().empty() && !runparams.nice) {
- incfile = subst(incfile, '/','@');
- writefile = AddName(buffer.temppath(), incfile);
- } else
+ string writefile;
+ if (IsLyXFilename(included_file))
+ writefile = ChangeExtension(included_file, ".sgml");
+ else
writefile = included_file;
- if (IsLyXFilename(included_file))
- writefile = ChangeExtension(writefile, ".sgml");
+ if (!runparams.nice) {
+ incfile = FileName(writefile).mangledFilename();
+ writefile = MakeAbsPath(incfile, buffer.temppath());
+ }
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
@@ -431,14 +431,16 @@ int InsetInclude::docbook(Buffer const &
Buffer * tmp = bufferlist.getBuffer(included_file);
// write it to a file (so far the complete file)
- string writefile = ChangeExtension(included_file, ".sgml");
- if (!buffer.temppath().empty() && !runparams.nice) {
- incfile = subst(incfile, '/','@');
- writefile = AddName(buffer.temppath(), incfile);
- } else
- writefile = included_file;
+ string writefile;
if (IsLyXFilename(included_file))
- writefile = ChangeExtension(writefile, ".sgml");
+ writefile = ChangeExtension(included_file, ".sgml");
+ else
+ writefile = included_file;
+
+ if (!runparams.nice) {
+ incfile = FileName(writefile).mangledFilename();
+ writefile = MakeAbsPath(incfile, buffer.temppath());
+ }
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
@@ -468,18 +470,14 @@ void InsetInclude::validate(LaTeXFeature
string const included_file = includedFilename(buffer, params_);
if (IsLyXFilename(included_file))
- writefile = ChangeExtension(writefile, ".sgml");
- else if (!buffer.temppath().empty() &&
- !features.nice() &&
- !isVerbatim(params_)) {
- incfile = subst(incfile, '/','@');
-#ifdef __EMX__
-// FIXME: It seems that the following is necessary (see latex() above)
-// incfile = subst(incfile, ':', '$');
-#endif
- writefile = AddName(buffer.temppath(), incfile);
- } else
+ writefile = ChangeExtension(included_file, ".sgml");
+ else
writefile = included_file;
+
+ if (!features.nice() && !isVerbatim(params_)) {
+ incfile = FileName(writefile).mangledFilename();
+ writefile = MakeAbsPath(incfile, buffer.temppath());
+ }
features.includeFile(include_label, writefile);
Index: src/support/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/support/ChangeLog,v
retrieving revision 1.237
diff -u -p -r1.237 ChangeLog
--- src/support/ChangeLog 2004/02/01 12:46:13 1.237
+++ src/support/ChangeLog 2004/02/21 17:32:21
@@ -1,3 +1,13 @@
+2004-02-21 Georg Baum <[EMAIL PROTECTED]>
+
+ * filetools.[Ch] (CreateBufferTmpDir): rename to createBufferTmpDir,
+ remove pathfor argument
+ * filetools.[Ch] (CreateLyXTmpDir): rename to createLyXTmpDir, try
+ harder to create a usable temp dir
+ * filetools.C (CreateTmpDir): rename to createTmpDir
+ filetools.[Ch] (unzipFile): add argument for output filename
+ * filename.h: fix doxygen warning
+
2004-02-01 Lars Gullik Bjonnes <[EMAIL PROTECTED]>
* lstrings.h (contains_functor): delete
Index: src/support/filename.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/support/filename.h,v
retrieving revision 1.6
diff -u -p -r1.6 filename.h
--- src/support/filename.h 2003/10/06 15:43:17 1.6
+++ src/support/filename.h 2004/02/21 17:32:35
@@ -22,7 +22,7 @@ namespace support {
class FileName {
public:
FileName();
- /** \param filename the file in question. Must have an absolute path.
+ /** \param abs_filename the file in question. Must have an absolute path.
* \param save_abs_path how is the file to be output to file?
*/
FileName(std::string const & abs_filename, bool save_abs_path = true);
Index: src/support/filetools.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/support/filetools.C,v
retrieving revision 1.176
diff -u -p -r1.176 filetools.C
--- src/support/filetools.C 2003/10/16 16:41:32 1.176
+++ src/support/filetools.C 2004/02/21 17:32:58
@@ -440,11 +440,11 @@ int DeleteAllFilesInDir(string const & p
}
-string const CreateTmpDir(string const & tempdir, string const & mask)
+string const createTmpDir(string const & tempdir, string const & mask)
{
lyxerr[Debug::FILES]
- << "CreateTmpDir: tempdir=`" << tempdir << "'\n"
- << "CreateTmpDir: mask=`" << mask << '\'' << endl;
+ << "createTmpDir: tempdir=`" << tempdir << "'\n"
+ << "createTmpDir: mask=`" << mask << '\'' << endl;
string const tmpfl(tempName(tempdir, mask));
// lyx::tempName actually creates a file to make sure that it
@@ -453,8 +453,11 @@ string const CreateTmpDir(string const &
// safe because of the gap between unlink and mkdir. (Lgb)
unlink(tmpfl);
- if (tmpfl.empty() || mkdir(tmpfl, 0700))
+ if (tmpfl.empty() || mkdir(tmpfl, 0700)) {
+ lyxerr << "LyX could not create the temporary directory '"
+ << tmpfl << "'" << endl;
return string();
+ }
return MakeAbsPath(tmpfl);
}
@@ -477,36 +480,47 @@ int destroyDir(string const & tmpdir)
}
-string const CreateBufferTmpDir(string const & pathfor)
+string const createBufferTmpDir()
{
static int count;
- static string const tmpdir(pathfor.empty() ? os::getTmpDir() : pathfor);
// We are in our own directory. Why bother to mangle name?
// In fact I wrote this code to circumvent a problematic behaviour (bug?)
// of EMX mkstemp().
- string const tmpfl = tmpdir + "/lyx_tmpbuf" + tostr(count++);
+ string const tmpfl = os::getTmpDir() + "/lyx_tmpbuf" + tostr(count++);
if (mkdir(tmpfl, 0777)) {
+ lyxerr << "LyX could not create the temporary directory '"
+ << tmpfl << "'" << endl;
return string();
}
return tmpfl;
}
-string const CreateLyXTmpDir(string const & deflt)
+string const createLyXTmpDir(string const & deflt)
{
- if ((!deflt.empty()) && (deflt != "/tmp")) {
+ if (!deflt.empty() && deflt != "/tmp") {
if (mkdir(deflt, 0777)) {
+ if (IsDirWriteable(deflt))
+ // deflt could not be created because it
+ // did exist already, so let's create our own
+ // dir inside deflt.
#ifdef __EMX__
- Path p(user_lyxdir());
+ Path p(user_lyxdir());
+#endif
+ return createTmpDir(deflt, "lyx_tmpdir");
+ else
+ // some other error occured.
+#ifdef __EMX__
+ Path p(user_lyxdir());
#endif
- return CreateTmpDir(deflt, "lyx_tmpdir");
+ return createTmpDir("/tmp", "lyx_tmpdir");
} else
return deflt;
} else {
#ifdef __EMX__
Path p(user_lyxdir());
#endif
- return CreateTmpDir("/tmp", "lyx_tmpdir");
+ return createTmpDir("/tmp", "lyx_tmpdir");
}
}
@@ -1080,9 +1094,10 @@ string const unzippedFileName(string con
}
-string const unzipFile(string const & zipped_file)
+string const unzipFile(string const & zipped_file, string const & unzipped_file)
{
- string const tempfile = unzippedFileName(zipped_file);
+ string const tempfile = unzipped_file.empty() ?
+ unzippedFileName(zipped_file) : unzipped_file;
// Run gunzip
string const command = "gunzip -c " + zipped_file + " > " + tempfile;
Systemcall one;
Index: src/support/filetools.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/support/filetools.h,v
retrieving revision 1.53
diff -u -p -r1.53 filetools.h
--- src/support/filetools.h 2003/10/06 15:43:18 1.53
+++ src/support/filetools.h 2004/02/21 17:32:59
@@ -22,14 +22,19 @@ namespace support {
/// remove directory and all contents, returns 0 on success
int destroyDir(std::string const & tmpdir);
-///
-std::string const CreateBufferTmpDir(std::string const & pathfor = std::string());
+/// Creates the per buffer temporary directory
+std::string const createBufferTmpDir();
/// Creates directory. Returns true on success
bool createDirectory(std::string const & name, int permissions);
-///
-std::string const CreateLyXTmpDir(std::string const & deflt);
+/** Creates the global LyX temp dir.
+ \p deflt can be an existing directory name. In this case a new directory
+ inside \p deflt is created. If \p deflt does not exist yet, \p deflt is
+ created and used as the temporary directory.
+ \return the tmp dir name or string() if something went wrong.
+ */
+std::string const createLyXTmpDir(std::string const & deflt);
/** Find file by searching several directories.
Uses a string of paths separated by ";"s to find a file to open.
@@ -141,11 +146,18 @@ std::string const getExtFromContents(std
/// check for zipped file
bool zippedFile(std::string const & name);
-/// \return the name that LyX will give to the unzipped file.
+/** \return the name that LyX will give to the unzipped file \p zipped_file
+ if the second argument of unzipFile() is empty.
+ */
std::string const unzippedFileName(std::string const & zipped_file);
-/// unzip a file
-std::string const unzipFile(std::string const & zipped_file);
+/** Unzip \p zipped_file.
+ The unzipped file is named \p unzipped_file if \p unzipped_file is not
+ empty, and unzippedFileName(\p zipped_file) otherwise.
+ Will overwrite an already existing unzipped file without warning.
+ */
+std::string const unzipFile(std::string const & zipped_file,
+ std::string const & unzipped_file = std::string());
/// Returns true is path is absolute
bool AbsolutePath(std::string const & path);