From 776a969bfd426a697ce95481ab7989f9bb351552 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Mon, 12 Apr 2021 14:56:18 +0200 Subject: Implement QFileSystemEngine::createLink() on MS-Win Fixes: QTBUG-74271 Change-Id: I9e414dd16546f65e85b5a1a6c70c40dfa4284a6f Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer Reviewed-by: Edward Welbourne Reviewed-by: Oliver Wolff --- src/corelib/io/qfsfileengine_win.cpp | 48 ++++-------------------------------- 1 file changed, 5 insertions(+), 43 deletions(-) (limited to 'src/corelib/io/qfsfileengine_win.cpp') diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 84ba42f55a..fad9f5e48b 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -494,52 +494,14 @@ bool QFSFileEnginePrivate::doStat(QFileSystemMetaData::MetaDataFlags flags) cons return metaData.exists(); } - +// ### assume that they add .lnk to newName bool QFSFileEngine::link(const QString &newName) { - bool ret = false; - - QString linkName = newName; - //### assume that they add .lnk - - IShellLink *psl; - bool neededCoInit = false; - - HRESULT hres = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast(&psl)); - - if (hres == CO_E_NOTINITIALIZED) { // COM was not initialized - neededCoInit = true; - CoInitialize(nullptr); - hres = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast(&psl)); - } - - if (SUCCEEDED(hres)) { - const QString nativeAbsoluteName = fileName(AbsoluteName).replace(QLatin1Char('/'), QLatin1Char('\\')); - hres = psl->SetPath(reinterpret_cast(nativeAbsoluteName.utf16())); - if (SUCCEEDED(hres)) { - const QString nativeAbsolutePathName = fileName(AbsolutePathName).replace(QLatin1Char('/'), QLatin1Char('\\')); - hres = psl->SetWorkingDirectory(reinterpret_cast(nativeAbsolutePathName.utf16())); - if (SUCCEEDED(hres)) { - IPersistFile *ppf; - hres = psl->QueryInterface(IID_IPersistFile, reinterpret_cast(&ppf)); - if (SUCCEEDED(hres)) { - hres = ppf->Save(reinterpret_cast(linkName.utf16()), TRUE); - if (SUCCEEDED(hres)) - ret = true; - ppf->Release(); - } - } - } - psl->Release(); - } + QSystemError error; + bool ret = QFileSystemEngine::createLink(QFileSystemEntry(fileName(AbsoluteName)), + QFileSystemEntry(newName), error); if (!ret) - setError(QFile::RenameError, qt_error_string()); - - if (neededCoInit) - CoUninitialize(); - + setError(QFile::RenameError, error.toString()); return ret; } -- cgit v1.2.3