#include <shellapi.h>
#include <shlwapi.h>
#include <limits.h>
+#include <stdlib.h>
+
#include <sys/cygwin.h>
-#include <sys/stat.h>
using namespace std;
}
+bool path_prefix_is(string const & path, string const & pre)
+{
+ return path_prefix_is(const_cast<string &>(path), pre, CASE_UNCHANGED);
+}
+
+
+bool path_prefix_is(string & path, string const & pre, path_case how)
+{
+ docstring const p1 = from_utf8(path);
+ docstring const p2 = from_utf8(pre);
+ docstring::size_type const p1_len = p1.length();
+ docstring::size_type const p2_len = p2.length();
+ docstring::size_type common_len = common_path(p1, p2);
+
+ if (p2[p2_len - 1] == '/' && p1_len != p2_len)
+ ++common_len;
+
+ if (common_len != p2_len)
+ return false;
+
+ if (how == CASE_ADJUSTED && !prefixIs(path, pre)) {
+ if (p1_len < common_len)
+ path = to_utf8(p2.substr(0, p1_len));
+ else
+ path = to_utf8(p2 + p1.substr(common_len,
+ p1_len - common_len));
+ }
+
+ return true;
+}
+
+
string external_path(string const & p)
{
return convert_path(p, PathStyle(posix));
// on windows_style_tex_paths_), but we use always forward slashes,
// since it gets written into a .tex file.
- if (windows_style_tex_paths_ && FileName(p).isAbsolute()) {
+ if (windows_style_tex_paths_ && FileName::isAbsolute(p)) {
string dos_path = convert_path(p, PathStyle(windows));
LYXERR(Debug::LATEX, "<Path correction for LaTeX> ["
<< p << "]->>[" << dos_path << ']');
}
+bool is_terminal(io_channel channel)
+{
+ return isatty(channel);
+}
+
+
shell_type shell()
{
return UNIX;
}
-bool isSameFile(string const & fileone, string const & filetwo)
+string real_path(string const & path)
{
- struct stat st1;
- struct stat st2;
-
- if (::stat(fileone.c_str(), &st1) == 0
- && ::stat(filetwo.c_str(), &st2) == 0) {
- return st1.st_ino == st2.st_ino && st1.st_dev == st2.st_dev;
- }
-
- // One or both files cannot be accessed.
- return false;
+ char rpath[PATH_MAX + 1];
+ char * result = realpath(path.c_str(), rpath);
+ return FileName::fromFilesystemEncoding(result ? rpath : path).absFilename();
}
} // namespace os