]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Fix bug 4463. The crash was due to a call to X from inside a child process.
[lyx.git] / src / Buffer.cpp
index 7ccf355a8e58d931102c7f76daa81e02d048ebf6..90b47b4e40089c6897e0f7cd85bd8daac60cde9e 100644 (file)
@@ -2076,7 +2076,7 @@ void Buffer::writeParentMacros(odocstream & os) const
                MacroData const * data = 
                d->parent_buffer->getMacro(*it, *this, false);
                if (data)
-                       data->write(os, true);          
+                       data->write(os, true);  
        }
 }
 
@@ -2260,14 +2260,12 @@ private:
 };
 
 
-#if !defined (HAVE_FORK)
-# define fork() -1
-#endif
-
 int AutoSaveBuffer::generateChild()
 {
        // tmp_ret will be located (usually) in /tmp
        // will that be a problem?
+       // Note that this calls ForkedCalls::fork(), so it's
+       // ok cross-platform.
        pid_t const pid = fork();
        // If you want to debug the autosave
        // you should set pid to -1, and comment out the fork.
@@ -2467,40 +2465,40 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
        if (!success)
                return false;
 
-       if (put_in_tempdir)
+       if (put_in_tempdir) {
                result_file = tmp_result_file.absFilename();
-       else {
-               result_file = changeExtension(absFileName(), ext);
-               // We need to copy referenced files (e. g. included graphics
-               // if format == "dvi") to the result dir.
-               vector<ExportedFile> const files =
-                       runparams.exportdata->externalFiles(format);
-               string const dest = onlyPath(result_file);
-               CopyStatus status = SUCCESS;
-               for (vector<ExportedFile>::const_iterator it = files.begin();
-                               it != files.end() && status != CANCEL; ++it) {
-                       string const fmt =
-                               formats.getFormatFromFile(it->sourceName);
-                       status = copyFile(fmt, it->sourceName,
-                                         makeAbsPath(it->exportName, dest),
-                                         it->exportName, status == FORCE);
-               }
-               if (status == CANCEL) {
-                       message(_("Document export cancelled."));
-               } else if (tmp_result_file.exists()) {
-                       // Finally copy the main file
-                       status = copyFile(format, tmp_result_file,
-                                         FileName(result_file), result_file,
-                                         status == FORCE);
-                       message(bformat(_("Document exported as %1$s "
-                                                              "to file `%2$s'"),
-                                               formats.prettyName(format),
-                                               makeDisplayPath(result_file)));
-               } else {
-                       // This must be a dummy converter like fax (bug 1888)
-                       message(bformat(_("Document exported as %1$s"),
-                                               formats.prettyName(format)));
-               }
+               return true;
+       }
+
+       result_file = changeExtension(absFileName(), ext);
+       // We need to copy referenced files (e. g. included graphics
+       // if format == "dvi") to the result dir.
+       vector<ExportedFile> const files =
+               runparams.exportdata->externalFiles(format);
+       string const dest = onlyPath(result_file);
+       CopyStatus status = SUCCESS;
+       for (vector<ExportedFile>::const_iterator it = files.begin();
+               it != files.end() && status != CANCEL; ++it) {
+               string const fmt = formats.getFormatFromFile(it->sourceName);
+               status = copyFile(fmt, it->sourceName,
+                       makeAbsPath(it->exportName, dest),
+                       it->exportName, status == FORCE);
+       }
+       if (status == CANCEL) {
+               message(_("Document export cancelled."));
+       } else if (tmp_result_file.exists()) {
+               // Finally copy the main file
+               status = copyFile(format, tmp_result_file,
+                       FileName(result_file), result_file,
+                       status == FORCE);
+               message(bformat(_("Document exported as %1$s "
+                       "to file `%2$s'"),
+                       formats.prettyName(format),
+                       makeDisplayPath(result_file)));
+       } else {
+               // This must be a dummy converter like fax (bug 1888)
+               message(bformat(_("Document exported as %1$s"),
+                       formats.prettyName(format)));
        }
 
        return true;