QString QFileInfo::readLink() const { #if defined(Q_OS_UNIX) && !defined(Q_OS_OS2EMX) char s[PATH_MAX+1]; if ( !isSymLink() ) return QString(); int len = readlink( QFile::encodeName(fn).data(), s, PATH_MAX ); if ( len >= 0 ) { s[len] = '\0'; return QFile::decodeName(s); } #endif #if !defined(QWS) && defined(Q_OS_MAC) { FSRef fref; if(FSPathMakeRef((const UInt8 *)QFile::encodeName(fn).data(), &fref, NULL) == noErr) { Boolean isAlias, isFolder; if(FSResolveAliasFile(&fref, TRUE, &isFolder, &isAlias) == noErr && isAlias) { AliasHandle alias; if(FSNewAlias(0, &fref, &alias) == noErr && alias) { CFStringRef cfstr; if(FSCopyAliasInfo(alias, 0, 0, &cfstr, 0, 0) == noErr) { QString cfstring2qstring(CFStringRef str); //qglobal.cpp return cfstring2qstring(cfstr); } } } } } #endif return QString(); }
bool MyDirEntry::equals(const MyDirEntry* other) const { /*return ( isDir() == other->isDir() && owner == other->owner && lastModified == other->lastModified && permissions == other->permissions && lastModifiedBy == other->lastModifiedBy);*/ if (isDir() != other->isDir() || isSymLink() != other->isSymLink()) { qDebug("type mismatch"); return false; } if (owner != other->owner) { qDebug("owner mismatch"); return false; } if (lastModified != other->lastModified) { qDebug("lastModified mismatch"); return false; } if (permissions != other->permissions) { qDebug("permissions mismatch"); return false; } if (lastModifiedBy != other->lastModifiedBy) { qDebug("lastModifiedBy mismatch"); return false; } return true; }
// Returns true if this object is a child of parent, either direct or indirect bool CFileSystemObject::isChildOf(const CFileSystemObject &parent) const { if (!isValid() || !parent.isValid()) return false; if (fullAbsolutePath().startsWith(parent.fullAbsolutePath(), caseSensitiveFilesystem() ? Qt::CaseSensitive : Qt::CaseInsensitive)) return true; if (!isSymLink() && !parent.isSymLink()) return false; const auto resolvedChildLink = isSymLink() ? symLinkTarget() : fullAbsolutePath(); const auto resolvedParentLink = parent.isSymLink() ? parent.symLinkTarget() : parent.fullAbsolutePath(); assert_and_return_r(!resolvedChildLink.isEmpty() && !resolvedParentLink.isEmpty(), false); return resolvedChildLink.startsWith(resolvedParentLink, caseSensitiveFilesystem() ? Qt::CaseSensitive : Qt::CaseInsensitive); }
void Launcher::prepareSettings() { #ifdef Q_OS_MAC #ifndef OS_MAC_OLD if (QSysInfo::macVersion() >= QSysInfo::MV_10_11) { gIsElCapitan = true; } #else // OS_MAC_OLD if (QSysInfo::macVersion() < QSysInfo::MV_10_7) { gIsSnowLeopard = true; } #endif // OS_MAC_OLD #endif // Q_OS_MAC switch (cPlatform()) { case dbipWindows: #ifndef OS_WIN_STORE gPlatformString = qsl("Windows"); #else // OS_WIN_STORE gPlatformString = qsl("WinStore"); #endif // OS_WIN_STORE break; case dbipMac: #ifndef OS_MAC_STORE gPlatformString = qsl("MacOS"); #else // OS_MAC_STORE gPlatformString = qsl("MacAppStore"); #endif // OS_MAC_STORE break; case dbipMacOld: gPlatformString = qsl("MacOSold"); break; case dbipLinux64: gPlatformString = qsl("Linux64bit"); break; case dbipLinux32: gPlatformString = qsl("Linux32bit"); break; } auto path = Platform::CurrentExecutablePath(_argc, _argv); LOG(("Executable path before check: %1").arg(path)); if (!path.isEmpty()) { auto info = QFileInfo(path); if (info.isSymLink()) { info = info.symLinkTarget(); } if (info.exists()) { const auto dir = info.absoluteDir().absolutePath(); gExeDir = (dir.endsWith('/') ? dir : (dir + '/')); gExeName = info.fileName(); } } if (cExeName().isEmpty()) { LOG(("WARNING: Could not compute executable path, some features will be disabled.")); } processArguments(); }
QList<QIcon> ShareFileInfo::additionalIcon() const { QList<QIcon> icons; icons << QIcon::fromTheme("emblem-shared", DFMGlobal::instance()->standardIcon(DFMGlobal::ShareIcon)); if (isSymLink()) { icons << QIcon::fromTheme("emblem-symbolic-link", DFMGlobal::instance()->standardIcon(DFMGlobal::LinkIcon)); } return icons; }
QString QFileInfo::readLink() const { QString r; #if defined(_OS_UNIX_) && !defined(_OS_OS2EMX_) char s[PATH_MAX+1]; if ( !isSymLink() ) return QString(); int len = readlink( QFile::encodeName(fn).data(), s, PATH_MAX ); if ( len >= 0 ) { s[len] = '\0'; r = QFile::decodeName(s); } #endif return r; }
Path Path::followLink(bool *ok) const { if (isSymLink()) { char buf[PATH_MAX]; int w = readlink(constData(), buf, sizeof(buf) - 1); if (w != -1) { if (ok) *ok = true; buf[w] = '\0'; return buf; } } if (ok) *ok = false; return *this; }