Fix computation of file:// urls from paths

--HG--
branch : WINDOWSPORT
This commit is contained in:
Jean-Francois Dockes 2015-09-02 09:11:25 +02:00
parent a66209dc6e
commit 8022515a00
8 changed files with 29 additions and 4 deletions

View File

@ -1212,7 +1212,7 @@ void RclConfig::urlrewrite(const string& dbdir, string& url) const
// This call always succeeds because the key comes from getNames()
if (m_ptrans->get(*it, npath, dbdir)) {
path = path.replace(0, it->size(), npath);
url = "file://" + path;
url = path_pathtofileurl(path);
}
break;
}

View File

@ -769,7 +769,7 @@ FsIndexer::processonefile(RclConfig *config,
if (doc.fmtime.empty())
doc.fmtime = ascdate;
if (doc.url.empty())
doc.url = cstr_fileu + fn;
doc.url = path_pathtofileurl(fn);
const string *fnp = 0;
if (doc.ipath.empty()) {
if (!doc.peekmeta(Rcl::Doc::keyfn, &fnp) || fnp->empty())
@ -865,7 +865,7 @@ FsIndexer::processonefile(RclConfig *config,
fileDoc.meta[Rcl::Doc::keytcfn] = utf8fn;
fileDoc.haschildren = true;
fileDoc.mimetype = mimetype;
fileDoc.url = cstr_fileu + fn;
fileDoc.url = path_pathtofileurl(fn);
if (m_havelocalfields)
setlocalfields(localfields, fileDoc);
char cbuf[100];

View File

@ -22,6 +22,8 @@
#ifndef _WIN32
#include <sys/time.h>
#include <sys/resource.h>
#else
#include <direct.h>
#endif
#include "safefcntl.h"
#include "safeunistd.h"

View File

@ -74,7 +74,7 @@ class DLFWImpl {
fp = fopen(filename, (truncate) ? "w" : "a");
if (fp) {
setvbuf(fp, 0, _IOLBF, BUFSIZ);
#ifdef O_APPEND
#if defined(O_APPEND) && !defined(_WIN32)
{
int flgs = 0;
fcntl(fileno(fp), F_GETFL, &flgs);

View File

@ -22,6 +22,7 @@
#include "safefcntl.h"
#include "safeunistd.h"
#include "dirent.h"
#include "cstr.h"
#ifdef _WIN32
#include "safewindows.h"
#else
@ -818,6 +819,17 @@ string fileurltolocalpath(string url)
return url;
}
string path_pathtofileurl(const string& path)
{
// We're supposed to receive a canonic absolute path, but on windows we
// may need to add a '/' in front of the drive spec
string url(cstr_fileu);
if (path.empty() || path[0] != '/')
url.push_back('/');
url += path;
return url;
}
bool urlisfileurl(const string& url)
{
return url.find("file://") == 0;

View File

@ -109,6 +109,9 @@ extern bool path_isabsolute(const std::string& s);
/// Test if path is root (x:/). root is defined by root/.. == root
extern bool path_isroot(const std::string& p);
/// Turn absolute path into file:// url
extern std::string path_pathtofileurl(const std::string& path);
/// Temporary file class
class TempFileInternal {
public:

View File

@ -145,6 +145,7 @@
<ClInclude Include="..\index\mimetype.h" />
<ClInclude Include="..\internfile\internfile.h" />
<ClInclude Include="..\internfile\mh_symlink.h" />
<ClInclude Include="..\utils\cpuconf.h" />
<ClInclude Include="..\utils\debuglog.h" />
<ClInclude Include="..\utils\execmd.h" />
<ClInclude Include="..\utils\md5.h" />
@ -212,6 +213,7 @@
<ClCompile Include="..\utils\circache.cpp" />
<ClCompile Include="..\utils\conftree.cpp" />
<ClCompile Include="..\utils\copyfile.cpp" />
<ClCompile Include="..\utils\cpuconf.cpp" />
<ClCompile Include="..\utils\debuglog.cpp" />
<ClCompile Include="..\utils\fileudi.cpp" />
<ClCompile Include="..\utils\fstreewalk.cpp" />

View File

@ -90,6 +90,9 @@
<ClInclude Include="..\utils\wipedir.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\utils\cpuconf.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\utils\smallut.cpp">
@ -287,6 +290,9 @@
<ClCompile Include="..\utils\strmatcher.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\utils\cpuconf.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="ClassDiagram.cd" />