// -*- C++-*-
/* lyx-filetool.h : tools functions for file/path handling
this file is part of LyX, the High Level Word Processor
- Copyright 1995-1999, Matthias Ettrich and the LyX Team
+ Copyright 1995-2000, Matthias Ettrich and the LyX Team
*/
#ifndef LYX_FILETOOL_H
#pragma interface
#endif
-#include <cstdio>
#include <cstdlib>
#include <fcntl.h>
#include <cerrno>
+
#include "debug.h"
#include "LString.h"
#include "support/lstrings.h"
-/** A file class.
- Use this instead of FILE *, it gives a much better structure.
- It should prehaps do a bit more error checking than it does now.
- Currently it is a verbatim copy from p309 of Bjarne Stroupstrups
- The C++ Programming Language. + some additions.
- */
-class FilePtr {
-public:
- ///
- enum file_mode {
- read,
- write,
- update,
- truncate
- };
- ///
- FilePtr(string const & name, file_mode mode) {
- init();
- do_open(name, mode);
- }
- ///
- FilePtr(FILE * pp) { init(); p = pp; }
- ///
- ~FilePtr() { close(); }
-
- /** Use this if you want to rebind the FilePtr to another file.
- */
- FilePtr & reopen(string const & name, file_mode mode) {
- // close the file it it is already open
- close();
- // Now open the file.
- do_open(name, mode);
-
- return *this;
- }
- /** Close the file.
- Use this with some carefullness. After it has been used
- the FilePtr is unusable. Only use it if it is important
- that the file is closed before the FilePtr goes out
- of scope. */
- int close() {
- if (p) {
- int result = fclose(p);
- p = 0;
- return result;
- } else
- return 0;
- }
- /// automatic converson to FILE* if that is needed.
- operator FILE*() { return p; }
- ///
- FilePtr & operator=(FILE * f) { p= f; return *this;}
- ///
- FILE * operator()() { return p; }
-private:
- ///
- void do_open(string const & name, file_mode mode) {
- string modestr;
-
- switch(mode) {
- // do appropiate #ifdef here so support EMX
-#ifndef __EMX__
- case read: modestr = "r"; break;
- case write: modestr = "w"; break;
-#else
- case read: modestr = "rt"; break; // Can read both DOS & UNIX text files.
- case write: modestr = "w"; break; // Write UNIX text files.
-#endif
-
- case update: modestr = "r+"; break;
- case truncate: modestr = "w+"; break;
- }
- // Should probably be rewritten to use open(2)
- if((p = fopen(name.c_str(), modestr.c_str()))) {
- // file succesfully opened.
- if (fcntl(fileno(p), F_SETFD, FD_CLOEXEC) == -1) {
- p = 0;
- }
- } else {
- // we have an error let's check what it is.
- switch(errno) {
- case EINVAL:
- // Internal LyX error.
- lyxerr << "FilePtr: Wrong parameter given to fopen." << endl;
- break;
- default:
- // unknown error
- break;
- }
- }
- }
- ///
- void init() { p = 0; }
- ///
- FILE * p;
-};
-
///
string CreateBufferTmpDir (string const & pathfor = string());
///
bool IsLyXFilename(string const & filename);
-///
-bool IsSGMLFilename(string const & filename);
-
/** Returns the path of a library data file.
Search the file name.ext in the subdirectory dir of
\begin{enumerate}
string AddPath(string const & path, string const & path2);
/** Change extension of oldname to extension.
- If no_path is true, the path is stripped from the filename.
If oldname does not have an extension, it is appended.
If the extension is empty, any extension is removed from the name.
*/
-string ChangeExtension(string const & oldname, string const & extension,
- bool no_path);
+string ChangeExtension(string const & oldname, string const & extension);
/// Create absolute path. If impossible, don't do anything
string ExpandPath(string const & path);
*/
string ReplaceEnvironmentPath(string const & path);
-/* Set Link to the path File Points to as a symbolic link.
- Return True if succesfull, False other wise */
+/* Set Link to the path file points to as a symbolic link.
+ Returns true if successful */
bool LyXReadLink(string const & file, string & Link);
/* Uses kpsewhich to find tex files */