From: Olivier Goffart Date: Mon, 21 Dec 2015 13:25:30 +0000 (+0100) Subject: csync_vio_local_stat: Win: fetch mtime and size if not previously fetched X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~1254^2~138 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cf5b1e401c0e0c8284bcfd8c12721a09175ed1b4;p=nextcloud-desktop.git csync_vio_local_stat: Win: fetch mtime and size if not previously fetched Since owncloud 2.1, csync_vio_local_stat was optimized because readdir would already fetch most of the info. This works for the discovery, but not later. And we used this function later for symliks and co. So this fixes the .lnk on windows Issue #4300 --- diff --git a/csync/src/vio/csync_vio_local_win.c b/csync/src/vio/csync_vio_local_win.c index 80e122851..7bf403315 100644 --- a/csync/src/vio/csync_vio_local_win.c +++ b/csync/src/vio/csync_vio_local_win.c @@ -250,6 +250,17 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) { /* printf("Index: %I64i\n", FileIndex.QuadPart); */ buf->inode = FileIndex.QuadPart; + if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE)) { + buf->size = (fileInfo.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + fileInfo.nFileSizeLow; + buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; + } + if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_MTIME)) { + DWORD rem; + buf->mtime = FileTimeToUnixTime(&fileInfo.ftLastWriteTime, &rem); + /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */ + buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; + } + c_free_locale_string(wuri); CloseHandle(h); return 0; diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index e28cfde20..569997925 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -414,7 +414,7 @@ static qint64 getSizeWithCsync(const QString& filename) && (stat->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE)) { result = stat->size; } else { - qDebug() << "Could not get size time for" << filename << "with csync"; + qDebug() << "Could not get size for" << filename << "with csync"; } csync_vio_file_stat_destroy(stat); return result;