Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2021-02-12 15:06:13 +0300
committerHannah von Reth <vonreth@kde.org>2021-02-12 16:59:06 +0300
commit483cffffc2416adb3c8443843094855507407ccb (patch)
treea8b1473725420e03b7dee9754b312245b05d8410 /src
parentabb84cb2d0dd4d6262c1afff991c2baa5d5f13b9 (diff)
Fix Windows long path issue introduced in dd641fae997d71c8396b77def2fa25ad96fdf47f
Diffstat (limited to 'src')
-rw-r--r--src/csync/vio/csync_vio_local_win.cpp30
-rw-r--r--src/libsync/filesystem.cpp2
2 files changed, 10 insertions, 22 deletions
diff --git a/src/csync/vio/csync_vio_local_win.cpp b/src/csync/vio/csync_vio_local_win.cpp
index befb92caf..26825d801 100644
--- a/src/csync/vio/csync_vio_local_win.cpp
+++ b/src/csync/vio/csync_vio_local_win.cpp
@@ -32,6 +32,7 @@
#include "csync_util.h"
#include "vio/csync_vio_local.h"
#include "common/filesystembase.h"
+#include "common/utility.h"
#include <QtCore/QLoggingCategory>
@@ -50,8 +51,6 @@ struct csync_vio_handle_t {
QString path; // Always ends with '\'
};
-static int _csync_vio_local_stat_mb(const mbchar_t *uri, csync_file_stat_t *buf);
-
csync_vio_handle_t *csync_vio_local_opendir(const QString &name) {
QScopedPointer<csync_vio_handle_t> handle(new csync_vio_handle_t{});
@@ -172,12 +171,9 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
file_stat->size = (handle->ffd.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + handle->ffd.nFileSizeLow;
file_stat->modtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem);
- std::wstring fullPath;
- fullPath.reserve(handle->path.size() + std::wcslen(handle->ffd.cFileName));
- fullPath += handle->path.toStdWString(); // path always ends with '\', by construction
- fullPath += handle->ffd.cFileName;
+ // path always ends with '\', by construction
- if (_csync_vio_local_stat_mb(fullPath.data(), file_stat.get()) < 0) {
+ if (csync_vio_local_stat(handle->path + QString::fromWCharArray(handle->ffd.cFileName), file_stat.get()) < 0) {
// Will get excluded by _csync_detect_update.
file_stat->type = ItemTypeSkip;
}
@@ -185,16 +181,8 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
return file_stat;
}
-
int csync_vio_local_stat(const QString &uri, csync_file_stat_t *buf)
{
- const std::wstring wuri = uri.toStdWString();
- int rc = _csync_vio_local_stat_mb(wuri.data(), buf);
- return rc;
-}
-
-static int _csync_vio_local_stat_mb(const mbchar_t *wuri, csync_file_stat_t *buf)
-{
/* Almost nothing to do since csync_vio_local_readdir already filled up most of the information
But we still need to fetch the file ID.
Possible optimisation: only fetch the file id when we need it (for new files)
@@ -204,19 +192,19 @@ static int _csync_vio_local_stat_mb(const mbchar_t *wuri, csync_file_stat_t *buf
BY_HANDLE_FILE_INFORMATION fileInfo;
ULARGE_INTEGER FileIndex;
- h = CreateFileW( wuri, 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
- NULL, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
- NULL );
+ h = CreateFileW(reinterpret_cast<const wchar_t *>(OCC::FileSystem::longWinPath(uri).utf16()), 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
+ NULL, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
+ NULL);
if( h == INVALID_HANDLE_VALUE ) {
- qCCritical(lcCSyncVIOLocal, "CreateFileW failed on %ls", wuri);
errno = GetLastError();
+ qCCritical(lcCSyncVIOLocal) << "CreateFileW failed on" << uri << OCC::Utility::formatWinError(errno);
return -1;
}
if(!GetFileInformationByHandle( h, &fileInfo ) ) {
- qCCritical(lcCSyncVIOLocal, "GetFileInformationByHandle failed on %ls", wuri);
errno = GetLastError();
+ qCCritical(lcCSyncVIOLocal) << "GetFileInformationByHandle failed on" << uri << OCC::Utility::formatWinError(errno);
CloseHandle(h);
return -1;
}
diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp
index b9f6b0df3..a1cece063 100644
--- a/src/libsync/filesystem.cpp
+++ b/src/libsync/filesystem.cpp
@@ -124,7 +124,7 @@ static qint64 getSizeWithCsync(const QString &filename)
if (csync_vio_local_stat(filename, &stat) != -1) {
result = stat.size;
} else {
- qCWarning(lcFileSystem) << "Could not get size for" << filename << "with csync";
+ qCWarning(lcFileSystem) << "Could not get size for" << filename << "with csync" << Utility::formatWinError(errno);
}
return result;
}