]> git.lyx.org Git - lyx.git/blobdiff - src/support/filetools.C
tostr -> convert and some bformat work
[lyx.git] / src / support / filetools.C
index 4d1cd6c8b271aeebd201104322ce1da901bca4ff..4b29034661b3e84e5c6df4810061214b1299bf4c 100644 (file)
 
 #include <config.h>
 
-#include "debug.h"
 #include "support/tostr.h"
 #include "support/systemcall.h"
-
-#include "filetools.h"
-#include "lstrings.h"
-#include "FileInfo.h"
-#include "forkedcontr.h"
-#include "path.h"
-#include "path_defines.h"
+#include "support/filetools.h"
+#include "support/lstrings.h"
+#include "support/FileInfo.h"
+#include "support/forkedcontr.h"
+#include "support/path.h"
+#include "support/path_defines.h"
+#include "support/lyxlib.h"
+#include "support/os.h"
+
+// FIXME Interface violation
 #include "gettext.h"
-#include "lyxlib.h"
-#include "os.h"
-
-#include "support/std_sstream.h"
+#include "debug.h"
 
 #include <boost/assert.hpp>
 #include <boost/regex.hpp>
 
+#include <fcntl.h>
+
 #include <cctype>
 #include <cstdlib>
 #include <cstdio>
-#include <fcntl.h>
 #include <cerrno>
 
 #include <utility>
 #include <fstream>
+#include <sstream>
 
 
 // Which part of this is still necessary? (JMarc).
@@ -184,7 +185,7 @@ string const FileOpenSearch(string const & path, string const & name,
        string tmppath = split(path, path_element, ';');
 
        while (notfound && !path_element.empty()) {
-               path_element = os::slashify_path(path_element);
+               path_element = os::internal_path(path_element);
                if (!suffixIs(path_element, '/'))
                        path_element+= '/';
                path_element = subst(path_element, "$$LyX", system_lyxdir());
@@ -335,7 +336,7 @@ i18nLibFileSearch(string const & dir, string const & name,
        string l;
        lang = split(lang, l, ':');
        while (!l.empty() && l != "C" && l != "POSIX") {
-               string const tmp = LibFileSearch(dir, 
+               string const tmp = LibFileSearch(dir,
                                                 token(l, '_', 0) + '_' + name,
                                                 ext);
                if (!tmp.empty())
@@ -372,7 +373,7 @@ string const LibScriptSearch(string const & command_in)
        } else {
                // Replace "$$s/some_script" with "$LYX_SCRIPT_PATH/some_script"
                string::size_type const size_replace = size_script + 4;
-               command.replace(pos1, size_replace, script);
+               command.replace(pos1, size_replace, QuoteName(script));
        }
 
        return command;
@@ -393,7 +394,7 @@ string const GetEnvPath(string const & name)
 #ifndef __EMX__
        string const pathlist = subst(GetEnv(name), ':', ';');
 #else
-       string const pathlist = os::slashify_path(GetEnv(name));
+       string const pathlist = os::internal_path(GetEnv(name));
 #endif
        return rtrim(pathlist, ";");
 }
@@ -496,7 +497,7 @@ string const createBufferTmpDir()
        // 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 = os::getTmpDir() + "/lyx_tmpbuf" + tostr(count++);
+       string const tmpfl = os::getTmpDir() + "/lyx_tmpbuf" + convert<string>(count++);
        if (mkdir(tmpfl, 0777)) {
                lyxerr << "LyX could not create the temporary directory '"
                       << tmpfl << "'" << endl;
@@ -537,7 +538,7 @@ string const createLyXTmpDir(string const & deflt)
 
 bool createDirectory(string const & path, int permission)
 {
-       string temp(rtrim(os::slashify_path(path), "/"));
+       string temp(rtrim(os::internal_path(path), "/"));
 
        BOOST_ASSERT(!temp.empty());
 
@@ -572,7 +573,7 @@ string const MakeAbsPath(string const & RelPath, string const & BasePath)
                return RelPath;
 
        // Copies given paths
-       string TempRel(os::slashify_path(RelPath));
+       string TempRel(os::internal_path(RelPath));
        // Since TempRel is NOT absolute, we can safely replace "//" with "/"
        TempRel = subst(TempRel, "//", "/");
 
@@ -623,7 +624,7 @@ string const MakeAbsPath(string const & RelPath, string const & BasePath)
        }
 
        // returns absolute path
-       return os::slashify_path(TempBase);
+       return os::internal_path(TempBase);
 }
 
 
@@ -638,7 +639,7 @@ string const AddName(string const & path, string const & fname)
        string buf;
 
        if (path != "." && path != "./" && !path.empty()) {
-               buf = os::slashify_path(path);
+               buf = os::internal_path(path);
                if (!suffixIs(path, '/'))
                        buf += '/';
        }
@@ -689,7 +690,7 @@ string const ExpandPath(string const & path)
                return getcwd() + '/' + RTemp;
        }
        if (Temp == "~") {
-               return GetEnvPath("HOME") + '/' + RTemp;
+               return os::homepath() + '/' + RTemp;
        }
        if (Temp == "..") {
                return MakeAbsPath(copy);
@@ -839,10 +840,10 @@ string const MakeRelPath(string const & abspath, string const & basepath)
 string const AddPath(string const & path, string const & path_2)
 {
        string buf;
-       string const path2 = os::slashify_path(path_2);
+       string const path2 = os::internal_path(path_2);
 
        if (!path.empty() && path != "." && path != "./") {
-               buf = os::slashify_path(path);
+               buf = os::internal_path(path);
                if (path[path.length() - 1] != '/')
                        buf += '/';
        }
@@ -876,7 +877,7 @@ string const ChangeExtension(string const & oldname, string const & extension)
        else
                ext = extension;
 
-       return os::slashify_path(oldname.substr(0, last_dot) + ext);
+       return os::internal_path(oldname.substr(0, last_dot) + ext);
 }
 
 
@@ -893,6 +894,7 @@ string const GetExtension(string const & name)
                return string();
 }
 
+
 // the different filetypes and what they contain in one of the first lines
 // (dots are any characters).          (Herbert 20020131)
 // AGR Grace...
@@ -920,16 +922,12 @@ string const GetExtension(string const & name)
 // ZIP PK...                   http://www.halyava.ru/document/ind_arch.htm
 // Z   \037\235                UNIX compress
 
-/// return the "extension" which belongs to the contents.
-/// for no knowing contents return the extension. Without
-/// an extension and unknown contents we return "user"
-string const getExtFromContents(string const & filename)
+string const getFormatFromContents(string const & filename)
 {
        // paranoia check
        if (filename.empty() || !IsFileReadable(filename))
                return string();
 
-
        ifstream ifs(filename.c_str());
        if (!ifs)
                // Couldn't open file...
@@ -948,12 +946,13 @@ string const getExtFromContents(string const & filename)
        int const max_count = 50;
        int count = 0;
 
-       string str, format;
+       string str;
+       string format;
        bool firstLine = true;
        while ((count++ < max_count) && format.empty()) {
                if (ifs.eof()) {
                        lyxerr[Debug::GRAPHICS]
-                               << "filetools(getExtFromContents)\n"
+                               << "filetools(getFormatFromContents)\n"
                                << "\tFile type not recognised before EOF!"
                                << endl;
                        break;
@@ -1068,27 +1067,17 @@ string const getExtFromContents(string const & filename)
                return format;
        }
 
-       string const ext(GetExtension(filename));
        lyxerr[Debug::GRAPHICS]
-               << "filetools(getExtFromContents)\n"
-               << "\tCouldn't find a known Type!\n";
-       if (!ext.empty()) {
-           lyxerr[Debug::GRAPHICS]
-               << "\twill take the file extension -> "
-               << ext << endl;
-               return ext;
-       } else {
-           lyxerr[Debug::GRAPHICS]
-               << "\twill use ext or a \"user\" defined format" << endl;
-           return "user";
-       }
+               << "filetools(getFormatFromContents)\n"
+               << "\tCouldn't find a known format!\n";
+       return string();
 }
 
 
 /// check for zipped file
 bool zippedFile(string const & name)
 {
-       string const type = getExtFromContents(name);
+       string const type = getFormatFromContents(name);
        if (contains("gzip zip compress", type) && !type.empty())
                return true;
        return false;
@@ -1122,7 +1111,7 @@ string const MakeDisplayPath(string const & path, unsigned int threshold)
 {
        string str = path;
 
-       string const home(GetEnvPath("HOME"));
+       string const home(os::homepath());
 
        // replace /home/blah with ~/
        if (prefixIs(str, home))
@@ -1156,6 +1145,7 @@ string const MakeDisplayPath(string const & path, unsigned int threshold)
 
 bool LyXReadLink(string const & file, string & link, bool resolve)
 {
+#ifdef HAVE_READLINK
        char linkbuffer[512];
        // Should be PATH_MAX but that needs autconf support
        int const nRead = ::readlink(file.c_str(),
@@ -1168,6 +1158,9 @@ bool LyXReadLink(string const & file, string & link, bool resolve)
        else
                link = linkbuffer;
        return true;
+#else
+       return false;
+#endif
 }
 
 
@@ -1303,7 +1296,7 @@ string const readBB_from_PSFile(string const & file)
        bool zipped = zippedFile(file);
        string const file_ = zipped ?
                string(unzipFile(file)) : string(file);
-       string const format = getExtFromContents(file_);
+       string const format = getFormatFromContents(file_);
 
        if (format != "eps" && format != "ps") {
                readBB_lyxerrMessage(file_, zipped,"no(e)ps-format");